<?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>15896</bug_id>
          
          <creation_ts>2007-11-08 04:14:43 -0800</creation_ts>
          <short_desc>More editing cleanup</short_desc>
          <delta_ts>2007-11-11 12:32:51 -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>HTML Editing</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>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60638</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-08 04:14:43 -0800</bug_when>
    <thetext>More changes (not sure if I&apos;m going to become an editing expert as a result, but others&apos; experience will get obsoleted for sure :-) ).

Some of the changes might be rather risky. Any mistakes found (or not) during reviewing would be an opportunity to impove our test coverage...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60641</commentid>
    <comment_count>1</comment_count>
      <attachid>17122</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-08 04:17:58 -0800</bug_when>
    <thetext>Created attachment 17122
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60845</commentid>
    <comment_count>2</comment_count>
      <attachid>17122</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-10 12:40:41 -0800</bug_when>
    <thetext>Comment on attachment 17122
proposed patch

-int Node::maxOffset() const
+int Node::maxCharacterOffset() const
 {
-    return 1;
+    ASSERT_NOT_REACHED();
+    return 0;
 }

Could this be pure virtual?

+    return (int)m_data.length();

I&apos;d prefer a C++ style cast.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60918</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-11 12:32:51 -0800</bug_when>
    <thetext>Committed revision 27690.

(In reply to comment #2)
&gt; Could this be pure virtual?

I think it can not - if it were pure virtual, other subclasses would have to override it.

&gt; I&apos;d prefer a C++ style cast.

Done.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17122</attachid>
            <date>2007-11-08 04:17:58 -0800</date>
            <delta_ts>2007-11-10 12:40:41 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>15896r1_patch.txt</filename>
            <type>text/plain</type>
            <size>46234</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzU5NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA0IEBACisyMDA3LTExLTA4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlw
b3AuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODk2CisgICAgICAgIE1v
cmUgZWRpdGluZyBjbGVhbnVwCisKKyAgICAgICAgTm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2VzLgor
CisgICAgICAgICogZG9tL05vZGUuaDogTW92ZWQgc2V2ZXJhbCBlZGl0aW5nLXJlbGF0ZWQgbWV0
aG9kcyBlbHNld2hlcmUuCisgICAgICAgICogZG9tL05vZGUuY3BwOiAoV2ViQ29yZTo6Tm9kZTo6
bWF4Q2hhcmFjdGVyT2Zmc2V0KTogUmVuYW1lZCBmcm9tIG1heE9mZnNldCgpCisgICAgICAgIHRv
IGhpZ2hsaWdodCB0aGF0IGl0IGlzIGEgbWF0Y2ggdG8gb2Zmc2V0SW5DaGFyYWN0ZXJzKCksIGFu
ZCBtdWNoIGRpZmZlcmVudCBmcm9tIG90aGVyCisgICAgICAgIG9mZnNldC1yZWxhdGVkIG1ldGhv
ZHMuIEFkZGVkIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLCBhcyBjYWxsZXJzIGFyZSBzdXBwb3NlZCB0
byBjaGVjaworICAgICAgICBvZmZzZXRJbkNoYXJhY3RlcnMoKSBiZWZvcmUgY2FsbGluZyB0aGlz
LgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOiAoV2ViQ29yZTo6Q2hhcmFjdGVy
RGF0YTo6bWF4Q2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5o
OiAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6aXNDaGFyYWN0ZXJEYXRhTm9kZSk6CisgICAgICAg
IFVwZGF0ZWQgZm9yIGFib3ZlIHJlbmFtaW5ncy4KKworICAgICAgICAqIGRvbS9Db21tZW50Lnto
LGNwcH06IFJlbW92ZWQgYW4gb3ZlcnJpZGUgZm9yIG9mZnNldEluQ2hhcmFjdGVycygpLCB3aGlj
aCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gQ2hhcmFjdGVyRGF0YS4KKworICAgICAgICAqIGRvbS9E
b2N1bWVudC57aCxjcHB9OiBGb2xkZWQgdXBkYXRlU2VsZWN0aW9uKCkgaW50byBGcmFtZTo6c2Vs
ZWN0aW9uTGF5b3V0Q2hhbmdlZCgpLgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAg
ICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1bmNo
ZWNrZWRQcmV2aW91c09mZnNldCk6IE1vdmVkIGZyb20gTm9kZTo6cHJldmlvdXNPZmZzZXQoKS4K
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1bmNoZWNrZWROZXh0T2Zmc2V0KTogTW92ZWQg
ZnJvbSBOb2RlOjpOZXh0T2Zmc2V0KCkuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJl
dmlvdXMpOiBBZGFwdGVkIHRvIHRoZSBhYm92ZSBtb3ZlLgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246Om5leHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVh
bSk6IFJlbW92ZWQgYW4gaXNCUigpIGNoZWNrLCBzaW5jZSBhIG5vbi1CUiBlbGVtZW50IGNhbm5v
dCBoYXZlIGEgQlIgcmVuZGVyZXIgKEkgdGhpbmspLAorICAgICAgICBhbmQgQlIgZWxlbWVudHMg
YXJlIGNvdmVyZWQgYnkgZWRpdGluZ0lnbm9yZXNDb250ZW50KCkuCisgICAgICAgIChXZWJDb3Jl
OjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2FyZXRN
YXhSZW5kZXJlZE9mZnNldCk6IE1vdmVkIGZyb20gTm9kZTo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNl
dCgpLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0
aW9uKTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlIG1vdmVzLgorCisgICAgICAgICogZG9tL1Bvc2l0
aW9uSXRlcmF0b3IuaDogQWRkZWQgYSBjb21tZW50IGRlc2NyaWJpbmcgdGhpcyBjbGFzcyBmcm9t
IHRoZSBvcmlnaW5hbCBjaGVjay1pbi4KKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppbmNyZW1lbnQpOiBVcGRh
dGVkIGZvciB0aGUgYWJvdmUgbW92ZXMuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJh
dG9yOjpkZWNyZW1lbnQpOiBEaXR0by4KKworICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uaDoKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcDogKFdlYkNv
cmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6bWF4Q2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAg
UHJvY2Vzc2luZ0luc3RydWN0aW9uIHdhcyBhbHJlYWR5IHJldHVybmluZyB0cnVlIGZyb20gb2Zm
c2V0SW5DaGFyYWN0ZXJzKCksIGJ1dCBkaWRuJ3Qgb3ZlcnJpZGUgbWF4Q2hhcmFjdGVyT2Zmc2V0
KCkuCisgICAgICAgIEkgdGhpbmsgdGhhdCBpbXBsZW1lbnRpbmcgaXQgaGFzIG5vIGFjdHVhbCBl
ZmZlY3QsIGFzIFBJcyBhcmUgbm90IHJlbmRlcmVkLCBidXQgaXQgbG9va3MgY2xlYW5lciB0aGlz
IHdheS4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0
aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Om1heFJhbmdlT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRB
dEVuZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRFbGVtZW50QXRTdGFydElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmRJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dElmSWRlbnRpY2FsKToKKyAg
ICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uT3V0c2lkZVRhYlNwYW4pOgorICAgICAg
ICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAgICAgICAg
KiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1h
bmQ6Omluc2VydFRhYik6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICBVcGRhdGVkIGZvciB0aGUgYWJvdmUgbW92ZXMu
CisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6IEFkZGVkIGEgbWlzc2luZyByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQoKSBjYWxsLgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcik6IENoYW5nZWQgdGhlIGNvbmRpdGlvbiB0
byBvYnZpb3VzbHkKKyAgICAgICAgbWF0Y2ggYSBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjYWxsIG1h
ZGUgYWZ0ZXIgaXQ7IGhvcGVmdWxseSwgdGhpcyBkb2Vzbid0IGJyZWFrIGFueSBib3JkZXIgY2Fz
ZXMuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjph
ZHZhbmNlKTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlIG1vdmVzLgorCisgICAgICAgICogZWRpdGlu
Zy9odG1sZWRpdGluZy5oOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyk6IFJlbW92ZWQgYSBib2d1
cyBjb21tZW50OiBJIGRvbid0IHRoaW4gQlJzIGhhdmUgYSBzcGVjaWFsIGFiaWxpdHkgdG8gYWNj
ZXB0CisgICAgICAgIGNoaWxkIG5vZGVzLCBvdGhlciB0aGFuIHZpYSBET00gbWFuaXB1bGF0aW9u
LCB3aGljaCBpcyBub3Qgc3BlY2lmaWMgdG8gQlJzLgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KTogUmVtb3ZlZCBhIGNoZWNrIGZvciBCUiwgd2hpY2ggaXMgYWxy
ZWFkeSBjb3ZlcmVkIGJ5IGVkaXRpbmdJZ25vcmVzQ29udGVudCgpLgorICAgICAgICAoV2ViQ29y
ZTo6bWF4RGVlcE9mZnNldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2FyZXRNaW5PZmZz
ZXQpOiBNb3ZlZCBmcm9tIE5vZGUuIENoYW5nZWQgc29tZSBydW50aW1lIGNoZWNrcyB0aGF0IHNl
ZW1pbmdseSBjYW5ub3QgZmFpbCBpbnRvIGFzc2VydGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpj
YXJldE1heE9mZnNldCk6IERpdHRvLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRT
aW5nbGVDbGljayk6IFBhc3MgMCB0byBWaXNpYmxlUG9zaXRpb24gY29uc3RydWN0b3IgaW5zdGVh
ZCBvZgorICAgICAgICBjYXJldE1pbk9mZnNldC4gSSBkaWRuJ3Qgd2FudCB0byBpbmNsdWRlIGh0
bWxlZGl0aW5nLmggaGVyZSwgYW5kIEkgdGhpbmsgdGhhdCBWaXNpYmxlUG9zaXRpb24gY29uc3Ry
dWN0b3IKKyAgICAgICAgd2lsbCB0YWtlIGNhcmUgb2YgYWRqdXN0aW5nIHRoZSBvZmZzZXQuCisK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDogKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25MYXlv
dXRDaGFuZ2VkKTogRm9sZGVkIERvY3VtZW50Ojp1cGRhdGVTZWxlY3Rpb24oKSBoZXJlLgorICAg
ICAgICAqIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29y
ZUZyYW1lQnJpZGdlIHNtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOl0pOiBBZGRlZCBt
aXNzaW5nIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCgpIGNhbGxzLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JS
ZW5kZXJlcik6IENoYW5nZWQgdG8gbm90IHJvdW5kLXRyaXAgdmlhIGVkaXRpbmcuCisgICAgICAg
IENoYW5nZWQgc29tZSBydW50aW1lIGNoZWNrcyB0aGF0IHNlZW1pbmdseSBjYW5ub3QgZmFpbCBp
bnRvIGFzc2VydGlvbnMuCisKIDIwMDctMTEtMDggIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
ICA8aG9sZ2VyLmZyZXl0aGVyQHRyb2xsdGVjaC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
TGFycyBLbm9sbCA8bGFyc0B0cm9sbHRlY2guY29tPi4KSW5kZXg6IFdlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3Bw
CShyZXZpc2lvbiAyNzUwNCkKKysrIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTksMjkgKzI1OSwxMSBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmNoZWNr
Q2hhckRhdGFPcGVyYXRpCiAgICAgfQogfQogCi1pbnQgQ2hhcmFjdGVyRGF0YTo6bWF4T2Zmc2V0
KCkgY29uc3QgCitpbnQgQ2hhcmFjdGVyRGF0YTo6bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Qg
CiB7CiAgICAgcmV0dXJuIChpbnQpbGVuZ3RoKCk7CiB9CiAKLWludCBDaGFyYWN0ZXJEYXRhOjpj
YXJldE1pbk9mZnNldCgpIGNvbnN0IAotewotICAgIFJlbmRlclRleHQgKnIgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0ICo+KHJlbmRlcmVyKCkpOwotICAgIHJldHVybiByICYmIHItPmlzVGV4dCgp
ID8gci0+Y2FyZXRNaW5PZmZzZXQoKSA6IDA7Ci19Ci0KLWludCBDaGFyYWN0ZXJEYXRhOjpjYXJl
dE1heE9mZnNldCgpIGNvbnN0IAotewotICAgIFJlbmRlclRleHQgKnIgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUZXh0ICo+KHJlbmRlcmVyKCkpOwotICAgIHJldHVybiByICYmIHItPmlzVGV4dCgpID8g
ci0+Y2FyZXRNYXhPZmZzZXQoKSA6IChpbnQpbGVuZ3RoKCk7Ci19Ci0KLXVuc2lnbmVkIENoYXJh
Y3RlckRhdGE6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdCAKLXsKLSAgICBSZW5kZXJU
ZXh0ICpyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlcigpKTsKLSAgICByZXR1
cm4gciA/IHItPmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSA6IGxlbmd0aCgpOwotfQotCiBib29s
IENoYXJhY3RlckRhdGE6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQogewog
ICAgIGlmICghc3RyIHx8IHN0ci0+bGVuZ3RoKCkgPT0gMCkKSW5kZXg6IFdlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgJ
KHJldmlzaW9uIDI3NTA0KQorKysgV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MywxNyArNTMsMTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcg
bm9kZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE5vZGVWYWx1ZShjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hhcmFjdGVyRGF0
YU5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCiAgICAgLy8gT3RoZXIgbWV0aG9k
cyAobm90IHBhcnQgb2YgRE9NKQogCisgICAgdmlydHVhbCBib29sIGlzQ2hhcmFjdGVyRGF0YU5v
ZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVy
T2Zmc2V0KCkgY29uc3Q7CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nKCkgeyByZXR1cm4gc3RyOyB9
CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24odW5zaWduZWQgb2Zmc2V0
LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2aXJ0dWFsIGludCBtYXhPZmZzZXQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50
IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJl
bmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIG9mZnNldEluQ2hhcmFjdGVy
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxl
Kik7CiAgICAgCkluZGV4OiBXZWJDb3JlL2RvbS9Db21tZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Db21tZW50LmNwcAkocmV2aXNpb24gMjc1MDQpCisrKyBXZWJDb3JlL2RvbS9D
b21tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOSArNzQsNCBAQCBTdHJpbmcgQ29tbWVu
dDo6dG9TdHJpbmcoKSBjb25zdAogICAgIHJldHVybiAiPCEtLSIgKyBub2RlVmFsdWUoKSArICIt
LT4iOwogfQogCi1ib29sIENvbW1lbnQ6Om9mZnNldEluQ2hhcmFjdGVycygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvZG9tL0NvbW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Db21tZW50LmgJKHJl
dmlzaW9uIDI3NTA0KQorKysgV2ViQ29yZS9kb20vQ29tbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw2IEBAIHB1YmxpYzoKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBv
ZiBET00pCiAgICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpOwotICAg
IHZpcnR1YWwgYm9vbCBvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiB9OwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjc1
MDQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOTcs
MzggKzEyOTcsNiBAQCB2b2lkIERvY3VtZW50OjpzZXRWaXN1YWxseU9yZGVyZWQoKQogICAgICAg
ICByZW5kZXJlcigpLT5zdHlsZSgpLT5zZXRWaXN1YWxseU9yZGVyZWQodHJ1ZSk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZVNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUmVuZGVyVmlldyAqY2FudmFzID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVmlldyo+KHJlbmRlcmVyKCkpOwotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBm
cmFtZSgpLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNlbGVjdGlvbigpOwotICAgICAgICAKLSAg
ICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIGNhbnZhcy0+Y2xlYXJTZWxlY3Rp
b24oKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gVXNlIHRoZSByaWdodG1vc3QgY2FuZGlkYXRl
IGZvciB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgYW5kIHRoZSBsZWZ0bW9zdCBjYW5kaWRh
dGUgZm9yIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi4KLSAgICAgICAgLy8gRXhhbXBsZTogZm9v
IDxhPmJhcjwvYT4uICBJbWFnaW5lIHRoYXQgYSBsaW5lIHdyYXAgb2NjdXJzIGFmdGVyICdmb28n
LCBhbmQgdGhhdCAnYmFyJyBpcyBzZWxlY3RlZC4gICBJZiB3ZSBwYXNzIFtmb28sIDNdCi0gICAg
ICAgIC8vIGFzIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCB0aGUgc2VsZWN0aW9uIHBhaW50
aW5nIGNvZGUgd2lsbCB0aGluayB0aGF0IGNvbnRlbnQgb24gdGhlIGxpbmUgY29udGFpbmluZyAn
Zm9vJyBpcyBzZWxlY3RlZAotICAgICAgICAvLyBhbmQgd2lsbCBmaWxsIHRoZSBnYXAgYmVmb3Jl
ICdiYXInLgotICAgICAgICBQb3NpdGlvbiBzdGFydFBvcyA9IHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBpZiAoc3RhcnRQb3MuZG93bnN0cmVhbSgp
LmlzQ2FuZGlkYXRlKCkpCi0gICAgICAgICAgICBzdGFydFBvcyA9IHN0YXJ0UG9zLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZW5kUG9zID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKS5k
ZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBpZiAoZW5kUG9zLnVwc3RyZWFtKCkuaXNDYW5kaWRh
dGUoKSkKLSAgICAgICAgICAgIGVuZFBvcyA9IGVuZFBvcy51cHN0cmVhbSgpOwotICAgICAgICAK
LSAgICAgICAgLy8gV2UgY2FuIGdldCBpbnRvIGEgc3RhdGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBl
bmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3NpdGlvbiB3aGVuIGEgc2VsZWN0aW9u
IGlzIGRlbGV0ZWQKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB5ZXQgbm90aWZ5IHRoZSBT
ZWxlY3Rpb25Db250cm9sbGVyIG9mIHRleHQgcmVtb3ZhbC4KLSAgICAgICAgaWYgKHN0YXJ0UG9z
LmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCkgIT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgewotICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0ICpzdGFydFJlbmRlcmVyID0gc3RhcnRQb3Mubm9kZSgpLT5yZW5kZXJlcigpOwotICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0ICplbmRSZW5kZXJlciA9IGVuZFBvcy5ub2RlKCktPnJlbmRlcmVy
KCk7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4ocmVuZGVyZXIoKSktPnNl
dFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBvcy5vZmZzZXQoKSwgZW5kUmVuZGVyZXIs
IGVuZFBvcy5vZmZzZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIFRva2VuaXplciogRG9j
dW1lbnQ6OmNyZWF0ZVRva2VuaXplcigpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHBy
b2JhYmx5IHBhc3MgdGhlIGZyYW1lIGluc3RlYWQKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjc1MDQp
CisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsOCArMzQ3
LDYgQEAgcHVibGljOgogICAgIC8vIHRvIGdldCB2aXN1YWxseSBvcmRlcmVkIGhlYnJldyBhbmQg
YXJhYmljIHBhZ2VzIHJpZ2h0CiAgICAgdm9pZCBzZXRWaXN1YWxseU9yZGVyZWQoKTsKIAotICAg
IHZvaWQgdXBkYXRlU2VsZWN0aW9uKCk7Ci0gICAgCiAgICAgdm9pZCBvcGVuKCk7CiAgICAgdm9p
ZCBpbXBsaWNpdE9wZW4oKTsKICAgICB2b2lkIGNsb3NlKCk7CkluZGV4OiBXZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjc1
MDQpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2NywzOCAr
MTA2NywxNCBAQCBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZSgpCiAgICAgcmV0dXJu
IHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IDA7CiB9CiAKLWludCBOb2Rl
OjptYXhPZmZzZXQoKSBjb25zdAoraW50IE5vZGU6Om1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIDE7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhlc2UgZnVuY3Rpb25zIGJlIGluIHRoZSBl
ZGl0aW5nIGNvZGU/ICBDb2RlIHRoYXQgYXNrcyBxdWVzdGlvbnMgYWJvdXQgSFRNTCBpbiB0aGUg
Y29yZSBET00gY2xhc3MKIC8vIGlzIG9idmlvdXNseSBtaXNwbGFjZWQuCi1pbnQgTm9kZTo6Y2Fy
ZXRNaW5PZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIo
KS0+Y2FyZXRNaW5PZmZzZXQoKSA6IDA7Ci19Ci0KLWludCBOb2RlOjpjYXJldE1heE9mZnNldCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkgPyByZW5kZXJlcigpLT5jYXJldE1heE9m
ZnNldCgpIDogMTsKLX0KLQotdW5zaWduZWQgTm9kZTo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkgPyByZW5kZXJlcigpLT5jYXJldE1heFJl
bmRlcmVkT2Zmc2V0KCkgOiAxOwotfQotCi1pbnQgTm9kZTo6cHJldmlvdXNPZmZzZXQgKGludCBj
dXJyZW50KSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+cHJl
dmlvdXNPZmZzZXQoY3VycmVudCkgOiBjdXJyZW50IC0gMTsKLX0KLQotaW50IE5vZGU6Om5leHRP
ZmZzZXQgKGludCBjdXJyZW50KSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpID8gcmVu
ZGVyZXIoKS0+bmV4dE9mZnNldChjdXJyZW50KSA6IGN1cnJlbnQgKyAxOwotfQotCiBib29sIE5v
ZGU6OmNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoaXNDb250ZW50RWRpdGFi
bGUoKSkKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Ob2RlLmgJKHJldmlzaW9uIDI3NTA0KQorKysgV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDksMTQgKzM0OSw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBVc2VkIHRv
IGRldGVybWluZSB3aGV0aGVyIHJhbmdlIG9mZnNldHMgdXNlIGNoYXJhY3RlcnMgb3Igbm9kZSBp
bmRpY2VzLgogICAgIHZpcnR1YWwgYm9vbCBvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdDsKLQot
ICAgIC8vIEZJWE1FOiBUaGVzZSBuZXh0IDcgZnVuY3Rpb25zIGFyZSBtb3N0bHkgZWRpdGluZy1z
cGVjaWZpYyBhbmQgc2hvdWxkIGJlIG1vdmVkIG91dC4KLSAgICB2aXJ0dWFsIGludCBtYXhPZmZz
ZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25l
ZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcHJldmlv
dXNPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG5leHRPZmZzZXQo
aW50IGN1cnJlbnQpIGNvbnN0OworICAgIC8vIE51bWJlciBvZiBET00gMTYtYml0IHVuaXRzIGNv
bnRhaW5lZCBpbiBub2RlLiBOb3RlIHRoYXQgcmVuZGVyZWQgdGV4dCBsZW5ndGggY2FuIGJlIGRp
ZmZlcmVudCAtIGUuZy4gYmVjYXVzZSBvZgorICAgIC8vIGNzcy10cmFuc2Zvcm06Y2FwaXRhbGl6
ZSBicmVha2luZyB1cCBwcmVjb21wb3NlZCBjaGFyYWN0ZXJzIGFuZCBsaWdhdHVyZXMuCisgICAg
dmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCB0cnkgdG8gZmluZCBhIGJldHRlciBsb2NhdGlvbiBmb3IgdGhlc2UgbWV0
aG9kcy4KICAgICB2aXJ0dWFsIGJvb2wgY2FuU2VsZWN0QWxsKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDI3NTA0KQorKysgV2ViQ29yZS9kb20vUG9z
aXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgUG9zaXRpb24gUG9z
aXRpb246OnByZXZpb3VzKEVVc2luZ0NvbXBvcwogICAgICAgICAvLyAgICAgIEdvaW5nIGJhY2t3
YXJkIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGlzIGNvcnJlY3QuCiAgICAgICAgIC8vICAgMikg
VGhlIG9sZCBvZmZzZXQgd2FzIGEgYm9ndXMgb2Zmc2V0IGxpa2UgKDxicj4sIDEpLCBhbmQgdGhl
cmUgaXMgbm8gY2hpbGQuCiAgICAgICAgIC8vICAgICAgR29pbmcgZnJvbSAxIHRvIDAgaXMgY29y
cmVjdC4KLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG4sIHVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJz
ID8gbi0+cHJldmlvdXNPZmZzZXQobykgOiBvIC0gMSk7CisgICAgICAgIHJldHVybiBQb3NpdGlv
bihuLCB1c2luZ0NvbXBvc2VkQ2hhcmFjdGVycyA/IHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0KG4s
IG8pIDogbyAtIDEpOwogICAgIH0KIAogICAgIE5vZGUgKnBhcmVudCA9IG4tPnBhcmVudE5vZGUo
KTsKQEAgLTE2Myw3ICsxNjMsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChFVXNpbmdDb21w
b3NlZENoCiAgICAgICAgIC8vICAgICAgR29pbmcgZm9yd2FyZCBvbmUgY2hhcmFjdGVyIGF0IGEg
dGltZSBpcyBjb3JyZWN0LgogICAgICAgICAvLyAgIDIpIFRoZSBuZXcgb2Zmc2V0IGlzIGEgYm9n
dXMgb2Zmc2V0IGxpa2UgKDxicj4sIDEpLCBhbmQgdGhlcmUgaXMgbm8gY2hpbGQuCiAgICAgICAg
IC8vICAgICAgR29pbmcgZnJvbSAwIHRvIDEgaXMgY29ycmVjdC4KLSAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKG4sIHVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzID8gbi0+bmV4dE9mZnNldChvKSA6IG8g
KyAxKTsKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG4sIHVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJz
ID8gdW5jaGVja2VkTmV4dE9mZnNldChuLCBvKSA6IG8gKyAxKTsKICAgICB9CiAKICAgICBOb2Rl
ICpwYXJlbnQgPSBuLT5wYXJlbnROb2RlKCk7CkBAIC0xNzMsNiArMTczLDE2IEBAIFBvc2l0aW9u
IFBvc2l0aW9uOjpuZXh0KEVVc2luZ0NvbXBvc2VkQ2gKICAgICByZXR1cm4gUG9zaXRpb24ocGFy
ZW50LCBuLT5ub2RlSW5kZXgoKSArIDEpOwogfQogCitpbnQgUG9zaXRpb246OnVuY2hlY2tlZFBy
ZXZpb3VzT2Zmc2V0KGNvbnN0IE5vZGUqIG4sIGludCBjdXJyZW50KQoreworICAgIHJldHVybiBu
LT5yZW5kZXJlcigpID8gbi0+cmVuZGVyZXIoKS0+cHJldmlvdXNPZmZzZXQoY3VycmVudCkgOiBj
dXJyZW50IC0gMTsKK30KKworaW50IFBvc2l0aW9uOjp1bmNoZWNrZWROZXh0T2Zmc2V0KGNvbnN0
IE5vZGUqIG4sIGludCBjdXJyZW50KQoreworICAgIHJldHVybiBuLT5yZW5kZXJlcigpID8gbi0+
cmVuZGVyZXIoKS0+bmV4dE9mZnNldChjdXJyZW50KSA6IGN1cnJlbnQgKyAxOworfQorCiBib29s
IFBvc2l0aW9uOjphdFN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlICpuID0gbm9kZSgpOwpAQCAt
MzIwLDkgKzMzMCw5IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAgICAg
ICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24sIGJ1dCB3ZSB0
ZXJtaW5hdGUgZWFybHkuCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBlbmNsb3NpbmdCbG9j
ayhjdXJyZW50Tm9kZSkgJiYgY3VycmVudFBvcy5hdFN0YXJ0T2ZOb2RlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gbGFzdFZpc2libGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gUmV0dXJuIHBv
c2l0aW9uIGFmdGVyIGJycywgdGFibGVzLCBhbmQgbm9kZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRo
YXQgY2FuIGJlIGlnbm9yZWQuCi0gICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3Vy
cmVudE5vZGUpIHx8IHJlbmRlcmVyLT5pc0JSKCkgfHwgaXNUYWJsZUVsZW1lbnQoY3VycmVudE5v
ZGUpKSB7CisKKyAgICAgICAgLy8gUmV0dXJuIHBvc2l0aW9uIGFmdGVyIHRhYmxlcyBhbmQgbm9k
ZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9yZWQuCisgICAgICAgIGlmIChl
ZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IGlzVGFibGVFbGVtZW50KGN1cnJl
bnROb2RlKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3MuYXRFbmRPZk5vZGUoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIG1heERlZXBPZmZzZXQo
Y3VycmVudE5vZGUpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzkyLDggKzQwMiw4IEBA
IFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgaWYgKGlzU3Ry
ZWFtZXIoY3VycmVudFBvcykpCiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7
CiAKLSAgICAgICAgLy8gUmV0dXJuIHBvc2l0aW9uIGJlZm9yZSBicnMsIHRhYmxlcywgYW5kIG5v
ZGVzIHdoaWNoIGhhdmUgY29udGVudCB0aGF0IGNhbiBiZSBpZ25vcmVkLgotICAgICAgICBpZiAo
ZWRpdGluZ0lnbm9yZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCByZW5kZXJlci0+aXNCUigpIHx8
IGlzVGFibGVFbGVtZW50KGN1cnJlbnROb2RlKSkgeworICAgICAgICAvLyBSZXR1cm4gcG9zaXRp
b24gYmVmb3JlIHRhYmxlcyBhbmQgbm9kZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJl
IGlnbm9yZWQuCisgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUp
IHx8IGlzVGFibGVFbGVtZW50KGN1cnJlbnROb2RlKSkgewogICAgICAgICAgICAgaWYgKGN1cnJl
bnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgpIDw9IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNh
cmV0TWluT2Zmc2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC00OTMsNiArNTAzLDE3
IEBAIGJvb2wgUG9zaXRpb246OmluUmVuZGVyZWRUZXh0KCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KGNvbnN0IE5v
ZGUqIG4pCit7CisgICAgUmVuZGVyT2JqZWN0KiByID0gbi0+cmVuZGVyZXIoKTsKKyAgICBpZiAo
cikKKyAgICAgICAgcmV0dXJuIHItPmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKTsKKyAgICAKKyAg
ICBpZiAobi0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQ2hhcmFjdGVyRGF0YSo+KG4pLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gMTsKK30K
KwogYm9vbCBQb3NpdGlvbjo6aXNSZW5kZXJlZENoYXJhY3RlcigpIGNvbnN0CiB7CiAgICAgaWYg
KGlzTnVsbCgpIHx8ICFub2RlKCktPmlzVGV4dE5vZGUoKSkKQEAgLTU3Miw4ICs1OTMsOCBAQCBi
b29sIFBvc2l0aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgTE9HKEVkaXRpbmcs
ICJ0aGlzUmVuZGVyZWRPZmZzZXQ6ICAgICAgICAgJWRcbiIsIHRoaXNSZW5kZXJlZE9mZnNldCk7
CiAgICAgTE9HKEVkaXRpbmcsICJwb3NSZW5kZXJlcjogICAgICAgICAgICAlcCBbJXBdXG4iLCBw
b3NSZW5kZXJlciwgcG9zUmVuZGVyZXIgPyBwb3NSZW5kZXJlci0+aW5saW5lQm94KG9mZnNldCgp
KSA6IDApOwogICAgIExPRyhFZGl0aW5nLCAicG9zUmVuZGVyZWRPZmZzZXQ6ICAgICAgJWRcbiIs
IHBvc1JlbmRlcmVkT2Zmc2V0KTsKLSAgICBMT0coRWRpdGluZywgIm5vZGUgbWluL21heDogICAg
ICAgICAgICVkOiVkXG4iLCBub2RlKCktPmNhcmV0TWluT2Zmc2V0KCksIG5vZGUoKS0+Y2FyZXRN
YXhSZW5kZXJlZE9mZnNldCgpKTsKLSAgICBMT0coRWRpdGluZywgInBvcyBub2RlIG1pbi9tYXg6
ICAgICAgICVkOiVkXG4iLCBwb3Mubm9kZSgpLT5jYXJldE1pbk9mZnNldCgpLCBwb3Mubm9kZSgp
LT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkpOworICAgIExPRyhFZGl0aW5nLCAibm9kZSBtaW4v
bWF4OiAgICAgICAgICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KG5vZGUoKSksIGNhcmV0TWF4
UmVuZGVyZWRPZmZzZXQobm9kZSgpKSk7CisgICAgTE9HKEVkaXRpbmcsICJwb3Mgbm9kZSBtaW4v
bWF4OiAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQocG9zLm5vZGUoKSksIGNhcmV0TWF4
UmVuZGVyZWRPZmZzZXQocG9zLm5vZGUoKSkpOwogICAgIExPRyhFZGl0aW5nLCAiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIik7CiAKICAgICBJbmxpbmVCb3ggKmIxID0gcmVuZGVyZXIgPyByZW5kZXJlci0+aW5s
aW5lQm94KG9mZnNldCgpKSA6IDA7CkBAIC01ODgsMTkgKzYwOSwxOSBAQCBib29sIFBvc2l0aW9u
OjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgfQogCiAgICAgaWYgKG5leHRSZW5kZXJl
ZEVkaXRhYmxlKG5vZGUoKSkgPT0gcG9zLm5vZGUoKSAmJiAKLSAgICAgICAgdGhpc1JlbmRlcmVk
T2Zmc2V0ID09IChpbnQpbm9kZSgpLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgJiYgcG9zUmVu
ZGVyZWRPZmZzZXQgPT0gMCkgeworICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gKGludClj
YXJldE1heFJlbmRlcmVkT2Zmc2V0KG5vZGUoKSkgJiYgcG9zUmVuZGVyZWRPZmZzZXQgPT0gMCkg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIGlmIChwcmV2aW91c1Jl
bmRlcmVkRWRpdGFibGUobm9kZSgpKSA9PSBwb3Mubm9kZSgpICYmIAotICAgICAgICB0aGlzUmVu
ZGVyZWRPZmZzZXQgPT0gMCAmJiBwb3NSZW5kZXJlZE9mZnNldCA9PSAoaW50KXBvcy5ub2RlKCkt
PmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSkgeworICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQg
PT0gMCAmJiBwb3NSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQo
cG9zLm5vZGUoKSkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwogfQogCi0vLyBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZCBhbmQgYXNzdW1lcyB0aGF0IGl0IHN0YXJ0cyBpbiBlZGl0YWJsZSBjb250ZW50Lgor
Ly8gVGhpcyBhc3N1bWVzIHRoYXQgaXQgc3RhcnRzIGluIGVkaXRhYmxlIGNvbnRlbnQuCiBQb3Np
dGlvbiBQb3NpdGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzRWRpdGFibGVQb3NpdGlvbigqdGhpcykpOwpAQCAtNjIyLDcgKzY0Myw3IEBAIFBv
c2l0aW9uIFBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2kKICAgICByZXR1cm4gUG9zaXRp
b24oKTsKIH0KIAotLy8gVGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQgYW5kIGFzc3VtZXMgdGhhdCBpdCBzdGFydHMgaW4gZWRpdGFibGUgY29udGVudC4KKy8v
IFRoaXMgYXNzdW1lcyB0aGF0IGl0IHN0YXJ0cyBpbiBlZGl0YWJsZSBjb250ZW50LgogUG9zaXRp
b24gUG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0
eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSkgY29uc3QKIHsKICAgICBB
U1NFUlQoaXNFZGl0YWJsZVBvc2l0aW9uKCp0aGlzKSk7CkluZGV4OiBXZWJDb3JlL2RvbS9Qb3Np
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDI3
NTA0KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIg
KzU3LDE3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3Q7CiAgICAgUGFz
c1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUoKSBjb25z
dDsKIAotICAgIC8vIE1vdmUgdXAgb3IgZG93biB0aGUgRE9NIGJ5IG9uZSBwb3NpdGlvbgorICAg
IC8vIE1vdmUgdXAgb3IgZG93biB0aGUgRE9NIGJ5IG9uZSBwb3NpdGlvbi4KKyAgICAvLyBPZmZz
ZXRzIGFyZSBjb21wdXRlZCB1c2luZyByZW5kZXIgdGV4dCBmb3Igbm9kZXMgdGhhdCBoYXZlIHJl
bmRlcmVycyAtIGJ1dCBub3RlIHRoYXQgZXZlbiB3aGVuCisgICAgLy8gdXNpbmcgY29tcG9zZWQg
Y2hhcmFjdGVycywgdGhlIHJlc3VsdCBtYXkgYmUgaW5zaWRlIGEgc2luZ2xlIHVzZXItdmlzaWJs
ZSBjaGFyYWN0ZXIgaWYgYSBsaWdhdHVyZSBpcyBmb3JtZWQuCiAgICAgUG9zaXRpb24gcHJldmlv
dXMoRVVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzIHVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzPU5vdFVz
aW5nQ29tcG9zZWRDaGFyYWN0ZXJzKSBjb25zdDsKICAgICBQb3NpdGlvbiBuZXh0KEVVc2luZ0Nv
bXBvc2VkQ2hhcmFjdGVycyB1c2luZ0NvbXBvc2VkQ2hhcmFjdGVycz1Ob3RVc2luZ0NvbXBvc2Vk
Q2hhcmFjdGVycykgY29uc3Q7CisgICAgc3RhdGljIGludCB1bmNoZWNrZWRQcmV2aW91c09mZnNl
dChjb25zdCBOb2RlKiwgaW50IGN1cnJlbnQpOworICAgIHN0YXRpYyBpbnQgdW5jaGVja2VkTmV4
dE9mZnNldChjb25zdCBOb2RlKiwgaW50IGN1cnJlbnQpOworCiAgICAgYm9vbCBhdFN0YXJ0KCkg
Y29uc3Q7CiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0OwotICAgIAorCiAgICAgLy8gRklYTUU6IE1h
a2UgdGhlc2Ugbm9uLW1lbWJlciBmdW5jdGlvbnMgYW5kIHB1dCB0aGVtIHNvbWV3aGVyZSBpbiB0
aGUgZWRpdGluZyBkaXJlY3RvcnkuCiAgICAgLy8gVGhlc2UgYXJlbid0IHJlYWxseSBiYXNpYyAi
cG9zaXRpb24iIG9wZXJhdGlvbnMuIE1vcmUgaGlnaCBsZXZlbCBlZGl0aW5nIGhlbHBlciBmdW5j
dGlvbnMuCiAgICAgUG9zaXRpb24gbGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHks
IGJvb2wgY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPSBmYWxzZSkgY29uc3Q7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjc1MDQpCisrKyBXZWJDb3Jl
L2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBA
QCB2b2lkIFBvc2l0aW9uSXRlcmF0b3I6OmluY3JlbWVudCgpCiAgICAgfQogCiAgICAgaWYgKCFt
X3BhcmVudC0+aGFzQ2hpbGROb2RlcygpICYmIG1fb2Zmc2V0IDwgbWF4RGVlcE9mZnNldChtX3Bh
cmVudCkpCi0gICAgICAgIG1fb2Zmc2V0ID0gbV9wYXJlbnQtPm5leHRPZmZzZXQobV9vZmZzZXQp
OworICAgICAgICBtX29mZnNldCA9IFBvc2l0aW9uOjp1bmNoZWNrZWROZXh0T2Zmc2V0KG1fcGFy
ZW50LCBtX29mZnNldCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fY2hpbGQgPSBtX3BhcmVudDsK
ICAgICAgICAgbV9wYXJlbnQgPSBtX2NoaWxkLT5wYXJlbnROb2RlKCk7CkBAIC03NSw3ICs3NSw3
IEBAIHZvaWQgUG9zaXRpb25JdGVyYXRvcjo6ZGVjcmVtZW50KCkKICAgICB9CiAKICAgICBpZiAo
bV9vZmZzZXQpIHsKLSAgICAgICAgbV9vZmZzZXQgPSBtX3BhcmVudC0+cHJldmlvdXNPZmZzZXQo
bV9vZmZzZXQpOworICAgICAgICBtX29mZnNldCA9IFBvc2l0aW9uOjp1bmNoZWNrZWRQcmV2aW91
c09mZnNldChtX3BhcmVudCwgbV9vZmZzZXQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICht
X3BhcmVudC0+aGFzQ2hpbGROb2RlcygpKSB7CiAgICAgICAgICAgICBtX3BhcmVudCA9IG1fcGFy
ZW50LT5sYXN0Q2hpbGQoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
NTA0KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gQSBQb3NpdGlvbiBp
dGVyYXRvciB3aXRoIGNvbnN0YW50LXRpbWUKKy8vIGluY3JlbWVudCwgZGVjcmVtZW50LCBhbmQg
c2V2ZXJhbCBwcmVkaWNhdGVzIG9uIHRoZSBQb3NpdGlvbiBpdCBpcyBhdC4KKy8vIENvbnZlcnNp
b24gdG8vZnJvbSBQb3NpdGlvbiBpcyBPKG4pIGluIHRoZSBvZmZzZXQuCiBjbGFzcyBQb3NpdGlv
bkl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBQb3NpdGlvbkl0ZXJhdG9yKCkKSW5kZXg6IFdlYkNv
cmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMjc1MDQpCisrKyBXZWJDb3Jl
L2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNCAr
MjQ4LDkgQEAgYm9vbCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Om9mZnNldEluQ2hhcgogICAgIHJl
dHVybiB0cnVlOwogfQogCitpbnQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjptYXhDaGFyYWN0ZXJP
ZmZzZXQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gKGludCltX2RhdGEubGVuZ3RoKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAkocmV2
aXNpb24gMjc1MDQpCisrKyBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPE5vZGU+IGNsb25lTm9kZShib29sIGRlZXApOwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5
cGVBbGxvd2VkKE5vZGVUeXBlKTsKICAgICB2aXJ0dWFsIGJvb2wgb2Zmc2V0SW5DaGFyYWN0ZXJz
KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Q7CiAK
ICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgU3RyaW5nIGxvY2Fs
SHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxIcmVmOyB9CkluZGV4OiBXZWJDb3JlL2RvbS9S
YW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAy
NzUwNCkKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyMyw3
ICsxMzIzLDcgQEAgdm9pZCBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKCBOb2RlICpyZQogICAg
IG1fc3RhcnRDb250YWluZXIgPSByZWZOb2RlOwogICAgIG1fc3RhcnRPZmZzZXQgPSAwOwogICAg
IG1fZW5kQ29udGFpbmVyID0gcmVmTm9kZTsKLSAgICBtX2VuZE9mZnNldCA9IHJlZk5vZGUtPm9m
ZnNldEluQ2hhcmFjdGVycygpID8gcmVmTm9kZS0+bWF4T2Zmc2V0KCkgOiByZWZOb2RlLT5jaGls
ZE5vZGVDb3VudCgpOworICAgIG1fZW5kT2Zmc2V0ID0gcmVmTm9kZS0+b2Zmc2V0SW5DaGFyYWN0
ZXJzKCkgPyByZWZOb2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IHJlZk5vZGUtPmNoaWxkTm9k
ZUNvdW50KCk7CiB9CiAKIHZvaWQgUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxO
b2RlPiBwYXNzTmV3UGFyZW50LCBFeGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMjc1MDQpCisrKyBXZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbgogICAgIAogICAgIHN0
YXJ0ID0gc3RhcnQudXBzdHJlYW0oKTsgLy8gTW92ZSB1cHN0cmVhbSB0byBlbnN1cmUgd2UgZG8g
bm90IGFkZCByZWR1bmRhbnQgc3BhbnMuCiAgICAgTm9kZSAqc3RhcnROb2RlID0gc3RhcnQubm9k
ZSgpOwotICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5vZmZzZXQoKSA+
PSBzdGFydE5vZGUtPmNhcmV0TWF4T2Zmc2V0KCkpIC8vIE1vdmUgb3V0IG9mIHRleHQgbm9kZSBp
ZiByYW5nZSBkb2VzIG5vdCBpbmNsdWRlIGl0cyBjaGFyYWN0ZXJzLgorICAgIGlmIChzdGFydE5v
ZGUtPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5vZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChzdGFy
dE5vZGUpKSAvLyBNb3ZlIG91dCBvZiB0ZXh0IG5vZGUgaWYgcmFuZ2UgZG9lcyBub3QgaW5jbHVk
ZSBpdHMgY2hhcmFjdGVycy4KICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJz
ZU5leHROb2RlKCk7CiAKICAgICAvLyBTdG9yZSBhd2F5IGZvbnQgc2l6ZSBiZWZvcmUgbWFraW5n
IGFueSBjaGFuZ2VzIHRvIHRoZSBkb2N1bWVudC4KQEAgLTY0Myw3ICs2NDMsNyBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgCiAgICAgYm9vbCByYW5nZUlz
RW1wdHkgPSBmYWxzZTsKIAotICAgIGlmIChzdGFydC5vZmZzZXQoKSA+PSBzdGFydC5ub2RlKCkt
PmNhcmV0TWF4T2Zmc2V0KCkpIHsKKyAgICBpZiAoc3RhcnQub2Zmc2V0KCkgPj0gY2FyZXRNYXhP
ZmZzZXQoc3RhcnQubm9kZSgpKSkgewogICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOwogICAgICAgICBQb3NpdGlvbiBuZXdTdGFydCA9IFBvc2l0aW9uKG5vZGUsIDApOwog
ICAgICAgICBpZiAoUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhlbmQsIG5ld1N0YXJ0KSA8
IDApCkBAIC05NDksNyArOTQ5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25U
ZXh0RGVjbwogc3RhdGljIGludCBtYXhSYW5nZU9mZnNldChOb2RlICpuKQogewogICAgIGlmIChu
LT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIG4tPm1heE9mZnNldCgpOwor
ICAgICAgICByZXR1cm4gbi0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCk7CiAKICAgICBpZiAobi0+aXNF
bGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gbi0+Y2hpbGROb2RlQ291bnQoKTsKQEAgLTk5
OCw3ICs5OTgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsCiAg
ICAgICAgICAgICAgICAgaWYgKHMubm9kZSgpID09IGVsZW0pIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gU2luY2UgZWxlbSBtdXN0IGhhdmUgYmVlbiBmdWxseSBzZWxlY3RlZCwgYW5kIGl0IGlz
IGF0IHRoZSBzdGFydAogICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc2VsZWN0aW9uLCBp
dCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRoZSBuZXcgcyBvZmZzZXQgdG8gMC4KLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHMub2Zmc2V0KCkgPD0gcy5ub2RlKCktPmNhcmV0TWluT2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocy5vZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNl
dChzLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBzID0gUG9zaXRpb24obmV4dCwgMCk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChlLm5vZGUoKSA9PSBlbGVt
KSB7CkBAIC0xMDQ1LDcgKzEwNDUsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVs
bHlVbnNlbGVjCiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnRJZk5l
ZWRlZChjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpCiB7Ci0gICAg
aWYgKHN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIHN0YXJ0Lm9mZnNldCgpID4gc3RhcnQu
bm9kZSgpLT5jYXJldE1pbk9mZnNldCgpICYmIHN0YXJ0Lm9mZnNldCgpIDwgc3RhcnQubm9kZSgp
LT5jYXJldE1heE9mZnNldCgpKSB7CisgICAgaWYgKHN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgp
ICYmIHN0YXJ0Lm9mZnNldCgpID4gY2FyZXRNaW5PZmZzZXQoc3RhcnQubm9kZSgpKSAmJiBzdGFy
dC5vZmZzZXQoKSA8IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Lm5vZGUoKSkpIHsKICAgICAgICAgaW50
IGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHN0YXJ0
Lm9mZnNldCgpIDogMDsKICAgICAgICAgVGV4dCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4o
c3RhcnQubm9kZSgpKTsKICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBzdGFydC5vZmZzZXQo
KSk7CkBAIC0xMDU3LDcgKzEwNTcsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRl
eHRBdFN0YXJ0CiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kSWZOZWVk
ZWQoY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKQogewotICAgIGlm
IChlbmQubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgZW5kLm9mZnNldCgpID4gZW5kLm5vZGUoKS0+
Y2FyZXRNaW5PZmZzZXQoKSAmJiBlbmQub2Zmc2V0KCkgPCBlbmQubm9kZSgpLT5jYXJldE1heE9m
ZnNldCgpKSB7CisgICAgaWYgKGVuZC5ub2RlKCktPmlzVGV4dE5vZGUoKSAmJiBlbmQub2Zmc2V0
KCkgPiBjYXJldE1pbk9mZnNldChlbmQubm9kZSgpKSAmJiBlbmQub2Zmc2V0KCkgPCBjYXJldE1h
eE9mZnNldChlbmQubm9kZSgpKSkgewogICAgICAgICBUZXh0ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8
VGV4dCAqPihlbmQubm9kZSgpKTsKICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBlbmQub2Zm
c2V0KCkpOwogICAgICAgICAKQEAgLTEwNjUsNyArMTA2NSw3IEBAIGJvb2wgQXBwbHlTdHlsZUNv
bW1hbmQ6OnNwbGl0VGV4dEF0RW5kSWYKICAgICAgICAgQVNTRVJUKHByZXZOb2RlKTsKICAgICAg
ICAgTm9kZSAqc3RhcnROb2RlID0gc3RhcnQubm9kZSgpID09IGVuZC5ub2RlKCkgPyBwcmV2Tm9k
ZSA6IHN0YXJ0Lm5vZGUoKTsKICAgICAgICAgQVNTRVJUKHN0YXJ0Tm9kZSk7Ci0gICAgICAgIHVw
ZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnQub2Zmc2V0KCkpLCBQb3NpdGlv
bihwcmV2Tm9kZSwgcHJldk5vZGUtPmNhcmV0TWF4T2Zmc2V0KCkpKTsKKyAgICAgICAgdXBkYXRl
U3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydC5vZmZzZXQoKSksIFBvc2l0aW9uKHBy
ZXZOb2RlLCBjYXJldE1heE9mZnNldChwcmV2Tm9kZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNzMsNyArMTA3Myw3IEBAIGJvb2wgQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kSWYKIAogYm9vbCBBcHBseVN0eWxlQ29tbWFu
ZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnRJZk5lZWRlZChjb25zdCBQb3NpdGlvbiAmc3RhcnQs
IGNvbnN0IFBvc2l0aW9uICZlbmQpCiB7Ci0gICAgaWYgKHN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9k
ZSgpICYmIHN0YXJ0Lm9mZnNldCgpID4gc3RhcnQubm9kZSgpLT5jYXJldE1pbk9mZnNldCgpICYm
IHN0YXJ0Lm9mZnNldCgpIDwgc3RhcnQubm9kZSgpLT5jYXJldE1heE9mZnNldCgpKSB7CisgICAg
aWYgKHN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIHN0YXJ0Lm9mZnNldCgpID4gY2FyZXRN
aW5PZmZzZXQoc3RhcnQubm9kZSgpKSAmJiBzdGFydC5vZmZzZXQoKSA8IGNhcmV0TWF4T2Zmc2V0
KHN0YXJ0Lm5vZGUoKSkpIHsKICAgICAgICAgaW50IGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFy
dC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHN0YXJ0Lm9mZnNldCgpIDogMDsKICAgICAgICAgVGV4
dCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4oc3RhcnQubm9kZSgpKTsKICAgICAgICAgc3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIHN0YXJ0Lm9mZnNldCgpKTsKQEAgLTEw
ODYsNyArMTA4Niw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnQK
IAogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0RW5kSWZOZWVkZWQo
Y29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKQogewotICAgIGlmIChl
bmQubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgZW5kLm9mZnNldCgpID4gZW5kLm5vZGUoKS0+Y2Fy
ZXRNaW5PZmZzZXQoKSAmJiBlbmQub2Zmc2V0KCkgPCBlbmQubm9kZSgpLT5jYXJldE1heE9mZnNl
dCgpKSB7CisgICAgaWYgKGVuZC5ub2RlKCktPmlzVGV4dE5vZGUoKSAmJiBlbmQub2Zmc2V0KCkg
PiBjYXJldE1pbk9mZnNldChlbmQubm9kZSgpKSAmJiBlbmQub2Zmc2V0KCkgPCBjYXJldE1heE9m
ZnNldChlbmQubm9kZSgpKSkgewogICAgICAgICBUZXh0ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4
dCAqPihlbmQubm9kZSgpKTsKICAgICAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
KHRleHQsIGVuZC5vZmZzZXQoKSk7CiAKQEAgLTExODMsNyArMTE4Myw3IEBAIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6Om1lcmdlRW5kV2l0aE5leHQKICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLm9m
ZnNldCgpOwogCiAgICAgaWYgKGlzQXRvbWljTm9kZShlbmROb2RlKSkgewotICAgICAgICBpZiAo
ZW5kT2Zmc2V0IDwgZW5kTm9kZS0+Y2FyZXRNYXhPZmZzZXQoKSkKKyAgICAgICAgaWYgKGVuZE9m
ZnNldCA8IGNhcmV0TWF4T2Zmc2V0KGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIHVuc2lnbmVkIHBhcmVudExhc3RPZmZzZXQgPSBlbmQubm9kZSgpLT5wYXJl
bnQoKS0+Y2hpbGROb2RlcygpLT5sZW5ndGgoKSAtIDE7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDI3NTA0KQorKysgV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDkgKzE1
Niw5IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdCgKICAgICAgICAg
ICAgIGluc2VydE5vZGVCZWZvcmUoaW5zZXJ0Q2hpbGQsIGNoaWxkKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgYXBwZW5kTm9kZShpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpOwotICAgIH0gZWxz
ZSBpZiAocmVmQ2hpbGQtPmNhcmV0TWluT2Zmc2V0KCkgPj0gb2Zmc2V0KSB7CisgICAgfSBlbHNl
IGlmIChjYXJldE1pbk9mZnNldChyZWZDaGlsZCkgPj0gb2Zmc2V0KSB7CiAgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkKTsKLSAgICB9IGVsc2UgaWYgKHJlZkNo
aWxkLT5pc1RleHROb2RlKCkgJiYgcmVmQ2hpbGQtPmNhcmV0TWF4T2Zmc2V0KCkgPiBvZmZzZXQp
IHsKKyAgICB9IGVsc2UgaWYgKHJlZkNoaWxkLT5pc1RleHROb2RlKCkgJiYgY2FyZXRNYXhPZmZz
ZXQocmVmQ2hpbGQpID4gb2Zmc2V0KSB7CiAgICAgICAgIHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nh
c3Q8VGV4dCAqPihyZWZDaGlsZCksIG9mZnNldCk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUo
aW5zZXJ0Q2hpbGQsIHJlZkNoaWxkKTsKICAgICB9IGVsc2UgewpAQCAtMjkwLDEwICsyOTAsMTAg
QEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uTwogICAgIAogICAgIE5v
ZGUqIHRhYlNwYW4gPSB0YWJTcGFuTm9kZShwb3Mubm9kZSgpKTsKICAgICAKLSAgICBpZiAocG9z
Lm9mZnNldCgpIDw9IHBvcy5ub2RlKCktPmNhcmV0TWluT2Zmc2V0KCkpCisgICAgaWYgKHBvcy5v
ZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNldChwb3Mubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uQmVmb3JlTm9kZSh0YWJTcGFuKTsKICAgICAgICAgCi0gICAgaWYgKHBvcy5vZmZzZXQo
KSA+PSBwb3Mubm9kZSgpLT5jYXJldE1heE9mZnNldCgpKQorICAgIGlmIChwb3Mub2Zmc2V0KCkg
Pj0gY2FyZXRNYXhPZmZzZXQocG9zLm5vZGUoKSkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkFm
dGVyTm9kZSh0YWJTcGFuKTsKIAogICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChz
dGF0aWNfY2FzdDxUZXh0ICo+KHBvcy5ub2RlKCkpLCBwb3Mub2Zmc2V0KCkpOwpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMjc1MDQp
CisrKyBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3MSwxMCArMzcxLDEwIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
aGFuZGxlR2VuZXIKICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHRO
b2RlKCk7CiAgICAgfQogCi0gICAgaWYgKHN0YXJ0T2Zmc2V0ID49IHN0YXJ0Tm9kZS0+Y2FyZXRN
YXhPZmZzZXQoKSAmJiBzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgIGlmIChzdGFydE9m
ZnNldCA+PSBjYXJldE1heE9mZnNldChzdGFydE5vZGUpICYmIHN0YXJ0Tm9kZS0+aXNUZXh0Tm9k
ZSgpKSB7CiAgICAgICAgIFRleHQgKnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KHN0YXJ0Tm9k
ZSk7Ci0gICAgICAgIGlmICh0ZXh0LT5sZW5ndGgoKSA+ICh1bnNpZ25lZClzdGFydE5vZGUtPmNh
cmV0TWF4T2Zmc2V0KCkpCi0gICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dCwgc3Rh
cnROb2RlLT5jYXJldE1heE9mZnNldCgpLCB0ZXh0LT5sZW5ndGgoKSAtIHN0YXJ0Tm9kZS0+Y2Fy
ZXRNYXhPZmZzZXQoKSk7CisgICAgICAgIGlmICh0ZXh0LT5sZW5ndGgoKSA+ICh1bnNpZ25lZClj
YXJldE1heE9mZnNldChzdGFydE5vZGUpKQorICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2Rl
KHRleHQsIGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSksIHRleHQtPmxlbmd0aCgpIC0gY2FyZXRN
YXhPZmZzZXQoc3RhcnROb2RlKSk7CiAgICAgfQogCiAgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IG1h
eERlZXBPZmZzZXQoc3RhcnROb2RlKSkgewpAQCAtNDM2LDcgKzQzNiw3IEBAIHZvaWQgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgICAgICBub2RlID0gbmV4
dE5vZGUuZ2V0KCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUq
IG4gPSBub2RlLT5sYXN0RGVzY2VuZGFudCgpOwotICAgICAgICAgICAgICAgIGlmIChtX2Rvd25z
dHJlYW1FbmQubm9kZSgpID09IG4gJiYgbV9kb3duc3RyZWFtRW5kLm9mZnNldCgpID49IG4tPmNh
cmV0TWF4T2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLm5v
ZGUoKSA9PSBuICYmIG1fZG93bnN0cmVhbUVuZC5vZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChu
KSkgewogICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUuZ2V0KCkpOwogICAgICAg
ICAgICAgICAgICAgICBub2RlID0gMDsKICAgICAgICAgICAgICAgICB9IGVsc2UKQEAgLTQ0NCw3
ICs0NDQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtX2Rvd25zdHJlYW1F
bmQubm9kZSgpICE9IHN0YXJ0Tm9kZSAmJiAhbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aXNEZXNj
ZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkgJiYgbV9kb3duc3RyZWFtRW5kLm5vZGUo
KS0+aW5Eb2N1bWVudCgpICYmIG1fZG93bnN0cmVhbUVuZC5vZmZzZXQoKSA+PSBtX2Rvd25zdHJl
YW1FbmQubm9kZSgpLT5jYXJldE1pbk9mZnNldCgpKSB7CisgICAgICAgIGlmIChtX2Rvd25zdHJl
YW1FbmQubm9kZSgpICE9IHN0YXJ0Tm9kZSAmJiAhbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aXNE
ZXNjZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkgJiYgbV9kb3duc3RyZWFtRW5kLm5v
ZGUoKS0+aW5Eb2N1bWVudCgpICYmIG1fZG93bnN0cmVhbUVuZC5vZmZzZXQoKSA+PSBjYXJldE1p
bk9mZnNldChtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSkgewogICAgICAgICAgICAgaWYgKG1fZG93
bnN0cmVhbUVuZC5vZmZzZXQoKSA+PSBtYXhEZWVwT2Zmc2V0KG1fZG93bnN0cmVhbUVuZC5ub2Rl
KCkpICYmICFjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkp
KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZG4ndCByZW1vdmUgbV9kb3duc3Ry
ZWFtRW5kLm5vZGUoKSBpZiBpdHMgb2Zmc2V0cyByZWZlciB0byBjaGlsZHJlbi4gCiAgICAgICAg
ICAgICAgICAgLy8gVGhlIG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBub3QganVzdCBp
dHMgY29udGVudHMuICBEZWxldGUgaXQuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMjc1
MDQpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAx
OCw3ICsyMDE4LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwog
ICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydChwb3NpdGlvbi5ub2Rl
KCksIHBvc2l0aW9uLm9mZnNldCgpLCBlYyk7CisgICAgICAgIFBvc2l0aW9uIHJhbmdlQ29tcGxp
YW50UG9zaXRpb24gPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zaXRpb24pOworICAgICAg
ICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydChyYW5nZUNvbXBsaWFudFBvc2l0aW9uLm5v
ZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5vZmZzZXQoKSwgZWMpOwogICAgICAgICBzdGFy
dGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOyAgIC8vIHdvbid0IG5lZWQgdG8gd3JhcAogICAgIH0K
ICAgICAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDI3NTA0KQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBJbnNlcnRMaW5l
QnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgCiAgICAgICAgIFZpc2libGVQb3NpdGlv
biBlbmRpbmdQb3NpdGlvbihQb3NpdGlvbihub2RlVG9JbnNlcnQuZ2V0KCksIDApKTsKICAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihlbmRpbmdQb3NpdGlvbikpOwotICAgIH0g
ZWxzZSBpZiAocG9zLm9mZnNldCgpIDw9IHBvcy5ub2RlKCktPmNhcmV0TWluT2Zmc2V0KCkpIHsK
KyAgICB9IGVsc2UgaWYgKHBvcy5vZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNldChwb3Mubm9kZSgp
KSkgewogICAgICAgICBpbnNlcnROb2RlQXQobm9kZVRvSW5zZXJ0LmdldCgpLCBwb3MpOwogICAg
ICAgICAKICAgICAgICAgLy8gSW5zZXJ0IGFuIGV4dHJhIGJyIG9yICdcbicgaWYgdGhlIGp1c3Qg
aW5zZXJ0ZWQgb25lIGNvbGxhcHNlZC4KQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEluc2VydExp
bmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShu
b2RlVG9JbnNlcnQtPmNsb25lTm9kZShmYWxzZSkuZ2V0KCksIG5vZGVUb0luc2VydC5nZXQoKSk7
CiAgICAgICAgIAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKHBvc2l0aW9u
QWZ0ZXJOb2RlKG5vZGVUb0luc2VydC5nZXQoKSksIERPV05TVFJFQU0pKTsKLSAgICB9IGVsc2Ug
aWYgKHBvcy5vZmZzZXQoKSA+PSBwb3Mubm9kZSgpLT5jYXJldE1heE9mZnNldCgpKSB7CisgICAg
fSBlbHNlIGlmIChwb3Mub2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQocG9zLm5vZGUoKSkpIHsK
ICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKICAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihwb3NpdGlvbkFmdGVyTm9kZShub2RlVG9JbnNl
cnQuZ2V0KCkpLCBET1dOU1RSRUFNKSk7CiAgICAgfSBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDI3NTA0KQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgIC8vIE1vdmUgdGhlIHN0YXJ0IG5vZGUg
YW5kIHRoZSBzaWJsaW5ncyBvZiB0aGUgc3RhcnQgbm9kZS4KICAgICBpZiAoc3RhcnROb2RlICE9
IHN0YXJ0QmxvY2spIHsKICAgICAgICAgTm9kZSAqbiA9IHN0YXJ0Tm9kZTsKLSAgICAgICAgaWYg
KHBvcy5vZmZzZXQoKSA+PSBzdGFydE5vZGUtPmNhcmV0TWF4T2Zmc2V0KCkpCisgICAgICAgIGlm
IChwb3Mub2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSkKICAgICAgICAgICAg
IG4gPSBzdGFydE5vZGUtPm5leHRTaWJsaW5nKCk7CiAKICAgICAgICAgd2hpbGUgKG4gJiYgbiAh
PSBibG9ja1RvSW5zZXJ0KSB7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5j
cHAJKHJldmlzaW9uIDI3NTA0KQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIFBvc2l0aW9uIEluc2VydFRl
eHRDb21tYW5kOjppbnNlcnRUYWIoY28KICAgICB9CiAgICAgCiAgICAgLy8gcmV0dXJuIHRoZSBw
b3NpdGlvbiBmb2xsb3dpbmcgdGhlIG5ldyB0YWIKLSAgICByZXR1cm4gUG9zaXRpb24oc3Bhbk5v
ZGUtPmxhc3RDaGlsZCgpLCBzcGFuTm9kZS0+bGFzdENoaWxkKCktPmNhcmV0TWF4T2Zmc2V0KCkp
OworICAgIHJldHVybiBQb3NpdGlvbihzcGFuTm9kZS0+bGFzdENoaWxkKCksIGNhcmV0TWF4T2Zm
c2V0KHNwYW5Ob2RlLT5sYXN0Q2hpbGQoKSkpOwogfQogCiBib29sIEluc2VydFRleHRDb21tYW5k
Ojppc0luc2VydFRleHRDb21tYW5kKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNzUwNCkKKysrIFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MDgsNyArNzA4LDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvcjo6U2ltcGxpZgogICAgIGlmICghZW5kTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJz
KCkpIHsKICAgICAgICAgaWYgKGVuZE9mZnNldCA+IDAgJiYgZW5kT2Zmc2V0IDw9IHN0YXRpY19j
YXN0PGludD4oZW5kTm9kZS0+Y2hpbGROb2RlQ291bnQoKSkpIHsKICAgICAgICAgICAgIGVuZE5v
ZGUgPSBlbmROb2RlLT5jaGlsZE5vZGUoZW5kT2Zmc2V0IC0gMSk7Ci0gICAgICAgICAgICBlbmRP
ZmZzZXQgPSBlbmROb2RlLT5oYXNDaGlsZE5vZGVzKCkgPyBlbmROb2RlLT5jaGlsZE5vZGVDb3Vu
dCgpIDogZW5kTm9kZS0+bWF4T2Zmc2V0KCk7CisgICAgICAgICAgICBlbmRPZmZzZXQgPSBlbmRO
b2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSA/IGVuZE5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgp
IDogZW5kTm9kZS0+Y2hpbGROb2RlQ291bnQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzk4
LDcgKzc5OCw3IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWQKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9ub2RlID0gbmV4dDsKLSAgICAgICAgbV9vZmZz
ZXQgPSBtX25vZGUgPyBtX25vZGUtPmNhcmV0TWF4T2Zmc2V0KCkgOiAwOworICAgICAgICBtX29m
ZnNldCA9IG1fbm9kZSA/IGNhcmV0TWF4T2Zmc2V0KG1fbm9kZSkgOiAwOwogICAgICAgICBtX2hh
bmRsZWROb2RlID0gZmFsc2U7CiAgICAgICAgIG1faGFuZGxlZENoaWxkcmVuID0gZmFsc2U7CiAg
ICAgICAgIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAyNzUwNCkKKysr
IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDYgQEAgYm9vbCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY29uc3QgTm9kZSogbgogICAgIHJl
dHVybiAhY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKSAmJiAhbm9kZS0+aXNUZXh0Tm9k
ZSgpOwogfQogCi0vLyBTb21lIG5vZGVzLCBsaWtlIGJycywgd2lsbCB0ZWNobmljYWxseSBhY2Nl
cHQgY2hpbGRyZW4sIGJ1dCB3ZSBkb24ndCB3YW50IHRoYXQgdG8gaGFwcGVuIHdoaWxlIGVkaXRp
bmcuIAogYm9vbCBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKGNvbnN0IE5vZGUqIG5vZGUpCiB7
CiAgICAgcmV0dXJuICFub2RlLT5oYXNUYWdOYW1lKGhyVGFnKSAmJgpAQCAtMzExLDEzICszMTAs
MTMgQEAgUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGNvbnN0IAogICAgIE5vZGUg
Km5vZGUgPSBwb3Mubm9kZSgpOwogICAgIAogICAgIGlmIChwb3Mub2Zmc2V0KCkgPD0gMCkgewot
ICAgICAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgpICYmIChub2RlLT5oYXNUYWdOYW1lKGJyVGFn
KSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpIHx8IGlzVGFibGVFbGVtZW50KG5vZGUp
KQorICAgICAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgpICYmIChlZGl0aW5nSWdub3Jlc0NvbnRl
bnQobm9kZSkgfHwgaXNUYWJsZUVsZW1lbnQobm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uQmVmb3JlTm9kZShub2RlKTsKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIDAp
OwogICAgIH0KICAgICAKICAgICBpZiAobm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCi0gICAg
ICAgIHJldHVybiBQb3NpdGlvbihub2RlLCBtaW4obm9kZS0+bWF4T2Zmc2V0KCksIHBvcy5vZmZz
ZXQoKSkpOworICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgbWluKG5vZGUtPm1heENoYXJh
Y3Rlck9mZnNldCgpLCBwb3Mub2Zmc2V0KCkpKTsKICAgICAKICAgICBpbnQgbWF4Q29tcGxpYW50
T2Zmc2V0ID0gbm9kZS0+Y2hpbGROb2RlQ291bnQoKTsKICAgICBpZiAocG9zLm9mZnNldCgpID4g
bWF4Q29tcGxpYW50T2Zmc2V0KSB7CkBAIC0zNTYsMTMgKzM1NSwxMyBAQCBpbnQgbWF4RGVlcE9m
ZnNldChjb25zdCBOb2RlICpub2RlKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgaWYgKG5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpKQotICAgICAgICByZXR1cm4gbm9k
ZS0+bWF4T2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQo
KTsKICAgICAgICAgCiAgICAgaWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkTm9kZUNvdW50KCk7CiAgICAgCiAgICAgLy8gTk9URTogVGhpcyBzaG91
bGQgcHJlZW1wdCB0aGUgY2hpbGROb2RlQ291bnQgZm9yLCBlLmcuLCBzZWxlY3Qgbm9kZXMKLSAg
ICBpZiAobm9kZS0+aGFzVGFnTmFtZShiclRhZykgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5v
ZGUpKQorICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpCiAgICAgICAgIHJldHVy
biAxOwogCiAgICAgcmV0dXJuIDA7CkBAIC04NjgsNiArODY3LDI3IEBAIGJvb2wgaXNNYWlsQmxv
Y2txdW90ZShjb25zdCBOb2RlICpub2RlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBF
bGVtZW50ICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0ZSI7CiB9CiAKK2lu
dCBjYXJldE1pbk9mZnNldChjb25zdCBOb2RlKiBuKQoreworICAgIFJlbmRlck9iamVjdCogciA9
IG4tPnJlbmRlcmVyKCk7CisgICAgQVNTRVJUKCFuLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkgfHwg
IXIgfHwgci0+aXNUZXh0KCkpOyAvLyBGSVhNRTogVGhpcyB3YXMgYSBydW50aW1lIGNoZWNrIHRo
YXQgc2VlbWluZ2x5IGNvdWxkbid0IGZhaWw7IGNoYW5nZWQgaXQgdG8gYW4gYXNzZXJ0aW9uIGZv
ciBub3cuCisgICAgcmV0dXJuIHIgPyByLT5jYXJldE1pbk9mZnNldCgpIDogMDsKK30KKworaW50
IGNhcmV0TWF4T2Zmc2V0KGNvbnN0IE5vZGUqIG4pCit7CisgICAgUmVuZGVyT2JqZWN0KiByID0g
bi0+cmVuZGVyZXIoKTsKKyAgICBBU1NFUlQoIW4tPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSB8fCAh
ciB8fCByLT5pc1RleHQoKSk7IC8vIEZJWE1FOiBUaGlzIHdhcyBhIHJ1bnRpbWUgY2hlY2sgdGhh
dCBzZWVtaW5nbHkgY291bGRuJ3QgZmFpbDsgY2hhbmdlZCBpdCB0byBhbiBhc3NlcnRpb24gZm9y
IG5vdy4KKyAgICBpZiAocikKKyAgICAgICAgcmV0dXJuIHItPmNhcmV0TWF4T2Zmc2V0KCk7CisK
KyAgICBpZiAobi0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKSB7CisgICAgICAgIGNvbnN0IENoYXJh
Y3RlckRhdGEqIGMgPSBzdGF0aWNfY2FzdDxjb25zdCBDaGFyYWN0ZXJEYXRhKj4obik7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMtPmxlbmd0aCgpKTsKKyAgICB9CisgICAgcmV0
dXJuIDE7Cit9CisKIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlz
TnVsbCgpKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDI3NTA0KQorKysgV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDgg
QEAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVUYWJTcGFuRWxlbWVudAogYm9vbCBpc05vZGVS
ZW5kZXJlZChjb25zdCBOb2RlKik7CiBib29sIGlzTWFpbEJsb2NrcXVvdGUoY29uc3QgTm9kZSop
OwogTm9kZSogbmVhcmVzdE1haWxCbG9ja3F1b3RlKGNvbnN0IE5vZGUqKTsKK2ludCBjYXJldE1p
bk9mZnNldChjb25zdCBOb2RlKik7CitpbnQgY2FyZXRNYXhPZmZzZXQoY29uc3QgTm9kZSopOwog
CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiAyNzUwNCkKKysrIFdlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU5LDEwICs0NTksMTAgQEAgVmlzaWJs
ZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbgogICAgICAgICB3aGlsZSAobikgewog
ICAgICAgICAgICAgaWYgKGhpZ2hlc3RFZGl0YWJsZVJvb3QoUG9zaXRpb24obiwgMCkpICE9IGhp
Z2hlc3RSb290KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgUG9zaXRpb24g
cG9zKG4sIG4tPmNhcmV0TWluT2Zmc2V0KCkpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zKG4s
IGNhcmV0TWluT2Zmc2V0KG4pKTsKICAgICAgICAgICAgIGlmIChwb3MuaXNDYW5kaWRhdGUoKSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVChuLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAg
ICBib3ggPSBuLT5yZW5kZXJlcigpLT5pbmxpbmVCb3gobi0+Y2FyZXRNYXhPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgYm94ID0gbi0+cmVuZGVyZXIoKS0+aW5saW5lQm94KGNhcmV0TWF4T2Zm
c2V0KG4pKTsKICAgICAgICAgICAgICAgICBpZiAoYm94KSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIHByZXZpb3VzIHJvb3QgbGluZSBib3ggZm91bmQKICAgICAgICAgICAgICAgICAgICAgcm9v
dCA9IGJveC0+cm9vdCgpOwpAQCAtNTI5LDEwICs1MjksMTAgQEAgVmlzaWJsZVBvc2l0aW9uIG5l
eHRMaW5lUG9zaXRpb24oY29uc3QgVgogICAgICAgICB3aGlsZSAobikgewogICAgICAgICAgICAg
aWYgKGhpZ2hlc3RFZGl0YWJsZVJvb3QoUG9zaXRpb24obiwgMCkpICE9IGhpZ2hlc3RSb290KQog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgUG9zaXRpb24gcG9zKG4sIG4tPmNh
cmV0TWluT2Zmc2V0KCkpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zKG4sIGNhcmV0TWluT2Zm
c2V0KG4pKTsKICAgICAgICAgICAgIGlmIChwb3MuaXNDYW5kaWRhdGUoKSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChuLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBib3ggPSBuLT5y
ZW5kZXJlcigpLT5pbmxpbmVCb3gobi0+Y2FyZXRNaW5PZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgYm94ID0gbi0+cmVuZGVyZXIoKS0+aW5saW5lQm94KGNhcmV0TWluT2Zmc2V0KG4pKTsKICAg
ICAgICAgICAgICAgICBpZiAoYm94KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgcm9v
dCBsaW5lIGJveCBmb3VuZAogICAgICAgICAgICAgICAgICAgICByb290ID0gYm94LT5yb290KCk7
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMjc1MDQpCisrKyBXZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQKIAogICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChl
dmVudC5sb2NhbFBvaW50KCkpKTsKICAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAg
ICAgdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihpbm5lck5vZGUsIGlubmVyTm9kZS0+Y2Fy
ZXRNaW5PZmZzZXQoKSwgRE9XTlNUUkVBTSk7CisgICAgICAgIHZpc2libGVQb3MgPSBWaXNpYmxl
UG9zaXRpb24oaW5uZXJOb2RlLCAwLCBET1dOU1RSRUFNKTsKICAgICBQb3NpdGlvbiBwb3MgPSB2
aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgCiAgICAgU2VsZWN0aW9uIG5ld1NlbGVj
dGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2VsZWN0aW9uKCk7CkluZGV4
OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHJldmlzaW9uIDI3NTA0KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMwLDggKzYzMCwzNCBAQCB2b2lkIEZyYW1lOjpzZWxlY3Rpb25MYXlvdXRD
aGFuZ2VkKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkLT5tX2RvYykKLSAgICAgICAg
ZC0+bV9kb2MtPnVwZGF0ZVNlbGVjdGlvbigpOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFJlbmRlclZpZXcqIGNhbnZhcyA9IHN0YXRpY19jYXN0PFJlbmRlclZp
ZXcqPihyZW5kZXJlcigpKTsKKworICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25D
b250cm9sbGVyKCktPnNlbGVjdGlvbigpOworICAgICAgICAKKyAgICBpZiAoIXNlbGVjdGlvbi5p
c1JhbmdlKCkpCisgICAgICAgIGNhbnZhcy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gVXNlIHRoZSByaWdodG1vc3QgY2FuZGlkYXRlIGZvciB0aGUgc3RhcnQgb2Yg
dGhlIHNlbGVjdGlvbiwgYW5kIHRoZSBsZWZ0bW9zdCBjYW5kaWRhdGUgZm9yIHRoZSBlbmQgb2Yg
dGhlIHNlbGVjdGlvbi4KKyAgICAgICAgLy8gRXhhbXBsZTogZm9vIDxhPmJhcjwvYT4uICBJbWFn
aW5lIHRoYXQgYSBsaW5lIHdyYXAgb2NjdXJzIGFmdGVyICdmb28nLCBhbmQgdGhhdCAnYmFyJyBp
cyBzZWxlY3RlZC4gICBJZiB3ZSBwYXNzIFtmb28sIDNdCisgICAgICAgIC8vIGFzIHRoZSBzdGFy
dCBvZiB0aGUgc2VsZWN0aW9uLCB0aGUgc2VsZWN0aW9uIHBhaW50aW5nIGNvZGUgd2lsbCB0aGlu
ayB0aGF0IGNvbnRlbnQgb24gdGhlIGxpbmUgY29udGFpbmluZyAnZm9vJyBpcyBzZWxlY3RlZAor
ICAgICAgICAvLyBhbmQgd2lsbCBmaWxsIHRoZSBnYXAgYmVmb3JlICdiYXInLgorICAgICAgICBQ
b3NpdGlvbiBzdGFydFBvcyA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVu
dCgpOworICAgICAgICBpZiAoc3RhcnRQb3MuZG93bnN0cmVhbSgpLmlzQ2FuZGlkYXRlKCkpCisg
ICAgICAgICAgICBzdGFydFBvcyA9IHN0YXJ0UG9zLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9z
aXRpb24gZW5kUG9zID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICBpZiAoZW5kUG9zLnVwc3RyZWFtKCkuaXNDYW5kaWRhdGUoKSkKKyAgICAgICAgICAg
IGVuZFBvcyA9IGVuZFBvcy51cHN0cmVhbSgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgY2Fu
IGdldCBpbnRvIGEgc3RhdGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgbWFwIHRvIHRo
ZSBzYW1lIFZpc2libGVQb3NpdGlvbiB3aGVuIGEgc2VsZWN0aW9uIGlzIGRlbGV0ZWQKKyAgICAg
ICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB5ZXQgbm90aWZ5IHRoZSBTZWxlY3Rpb25Db250cm9sbGVy
IG9mIHRleHQgcmVtb3ZhbC4KKyAgICAgICAgaWYgKHN0YXJ0UG9zLmlzTm90TnVsbCgpICYmIGVu
ZFBvcy5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgIT0gc2VsZWN0aW9u
LnZpc2libGVFbmQoKSkgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpzdGFydFJlbmRlcmVy
ID0gc3RhcnRQb3Mubm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICAgICAgUmVuZGVyT2JqZWN0
ICplbmRSZW5kZXJlciA9IGVuZFBvcy5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBj
YW52YXMtPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBvcy5vZmZzZXQoKSwgZW5k
UmVuZGVyZXIsIGVuZFBvcy5vZmZzZXQoKSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQg
RnJhbWU6OmNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMjc1MDQpCisrKyBXZWJDb3Jl
L3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTY0LDYg
Kzk2NCw5IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJvbUQKICAgICBp
ZiAobmV3RW5kLmlzTnVsbCgpKQogICAgICAgICBuZXdFbmQgPSBlbmQ7CiAKKyAgICBuZXdTdGFy
dCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChuZXdTdGFydCk7CisgICAgbmV3RW5kID0gcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KG5ld0VuZCk7CisKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlUmFuZ2UoKTsKICAgICBpbnQgZXhjZXB0aW9u
ID0gMDsKICAgICByYW5nZS0+c2V0U3RhcnQobmV3U3RhcnQubm9kZSgpLCBuZXdTdGFydC5vZmZz
ZXQoKSwgZXhjZXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDI3NTA0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTgyLDE2ICsyOTgyLDIyIEBAIFBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3Np
dGlvbkZvckJveChJbmwKICAgICByZXR1cm4gUG9zaXRpb24oYm94LT5vYmplY3QoKS0+ZWxlbWVu
dCgpLCBzdGFydCA/IHRleHRCb3gtPnN0YXJ0KCkgOiB0ZXh0Qm94LT5zdGFydCgpICsgdGV4dEJv
eC0+bGVuKCkpOwogfQogCi1Qb3NpdGlvbiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JSZW5kZXJl
cihSZW5kZXJPYmplY3QgKnJlbmRlcmVyLCBib29sIHN0YXJ0KSBjb25zdAorUG9zaXRpb24gUmVu
ZGVyQmxvY2s6OnBvc2l0aW9uRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgYm9v
bCBzdGFydCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gUG9z
aXRpb24oZWxlbWVudCgpLCAwKTsKIAotICAgIE5vZGUgKm5vZGUgPSByZW5kZXJlci0+ZWxlbWVu
dCgpID8gcmVuZGVyZXItPmVsZW1lbnQoKSA6IGVsZW1lbnQoKTsKKyAgICBOb2RlKiBub2RlID0g
cmVuZGVyZXItPmVsZW1lbnQoKSA/IHJlbmRlcmVyLT5lbGVtZW50KCkgOiBlbGVtZW50KCk7CiAg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAotICAgIGludCBvZmZz
ZXQgPSBzdGFydCA/IG5vZGUtPmNhcmV0TWluT2Zmc2V0KCkgOiBub2RlLT5jYXJldE1heE9mZnNl
dCgpOworICAgIEFTU0VSVChyZW5kZXJlciA9PSBub2RlLT5yZW5kZXJlcigpKTsKKworICAgIGlu
dCBvZmZzZXQgPSBzdGFydCA/IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpIDogcmVuZGVyZXIt
PmNhcmV0TWF4T2Zmc2V0KCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyB3YXMgYSBydW50aW1lIGNo
ZWNrIHRoYXQgc2VlbWluZ2x5IGNvdWxkbid0IGZhaWw7IGNoYW5nZWQgaXQgdG8gYW4gYXNzZXJ0
aW9uIGZvciBub3cuCisgICAgQVNTRVJUKCFub2RlLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkgfHwg
cmVuZGVyZXItPmlzVGV4dCgpKTsKKwogICAgIHJldHVybiBQb3NpdGlvbihub2RlLCBvZmZzZXQp
OwogfQogCg==
</data>
<flag name="review"
          id="7280"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>