<?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>66147</bug_id>
          
          <creation_ts>2011-08-12 10:48:42 -0700</creation_ts>
          <short_desc>Switch FrameView to to new layout types</short_desc>
          <delta_ts>2011-08-17 21:06:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>eric</cc>
    
    <cc>fsamuel</cc>
    
    <cc>leviw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>450502</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-12 10:48:42 -0700</bug_when>
    <thetext>Convert *** to new layout abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451289</commentid>
    <comment_count>1</comment_count>
      <attachid>103953</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-15 14:25:19 -0700</bug_when>
    <thetext>Created attachment 103953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451373</commentid>
    <comment_count>2</comment_count>
      <attachid>103976</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-15 16:30:18 -0700</bug_when>
    <thetext>Created attachment 103976
Patch

Re-uploading for ews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451429</commentid>
    <comment_count>3</comment_count>
      <attachid>103988</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-15 17:54:10 -0700</bug_when>
    <thetext>Created attachment 103988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452406</commentid>
    <comment_count>4</comment_count>
      <attachid>103988</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-17 11:28:42 -0700</bug_when>
    <thetext>Comment on attachment 103988
Patch

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

Please ping me over IRC if I don&apos;t notice your patches wihtin a couple hours of posting.  I&apos;m not reading email that regularly at the moment as I&apos;m focusing on codding.

&gt; Source/WebCore/page/FrameView.cpp:2217
&gt; +        return LayoutRect(LayoutPoint(0, 0), contentsSize());

The 0, 0 isn&apos;t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452466</commentid>
    <comment_count>5</comment_count>
      <attachid>104210</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-17 12:17:34 -0700</bug_when>
    <thetext>Created attachment 104210
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452839</commentid>
    <comment_count>6</comment_count>
      <attachid>104210</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 21:06:19 -0700</bug_when>
    <thetext>Comment on attachment 104210
Patch for landing

Clearing flags on attachment: 104210

Committed r93280: &lt;http://trac.webkit.org/changeset/93280&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452840</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 21:06:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103953</attachid>
            <date>2011-08-15 14:25:19 -0700</date>
            <delta_ts>2011-08-15 16:30:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66147-20110815142518.patch</filename>
            <type>text/plain</type>
            <size>41421</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMDU4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDgtMTUgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBGcmFtZVZpZXcgdG8g
dG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb252ZXJ0IEZyYW1lICYgRnJhbWVWaWV3IHRvIG5ldyBsYXlvdXQgYWJzdHJh
Y3Rpb24gYXMgYSBwYXJ0IG9mIHRoZQorICAgICAgICBvbmdvaW5nIGNvbnZlcnNpb24gd29yay4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6dmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRvY3VtZW50QXRQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6c2NhbGVQYWdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlk
YXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEZyYW1lUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldE1hcmdpbldpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6c2V0TWFyZ2luSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
YWRqdXN0Vmlld1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxYRm9y
Rml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFlGb3JG
aXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0
Rm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmN1cnJlbnRN
b3VzZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVu
dHNGYXN0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRz
U2xvd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmdldFRpY2tt
YXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6cGFpbnRPdmVyaGFuZ0FyZWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6Y29udmVydEZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OmNvbnZlcnRUb1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29u
dmVydFRvQ29udGFpbmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjptYXJnaW5XaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6Om1hcmdpbkhlaWdodCk6CisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6Om5vZGVJbWFnZSk6CisKIDIwMTEtMDgtMTUgIEFkYW0gUm9iZW4g
IDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBwYWdlcycgc3R5bGUgYW5kIGNv
bnRlbnQgc2NhbGUgd2hlbiB0aGUgd2luZG93J3MgYmFja2luZyBzY2FsZSBmYWN0b3IgY2hhbmdl
cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDkzMDQ3KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw3ICs4MzYsNyBAQCBT
dHJpbmcgRnJhbWU6OmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jCiAgICAgcmV0dXJuIGRvY3Vt
ZW50KCkgPyBkb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHN0cikg
OiBzdHI7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBGcmFtZTo6dmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCitWaXNpYmxlUG9zaXRpb24gRnJhbWU6OnZp
c2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBmcmFtZVBvaW50KQogewog
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRB
dFBvaW50KGZyYW1lUG9pbnQsIHRydWUpOwogICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCk7CkBAIC04NTEsMTIgKzg1MSwxMiBAQCBWaXNpYmxlUG9zaXRpb24gRnJh
bWU6OnZpc2libGVQb3NpdGlvbkZvCiAgICAgcmV0dXJuIHZpc2libGVQb3M7CiB9CiAKLURvY3Vt
ZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKK0RvY3Vt
ZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsK
ICAgICBpZiAoIXZpZXcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJbnRQb2ludCBwdCA9
IHZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCk7CisgICAgTGF5b3V0UG9pbnQgcHQgPSB2
aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
ID0gSGl0VGVzdFJlc3VsdChwdCk7CiAKICAgICBpZiAoY29udGVudFJlbmRlcmVyKCkpCkBAIC04
NjQsNyArODY0LDcgQEAgRG9jdW1lbnQqIEZyYW1lOjpkb2N1bWVudEF0UG9pbnQoY29uc3QgSQog
ICAgIHJldHVybiByZXN1bHQuaW5uZXJOb2RlKCkgPyByZXN1bHQuaW5uZXJOb2RlKCktPmRvY3Vt
ZW50KCkgOiAwOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBGcmFtZTo6cmFuZ2VGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKK1Bhc3NSZWZQdHI8UmFuZ2U+IEZyYW1lOjpyYW5n
ZUZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBmcmFtZVBvaW50KQogewogICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwog
ICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKQEAgLTg3MywxNCArODczLDE0IEBAIFBhc3NSZWZQ
dHI8UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGMKICAgICBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygpOwogICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwo
KSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtl
UmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gZWRpdG9y
KCktPmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAg
ICAgICBMYXlvdXRSZWN0IHJlY3QgPSBlZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlv
dXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CiAgICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZyYW1l
UG9pbnQpKQogICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UucmVsZWFz
ZSgpOwogICAgIH0KIAogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgp
OwogICAgIGlmIChSZWZQdHI8UmFuZ2U+IG5leHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShw
b3NpdGlvbiwgbmV4dCkpIHsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gZWRpdG9yKCktPmZpcnN0
UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgICAgIExheW91dFJl
Y3QgcmVjdCA9IGVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2Uu
Z2V0KCkpOwogICAgICAgICBpZiAocmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKICAgICAgICAg
ICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgpOwogICAgIH0KQEAgLTEwNDMs
NyArMTA0Myw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmwKICAg
ICBpZiAobV9wYWdlWm9vbUZhY3RvciAhPSBwYWdlWm9vbUZhY3RvcikgewogICAgICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpKSB7CiAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIHNjcm9sbCBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZnVsbCBwYWdlIHpvb20sIHNvIHRoZSBj
b250ZW50IHN0YXlzIGluIHJlbGF0aXZlbHkgdGhlIHNhbWUgcG9zaXRpb24uCi0gICAgICAgICAg
ICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHZpZXctPnNjcm9sbFBvc2l0aW9uKCk7CisgICAg
ICAgICAgICBMYXlvdXRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHZpZXctPnNjcm9sbFBvc2l0aW9u
KCk7CiAgICAgICAgICAgICBmbG9hdCBwZXJjZW50RGlmZmVyZW5jZSA9IChwYWdlWm9vbUZhY3Rv
ciAvIG1fcGFnZVpvb21GYWN0b3IpOwogICAgICAgICAgICAgdmlldy0+c2V0U2Nyb2xsUG9zaXRp
b24oSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24ueCgpICogcGVyY2VudERpZmZlcmVuY2UsIHNjcm9s
bFBvc2l0aW9uLnkoKSAqIHBlcmNlbnREaWZmZXJlbmNlKSk7CiAgICAgICAgIH0KQEAgLTEwNzUs
NyArMTA3NSw3IEBAIHZvaWQgRnJhbWU6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmcKIH0K
ICNlbmRpZgogCi12b2lkIEZyYW1lOjpzY2FsZVBhZ2UoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBv
aW50JiBvcmlnaW4pCit2b2lkIEZyYW1lOjpzY2FsZVBhZ2UoZmxvYXQgc2NhbGUsIGNvbnN0IExh
eW91dFBvaW50JiBvcmlnaW4pCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9j
dW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNp
b24gOTMwNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2NCw3ICsxNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZsb2F0IHRl
eHRab29tRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Wm9vbUZhY3RvcjsgfQogICAgICAg
ICB2b2lkIHNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZs
b2F0IHRleHRab29tRmFjdG9yKTsKIAotICAgICAgICB2b2lkIHNjYWxlUGFnZShmbG9hdCBzY2Fs
ZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbik7CisgICAgICAgIHZvaWQgc2NhbGVQYWdlKGZsb2F0
IHNjYWxlLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luKTsKICAgICAgICAgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7IH0KIAogI2lmIEVO
QUJMRShPUklFTlRBVElPTl9FVkVOVFMpCkBAIC0xODUsOSArMTg1LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBEcmFnSW1hZ2VSZWYgbm9kZUltYWdlKE5vZGUqKTsKICAgICAgICAg
RHJhZ0ltYWdlUmVmIGRyYWdJbWFnZUZvclNlbGVjdGlvbigpOwogCi0gICAgICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2lu
dCk7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdp
bmRvd1BvaW50KTsKLSAgICAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25z
dCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudEF0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHdpbmRvd1BvaW50
KTsKKyAgICAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYgZnJhbWVQb2ludCk7CiAKICAgICAgICAgU3RyaW5nIHNlYXJjaEZvckxhYmVsc0Fib3Zl
Q2VsbChSZWd1bGFyRXhwcmVzc2lvbiosIEhUTUxUYWJsZUNlbGxFbGVtZW50Kiwgc2l6ZV90KiBy
ZXN1bHREaXN0YW5jZUZyb21TdGFydE9mQ2VsbCk7CiAgICAgICAgIFN0cmluZyBzZWFyY2hGb3JM
YWJlbHNCZWZvcmVFbGVtZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQq
LCBzaXplX3QqIHJlc3VsdERpc3RhbmNlLCBib29sKiByZXN1bHRJc0luQ2VsbEFib3ZlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDkzMDQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4
LDcgQEAgUGFzc1JlZlB0cjxGcmFtZVZpZXc+IEZyYW1lVmlldzo6Y3JlYXRlKAogUGFzc1JlZlB0
cjxGcmFtZVZpZXc+IEZyYW1lVmlldzo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50U2l6
ZSYgaW5pdGlhbFNpemUpCiB7CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGFkb3B0UmVm
KG5ldyBGcmFtZVZpZXcoZnJhbWUpKTsKLSAgICB2aWV3LT5XaWRnZXQ6OnNldEZyYW1lUmVjdChJ
bnRSZWN0KHZpZXctPmxvY2F0aW9uKCksIGluaXRpYWxTaXplKSk7CisgICAgdmlldy0+V2lkZ2V0
OjpzZXRGcmFtZVJlY3QoTGF5b3V0UmVjdCh2aWV3LT5sb2NhdGlvbigpLCBpbml0aWFsU2l6ZSkp
OwogICAgIHZpZXctPnNldEluaXRpYWxCb3VuZHNTaXplKGluaXRpYWxTaXplKTsKICAgICB2aWV3
LT5zaG93KCk7CiAgICAgcmV0dXJuIHZpZXcucmVsZWFzZSgpOwpAQCAtMjE4LDcgKzIxOCw3IEBA
IHZvaWQgRnJhbWVWaWV3OjpyZXNldCgpCiAgICAgbV9maXJzdExheW91dCA9IHRydWU7CiAgICAg
bV9maXJzdExheW91dENhbGxiYWNrUGVuZGluZyA9IGZhbHNlOwogICAgIG1fd2FzU2Nyb2xsZWRC
eVVzZXIgPSBmYWxzZTsKLSAgICBtX2xhc3RMYXlvdXRTaXplID0gSW50U2l6ZSgpOworICAgIG1f
bGFzdExheW91dFNpemUgPSBMYXlvdXRTaXplKCk7CiAgICAgbV9sYXN0Wm9vbUZhY3RvciA9IDEu
MGY7CiAgICAgbV9kZWZlcnJpbmdSZXBhaW50cyA9IDA7CiAgICAgbV9yZXBhaW50Q291bnQgPSAw
OwpAQCAtMjcwLDggKzI3MCw4IEBAIHZvaWQgRnJhbWVWaWV3Ojppbml0KCkKIHsKICAgICByZXNl
dCgpOwogCi0gICAgbV9tYXJnaW5zID0gSW50U2l6ZSgtMSwgLTEpOyAvLyB1bmRlZmluZWQKLSAg
ICBtX3NpemUgPSBJbnRTaXplKCk7CisgICAgbV9tYXJnaW5zID0gTGF5b3V0U2l6ZSgtMSwgLTEp
OyAvLyB1bmRlZmluZWQKKyAgICBtX3NpemUgPSBMYXlvdXRTaXplKCk7CiAKICAgICAvLyBQcm9w
YWdhdGUgdGhlIG1hcmdpbndpZHRoL2hlaWdodCBhbmQgc2Nyb2xsaW5nIG1vZGVzIHRvIHRoZSB2
aWV3LgogICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fZnJhbWUgPyBtX2ZyYW1lLT5vd25l
ckVsZW1lbnQoKSA6IDA7CkBAIC0yNzksOCArMjc5LDEwIEBAIHZvaWQgRnJhbWVWaWV3Ojppbml0
KCkKICAgICAgICAgSFRNTEZyYW1lRWxlbWVudCogZnJhbWVFbHQgPSBzdGF0aWNfY2FzdDxIVE1M
RnJhbWVFbGVtZW50Kj4ob3duZXJFbGVtZW50KTsKICAgICAgICAgaWYgKGZyYW1lRWx0LT5zY3Jv
bGxpbmdNb2RlKCkgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQogICAgICAgICAgICAgc2V0Q2FuSGF2
ZVNjcm9sbGJhcnMoZmFsc2UpOwotICAgICAgICBpbnQgbWFyZ2luV2lkdGggPSBmcmFtZUVsdC0+
bWFyZ2luV2lkdGgoKTsKLSAgICAgICAgaW50IG1hcmdpbkhlaWdodCA9IGZyYW1lRWx0LT5tYXJn
aW5IZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5XaWR0aCA9IGZyYW1lRWx0LT5t
YXJnaW5XaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkhlaWdodCA9IGZyYW1lRWx0
LT5tYXJnaW5IZWlnaHQoKTsKKyAgICAgICAgLy8gRklYTUU6IENoYW5nZSB0byByb3VnaGx5RXF1
YWxzIG9yID49IDAgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0cy4gCisgICAgICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICAgICAgaWYgKG1h
cmdpbldpZHRoICE9IC0xKQogICAgICAgICAgICAgc2V0TWFyZ2luV2lkdGgobWFyZ2luV2lkdGgp
OwogICAgICAgICBpZiAobWFyZ2luSGVpZ2h0ICE9IC0xKQpAQCAtMzYxLDcgKzM2Myw3IEBAIGJv
b2wgRnJhbWVWaWV3OjpkaWRGaXJzdExheW91dCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2ZpcnN0
TGF5b3V0OwogfQogCi12b2lkIEZyYW1lVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKK3ZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBMYXlvdXRSZWN0
JiByZWN0KQogewogICAgIGlmICghcGFyZW50KCkpIHsKICAgICAgICAgaWYgKGhvc3RXaW5kb3co
KSkKQEAgLTM3NiwxNSArMzc4LDE1IEBAIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnQKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRS
ZWN0IHJlcGFpbnRSZWN0ID0gcmVjdDsKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVj
dDsKICAgICByZXBhaW50UmVjdC5tb3ZlKHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJl
ci0+cGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5ib3JkZXJU
b3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOwogICAgIHJlbmRlcmVyLT5yZXBhaW50UmVj
dGFuZ2xlKHJlcGFpbnRSZWN0KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0JiBuZXdSZWN0KQordm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25z
dCBMYXlvdXRSZWN0JiBuZXdSZWN0KQogewotICAgIEludFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVj
dCgpOworICAgIExheW91dFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIGlmIChuZXdS
ZWN0ID09IG9sZFJlY3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDA2LDEzICs0MDgsMTMgQEAg
dm9pZCBGcmFtZVZpZXc6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIH0KICNlbmRpZgogCi12b2lkIEZy
YW1lVmlldzo6c2V0TWFyZ2luV2lkdGgoaW50IHcpCit2b2lkIEZyYW1lVmlldzo6c2V0TWFyZ2lu
V2lkdGgoTGF5b3V0VW5pdCB3KQogewogICAgIC8vIG1ha2UgaXQgdXBkYXRlIHRoZSByZW5kZXJp
bmcgYXJlYSB3aGVuIHNldAogICAgIG1fbWFyZ2lucy5zZXRXaWR0aCh3KTsKIH0KIAotdm9pZCBG
cmFtZVZpZXc6OnNldE1hcmdpbkhlaWdodChpbnQgaCkKK3ZvaWQgRnJhbWVWaWV3OjpzZXRNYXJn
aW5IZWlnaHQoTGF5b3V0VW5pdCBoKQogewogICAgIC8vIG1ha2UgaXQgdXBkYXRlIHRoZSByZW5k
ZXJpbmcgYXJlYSB3aGVuIHNldAogICAgIG1fbWFyZ2lucy5zZXRIZWlnaHQoaCk7CkBAIC00NzYs
NyArNDc4LDcgQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAg
IHJldHVybiBTY3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwogfQogCi12
b2lkIEZyYW1lVmlldzo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lk
IEZyYW1lVmlldzo6c2V0Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCiB7CiAg
ICAgaWYgKHNpemUgPT0gY29udGVudHNTaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUwNSw5
ICs1MDcsOSBAQCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0Vmlld1NpemUoKQogICAgIGlmICghcm9v
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCA9IHJvb3QtPmRv
Y3VtZW50UmVjdCgpOwotICAgIGNvbnN0IEludFNpemUmIHNpemUgPSByZWN0LnNpemUoKTsKLSAg
ICBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXJlY3QueCgpLCAtcmVjdC55
KCkpLCAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSwgc2l6ZSA9PSBjb250ZW50c1Np
emUoKSk7CisgICAgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCA9IHJvb3QtPmRvY3VtZW50UmVjdCgp
OworICAgIGNvbnN0IExheW91dFNpemUmIHNpemUgPSByZWN0LnNpemUoKTsKKyAgICBTY3JvbGxW
aWV3OjpzZXRTY3JvbGxPcmlnaW4oTGF5b3V0UG9pbnQoLXJlY3QueCgpLCAtcmVjdC55KCkpLCAh
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSwgc2l6ZSA9PSBjb250ZW50c1NpemUoKSk7
CiAgICAgCiAgICAgc2V0Q29udGVudHNTaXplKHNpemUpOwogfQpAQCAtMTI4MiwxNSArMTI4NCwx
NSBAQCB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlRml4ZWRPYmplY3QoKQogICAgICAgICB1cGRhdGVD
YW5CbGl0T25TY3JvbGxSZWN1cnNpdmVseSgpOwogfQogCi1pbnQgRnJhbWVWaWV3OjpzY3JvbGxY
Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CitMYXlvdXRVbml0IEZyYW1lVmlldzo6c2Nyb2xsWEZv
ckZpeGVkUG9zaXRpb24oKSBjb25zdAogewotICAgIGludCB2aXNpYmxlQ29udGVudFdpZHRoID0g
dmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgoKTsKLSAgICBpbnQgbWF4WCA9IGNvbnRlbnRzV2lk
dGgoKSAtIHZpc2libGVDb250ZW50V2lkdGg7CisgICAgTGF5b3V0VW5pdCB2aXNpYmxlQ29udGVu
dFdpZHRoID0gdmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IG1h
eFggPSBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlQ29udGVudFdpZHRoOwogCiAgICAgaWYgKG1h
eFggPT0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgeCA9IHNjcm9sbFgoKTsKKyAg
ICBMYXlvdXRVbml0IHggPSBzY3JvbGxYKCk7CiAKICAgICBpZiAoIVNjcm9sbFZpZXc6OnNjcm9s
bE9yaWdpbigpLngoKSkgewogICAgICAgICBpZiAoeCA8IDApCkBAIC0xMzE3LDE1ICsxMzE5LDE1
IEBAIGludCBGcmFtZVZpZXc6OnNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkKICAgICByZXR1cm4g
eCAqIGRyYWdGYWN0b3IgLyBwYWdlU2NhbGVGYWN0b3I7CiB9CiAKLWludCBGcmFtZVZpZXc6OnNj
cm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QKK0xheW91dFVuaXQgRnJhbWVWaWV3OjpzY3Jv
bGxZRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaW50IHZpc2libGVDb250ZW50SGVp
Z2h0ID0gdmlzaWJsZUNvbnRlbnRSZWN0KCkuaGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCB2aXNp
YmxlQ29udGVudEhlaWdodCA9IHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOwogCi0gICAg
aW50IG1heFkgPSBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRIZWlnaHQ7CisgICAg
TGF5b3V0VW5pdCBtYXhZID0gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVDb250ZW50SGVpZ2h0
OwogICAgIGlmIChtYXhZID09IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IHkgPSBz
Y3JvbGxZKCk7CisgICAgTGF5b3V0VW5pdCB5ID0gc2Nyb2xsWSgpOwogCiAgICAgaWYgKCFTY3Jv
bGxWaWV3OjpzY3JvbGxPcmlnaW4oKS55KCkpIHsKICAgICAgICAgaWYgKHkgPCAwKQpAQCAtMTM0
OCwxNyArMTM1MCwxNyBAQCBpbnQgRnJhbWVWaWV3OjpzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigp
CiAgICAgcmV0dXJuIHkgKiBkcmFnRmFjdG9yIC8gcGFnZVNjYWxlRmFjdG9yOwogfQogCi1JbnRT
aXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CitMYXlv
dXRTaXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsWEZvckZpeGVkUG9zaXRpb24oKSwgc2Nyb2xsWUZv
ckZpeGVkUG9zaXRpb24oKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoc2Nyb2xsWEZvckZpeGVk
UG9zaXRpb24oKSwgc2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSk7CiB9CiAKLUludFBvaW50IEZy
YW1lVmlldzo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAorTGF5b3V0UG9pbnQgRnJhbWVW
aWV3OjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZnJhbWUg
PyBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKSA6IEludFBv
aW50KCk7CiB9CiAKLWJvb2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KQorYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBh
dGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IExheW91dFJlY3QmIHJlY3RUb1Nj
cm9sbCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgY29uc3Qgc2l6ZV90IGZp
eGVkT2JqZWN0VGhyZXNob2xkID0gNTsKIApAQCAtMTM3NCwxNCArMTM3NiwxNCBAQCBib29sIEZy
YW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjCiAgICAgY29uc3QgYm9vbCBpc0NvbXBv
c2l0ZWRDb250ZW50TGF5ZXIgPSBjb250ZW50c0luQ29tcG9zaXRlZExheWVyKCk7CiAKICAgICAv
LyBHZXQgdGhlIHJlY3RzIG9mIHRoZSBmaXhlZCBvYmplY3RzIHZpc2libGUgaW4gdGhlIHJlY3RU
b1Njcm9sbAotICAgIFZlY3RvcjxJbnRSZWN0LCBmaXhlZE9iamVjdFRocmVzaG9sZD4gc3ViUmVj
dFRvVXBkYXRlOworICAgIFZlY3RvcjxMYXlvdXRSZWN0LCBmaXhlZE9iamVjdFRocmVzaG9sZD4g
c3ViUmVjdFRvVXBkYXRlOwogICAgIGJvb2wgdXBkYXRlSW52YWxpZGF0ZWRTdWJSZWN0ID0gdHJ1
ZTsKICAgICBSZW5kZXJCbG9jazo6UG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwogICAgIGZvciAoUmVuZGVy
QmxvY2s6OlBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBS
ZW5kZXJCb3gqIHJlbmRlckJveCA9ICppdDsKICAgICAgICAgaWYgKHJlbmRlckJveC0+c3R5bGUo
KS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IHJlbmRlckJveC0+bGF5ZXIoKS0+cmVwYWludFJl
Y3RJbmNsdWRpbmdEZXNjZW5kYW50cygpOworICAgICAgICBMYXlvdXRSZWN0IHVwZGF0ZVJlY3Qg
PSByZW5kZXJCb3gtPmxheWVyKCktPnJlcGFpbnRSZWN0SW5jbHVkaW5nRGVzY2VuZGFudHMoKTsK
ICAgICAgICAgdXBkYXRlUmVjdCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdCk7CiAgICAg
ICAgIGlmICghaXNDb21wb3NpdGVkQ29udGVudExheWVyICYmIGNsaXBzUmVwYWludHMoKSkKICAg
ICAgICAgICAgIHVwZGF0ZVJlY3QuaW50ZXJzZWN0KHJlY3RUb1Njcm9sbCk7CkBAIC0xNDAyLDgg
KzE0MDQsOCBAQCBib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjCiAgICAg
ICAgIC8vIDIpIHVwZGF0ZSB0aGUgYXJlYSBvZiBmaXhlZCBvYmplY3RzIHRoYXQgaGFzIGJlZW4g
aW52YWxpZGF0ZWQKICAgICAgICAgc2l6ZV90IGZpeE9iamVjdHNDb3VudCA9IHN1YlJlY3RUb1Vw
ZGF0ZS5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZml4T2JqZWN0c0Nv
dW50OyArK2kpIHsKLSAgICAgICAgICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IHN1YlJlY3RUb1Vw
ZGF0ZVtpXTsKLSAgICAgICAgICAgIEludFJlY3Qgc2Nyb2xsZWRSZWN0ID0gdXBkYXRlUmVjdDsK
KyAgICAgICAgICAgIExheW91dFJlY3QgdXBkYXRlUmVjdCA9IHN1YlJlY3RUb1VwZGF0ZVtpXTsK
KyAgICAgICAgICAgIExheW91dFJlY3Qgc2Nyb2xsZWRSZWN0ID0gdXBkYXRlUmVjdDsKICAgICAg
ICAgICAgIHNjcm9sbGVkUmVjdC5tb3ZlKHNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHVwZGF0
ZVJlY3QudW5pdGUoc2Nyb2xsZWRSZWN0KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkBAIC0xNDI2LDcgKzE0MjgsNyBAQCBib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNG
YXN0UGF0aChjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lVmlldzo6c2Nyb2xs
Q29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQordm9pZCBGcmFtZVZp
ZXc6OnNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgTGF5b3V0UmVjdCYgdXBkYXRlUmVjdCkK
IHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKGNvbnRlbnRzSW5D
b21wb3NpdGVkTGF5ZXIoKSkgewpAQCAtMTQzNiw5ICsxNDM4LDkgQEAgdm9pZCBGcmFtZVZpZXc6
OnNjcm9sbENvbnRlbnRzU2xvd1BhdGgoYwogICAgIH0KICAgICBpZiAoUmVuZGVyUGFydCogZnJh
bWVSZW5kZXJlciA9IG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoZnJh
bWVSZW5kZXJlci0+Y29udGFpbmVyRm9yUmVwYWludCgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0
IHJlY3QoZnJhbWVSZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgZnJhbWVSZW5kZXJlci0+cGFkZGlu
Z0xlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVJlbmRlcmVyLT5ib3JkZXJU
b3AoKSArIGZyYW1lUmVuZGVyZXItPnBhZGRpbmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICB2aXNpYmxlV2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91
dFJlY3QgcmVjdChmcmFtZVJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBmcmFtZVJlbmRlcmVyLT5w
YWRkaW5nTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lUmVuZGVyZXIt
PmJvcmRlclRvcCgpICsgZnJhbWVSZW5kZXJlci0+cGFkZGluZ1RvcCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpc2libGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpOwogICAgICAg
ICAgICAgZnJhbWVSZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMTU4MSw3ICsxNTgzLDcgQEAgdm9pZCBGcmFtZVZpZXc6
Om1haW50YWluU2Nyb2xsUG9zaXRpb25BdAogICAgICAgICBzY3JvbGxUb0FuY2hvcigpOwogfQog
Ci12b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9s
bFBvaW50KQordm9pZCBGcmFtZVZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IExheW91dFBv
aW50JiBzY3JvbGxQb2ludCkKIHsKICAgICBib29sIHdhc0luUHJvZ3JhbW1hdGljU2Nyb2xsID0g
bV9pblByb2dyYW1tYXRpY1Njcm9sbDsKICAgICBtX2luUHJvZ3JhbW1hdGljU2Nyb2xsID0gdHJ1
ZTsKQEAgLTE2NDEsMTkgKzE2NDMsMTkgQEAgSG9zdFdpbmRvdyogRnJhbWVWaWV3Ojpob3N0V2lu
ZG93KCkgY29ucwogCiBjb25zdCB1bnNpZ25lZCBjUmVwYWludFJlY3RVbmlvblRocmVzaG9sZCA9
IDI1OwogCi12b2lkIEZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50
UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCit2b2lkIEZyYW1lVmlldzo6cmVwYWludENvbnRlbnRS
ZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCiB7CiAgICAgQVNT
RVJUKCFtX2ZyYW1lLT5vd25lckVsZW1lbnQoKSk7CiAKICAgICBkb3VibGUgZGVsYXkgPSBtX2Rl
ZmVycmluZ1JlcGFpbnRzID8gMCA6IGFkanVzdGVkRGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKICAg
ICBpZiAoKG1fZGVmZXJyaW5nUmVwYWludHMgfHwgbV9kZWZlcnJlZFJlcGFpbnRUaW1lci5pc0Fj
dGl2ZSgpIHx8IGRlbGF5KSAmJiAhaW1tZWRpYXRlKSB7Ci0gICAgICAgIEludFJlY3QgcGFpbnRS
ZWN0ID0gcjsKKyAgICAgICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSByOwogICAgICAgICBpZiAo
Y2xpcHNSZXBhaW50cygpICYmICFwYWludHNFbnRpcmVDb250ZW50cygpKQogICAgICAgICAgICAg
cGFpbnRSZWN0LmludGVyc2VjdCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CiAgICAgICAgIGlmIChw
YWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobV9y
ZXBhaW50Q291bnQgPT0gY1JlcGFpbnRSZWN0VW5pb25UaHJlc2hvbGQpIHsKLSAgICAgICAgICAg
IEludFJlY3QgdW5pb25lZFJlY3Q7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHVuaW9uZWRSZWN0
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNSZXBhaW50UmVjdFVuaW9u
VGhyZXNob2xkOyArK2kpCiAgICAgICAgICAgICAgICAgdW5pb25lZFJlY3QudW5pdGUobV9yZXBh
aW50UmVjdHNbaV0pOwogICAgICAgICAgICAgbV9yZXBhaW50UmVjdHMuY2xlYXIoKTsKQEAgLTIw
NDIsNyArMjA0NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hvcigpCiAgICAgaWYg
KCFhbmNob3JOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0
IHJlY3Q7CisgICAgTGF5b3V0UmVjdCByZWN0OwogICAgIGlmIChhbmNob3JOb2RlICE9IG1fZnJh
bWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJlY3QgPSBhbmNob3JOb2RlLT5nZXRSZWN0KCk7CiAK
QEAgLTIxNjYsNyArMjE2OCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRh
c2tzKCkKICAgICBtX2FjdGlvblNjaGVkdWxlci0+cmVzdW1lKCk7CiAKICAgICBpZiAoIXJvb3Qt
PnByaW50aW5nKCkpIHsKLSAgICAgICAgSW50U2l6ZSBjdXJyZW50U2l6ZSA9IEludFNpemUod2lk
dGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0
U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIGZsb2F0IGN1cnJlbnRab29tRmFjdG9y
ID0gcm9vdC0+c3R5bGUoKS0+em9vbSgpOwogICAgICAgICBib29sIHJlc2l6ZWQgPSAhbV9maXJz
dExheW91dCAmJiAoY3VycmVudFNpemUgIT0gbV9sYXN0TGF5b3V0U2l6ZSB8fCBjdXJyZW50Wm9v
bUZhY3RvciAhPSBtX2xhc3Rab29tRmFjdG9yKTsKICAgICAgICAgbV9sYXN0TGF5b3V0U2l6ZSA9
IGN1cnJlbnRTaXplOwpAQCAtMjIwNywxNSArMjIwOSwxNSBAQCB2b2lkIEZyYW1lVmlldzo6dXBk
YXRlT3ZlcmZsb3dTdGF0dXMoYm9vCiAgICAgCiB9CiAKLUludFJlY3QgRnJhbWVWaWV3Ojp3aW5k
b3dDbGlwUmVjdChib29sIGNsaXBUb0NvbnRlbnRzKSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZp
ZXc6OndpbmRvd0NsaXBSZWN0KGJvb2wgY2xpcFRvQ29udGVudHMpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fZnJhbWUtPnZpZXcoKSA9PSB0aGlzKTsKIAogICAgIGlmIChwYWludHNFbnRpcmVDb250
ZW50cygpKQotICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgY29udGVudHNT
aXplKCkpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRQb2ludCgwLCAwKSwgY29u
dGVudHNTaXplKCkpOwogCiAgICAgLy8gU2V0IG91ciBjbGlwIHJlY3QgdG8gYmUgb3VyIGNvbnRl
bnRzLgotICAgIEludFJlY3QgY2xpcFJlY3QgPSBjb250ZW50c1RvV2luZG93KHZpc2libGVDb250
ZW50UmVjdCghY2xpcFRvQ29udGVudHMpKTsKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gY29u
dGVudHNUb1dpbmRvdyh2aXNpYmxlQ29udGVudFJlY3QoIWNsaXBUb0NvbnRlbnRzKSk7CiAgICAg
aWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5vd25lckVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IGNsaXBSZWN0OwogCkBAIC0yMjMxLDE0ICsyMjMzLDE0IEBAIEludFJlY3QgRnJhbWVWaWV3Ojp3
aW5kb3dDbGlwUmVjdChib29sIGMKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CiAKLUludFJlY3Qg
RnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
ciwgYm9vbCBjbGlwVG9MYXllckNvbnRlbnRzKSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZpZXc6
OndpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBib29sIGNs
aXBUb0xheWVyQ29udGVudHMpIGNvbnN0CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBubyBsYXllciwg
anVzdCByZXR1cm4gb3VyIHdpbmRvdyBjbGlwIHJlY3QuCiAgICAgaWYgKCFsYXllcikKICAgICAg
ICAgcmV0dXJuIHdpbmRvd0NsaXBSZWN0KCk7CiAKICAgICAvLyBBcHBseSB0aGUgY2xpcCBmcm9t
IHRoZSBsYXllci4KLSAgICBJbnRSZWN0IGNsaXBSZWN0OworICAgIExheW91dFJlY3QgY2xpcFJl
Y3Q7CiAgICAgaWYgKGNsaXBUb0xheWVyQ29udGVudHMpCiAgICAgICAgIGNsaXBSZWN0ID0gbGF5
ZXItPmNoaWxkcmVuQ2xpcFJlY3QoKTsKICAgICBlbHNlCkBAIC0yMjUzLDMzICsyMjU1LDMzIEBA
IGJvb2wgRnJhbWVWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UgJiYgcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojpz
Y3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCit2b2lkIEZyYW1lVmlldzo6c2Nyb2xs
VG8oY29uc3QgTGF5b3V0U2l6ZSYgbmV3T2Zmc2V0KQogewotICAgIEludFNpemUgb2Zmc2V0ID0g
c2Nyb2xsT2Zmc2V0KCk7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsK
ICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAgIGlmIChvZmZzZXQgIT0g
c2Nyb2xsT2Zmc2V0KCkpCiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOwogICAgIGZy
YW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAK
LXZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkK
IHsKICAgICAvLyBBZGQgaW4gb3VyIG9mZnNldCB3aXRoaW4gdGhlIEZyYW1lVmlldy4KLSAgICBJ
bnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7CisgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3QgPSByZWN0
OwogICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAgICBpbnZh
bGlkYXRlUmVjdChkaXJ0eVJlY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6Z2V0VGlja21hcmtz
KFZlY3RvcjxJbnRSZWN0PiYgdGlja21hcmtzKSBjb25zdAordm9pZCBGcmFtZVZpZXc6OmdldFRp
Y2ttYXJrcyhWZWN0b3I8TGF5b3V0UmVjdD4mIHRpY2ttYXJrcykgY29uc3QKIHsKICAgICB0aWNr
bWFya3MgPSBmcmFtZSgpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbmRlcmVkUmVjdHNGb3JN
YXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogfQogCi1JbnRSZWN0IEZyYW1lVmll
dzo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZpZXc6OndpbmRv
d1Jlc2l6ZXJSZWN0KCkgY29uc3QKIHsKICAgICBQYWdlKiBwYWdlID0gZnJhbWUoKSA/IGZyYW1l
KCktPnBhZ2UoKSA6IDA7CiAgICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gSW50UmVjdCgp
OworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogICAgIHJldHVybiBwYWdlLT5jaHJvbWUo
KS0+d2luZG93UmVzaXplclJlY3QoKTsKIH0KIApAQCAtMjMxNSw3ICsyMzE3LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OmRpZENvbXBsZXRlQW5pbWF0ZWRTY3JvbAogICAgIHJldHVybiBwYWdlLT5jaHJv
bWUoKS0+Y2xpZW50KCktPmRpZENvbXBsZXRlQW5pbWF0ZWRTY3JvbGwoKTsKIH0KIAotdm9pZCBG
cmFtZVZpZXc6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3Jv
bGxlclRodW1iKQordm9pZCBGcmFtZVZpZXc6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChj
b25zdCBMYXlvdXRSZWN0JiBzY3JvbGxlclRodW1iKQogewogICAgIFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMjQ0Niw3ICsyNDQ4LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OnVwZGF0ZVNjcm9sbENvcm5lcigpCiAgICAgU2Nyb2xsVmlldzo6dXBkYXRlU2Ny
b2xsQ29ybmVyKCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjpwYWludFNjcm9sbENvcm5lcihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpCit2b2lkIEZy
YW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiBjb3JuZXJSZWN0KQogewogICAgIGlmIChjb250ZXh0LT51cGRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7CiAgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lcigpOwpAQCAtMjU2Niw3
ICsyNTY4LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldFdhc1Njcm9sbGVkQnlVc2VyKGJvbwogICAg
IG1fd2FzU2Nyb2xsZWRCeVVzZXIgPSB3YXNTY3JvbGxlZEJ5VXNlcjsKIH0KIAotdm9pZCBGcmFt
ZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQordm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBwLCBj
b25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIGlmICghZnJhbWUoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjY4NSw3ICsyNjg3LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldE5vZGVUb0RyYXco
Tm9kZSogbm9kZQogICAgIG1fbm9kZVRvRHJhdyA9IG5vZGU7CiB9CiAKLXZvaWQgRnJhbWVWaWV3
OjpwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNhbE92ZXJo
YW5nQXJlYSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBGcmFtZVZpZXc6OnBhaW50
T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IExheW91dFJlY3QmIHZlcnRpY2FsT3Zlcmhh
bmdBcmVhLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgaWYgKGNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjc1Myw3ICsyNzU1LDcg
QEAgdm9pZCBGcmFtZVZpZXc6OmZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlvbgogICAgICAgICBmbG9h
dCBwYWdlTG9naWNhbFdpZHRoID0gcm9vdC0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IHBhZ2VTaXplLndpZHRoKCkgOiBwYWdlU2l6ZS5oZWlnaHQoKTsKICAgICAgICAgZmxv
YXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSByb290LT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gcGFnZVNpemUuaGVpZ2h0KCkgOiBwYWdlU2l6ZS53aWR0aCgpOwogCi0gICAgICAg
IGludCBmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0aCA9IHN0YXRpY19jYXN0PGludD4ocGFnZUxvZ2lj
YWxXaWR0aCk7CisgICAgICAgIExheW91dFVuaXQgZmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGggPSBz
dGF0aWNfY2FzdDxMYXlvdXRVbml0PihwYWdlTG9naWNhbFdpZHRoKTsKICAgICAgICAgcm9vdC0+
c2V0TG9naWNhbFdpZHRoKGZsb29yZWRQYWdlTG9naWNhbFdpZHRoKTsKICAgICAgICAgcm9vdC0+
c2V0UGFnZUxvZ2ljYWxIZWlnaHQocGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgICAgICByb290LT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKQEAgLTI3NjQsNyArMjc2Niw3IEBA
IHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24KICAgICAgICAgLy8gRklY
TUU6IFdlIGFyZSBhc3N1bWluZyBhIHNocmluay10by1maXQgcHJpbnRpbmcgaW1wbGVtZW50YXRp
b24uICBBIGNyb3BwaW5nCiAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgZG8g
dGhpcyEKICAgICAgICAgYm9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUgPSByb290LT5zdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAgICAgICBpbnQgZG9jTG9naWNhbFdpZHRo
ID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gcm9vdC0+ZG9jdW1lbnRSZWN0KCkud2lkdGgoKSA6
IHJvb3QtPmRvY3VtZW50UmVjdCgpLmhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGRvY0xv
Z2ljYWxXaWR0aCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IHJvb3QtPmRvY3VtZW50UmVjdCgp
LndpZHRoKCkgOiByb290LT5kb2N1bWVudFJlY3QoKS5oZWlnaHQoKTsKICAgICAgICAgaWYgKGRv
Y0xvZ2ljYWxXaWR0aCA+IHBhZ2VMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIGZsb29yZWRQ
YWdlTG9naWNhbFdpZHRoID0gc3RkOjptaW48ZmxvYXQ+KGRvY0xvZ2ljYWxXaWR0aCwgcGFnZUxv
Z2ljYWxXaWR0aCAqIG1heGltdW1TaHJpbmtGYWN0b3IpOwogICAgICAgICAgICAgaWYgKHBhZ2VM
b2dpY2FsSGVpZ2h0KQpAQCAtMjc3MiwxNCArMjc3NCwxNCBAQCB2b2lkIEZyYW1lVmlldzo6Zm9y
Y2VMYXlvdXRGb3JQYWdpbmF0aW9uCiAgICAgICAgICAgICByb290LT5zZXRMb2dpY2FsV2lkdGgo
Zmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgICAgICBmb3JjZUxheW91dCgpOwotICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgZG9jdW1lbnRSZWN0ID0gcm9vdC0+ZG9jdW1lbnRSZWN0
KCk7Ci0gICAgICAgICAgICBpbnQgZG9jTG9naWNhbEhlaWdodCA9IGhvcml6b250YWxXcml0aW5n
TW9kZSA/IGRvY3VtZW50UmVjdC5oZWlnaHQoKSA6IGRvY3VtZW50UmVjdC53aWR0aCgpOwotICAg
ICAgICAgICAgaW50IGRvY0xvZ2ljYWxUb3AgPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBkb2N1
bWVudFJlY3QueSgpIDogZG9jdW1lbnRSZWN0LngoKTsKLSAgICAgICAgICAgIGludCBkb2NMb2dp
Y2FsUmlnaHQgPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBkb2N1bWVudFJlY3QubWF4WCgpIDog
ZG9jdW1lbnRSZWN0Lm1heFkoKTsKLSAgICAgICAgICAgIGludCBjbGlwcGVkTG9naWNhbExlZnQg
PSAwOworICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgZG9jdW1lbnRSZWN0ID0gcm9vdC0+
ZG9jdW1lbnRSZWN0KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGRvY0xvZ2ljYWxIZWlnaHQg
PSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBkb2N1bWVudFJlY3QuaGVpZ2h0KCkgOiBkb2N1bWVu
dFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgZG9jTG9naWNhbFRvcCA9IGhv
cml6b250YWxXcml0aW5nTW9kZSA/IGRvY3VtZW50UmVjdC55KCkgOiBkb2N1bWVudFJlY3QueCgp
OworICAgICAgICAgICAgTGF5b3V0VW5pdCBkb2NMb2dpY2FsUmlnaHQgPSBob3Jpem9udGFsV3Jp
dGluZ01vZGUgPyBkb2N1bWVudFJlY3QubWF4WCgpIDogZG9jdW1lbnRSZWN0Lm1heFkoKTsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgY2xpcHBlZExvZ2ljYWxMZWZ0ID0gMDsKICAgICAgICAgICAg
IGlmICghcm9vdC0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAg
ICAgICAgIGNsaXBwZWRMb2dpY2FsTGVmdCA9IGRvY0xvZ2ljYWxSaWdodCAtIGZsb29yZWRQYWdl
TG9naWNhbFdpZHRoOwotICAgICAgICAgICAgSW50UmVjdCBvdmVyZmxvdyhjbGlwcGVkTG9naWNh
bExlZnQsIGRvY0xvZ2ljYWxUb3AsIGZsb29yZWRQYWdlTG9naWNhbFdpZHRoLCBkb2NMb2dpY2Fs
SGVpZ2h0KTsKKyAgICAgICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3coY2xpcHBlZExvZ2ljYWxM
ZWZ0LCBkb2NMb2dpY2FsVG9wLCBmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0aCwgZG9jTG9naWNhbEhl
aWdodCk7CiAgICAgICAgICAgICBpZiAoIWhvcml6b250YWxXcml0aW5nTW9kZSkKICAgICAgICAg
ICAgICAgICBvdmVyZmxvdyA9IG92ZXJmbG93LnRyYW5zcG9zZWRSZWN0KCk7CiAgICAgICAgICAg
ICByb290LT5jbGVhckxheW91dE92ZXJmbG93KCk7CkBAIC0yODA5LDkgKzI4MTEsOSBAQCB2b2lk
IEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0CiAgICAgICAgICpuZXdCb3R0b20g
PSBvbGRCb3R0b207CiB9CiAKLUludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVy
KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIHJlbmRlcmVyUmVj
dCkgY29uc3QKK0xheW91dFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHJlbmRlcmVyUmVjdCkg
Y29uc3QKIHsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QocmVuZGVyZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBM
YXlvdXRSZWN0IHJlY3QgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
cmVuZGVyZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIAogICAgIC8vIENvbnZlcnQg
ZnJvbSBwYWdlICgiYWJzb2x1dGUiKSB0byBGcmFtZVZpZXcgY29vcmRpbmF0ZXMuCiAgICAgcmVj
dC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOwpAQCAtMjgxOSwzMSArMjgyMSwzMSBAQCBJbnRS
ZWN0IEZyYW1lVmlldzo6Y29udmVydEZyb21SZW5kZXJlcihjCiAgICAgcmV0dXJuIHJlY3Q7CiB9
CiAKLUludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiB2aWV3UmVjdCkgY29uc3QKK0xheW91dFJlY3Qg
RnJhbWVWaWV3Ojpjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRSZWN0JiB2aWV3UmVjdCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IHJlY3Qg
PSB2aWV3UmVjdDsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSB2aWV3UmVjdDsKICAgICAKICAgICAv
LyBDb252ZXJ0IGZyb20gRnJhbWVWaWV3IGNvb3JkcyBpbnRvIHBhZ2UgKCJhYnNvbHV0ZSIpIGNv
b3JkaW5hdGVzLgogICAgIHJlY3QubW92ZUJ5KHNjcm9sbFBvc2l0aW9uKCkpOwogCiAgICAgLy8g
RklYTUU6IHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gbWFwIGFuIGFic29sdXRlIHJlY3QgZG93biB0
byBhIGxvY2FsIHF1YWQsIHNvIGp1c3QKICAgICAvLyBtb3ZlIHRoZSByZWN0IGZvciBub3cuCi0g
ICAgcmVjdC5zZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQocmVuZGVyZXItPmFic29sdXRlVG9M
b2NhbChyZWN0LmxvY2F0aW9uKCksIGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zICovKSkp
OworICAgIHJlY3Quc2V0TG9jYXRpb24ocm91bmRlZExheW91dFBvaW50KHJlbmRlcmVyLT5hYnNv
bHV0ZVRvTG9jYWwocmVjdC5sb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSAvKiB1c2UgdHJhbnNmb3Jt
cyAqLykpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252
ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFBv
aW50JiByZW5kZXJlclBvaW50KSBjb25zdAorTGF5b3V0UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0
RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFBv
aW50JiByZW5kZXJlclBvaW50KSBjb25zdAogewotICAgIEludFBvaW50IHBvaW50ID0gcm91bmRl
ZEludFBvaW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocmVuZGVyZXJQb2ludCwgZmFsc2Us
IHRydWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKTsKKyAgICBMYXlvdXRQb2ludCBwb2ludCA9IHJv
dW5kZWRMYXlvdXRQb2ludChyZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKHJlbmRlcmVyUG9pbnQs
IGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zICovKSk7CiAKICAgICAvLyBDb252ZXJ0IGZy
b20gcGFnZSAoImFic29sdXRlIikgdG8gRnJhbWVWaWV3IGNvb3JkaW5hdGVzLgogICAgIHBvaW50
Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgcmV0dXJuIHBvaW50OwogfQogCi1JbnRQ
b2ludCBGcmFtZVZpZXc6OmNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IEludFBvaW50JiB2aWV3UG9pbnQpIGNvbnN0CitMYXlvdXRQb2ludCBGcmFt
ZVZpZXc6OmNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IExheW91dFBvaW50JiB2aWV3UG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgcG9pbnQg
PSB2aWV3UG9pbnQ7CisgICAgTGF5b3V0UG9pbnQgcG9pbnQgPSB2aWV3UG9pbnQ7CiAgICAgCiAg
ICAgLy8gQ29udmVydCBmcm9tIEZyYW1lVmlldyBjb29yZHMgaW50byBwYWdlICgiYWJzb2x1dGUi
KSBjb29yZGluYXRlcy4KICAgICBwb2ludCArPSBJbnRTaXplKHNjcm9sbFgoKSwgc2Nyb2xsWSgp
KTsKQEAgLTI4NTEsNyArMjg1Myw3IEBAIEludFBvaW50IEZyYW1lVmlldzo6Y29udmVydFRvUmVu
ZGVyZXIoY28KICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHJlbmRlcmVyLT5hYnNvbHV0ZVRv
TG9jYWwocG9pbnQsIGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zICovKSk7CiB9CiAKLUlu
dFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0CitMYXlvdXRSZWN0IEZyYW1lVmlldzo6Y29udmVydFRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmIChjb25z
dCBTY3JvbGxWaWV3KiBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50KCkpIHsKICAgICAgICAgaWYg
KHBhcmVudFNjcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkpIHsKQEAgLTI4NjEsNyArMjg2Myw3IEBA
IEludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmkKICAgICAgICAgICAgIGlm
ICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVjdDsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEludFJlY3QgcmVjdChsb2NhbFJlY3QpOworICAgICAgICAg
ICAgTGF5b3V0UmVjdCByZWN0KGxvY2FsUmVjdCk7CiAgICAgICAgICAgICAvLyBBZGQgYm9yZGVy
cyBhbmQgcGFkZGluZz8/CiAgICAgICAgICAgICByZWN0Lm1vdmUocmVuZGVyZXItPmJvcmRlckxl
ZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOwpAQCAtMjg3NCw3
ICsyODc2LDcgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaQogICAg
IHJldHVybiBsb2NhbFJlY3Q7CiB9CiAKLUludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CitMYXlvdXRSZWN0
IEZyYW1lVmlldzo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBMYXlvdXRSZWN0JiBw
YXJlbnRSZWN0KSBjb25zdAogewogICAgIGlmIChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRTY3Jv
bGxWaWV3ID0gcGFyZW50KCkpIHsKICAgICAgICAgaWYgKHBhcmVudFNjcm9sbFZpZXctPmlzRnJh
bWVWaWV3KCkpIHsKQEAgLTI4ODUsNyArMjg4Nyw3IEBAIEludFJlY3QgRnJhbWVWaWV3Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmcKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CiAKLSAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IHBh
cmVudFZpZXctPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRlcmVyLCBwYXJlbnRSZWN0KTsKKyAgICAg
ICAgICAgIExheW91dFJlY3QgcmVjdCA9IHBhcmVudFZpZXctPmNvbnZlcnRUb1JlbmRlcmVyKHJl
bmRlcmVyLCBwYXJlbnRSZWN0KTsKICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGJvcmRlcnMgYW5k
IHBhZGRpbmcKICAgICAgICAgICAgIHJlY3QubW92ZSgtcmVuZGVyZXItPmJvcmRlckxlZnQoKSAt
IHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgIC1yZW5kZXJl
ci0+Ym9yZGVyVG9wKCkgLSByZW5kZXJlci0+cGFkZGluZ1RvcCgpKTsKQEAgLTI4OTgsNyArMjkw
MCw3IEBAIEludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmcKICAgICByZXR1
cm4gcGFyZW50UmVjdDsKIH0KIAotSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKK0xheW91dFBvaW50IEZy
YW1lVmlldzo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2Fs
UG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZp
ZXcgPSBwYXJlbnQoKSkgewogICAgICAgICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZp
ZXcoKSkgewpAQCAtMjkwOSw3ICsyOTExLDcgQEAgSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0
VG9Db250YWluaW5nVgogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAg
ICByZXR1cm4gbG9jYWxQb2ludDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIEludFBv
aW50IHBvaW50KGxvY2FsUG9pbnQpOworICAgICAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnQobG9j
YWxQb2ludCk7CiAKICAgICAgICAgICAgIC8vIEFkZCBib3JkZXJzIGFuZCBwYWRkaW5nCiAgICAg
ICAgICAgICBwb2ludC5tb3ZlKHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFk
ZGluZ0xlZnQoKSwKQEAgLTI5MjMsNyArMjkyNSw3IEBAIEludFBvaW50IEZyYW1lVmlldzo6Y29u
dmVydFRvQ29udGFpbmluZ1YKICAgICByZXR1cm4gbG9jYWxQb2ludDsKIH0KIAotSW50UG9pbnQg
RnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBwYXJl
bnRQb2ludCkgY29uc3QKK0xheW91dFBvaW50IEZyYW1lVmlldzo6Y29udmVydEZyb21Db250YWlu
aW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0CiB7CiAgICAgaWYg
KGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgewogICAgICAg
ICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkgewpAQCAtMjkzNCw3ICsyOTM2
LDcgQEAgSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbgogICAgICAgICAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50UG9pbnQ7CiAK
LSAgICAgICAgICAgIEludFBvaW50IHBvaW50ID0gcGFyZW50Vmlldy0+Y29udmVydFRvUmVuZGVy
ZXIocmVuZGVyZXIsIHBhcmVudFBvaW50KTsKKyAgICAgICAgICAgIExheW91dFBvaW50IHBvaW50
ID0gcGFyZW50Vmlldy0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIsIHBhcmVudFBvaW50KTsK
ICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGJvcmRlcnMgYW5kIHBhZGRpbmcKICAgICAgICAgICAg
IHBvaW50Lm1vdmUoLXJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJlci0+cGFkZGluZ0xl
ZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJl
bmRlcmVyLT5wYWRkaW5nVG9wKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZp
c2lvbiA5MzA0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDYgQEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBj
bGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lQWN0aW9uU2NoZWR1bGVyOwotY2xhc3MgSW50UmVjdDsK
IGNsYXNzIEtVUkw7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKQEAgLTYzLDggKzYyLDggQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAg
ICAgCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOwogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CiAjZW5kaWYKQEAg
LTcyLDEwICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZS5nZXQoKTsgfQogICAgIHZvaWQgY2xlYXJGcmFtZSgpOwogCi0gICAgaW50IG1h
cmdpbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5zLndpZHRoKCk7IH0gLy8gLTEgbWVh
bnMgZGVmYXVsdAotICAgIGludCBtYXJnaW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21hcmdp
bnMuaGVpZ2h0KCk7IH0gLy8gLTEgbWVhbnMgZGVmYXVsdAotICAgIHZvaWQgc2V0TWFyZ2luV2lk
dGgoaW50KTsKLSAgICB2b2lkIHNldE1hcmdpbkhlaWdodChpbnQpOworICAgIExheW91dFVuaXQg
bWFyZ2luV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbnMud2lkdGgoKTsgfSAvLyAtMSBt
ZWFucyBkZWZhdWx0CisgICAgTGF5b3V0VW5pdCBtYXJnaW5IZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX21hcmdpbnMuaGVpZ2h0KCk7IH0gLy8gLTEgbWVhbnMgZGVmYXVsdAorICAgIHZvaWQgc2V0
TWFyZ2luV2lkdGgoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRNYXJnaW5IZWlnaHQoTGF5b3V0
VW5pdCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FuSGF2ZVNjcm9sbGJhcnMoYm9vbCk7CiAg
ICAgdm9pZCB1cGRhdGVDYW5IYXZlU2Nyb2xsYmFycygpOwpAQCAtODYsNyArODUsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFy
Kik7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciopOwogCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBMYXlvdXRTaXplJik7
CiAKICAgICB2b2lkIGxheW91dChib29sIGFsbG93U3VidHJlZSA9IHRydWUpOwogICAgIGJvb2wg
ZGlkRmlyc3RMYXlvdXQoKSBjb25zdDsKQEAgLTE1OCwxMiArMTU3LDEyIEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYWRqdXN0Vmlld1NpemUoKTsKICAgICAKLSAgICB2aXJ0dWFsIEludFJlY3Qgd2lu
ZG93Q2xpcFJlY3QoYm9vbCBjbGlwVG9Db250ZW50cyA9IHRydWUpIGNvbnN0OwotICAgIEludFJl
Y3Qgd2luZG93Q2xpcFJlY3RGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciosIGJvb2wgY2xpcFRv
TGF5ZXJDb250ZW50cykgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHdpbmRvd0NsaXBS
ZWN0KGJvb2wgY2xpcFRvQ29udGVudHMgPSB0cnVlKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IHdp
bmRvd0NsaXBSZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqLCBib29sIGNsaXBUb0xheWVy
Q29udGVudHMpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29u
c3Q7CiAKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CisgICAg
dm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZvaWQgc2Ny
b2xsUG9zaXRpb25DaGFuZ2VkVmlhUGxhdGZvcm1XaWRnZXQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludEZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZygpOwogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBjb25zdDsKQEAgLTE4
Niw5ICsxODUsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBGdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIHRo
ZSBjdXJyZW50IHNjcm9sbGVkIHBvc2l0aW9uLCBuZWdhdGluZyB0aGUgZWZmZWN0cyBvZiBvdmVy
aGFuZwogICAgIC8vIGFuZCBhZGp1c3RpbmcgZm9yIHBhZ2Ugc2NhbGUuCi0gICAgaW50IHNjcm9s
bFhGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgaW50IHNjcm9sbFlGb3JGaXhlZFBvc2l0
aW9uKCkgY29uc3Q7Ci0gICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkg
Y29uc3Q7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgc2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSBjb25zdDsKKyAgICBMYXlv
dXRTaXplIHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQg
YmVnaW5EZWZlcnJlZFJlcGFpbnRzKCk7CiAgICAgdm9pZCBlbmREZWZlcnJlZFJlcGFpbnRzKCk7
CkBAIC0yMTMsMTUgKzIxMiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRXaWRnZXRUb1VwZGF0
ZShSZW5kZXJFbWJlZGRlZE9iamVjdCopOwogICAgIHZvaWQgcmVtb3ZlV2lkZ2V0VG9VcGRhdGUo
UmVuZGVyRW1iZWRkZWRPYmplY3QqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QpOwogICAgIHZvaWQgc2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yKTsK
ICAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IoKSBjb25zdDsKICAgICBib29sIGlzUGFp
bnRpbmcoKSBjb25zdDsKICAgICBib29sIGhhc0V2ZXJQYWludGVkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0UGFpbnRUaW1lOyB9CiAgICAgdm9pZCBzZXROb2RlVG9EcmF3KE5vZGUqKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgdmVydGljYWxP
dmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGNvcm5l
clJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgTGF5
b3V0UmVjdCYgdmVydGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IExheW91dFJlY3QmIGNvcm5lclJlY3QpOwogCiAgICAgQ29sb3IgZG9jdW1lbnRCYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdDsKIApAQCAtMjYxLDEwICsyNjAsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgbWFpbnRhaW5TY3JvbGxQb3NpdGlvbkF0QW5jaG9yKE5vZGUqKTsKIAogICAgIC8vIE1l
dGhvZHMgdG8gY29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIGNvb3JkaW5hdGUg
c3BhY2Ugb2YgdGhlIHJlbmRlcmVyLCBhbmQgdGhpcyB2aWV3LgotICAgIHZpcnR1YWwgSW50UmVj
dCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQg
Y29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJl
Y3QgY29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRS
ZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnZlcnRUb1JlbmRlcmVyKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFBvaW50IGNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29u
c3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50IGNvbnZlcnRU
b1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7
CiAKICAgICBib29sIGlzRnJhbWVWaWV3U2Nyb2xsQ29ybmVyKFJlbmRlclNjcm9sbGJhclBhcnQq
IHNjcm9sbENvcm5lcikgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3JuZXIgPT0gc2Nyb2xsQ29y
bmVyOyB9CiAKQEAgLTI3OSw3ICsyNzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gT24gZWFjaCByZXBh
aW50IHRoZSBkZWxheSBpbmNyZXNlcyBieSB0aGlzIGFtb3VudAogICAgIHN0YXRpYyB2b2lkIHNl
dFJlcGFpbnRUaHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2Fk
aW5nKGRvdWJsZSBwKTsKIAotICAgIHZpcnR1YWwgSW50UG9pbnQgY3VycmVudE1vdXNlUG9zaXRp
b24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9u
KCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9kIG9uY2UgcGx1Z2lu
IGxvYWRpbmcgaXMgZGVjb3VwbGVkIGZyb20gbGF5b3V0LgogICAgIHZvaWQgZmx1c2hBbnlQZW5k
aW5nUG9zdExheW91dFRhc2tzKCk7CkBAIC0yOTEsOCArMjkwLDggQEAgcHVibGljOgogICAgIFJl
bmRlckJveCogZW1iZWRkZWRDb250ZW50Qm94KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCk7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFzdFBhdGgo
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IExheW91dFJlY3QmIHJlY3RUb1Njcm9s
bCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxD
b250ZW50c1Nsb3dQYXRoKGNvbnN0IExheW91dFJlY3QmIHVwZGF0ZVJlY3QpOwogCiAgICAgdmly
dHVhbCBib29sIGlzVmVydGljYWxEb2N1bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0ZsaXBwZWREb2N1bWVudCgpIGNvbnN0OwpAQCAtMzIwLDI3ICszMTksMjcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGZvcmNlTGF5b3V0UGFyZW50Vmlld0lmTmVlZGVkKCk7CiAgICAgdm9pZCBwZXJm
b3JtUG9zdExheW91dFRhc2tzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVwYWludENvbnRlbnRS
ZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYsIGJvb2wgaW1tZWRp
YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCk7CiAgICAgdmlydHVhbCB2
b2lkIHZpc2libGVDb250ZW50c1Jlc2l6ZWQoKTsKIAogICAgIC8vIE92ZXJyaWRlIFNjcm9sbFZp
ZXcgbWV0aG9kcyB0byBkbyBwb2ludCBjb252ZXJzaW9uIHZpYSByZW5kZXJlcnMsIGluIG9yZGVy
IHRvCiAgICAgLy8gdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KLSAgICB2aXJ0dWFsIElu
dFJlY3QgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAg
IHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBMYXlv
dXRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9p
bnQgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Owog
CiAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHNjcm9sbFRvKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21h
cmtzKFZlY3RvcjxMYXlvdXRSZWN0PiYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxU
byhjb25zdCBMYXlvdXRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UnViYmVyQmFu
ZChjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnVi
YmVyQmFuZChjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0
QW5pbWF0ZWRTY3JvbGwoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVBbmlt
YXRlZFNjcm9sbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJU
aHVtYlJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlU2Ny
b2xsZXJUaHVtYlJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc09u
QWN0aXZlUGFnZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAKQEAgLTM3Niw4ICszNzUsOCBAQCBwcml2YXRlOgog
ICAgIAogICAgIHN0YXRpYyBkb3VibGUgc0N1cnJlbnRQYWludFRpbWVTdGFtcDsgLy8gdXNlZCBm
b3IgZGV0ZWN0aW5nIGRlY29kZWQgcmVzb3VyY2UgdGhyYXNoIGluIHRoZSBjYWNoZQogCi0gICAg
SW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX21hcmdpbnM7CisgICAgTGF5b3V0U2l6ZSBt
X3NpemU7CisgICAgTGF5b3V0U2l6ZSBtX21hcmdpbnM7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNo
U2V0PFJlbmRlckVtYmVkZGVkT2JqZWN0Kj4gUmVuZGVyRW1iZWRkZWRPYmplY3RTZXQ7CiAgICAg
T3duUHRyPFJlbmRlckVtYmVkZGVkT2JqZWN0U2V0PiBtX3dpZGdldFVwZGF0ZVNldDsKQEAgLTQx
MSw3ICs0MTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9maXJzdExheW91dDsKICAgICBib29s
IG1faXNUcmFuc3BhcmVudDsKICAgICBDb2xvciBtX2Jhc2VCYWNrZ3JvdW5kQ29sb3I7Ci0gICAg
SW50U2l6ZSBtX2xhc3RMYXlvdXRTaXplOworICAgIExheW91dFNpemUgbV9sYXN0TGF5b3V0U2l6
ZTsKICAgICBmbG9hdCBtX2xhc3Rab29tRmFjdG9yOwogCiAgICAgU3RyaW5nIG1fbWVkaWFUeXBl
OwpAQCAtNDI5LDcgKzQyOCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdW5zaWduZWQgbV9kZWZl
cnJpbmdSZXBhaW50czsKICAgICB1bnNpZ25lZCBtX3JlcGFpbnRDb3VudDsKLSAgICBWZWN0b3I8
SW50UmVjdD4gbV9yZXBhaW50UmVjdHM7CisgICAgVmVjdG9yPExheW91dFJlY3Q+IG1fcmVwYWlu
dFJlY3RzOwogICAgIFRpbWVyPEZyYW1lVmlldz4gbV9kZWZlcnJlZFJlcGFpbnRUaW1lcjsKICAg
ICBkb3VibGUgbV9kZWZlcnJlZFJlcGFpbnREZWxheTsKICAgICBkb3VibGUgbV9sYXN0UGFpbnRU
aW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDkzMDQ3
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMwMyw3ICszMDMsNyBAQCBOU0ltYWdlKiBGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UoTm9k
ZSogCiAgICAgcmVuZGVyZXItPnVwZGF0ZURyYWdTdGF0ZSh0cnVlKTsgICAgLy8gbWFyayBkcmFn
Z2VkIG5vZGVzIChzbyB0aGV5IHBpY2sgdXAgdGhlIHJpZ2h0IENTUykKICAgICBtX2RvYy0+dXBk
YXRlTGF5b3V0KCk7ICAgICAgICAvLyBmb3JjZXMgc3R5bGUgcmVjYWxjIC0gbmVlZGVkIHNpbmNl
IGNoYW5naW5nIHRoZSBkcmFnIHN0YXRlIG1pZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW1wbHkgbmV3IHN0eWxlcywgcGx1cyBKUyBjb3VsZCBoYXZlIGNo
YW5nZWQgb3RoZXIgdGhpbmdzCi0gICAgSW50UmVjdCB0b3BMZXZlbFJlY3Q7CisgICAgTGF5b3V0
UmVjdCB0b3BMZXZlbFJlY3Q7CiAgICAgTlNSZWN0IHBhaW50aW5nUmVjdCA9IHJlbmRlcmVyLT5w
YWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCk7CiAKICAgICBtX3ZpZXctPnNldE5vZGVUb0Ry
YXcobm9kZSk7ICAgICAgICAgICAgICAvLyBpbnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5n
IG1vZGUKQEAgLTMyNyw3ICszMjcsNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFnZShO
b2RlKiBub2RlCiAKICAgICBtX2RvYy0+dXBkYXRlTGF5b3V0KCk7IC8vIGZvcmNlcyBzdHlsZSBy
ZWNhbGMKIAotICAgIEludFJlY3QgdG9wTGV2ZWxSZWN0OworICAgIExheW91dFJlY3QgdG9wTGV2
ZWxSZWN0OwogICAgIE5TUmVjdCBwYWludGluZ1JlY3QgPSByZW5kZXJlci0+cGFpbnRpbmdSb290
UmVjdCh0b3BMZXZlbFJlY3QpOwogCiAgICAgbV92aWV3LT5zZXROb2RlVG9EcmF3KG5vZGUpOyAv
LyBpbnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5nIG1vZGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103976</attachid>
            <date>2011-08-15 16:30:18 -0700</date>
            <delta_ts>2011-08-15 16:42:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>66147.patch</filename>
            <type>text/plain</type>
            <size>41421</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMDU4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDgtMTUgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBGcmFtZVZpZXcgdG8g
dG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb252ZXJ0IEZyYW1lICYgRnJhbWVWaWV3IHRvIG5ldyBsYXlvdXQgYWJzdHJh
Y3Rpb24gYXMgYSBwYXJ0IG9mIHRoZQorICAgICAgICBvbmdvaW5nIGNvbnZlcnNpb24gd29yay4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6dmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRvY3VtZW50QXRQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6c2NhbGVQYWdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlk
YXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEZyYW1lUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldE1hcmdpbldpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6c2V0TWFyZ2luSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
YWRqdXN0Vmlld1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxYRm9y
Rml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFlGb3JG
aXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0
Rm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmN1cnJlbnRN
b3VzZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVu
dHNGYXN0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRz
U2xvd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmdldFRpY2tt
YXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6cGFpbnRPdmVyaGFuZ0FyZWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6Y29udmVydEZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OmNvbnZlcnRUb1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29u
dmVydFRvQ29udGFpbmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjptYXJnaW5XaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6Om1hcmdpbkhlaWdodCk6CisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6Om5vZGVJbWFnZSk6CisKIDIwMTEtMDgtMTUgIEFkYW0gUm9iZW4g
IDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBwYWdlcycgc3R5bGUgYW5kIGNv
bnRlbnQgc2NhbGUgd2hlbiB0aGUgd2luZG93J3MgYmFja2luZyBzY2FsZSBmYWN0b3IgY2hhbmdl
cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDkzMDQ3KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw3ICs4MzYsNyBAQCBT
dHJpbmcgRnJhbWU6OmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jCiAgICAgcmV0dXJuIGRvY3Vt
ZW50KCkgPyBkb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHN0cikg
OiBzdHI7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBGcmFtZTo6dmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCitWaXNpYmxlUG9zaXRpb24gRnJhbWU6OnZp
c2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBmcmFtZVBvaW50KQogewog
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRB
dFBvaW50KGZyYW1lUG9pbnQsIHRydWUpOwogICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCk7CkBAIC04NTEsMTIgKzg1MSwxMiBAQCBWaXNpYmxlUG9zaXRpb24gRnJh
bWU6OnZpc2libGVQb3NpdGlvbkZvCiAgICAgcmV0dXJuIHZpc2libGVQb3M7CiB9CiAKLURvY3Vt
ZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKK0RvY3Vt
ZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsK
ICAgICBpZiAoIXZpZXcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJbnRQb2ludCBwdCA9
IHZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCk7CisgICAgTGF5b3V0UG9pbnQgcHQgPSB2
aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
ID0gSGl0VGVzdFJlc3VsdChwdCk7CiAKICAgICBpZiAoY29udGVudFJlbmRlcmVyKCkpCkBAIC04
NjQsNyArODY0LDcgQEAgRG9jdW1lbnQqIEZyYW1lOjpkb2N1bWVudEF0UG9pbnQoY29uc3QgSQog
ICAgIHJldHVybiByZXN1bHQuaW5uZXJOb2RlKCkgPyByZXN1bHQuaW5uZXJOb2RlKCktPmRvY3Vt
ZW50KCkgOiAwOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBGcmFtZTo6cmFuZ2VGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKK1Bhc3NSZWZQdHI8UmFuZ2U+IEZyYW1lOjpyYW5n
ZUZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBmcmFtZVBvaW50KQogewogICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwog
ICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKQEAgLTg3MywxNCArODczLDE0IEBAIFBhc3NSZWZQ
dHI8UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGMKICAgICBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygpOwogICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwo
KSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtl
UmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gZWRpdG9y
KCktPmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAg
ICAgICBMYXlvdXRSZWN0IHJlY3QgPSBlZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlv
dXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CiAgICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZyYW1l
UG9pbnQpKQogICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UucmVsZWFz
ZSgpOwogICAgIH0KIAogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgp
OwogICAgIGlmIChSZWZQdHI8UmFuZ2U+IG5leHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShw
b3NpdGlvbiwgbmV4dCkpIHsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gZWRpdG9yKCktPmZpcnN0
UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgICAgIExheW91dFJl
Y3QgcmVjdCA9IGVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2Uu
Z2V0KCkpOwogICAgICAgICBpZiAocmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKICAgICAgICAg
ICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgpOwogICAgIH0KQEAgLTEwNDMs
NyArMTA0Myw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmwKICAg
ICBpZiAobV9wYWdlWm9vbUZhY3RvciAhPSBwYWdlWm9vbUZhY3RvcikgewogICAgICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpKSB7CiAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIHNjcm9sbCBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZnVsbCBwYWdlIHpvb20sIHNvIHRoZSBj
b250ZW50IHN0YXlzIGluIHJlbGF0aXZlbHkgdGhlIHNhbWUgcG9zaXRpb24uCi0gICAgICAgICAg
ICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHZpZXctPnNjcm9sbFBvc2l0aW9uKCk7CisgICAg
ICAgICAgICBMYXlvdXRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHZpZXctPnNjcm9sbFBvc2l0aW9u
KCk7CiAgICAgICAgICAgICBmbG9hdCBwZXJjZW50RGlmZmVyZW5jZSA9IChwYWdlWm9vbUZhY3Rv
ciAvIG1fcGFnZVpvb21GYWN0b3IpOwogICAgICAgICAgICAgdmlldy0+c2V0U2Nyb2xsUG9zaXRp
b24oSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24ueCgpICogcGVyY2VudERpZmZlcmVuY2UsIHNjcm9s
bFBvc2l0aW9uLnkoKSAqIHBlcmNlbnREaWZmZXJlbmNlKSk7CiAgICAgICAgIH0KQEAgLTEwNzUs
NyArMTA3NSw3IEBAIHZvaWQgRnJhbWU6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmcKIH0K
ICNlbmRpZgogCi12b2lkIEZyYW1lOjpzY2FsZVBhZ2UoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBv
aW50JiBvcmlnaW4pCit2b2lkIEZyYW1lOjpzY2FsZVBhZ2UoZmxvYXQgc2NhbGUsIGNvbnN0IExh
eW91dFBvaW50JiBvcmlnaW4pCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9j
dW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNp
b24gOTMwNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2NCw3ICsxNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZsb2F0IHRl
eHRab29tRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Wm9vbUZhY3RvcjsgfQogICAgICAg
ICB2b2lkIHNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZs
b2F0IHRleHRab29tRmFjdG9yKTsKIAotICAgICAgICB2b2lkIHNjYWxlUGFnZShmbG9hdCBzY2Fs
ZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbik7CisgICAgICAgIHZvaWQgc2NhbGVQYWdlKGZsb2F0
IHNjYWxlLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luKTsKICAgICAgICAgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7IH0KIAogI2lmIEVO
QUJMRShPUklFTlRBVElPTl9FVkVOVFMpCkBAIC0xODUsOSArMTg1LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBEcmFnSW1hZ2VSZWYgbm9kZUltYWdlKE5vZGUqKTsKICAgICAgICAg
RHJhZ0ltYWdlUmVmIGRyYWdJbWFnZUZvclNlbGVjdGlvbigpOwogCi0gICAgICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2lu
dCk7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdp
bmRvd1BvaW50KTsKLSAgICAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25z
dCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudEF0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHdpbmRvd1BvaW50
KTsKKyAgICAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYgZnJhbWVQb2ludCk7CiAKICAgICAgICAgU3RyaW5nIHNlYXJjaEZvckxhYmVsc0Fib3Zl
Q2VsbChSZWd1bGFyRXhwcmVzc2lvbiosIEhUTUxUYWJsZUNlbGxFbGVtZW50Kiwgc2l6ZV90KiBy
ZXN1bHREaXN0YW5jZUZyb21TdGFydE9mQ2VsbCk7CiAgICAgICAgIFN0cmluZyBzZWFyY2hGb3JM
YWJlbHNCZWZvcmVFbGVtZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQq
LCBzaXplX3QqIHJlc3VsdERpc3RhbmNlLCBib29sKiByZXN1bHRJc0luQ2VsbEFib3ZlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDkzMDQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4
LDcgQEAgUGFzc1JlZlB0cjxGcmFtZVZpZXc+IEZyYW1lVmlldzo6Y3JlYXRlKAogUGFzc1JlZlB0
cjxGcmFtZVZpZXc+IEZyYW1lVmlldzo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50U2l6
ZSYgaW5pdGlhbFNpemUpCiB7CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGFkb3B0UmVm
KG5ldyBGcmFtZVZpZXcoZnJhbWUpKTsKLSAgICB2aWV3LT5XaWRnZXQ6OnNldEZyYW1lUmVjdChJ
bnRSZWN0KHZpZXctPmxvY2F0aW9uKCksIGluaXRpYWxTaXplKSk7CisgICAgdmlldy0+V2lkZ2V0
OjpzZXRGcmFtZVJlY3QoTGF5b3V0UmVjdCh2aWV3LT5sb2NhdGlvbigpLCBpbml0aWFsU2l6ZSkp
OwogICAgIHZpZXctPnNldEluaXRpYWxCb3VuZHNTaXplKGluaXRpYWxTaXplKTsKICAgICB2aWV3
LT5zaG93KCk7CiAgICAgcmV0dXJuIHZpZXcucmVsZWFzZSgpOwpAQCAtMjE4LDcgKzIxOCw3IEBA
IHZvaWQgRnJhbWVWaWV3OjpyZXNldCgpCiAgICAgbV9maXJzdExheW91dCA9IHRydWU7CiAgICAg
bV9maXJzdExheW91dENhbGxiYWNrUGVuZGluZyA9IGZhbHNlOwogICAgIG1fd2FzU2Nyb2xsZWRC
eVVzZXIgPSBmYWxzZTsKLSAgICBtX2xhc3RMYXlvdXRTaXplID0gSW50U2l6ZSgpOworICAgIG1f
bGFzdExheW91dFNpemUgPSBMYXlvdXRTaXplKCk7CiAgICAgbV9sYXN0Wm9vbUZhY3RvciA9IDEu
MGY7CiAgICAgbV9kZWZlcnJpbmdSZXBhaW50cyA9IDA7CiAgICAgbV9yZXBhaW50Q291bnQgPSAw
OwpAQCAtMjcwLDggKzI3MCw4IEBAIHZvaWQgRnJhbWVWaWV3Ojppbml0KCkKIHsKICAgICByZXNl
dCgpOwogCi0gICAgbV9tYXJnaW5zID0gSW50U2l6ZSgtMSwgLTEpOyAvLyB1bmRlZmluZWQKLSAg
ICBtX3NpemUgPSBJbnRTaXplKCk7CisgICAgbV9tYXJnaW5zID0gTGF5b3V0U2l6ZSgtMSwgLTEp
OyAvLyB1bmRlZmluZWQKKyAgICBtX3NpemUgPSBMYXlvdXRTaXplKCk7CiAKICAgICAvLyBQcm9w
YWdhdGUgdGhlIG1hcmdpbndpZHRoL2hlaWdodCBhbmQgc2Nyb2xsaW5nIG1vZGVzIHRvIHRoZSB2
aWV3LgogICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fZnJhbWUgPyBtX2ZyYW1lLT5vd25l
ckVsZW1lbnQoKSA6IDA7CkBAIC0yNzksOCArMjc5LDEwIEBAIHZvaWQgRnJhbWVWaWV3Ojppbml0
KCkKICAgICAgICAgSFRNTEZyYW1lRWxlbWVudCogZnJhbWVFbHQgPSBzdGF0aWNfY2FzdDxIVE1M
RnJhbWVFbGVtZW50Kj4ob3duZXJFbGVtZW50KTsKICAgICAgICAgaWYgKGZyYW1lRWx0LT5zY3Jv
bGxpbmdNb2RlKCkgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQogICAgICAgICAgICAgc2V0Q2FuSGF2
ZVNjcm9sbGJhcnMoZmFsc2UpOwotICAgICAgICBpbnQgbWFyZ2luV2lkdGggPSBmcmFtZUVsdC0+
bWFyZ2luV2lkdGgoKTsKLSAgICAgICAgaW50IG1hcmdpbkhlaWdodCA9IGZyYW1lRWx0LT5tYXJn
aW5IZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5XaWR0aCA9IGZyYW1lRWx0LT5t
YXJnaW5XaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkhlaWdodCA9IGZyYW1lRWx0
LT5tYXJnaW5IZWlnaHQoKTsKKyAgICAgICAgLy8gRklYTUU6IENoYW5nZSB0byByb3VnaGx5RXF1
YWxzIG9yID49IDAgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0cy4gCisgICAgICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICAgICAgaWYgKG1h
cmdpbldpZHRoICE9IC0xKQogICAgICAgICAgICAgc2V0TWFyZ2luV2lkdGgobWFyZ2luV2lkdGgp
OwogICAgICAgICBpZiAobWFyZ2luSGVpZ2h0ICE9IC0xKQpAQCAtMzYxLDcgKzM2Myw3IEBAIGJv
b2wgRnJhbWVWaWV3OjpkaWRGaXJzdExheW91dCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2ZpcnN0
TGF5b3V0OwogfQogCi12b2lkIEZyYW1lVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKK3ZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBMYXlvdXRSZWN0
JiByZWN0KQogewogICAgIGlmICghcGFyZW50KCkpIHsKICAgICAgICAgaWYgKGhvc3RXaW5kb3co
KSkKQEAgLTM3NiwxNSArMzc4LDE1IEBAIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnQKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRS
ZWN0IHJlcGFpbnRSZWN0ID0gcmVjdDsKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVj
dDsKICAgICByZXBhaW50UmVjdC5tb3ZlKHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJl
ci0+cGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5ib3JkZXJU
b3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOwogICAgIHJlbmRlcmVyLT5yZXBhaW50UmVj
dGFuZ2xlKHJlcGFpbnRSZWN0KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0JiBuZXdSZWN0KQordm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25z
dCBMYXlvdXRSZWN0JiBuZXdSZWN0KQogewotICAgIEludFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVj
dCgpOworICAgIExheW91dFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIGlmIChuZXdS
ZWN0ID09IG9sZFJlY3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDA2LDEzICs0MDgsMTMgQEAg
dm9pZCBGcmFtZVZpZXc6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIH0KICNlbmRpZgogCi12b2lkIEZy
YW1lVmlldzo6c2V0TWFyZ2luV2lkdGgoaW50IHcpCit2b2lkIEZyYW1lVmlldzo6c2V0TWFyZ2lu
V2lkdGgoTGF5b3V0VW5pdCB3KQogewogICAgIC8vIG1ha2UgaXQgdXBkYXRlIHRoZSByZW5kZXJp
bmcgYXJlYSB3aGVuIHNldAogICAgIG1fbWFyZ2lucy5zZXRXaWR0aCh3KTsKIH0KIAotdm9pZCBG
cmFtZVZpZXc6OnNldE1hcmdpbkhlaWdodChpbnQgaCkKK3ZvaWQgRnJhbWVWaWV3OjpzZXRNYXJn
aW5IZWlnaHQoTGF5b3V0VW5pdCBoKQogewogICAgIC8vIG1ha2UgaXQgdXBkYXRlIHRoZSByZW5k
ZXJpbmcgYXJlYSB3aGVuIHNldAogICAgIG1fbWFyZ2lucy5zZXRIZWlnaHQoaCk7CkBAIC00NzYs
NyArNDc4LDcgQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAg
IHJldHVybiBTY3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwogfQogCi12
b2lkIEZyYW1lVmlldzo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lk
IEZyYW1lVmlldzo6c2V0Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCiB7CiAg
ICAgaWYgKHNpemUgPT0gY29udGVudHNTaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUwNSw5
ICs1MDcsOSBAQCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0Vmlld1NpemUoKQogICAgIGlmICghcm9v
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCA9IHJvb3QtPmRv
Y3VtZW50UmVjdCgpOwotICAgIGNvbnN0IEludFNpemUmIHNpemUgPSByZWN0LnNpemUoKTsKLSAg
ICBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXJlY3QueCgpLCAtcmVjdC55
KCkpLCAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSwgc2l6ZSA9PSBjb250ZW50c1Np
emUoKSk7CisgICAgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCA9IHJvb3QtPmRvY3VtZW50UmVjdCgp
OworICAgIGNvbnN0IExheW91dFNpemUmIHNpemUgPSByZWN0LnNpemUoKTsKKyAgICBTY3JvbGxW
aWV3OjpzZXRTY3JvbGxPcmlnaW4oTGF5b3V0UG9pbnQoLXJlY3QueCgpLCAtcmVjdC55KCkpLCAh
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSwgc2l6ZSA9PSBjb250ZW50c1NpemUoKSk7
CiAgICAgCiAgICAgc2V0Q29udGVudHNTaXplKHNpemUpOwogfQpAQCAtMTI4MiwxNSArMTI4NCwx
NSBAQCB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlRml4ZWRPYmplY3QoKQogICAgICAgICB1cGRhdGVD
YW5CbGl0T25TY3JvbGxSZWN1cnNpdmVseSgpOwogfQogCi1pbnQgRnJhbWVWaWV3OjpzY3JvbGxY
Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CitMYXlvdXRVbml0IEZyYW1lVmlldzo6c2Nyb2xsWEZv
ckZpeGVkUG9zaXRpb24oKSBjb25zdAogewotICAgIGludCB2aXNpYmxlQ29udGVudFdpZHRoID0g
dmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgoKTsKLSAgICBpbnQgbWF4WCA9IGNvbnRlbnRzV2lk
dGgoKSAtIHZpc2libGVDb250ZW50V2lkdGg7CisgICAgTGF5b3V0VW5pdCB2aXNpYmxlQ29udGVu
dFdpZHRoID0gdmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IG1h
eFggPSBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlQ29udGVudFdpZHRoOwogCiAgICAgaWYgKG1h
eFggPT0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgeCA9IHNjcm9sbFgoKTsKKyAg
ICBMYXlvdXRVbml0IHggPSBzY3JvbGxYKCk7CiAKICAgICBpZiAoIVNjcm9sbFZpZXc6OnNjcm9s
bE9yaWdpbigpLngoKSkgewogICAgICAgICBpZiAoeCA8IDApCkBAIC0xMzE3LDE1ICsxMzE5LDE1
IEBAIGludCBGcmFtZVZpZXc6OnNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkKICAgICByZXR1cm4g
eCAqIGRyYWdGYWN0b3IgLyBwYWdlU2NhbGVGYWN0b3I7CiB9CiAKLWludCBGcmFtZVZpZXc6OnNj
cm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QKK0xheW91dFVuaXQgRnJhbWVWaWV3OjpzY3Jv
bGxZRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaW50IHZpc2libGVDb250ZW50SGVp
Z2h0ID0gdmlzaWJsZUNvbnRlbnRSZWN0KCkuaGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCB2aXNp
YmxlQ29udGVudEhlaWdodCA9IHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOwogCi0gICAg
aW50IG1heFkgPSBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRIZWlnaHQ7CisgICAg
TGF5b3V0VW5pdCBtYXhZID0gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVDb250ZW50SGVpZ2h0
OwogICAgIGlmIChtYXhZID09IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IHkgPSBz
Y3JvbGxZKCk7CisgICAgTGF5b3V0VW5pdCB5ID0gc2Nyb2xsWSgpOwogCiAgICAgaWYgKCFTY3Jv
bGxWaWV3OjpzY3JvbGxPcmlnaW4oKS55KCkpIHsKICAgICAgICAgaWYgKHkgPCAwKQpAQCAtMTM0
OCwxNyArMTM1MCwxNyBAQCBpbnQgRnJhbWVWaWV3OjpzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigp
CiAgICAgcmV0dXJuIHkgKiBkcmFnRmFjdG9yIC8gcGFnZVNjYWxlRmFjdG9yOwogfQogCi1JbnRT
aXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CitMYXlv
dXRTaXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsWEZvckZpeGVkUG9zaXRpb24oKSwgc2Nyb2xsWUZv
ckZpeGVkUG9zaXRpb24oKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoc2Nyb2xsWEZvckZpeGVk
UG9zaXRpb24oKSwgc2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSk7CiB9CiAKLUludFBvaW50IEZy
YW1lVmlldzo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAorTGF5b3V0UG9pbnQgRnJhbWVW
aWV3OjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZnJhbWUg
PyBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKSA6IEludFBv
aW50KCk7CiB9CiAKLWJvb2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KQorYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBh
dGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IExheW91dFJlY3QmIHJlY3RUb1Nj
cm9sbCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgY29uc3Qgc2l6ZV90IGZp
eGVkT2JqZWN0VGhyZXNob2xkID0gNTsKIApAQCAtMTM3NCwxNCArMTM3NiwxNCBAQCBib29sIEZy
YW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjCiAgICAgY29uc3QgYm9vbCBpc0NvbXBv
c2l0ZWRDb250ZW50TGF5ZXIgPSBjb250ZW50c0luQ29tcG9zaXRlZExheWVyKCk7CiAKICAgICAv
LyBHZXQgdGhlIHJlY3RzIG9mIHRoZSBmaXhlZCBvYmplY3RzIHZpc2libGUgaW4gdGhlIHJlY3RU
b1Njcm9sbAotICAgIFZlY3RvcjxJbnRSZWN0LCBmaXhlZE9iamVjdFRocmVzaG9sZD4gc3ViUmVj
dFRvVXBkYXRlOworICAgIFZlY3RvcjxMYXlvdXRSZWN0LCBmaXhlZE9iamVjdFRocmVzaG9sZD4g
c3ViUmVjdFRvVXBkYXRlOwogICAgIGJvb2wgdXBkYXRlSW52YWxpZGF0ZWRTdWJSZWN0ID0gdHJ1
ZTsKICAgICBSZW5kZXJCbG9jazo6UG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwogICAgIGZvciAoUmVuZGVy
QmxvY2s6OlBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBS
ZW5kZXJCb3gqIHJlbmRlckJveCA9ICppdDsKICAgICAgICAgaWYgKHJlbmRlckJveC0+c3R5bGUo
KS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IHJlbmRlckJveC0+bGF5ZXIoKS0+cmVwYWludFJl
Y3RJbmNsdWRpbmdEZXNjZW5kYW50cygpOworICAgICAgICBMYXlvdXRSZWN0IHVwZGF0ZVJlY3Qg
PSByZW5kZXJCb3gtPmxheWVyKCktPnJlcGFpbnRSZWN0SW5jbHVkaW5nRGVzY2VuZGFudHMoKTsK
ICAgICAgICAgdXBkYXRlUmVjdCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdCk7CiAgICAg
ICAgIGlmICghaXNDb21wb3NpdGVkQ29udGVudExheWVyICYmIGNsaXBzUmVwYWludHMoKSkKICAg
ICAgICAgICAgIHVwZGF0ZVJlY3QuaW50ZXJzZWN0KHJlY3RUb1Njcm9sbCk7CkBAIC0xNDAyLDgg
KzE0MDQsOCBAQCBib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjCiAgICAg
ICAgIC8vIDIpIHVwZGF0ZSB0aGUgYXJlYSBvZiBmaXhlZCBvYmplY3RzIHRoYXQgaGFzIGJlZW4g
aW52YWxpZGF0ZWQKICAgICAgICAgc2l6ZV90IGZpeE9iamVjdHNDb3VudCA9IHN1YlJlY3RUb1Vw
ZGF0ZS5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZml4T2JqZWN0c0Nv
dW50OyArK2kpIHsKLSAgICAgICAgICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IHN1YlJlY3RUb1Vw
ZGF0ZVtpXTsKLSAgICAgICAgICAgIEludFJlY3Qgc2Nyb2xsZWRSZWN0ID0gdXBkYXRlUmVjdDsK
KyAgICAgICAgICAgIExheW91dFJlY3QgdXBkYXRlUmVjdCA9IHN1YlJlY3RUb1VwZGF0ZVtpXTsK
KyAgICAgICAgICAgIExheW91dFJlY3Qgc2Nyb2xsZWRSZWN0ID0gdXBkYXRlUmVjdDsKICAgICAg
ICAgICAgIHNjcm9sbGVkUmVjdC5tb3ZlKHNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHVwZGF0
ZVJlY3QudW5pdGUoc2Nyb2xsZWRSZWN0KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkBAIC0xNDI2LDcgKzE0MjgsNyBAQCBib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNG
YXN0UGF0aChjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lVmlldzo6c2Nyb2xs
Q29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQordm9pZCBGcmFtZVZp
ZXc6OnNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgTGF5b3V0UmVjdCYgdXBkYXRlUmVjdCkK
IHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKGNvbnRlbnRzSW5D
b21wb3NpdGVkTGF5ZXIoKSkgewpAQCAtMTQzNiw5ICsxNDM4LDkgQEAgdm9pZCBGcmFtZVZpZXc6
OnNjcm9sbENvbnRlbnRzU2xvd1BhdGgoYwogICAgIH0KICAgICBpZiAoUmVuZGVyUGFydCogZnJh
bWVSZW5kZXJlciA9IG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoZnJh
bWVSZW5kZXJlci0+Y29udGFpbmVyRm9yUmVwYWludCgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0
IHJlY3QoZnJhbWVSZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgZnJhbWVSZW5kZXJlci0+cGFkZGlu
Z0xlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVJlbmRlcmVyLT5ib3JkZXJU
b3AoKSArIGZyYW1lUmVuZGVyZXItPnBhZGRpbmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICB2aXNpYmxlV2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91
dFJlY3QgcmVjdChmcmFtZVJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBmcmFtZVJlbmRlcmVyLT5w
YWRkaW5nTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lUmVuZGVyZXIt
PmJvcmRlclRvcCgpICsgZnJhbWVSZW5kZXJlci0+cGFkZGluZ1RvcCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpc2libGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpOwogICAgICAg
ICAgICAgZnJhbWVSZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMTU4MSw3ICsxNTgzLDcgQEAgdm9pZCBGcmFtZVZpZXc6
Om1haW50YWluU2Nyb2xsUG9zaXRpb25BdAogICAgICAgICBzY3JvbGxUb0FuY2hvcigpOwogfQog
Ci12b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9s
bFBvaW50KQordm9pZCBGcmFtZVZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IExheW91dFBv
aW50JiBzY3JvbGxQb2ludCkKIHsKICAgICBib29sIHdhc0luUHJvZ3JhbW1hdGljU2Nyb2xsID0g
bV9pblByb2dyYW1tYXRpY1Njcm9sbDsKICAgICBtX2luUHJvZ3JhbW1hdGljU2Nyb2xsID0gdHJ1
ZTsKQEAgLTE2NDEsMTkgKzE2NDMsMTkgQEAgSG9zdFdpbmRvdyogRnJhbWVWaWV3Ojpob3N0V2lu
ZG93KCkgY29ucwogCiBjb25zdCB1bnNpZ25lZCBjUmVwYWludFJlY3RVbmlvblRocmVzaG9sZCA9
IDI1OwogCi12b2lkIEZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50
UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCit2b2lkIEZyYW1lVmlldzo6cmVwYWludENvbnRlbnRS
ZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCiB7CiAgICAgQVNT
RVJUKCFtX2ZyYW1lLT5vd25lckVsZW1lbnQoKSk7CiAKICAgICBkb3VibGUgZGVsYXkgPSBtX2Rl
ZmVycmluZ1JlcGFpbnRzID8gMCA6IGFkanVzdGVkRGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKICAg
ICBpZiAoKG1fZGVmZXJyaW5nUmVwYWludHMgfHwgbV9kZWZlcnJlZFJlcGFpbnRUaW1lci5pc0Fj
dGl2ZSgpIHx8IGRlbGF5KSAmJiAhaW1tZWRpYXRlKSB7Ci0gICAgICAgIEludFJlY3QgcGFpbnRS
ZWN0ID0gcjsKKyAgICAgICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSByOwogICAgICAgICBpZiAo
Y2xpcHNSZXBhaW50cygpICYmICFwYWludHNFbnRpcmVDb250ZW50cygpKQogICAgICAgICAgICAg
cGFpbnRSZWN0LmludGVyc2VjdCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CiAgICAgICAgIGlmIChw
YWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobV9y
ZXBhaW50Q291bnQgPT0gY1JlcGFpbnRSZWN0VW5pb25UaHJlc2hvbGQpIHsKLSAgICAgICAgICAg
IEludFJlY3QgdW5pb25lZFJlY3Q7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHVuaW9uZWRSZWN0
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNSZXBhaW50UmVjdFVuaW9u
VGhyZXNob2xkOyArK2kpCiAgICAgICAgICAgICAgICAgdW5pb25lZFJlY3QudW5pdGUobV9yZXBh
aW50UmVjdHNbaV0pOwogICAgICAgICAgICAgbV9yZXBhaW50UmVjdHMuY2xlYXIoKTsKQEAgLTIw
NDIsNyArMjA0NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hvcigpCiAgICAgaWYg
KCFhbmNob3JOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0
IHJlY3Q7CisgICAgTGF5b3V0UmVjdCByZWN0OwogICAgIGlmIChhbmNob3JOb2RlICE9IG1fZnJh
bWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJlY3QgPSBhbmNob3JOb2RlLT5nZXRSZWN0KCk7CiAK
QEAgLTIxNjYsNyArMjE2OCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRh
c2tzKCkKICAgICBtX2FjdGlvblNjaGVkdWxlci0+cmVzdW1lKCk7CiAKICAgICBpZiAoIXJvb3Qt
PnByaW50aW5nKCkpIHsKLSAgICAgICAgSW50U2l6ZSBjdXJyZW50U2l6ZSA9IEludFNpemUod2lk
dGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0
U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIGZsb2F0IGN1cnJlbnRab29tRmFjdG9y
ID0gcm9vdC0+c3R5bGUoKS0+em9vbSgpOwogICAgICAgICBib29sIHJlc2l6ZWQgPSAhbV9maXJz
dExheW91dCAmJiAoY3VycmVudFNpemUgIT0gbV9sYXN0TGF5b3V0U2l6ZSB8fCBjdXJyZW50Wm9v
bUZhY3RvciAhPSBtX2xhc3Rab29tRmFjdG9yKTsKICAgICAgICAgbV9sYXN0TGF5b3V0U2l6ZSA9
IGN1cnJlbnRTaXplOwpAQCAtMjIwNywxNSArMjIwOSwxNSBAQCB2b2lkIEZyYW1lVmlldzo6dXBk
YXRlT3ZlcmZsb3dTdGF0dXMoYm9vCiAgICAgCiB9CiAKLUludFJlY3QgRnJhbWVWaWV3Ojp3aW5k
b3dDbGlwUmVjdChib29sIGNsaXBUb0NvbnRlbnRzKSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZp
ZXc6OndpbmRvd0NsaXBSZWN0KGJvb2wgY2xpcFRvQ29udGVudHMpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fZnJhbWUtPnZpZXcoKSA9PSB0aGlzKTsKIAogICAgIGlmIChwYWludHNFbnRpcmVDb250
ZW50cygpKQotICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgY29udGVudHNT
aXplKCkpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRQb2ludCgwLCAwKSwgY29u
dGVudHNTaXplKCkpOwogCiAgICAgLy8gU2V0IG91ciBjbGlwIHJlY3QgdG8gYmUgb3VyIGNvbnRl
bnRzLgotICAgIEludFJlY3QgY2xpcFJlY3QgPSBjb250ZW50c1RvV2luZG93KHZpc2libGVDb250
ZW50UmVjdCghY2xpcFRvQ29udGVudHMpKTsKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gY29u
dGVudHNUb1dpbmRvdyh2aXNpYmxlQ29udGVudFJlY3QoIWNsaXBUb0NvbnRlbnRzKSk7CiAgICAg
aWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5vd25lckVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IGNsaXBSZWN0OwogCkBAIC0yMjMxLDE0ICsyMjMzLDE0IEBAIEludFJlY3QgRnJhbWVWaWV3Ojp3
aW5kb3dDbGlwUmVjdChib29sIGMKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CiAKLUludFJlY3Qg
RnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
ciwgYm9vbCBjbGlwVG9MYXllckNvbnRlbnRzKSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZpZXc6
OndpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBib29sIGNs
aXBUb0xheWVyQ29udGVudHMpIGNvbnN0CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBubyBsYXllciwg
anVzdCByZXR1cm4gb3VyIHdpbmRvdyBjbGlwIHJlY3QuCiAgICAgaWYgKCFsYXllcikKICAgICAg
ICAgcmV0dXJuIHdpbmRvd0NsaXBSZWN0KCk7CiAKICAgICAvLyBBcHBseSB0aGUgY2xpcCBmcm9t
IHRoZSBsYXllci4KLSAgICBJbnRSZWN0IGNsaXBSZWN0OworICAgIExheW91dFJlY3QgY2xpcFJl
Y3Q7CiAgICAgaWYgKGNsaXBUb0xheWVyQ29udGVudHMpCiAgICAgICAgIGNsaXBSZWN0ID0gbGF5
ZXItPmNoaWxkcmVuQ2xpcFJlY3QoKTsKICAgICBlbHNlCkBAIC0yMjUzLDMzICsyMjU1LDMzIEBA
IGJvb2wgRnJhbWVWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UgJiYgcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojpz
Y3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCit2b2lkIEZyYW1lVmlldzo6c2Nyb2xs
VG8oY29uc3QgTGF5b3V0U2l6ZSYgbmV3T2Zmc2V0KQogewotICAgIEludFNpemUgb2Zmc2V0ID0g
c2Nyb2xsT2Zmc2V0KCk7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsK
ICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAgIGlmIChvZmZzZXQgIT0g
c2Nyb2xsT2Zmc2V0KCkpCiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOwogICAgIGZy
YW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAK
LXZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkK
IHsKICAgICAvLyBBZGQgaW4gb3VyIG9mZnNldCB3aXRoaW4gdGhlIEZyYW1lVmlldy4KLSAgICBJ
bnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7CisgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3QgPSByZWN0
OwogICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAgICBpbnZh
bGlkYXRlUmVjdChkaXJ0eVJlY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6Z2V0VGlja21hcmtz
KFZlY3RvcjxJbnRSZWN0PiYgdGlja21hcmtzKSBjb25zdAordm9pZCBGcmFtZVZpZXc6OmdldFRp
Y2ttYXJrcyhWZWN0b3I8TGF5b3V0UmVjdD4mIHRpY2ttYXJrcykgY29uc3QKIHsKICAgICB0aWNr
bWFya3MgPSBmcmFtZSgpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbmRlcmVkUmVjdHNGb3JN
YXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogfQogCi1JbnRSZWN0IEZyYW1lVmll
dzo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZpZXc6OndpbmRv
d1Jlc2l6ZXJSZWN0KCkgY29uc3QKIHsKICAgICBQYWdlKiBwYWdlID0gZnJhbWUoKSA/IGZyYW1l
KCktPnBhZ2UoKSA6IDA7CiAgICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gSW50UmVjdCgp
OworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogICAgIHJldHVybiBwYWdlLT5jaHJvbWUo
KS0+d2luZG93UmVzaXplclJlY3QoKTsKIH0KIApAQCAtMjMxNSw3ICsyMzE3LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OmRpZENvbXBsZXRlQW5pbWF0ZWRTY3JvbAogICAgIHJldHVybiBwYWdlLT5jaHJv
bWUoKS0+Y2xpZW50KCktPmRpZENvbXBsZXRlQW5pbWF0ZWRTY3JvbGwoKTsKIH0KIAotdm9pZCBG
cmFtZVZpZXc6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3Jv
bGxlclRodW1iKQordm9pZCBGcmFtZVZpZXc6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChj
b25zdCBMYXlvdXRSZWN0JiBzY3JvbGxlclRodW1iKQogewogICAgIFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMjQ0Niw3ICsyNDQ4LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OnVwZGF0ZVNjcm9sbENvcm5lcigpCiAgICAgU2Nyb2xsVmlldzo6dXBkYXRlU2Ny
b2xsQ29ybmVyKCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjpwYWludFNjcm9sbENvcm5lcihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpCit2b2lkIEZy
YW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiBjb3JuZXJSZWN0KQogewogICAgIGlmIChjb250ZXh0LT51cGRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7CiAgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lcigpOwpAQCAtMjU2Niw3
ICsyNTY4LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldFdhc1Njcm9sbGVkQnlVc2VyKGJvbwogICAg
IG1fd2FzU2Nyb2xsZWRCeVVzZXIgPSB3YXNTY3JvbGxlZEJ5VXNlcjsKIH0KIAotdm9pZCBGcmFt
ZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQordm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBwLCBj
b25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIGlmICghZnJhbWUoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjY4NSw3ICsyNjg3LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldE5vZGVUb0RyYXco
Tm9kZSogbm9kZQogICAgIG1fbm9kZVRvRHJhdyA9IG5vZGU7CiB9CiAKLXZvaWQgRnJhbWVWaWV3
OjpwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNhbE92ZXJo
YW5nQXJlYSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBGcmFtZVZpZXc6OnBhaW50
T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IExheW91dFJlY3QmIHZlcnRpY2FsT3Zlcmhh
bmdBcmVhLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgaWYgKGNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjc1Myw3ICsyNzU1LDcg
QEAgdm9pZCBGcmFtZVZpZXc6OmZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlvbgogICAgICAgICBmbG9h
dCBwYWdlTG9naWNhbFdpZHRoID0gcm9vdC0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IHBhZ2VTaXplLndpZHRoKCkgOiBwYWdlU2l6ZS5oZWlnaHQoKTsKICAgICAgICAgZmxv
YXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSByb290LT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gcGFnZVNpemUuaGVpZ2h0KCkgOiBwYWdlU2l6ZS53aWR0aCgpOwogCi0gICAgICAg
IGludCBmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0aCA9IHN0YXRpY19jYXN0PGludD4ocGFnZUxvZ2lj
YWxXaWR0aCk7CisgICAgICAgIExheW91dFVuaXQgZmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGggPSBz
dGF0aWNfY2FzdDxMYXlvdXRVbml0PihwYWdlTG9naWNhbFdpZHRoKTsKICAgICAgICAgcm9vdC0+
c2V0TG9naWNhbFdpZHRoKGZsb29yZWRQYWdlTG9naWNhbFdpZHRoKTsKICAgICAgICAgcm9vdC0+
c2V0UGFnZUxvZ2ljYWxIZWlnaHQocGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgICAgICByb290LT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKQEAgLTI3NjQsNyArMjc2Niw3IEBA
IHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24KICAgICAgICAgLy8gRklY
TUU6IFdlIGFyZSBhc3N1bWluZyBhIHNocmluay10by1maXQgcHJpbnRpbmcgaW1wbGVtZW50YXRp
b24uICBBIGNyb3BwaW5nCiAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgZG8g
dGhpcyEKICAgICAgICAgYm9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUgPSByb290LT5zdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAgICAgICBpbnQgZG9jTG9naWNhbFdpZHRo
ID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gcm9vdC0+ZG9jdW1lbnRSZWN0KCkud2lkdGgoKSA6
IHJvb3QtPmRvY3VtZW50UmVjdCgpLmhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGRvY0xv
Z2ljYWxXaWR0aCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IHJvb3QtPmRvY3VtZW50UmVjdCgp
LndpZHRoKCkgOiByb290LT5kb2N1bWVudFJlY3QoKS5oZWlnaHQoKTsKICAgICAgICAgaWYgKGRv
Y0xvZ2ljYWxXaWR0aCA+IHBhZ2VMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIGZsb29yZWRQ
YWdlTG9naWNhbFdpZHRoID0gc3RkOjptaW48ZmxvYXQ+KGRvY0xvZ2ljYWxXaWR0aCwgcGFnZUxv
Z2ljYWxXaWR0aCAqIG1heGltdW1TaHJpbmtGYWN0b3IpOwogICAgICAgICAgICAgaWYgKHBhZ2VM
b2dpY2FsSGVpZ2h0KQpAQCAtMjc3MiwxNCArMjc3NCwxNCBAQCB2b2lkIEZyYW1lVmlldzo6Zm9y
Y2VMYXlvdXRGb3JQYWdpbmF0aW9uCiAgICAgICAgICAgICByb290LT5zZXRMb2dpY2FsV2lkdGgo
Zmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgICAgICBmb3JjZUxheW91dCgpOwotICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgZG9jdW1lbnRSZWN0ID0gcm9vdC0+ZG9jdW1lbnRSZWN0
KCk7Ci0gICAgICAgICAgICBpbnQgZG9jTG9naWNhbEhlaWdodCA9IGhvcml6b250YWxXcml0aW5n
TW9kZSA/IGRvY3VtZW50UmVjdC5oZWlnaHQoKSA6IGRvY3VtZW50UmVjdC53aWR0aCgpOwotICAg
ICAgICAgICAgaW50IGRvY0xvZ2ljYWxUb3AgPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBkb2N1
bWVudFJlY3QueSgpIDogZG9jdW1lbnRSZWN0LngoKTsKLSAgICAgICAgICAgIGludCBkb2NMb2dp
Y2FsUmlnaHQgPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBkb2N1bWVudFJlY3QubWF4WCgpIDog
ZG9jdW1lbnRSZWN0Lm1heFkoKTsKLSAgICAgICAgICAgIGludCBjbGlwcGVkTG9naWNhbExlZnQg
PSAwOworICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgZG9jdW1lbnRSZWN0ID0gcm9vdC0+
ZG9jdW1lbnRSZWN0KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGRvY0xvZ2ljYWxIZWlnaHQg
PSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBkb2N1bWVudFJlY3QuaGVpZ2h0KCkgOiBkb2N1bWVu
dFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgZG9jTG9naWNhbFRvcCA9IGhv
cml6b250YWxXcml0aW5nTW9kZSA/IGRvY3VtZW50UmVjdC55KCkgOiBkb2N1bWVudFJlY3QueCgp
OworICAgICAgICAgICAgTGF5b3V0VW5pdCBkb2NMb2dpY2FsUmlnaHQgPSBob3Jpem9udGFsV3Jp
dGluZ01vZGUgPyBkb2N1bWVudFJlY3QubWF4WCgpIDogZG9jdW1lbnRSZWN0Lm1heFkoKTsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgY2xpcHBlZExvZ2ljYWxMZWZ0ID0gMDsKICAgICAgICAgICAg
IGlmICghcm9vdC0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAg
ICAgICAgIGNsaXBwZWRMb2dpY2FsTGVmdCA9IGRvY0xvZ2ljYWxSaWdodCAtIGZsb29yZWRQYWdl
TG9naWNhbFdpZHRoOwotICAgICAgICAgICAgSW50UmVjdCBvdmVyZmxvdyhjbGlwcGVkTG9naWNh
bExlZnQsIGRvY0xvZ2ljYWxUb3AsIGZsb29yZWRQYWdlTG9naWNhbFdpZHRoLCBkb2NMb2dpY2Fs
SGVpZ2h0KTsKKyAgICAgICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3coY2xpcHBlZExvZ2ljYWxM
ZWZ0LCBkb2NMb2dpY2FsVG9wLCBmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0aCwgZG9jTG9naWNhbEhl
aWdodCk7CiAgICAgICAgICAgICBpZiAoIWhvcml6b250YWxXcml0aW5nTW9kZSkKICAgICAgICAg
ICAgICAgICBvdmVyZmxvdyA9IG92ZXJmbG93LnRyYW5zcG9zZWRSZWN0KCk7CiAgICAgICAgICAg
ICByb290LT5jbGVhckxheW91dE92ZXJmbG93KCk7CkBAIC0yODA5LDkgKzI4MTEsOSBAQCB2b2lk
IEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0CiAgICAgICAgICpuZXdCb3R0b20g
PSBvbGRCb3R0b207CiB9CiAKLUludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVy
KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIHJlbmRlcmVyUmVj
dCkgY29uc3QKK0xheW91dFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHJlbmRlcmVyUmVjdCkg
Y29uc3QKIHsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QocmVuZGVyZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBM
YXlvdXRSZWN0IHJlY3QgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
cmVuZGVyZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIAogICAgIC8vIENvbnZlcnQg
ZnJvbSBwYWdlICgiYWJzb2x1dGUiKSB0byBGcmFtZVZpZXcgY29vcmRpbmF0ZXMuCiAgICAgcmVj
dC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOwpAQCAtMjgxOSwzMSArMjgyMSwzMSBAQCBJbnRS
ZWN0IEZyYW1lVmlldzo6Y29udmVydEZyb21SZW5kZXJlcihjCiAgICAgcmV0dXJuIHJlY3Q7CiB9
CiAKLUludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiB2aWV3UmVjdCkgY29uc3QKK0xheW91dFJlY3Qg
RnJhbWVWaWV3Ojpjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRSZWN0JiB2aWV3UmVjdCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IHJlY3Qg
PSB2aWV3UmVjdDsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSB2aWV3UmVjdDsKICAgICAKICAgICAv
LyBDb252ZXJ0IGZyb20gRnJhbWVWaWV3IGNvb3JkcyBpbnRvIHBhZ2UgKCJhYnNvbHV0ZSIpIGNv
b3JkaW5hdGVzLgogICAgIHJlY3QubW92ZUJ5KHNjcm9sbFBvc2l0aW9uKCkpOwogCiAgICAgLy8g
RklYTUU6IHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gbWFwIGFuIGFic29sdXRlIHJlY3QgZG93biB0
byBhIGxvY2FsIHF1YWQsIHNvIGp1c3QKICAgICAvLyBtb3ZlIHRoZSByZWN0IGZvciBub3cuCi0g
ICAgcmVjdC5zZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQocmVuZGVyZXItPmFic29sdXRlVG9M
b2NhbChyZWN0LmxvY2F0aW9uKCksIGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zICovKSkp
OworICAgIHJlY3Quc2V0TG9jYXRpb24ocm91bmRlZExheW91dFBvaW50KHJlbmRlcmVyLT5hYnNv
bHV0ZVRvTG9jYWwocmVjdC5sb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSAvKiB1c2UgdHJhbnNmb3Jt
cyAqLykpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252
ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFBv
aW50JiByZW5kZXJlclBvaW50KSBjb25zdAorTGF5b3V0UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0
RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFBv
aW50JiByZW5kZXJlclBvaW50KSBjb25zdAogewotICAgIEludFBvaW50IHBvaW50ID0gcm91bmRl
ZEludFBvaW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocmVuZGVyZXJQb2ludCwgZmFsc2Us
IHRydWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKTsKKyAgICBMYXlvdXRQb2ludCBwb2ludCA9IHJv
dW5kZWRMYXlvdXRQb2ludChyZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKHJlbmRlcmVyUG9pbnQs
IGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zICovKSk7CiAKICAgICAvLyBDb252ZXJ0IGZy
b20gcGFnZSAoImFic29sdXRlIikgdG8gRnJhbWVWaWV3IGNvb3JkaW5hdGVzLgogICAgIHBvaW50
Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgcmV0dXJuIHBvaW50OwogfQogCi1JbnRQ
b2ludCBGcmFtZVZpZXc6OmNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IEludFBvaW50JiB2aWV3UG9pbnQpIGNvbnN0CitMYXlvdXRQb2ludCBGcmFt
ZVZpZXc6OmNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IExheW91dFBvaW50JiB2aWV3UG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgcG9pbnQg
PSB2aWV3UG9pbnQ7CisgICAgTGF5b3V0UG9pbnQgcG9pbnQgPSB2aWV3UG9pbnQ7CiAgICAgCiAg
ICAgLy8gQ29udmVydCBmcm9tIEZyYW1lVmlldyBjb29yZHMgaW50byBwYWdlICgiYWJzb2x1dGUi
KSBjb29yZGluYXRlcy4KICAgICBwb2ludCArPSBJbnRTaXplKHNjcm9sbFgoKSwgc2Nyb2xsWSgp
KTsKQEAgLTI4NTEsNyArMjg1Myw3IEBAIEludFBvaW50IEZyYW1lVmlldzo6Y29udmVydFRvUmVu
ZGVyZXIoY28KICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHJlbmRlcmVyLT5hYnNvbHV0ZVRv
TG9jYWwocG9pbnQsIGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zICovKSk7CiB9CiAKLUlu
dFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0CitMYXlvdXRSZWN0IEZyYW1lVmlldzo6Y29udmVydFRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmIChjb25z
dCBTY3JvbGxWaWV3KiBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50KCkpIHsKICAgICAgICAgaWYg
KHBhcmVudFNjcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkpIHsKQEAgLTI4NjEsNyArMjg2Myw3IEBA
IEludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmkKICAgICAgICAgICAgIGlm
ICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVjdDsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEludFJlY3QgcmVjdChsb2NhbFJlY3QpOworICAgICAgICAg
ICAgTGF5b3V0UmVjdCByZWN0KGxvY2FsUmVjdCk7CiAgICAgICAgICAgICAvLyBBZGQgYm9yZGVy
cyBhbmQgcGFkZGluZz8/CiAgICAgICAgICAgICByZWN0Lm1vdmUocmVuZGVyZXItPmJvcmRlckxl
ZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOwpAQCAtMjg3NCw3
ICsyODc2LDcgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaQogICAg
IHJldHVybiBsb2NhbFJlY3Q7CiB9CiAKLUludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CitMYXlvdXRSZWN0
IEZyYW1lVmlldzo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBMYXlvdXRSZWN0JiBw
YXJlbnRSZWN0KSBjb25zdAogewogICAgIGlmIChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRTY3Jv
bGxWaWV3ID0gcGFyZW50KCkpIHsKICAgICAgICAgaWYgKHBhcmVudFNjcm9sbFZpZXctPmlzRnJh
bWVWaWV3KCkpIHsKQEAgLTI4ODUsNyArMjg4Nyw3IEBAIEludFJlY3QgRnJhbWVWaWV3Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmcKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CiAKLSAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IHBh
cmVudFZpZXctPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRlcmVyLCBwYXJlbnRSZWN0KTsKKyAgICAg
ICAgICAgIExheW91dFJlY3QgcmVjdCA9IHBhcmVudFZpZXctPmNvbnZlcnRUb1JlbmRlcmVyKHJl
bmRlcmVyLCBwYXJlbnRSZWN0KTsKICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGJvcmRlcnMgYW5k
IHBhZGRpbmcKICAgICAgICAgICAgIHJlY3QubW92ZSgtcmVuZGVyZXItPmJvcmRlckxlZnQoKSAt
IHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgIC1yZW5kZXJl
ci0+Ym9yZGVyVG9wKCkgLSByZW5kZXJlci0+cGFkZGluZ1RvcCgpKTsKQEAgLTI4OTgsNyArMjkw
MCw3IEBAIEludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmcKICAgICByZXR1
cm4gcGFyZW50UmVjdDsKIH0KIAotSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKK0xheW91dFBvaW50IEZy
YW1lVmlldzo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2Fs
UG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZp
ZXcgPSBwYXJlbnQoKSkgewogICAgICAgICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZp
ZXcoKSkgewpAQCAtMjkwOSw3ICsyOTExLDcgQEAgSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0
VG9Db250YWluaW5nVgogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAg
ICByZXR1cm4gbG9jYWxQb2ludDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIEludFBv
aW50IHBvaW50KGxvY2FsUG9pbnQpOworICAgICAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnQobG9j
YWxQb2ludCk7CiAKICAgICAgICAgICAgIC8vIEFkZCBib3JkZXJzIGFuZCBwYWRkaW5nCiAgICAg
ICAgICAgICBwb2ludC5tb3ZlKHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFk
ZGluZ0xlZnQoKSwKQEAgLTI5MjMsNyArMjkyNSw3IEBAIEludFBvaW50IEZyYW1lVmlldzo6Y29u
dmVydFRvQ29udGFpbmluZ1YKICAgICByZXR1cm4gbG9jYWxQb2ludDsKIH0KIAotSW50UG9pbnQg
RnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBwYXJl
bnRQb2ludCkgY29uc3QKK0xheW91dFBvaW50IEZyYW1lVmlldzo6Y29udmVydEZyb21Db250YWlu
aW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0CiB7CiAgICAgaWYg
KGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgewogICAgICAg
ICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkgewpAQCAtMjkzNCw3ICsyOTM2
LDcgQEAgSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbgogICAgICAgICAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50UG9pbnQ7CiAK
LSAgICAgICAgICAgIEludFBvaW50IHBvaW50ID0gcGFyZW50Vmlldy0+Y29udmVydFRvUmVuZGVy
ZXIocmVuZGVyZXIsIHBhcmVudFBvaW50KTsKKyAgICAgICAgICAgIExheW91dFBvaW50IHBvaW50
ID0gcGFyZW50Vmlldy0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIsIHBhcmVudFBvaW50KTsK
ICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGJvcmRlcnMgYW5kIHBhZGRpbmcKICAgICAgICAgICAg
IHBvaW50Lm1vdmUoLXJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJlci0+cGFkZGluZ0xl
ZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJl
bmRlcmVyLT5wYWRkaW5nVG9wKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZp
c2lvbiA5MzA0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDYgQEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBj
bGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lQWN0aW9uU2NoZWR1bGVyOwotY2xhc3MgSW50UmVjdDsK
IGNsYXNzIEtVUkw7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKQEAgLTYzLDggKzYyLDggQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAg
ICAgCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOwogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CiAjZW5kaWYKQEAg
LTcyLDEwICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZS5nZXQoKTsgfQogICAgIHZvaWQgY2xlYXJGcmFtZSgpOwogCi0gICAgaW50IG1h
cmdpbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5zLndpZHRoKCk7IH0gLy8gLTEgbWVh
bnMgZGVmYXVsdAotICAgIGludCBtYXJnaW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21hcmdp
bnMuaGVpZ2h0KCk7IH0gLy8gLTEgbWVhbnMgZGVmYXVsdAotICAgIHZvaWQgc2V0TWFyZ2luV2lk
dGgoaW50KTsKLSAgICB2b2lkIHNldE1hcmdpbkhlaWdodChpbnQpOworICAgIExheW91dFVuaXQg
bWFyZ2luV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbnMud2lkdGgoKTsgfSAvLyAtMSBt
ZWFucyBkZWZhdWx0CisgICAgTGF5b3V0VW5pdCBtYXJnaW5IZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX21hcmdpbnMuaGVpZ2h0KCk7IH0gLy8gLTEgbWVhbnMgZGVmYXVsdAorICAgIHZvaWQgc2V0
TWFyZ2luV2lkdGgoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRNYXJnaW5IZWlnaHQoTGF5b3V0
VW5pdCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FuSGF2ZVNjcm9sbGJhcnMoYm9vbCk7CiAg
ICAgdm9pZCB1cGRhdGVDYW5IYXZlU2Nyb2xsYmFycygpOwpAQCAtODYsNyArODUsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFy
Kik7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciopOwogCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBMYXlvdXRTaXplJik7
CiAKICAgICB2b2lkIGxheW91dChib29sIGFsbG93U3VidHJlZSA9IHRydWUpOwogICAgIGJvb2wg
ZGlkRmlyc3RMYXlvdXQoKSBjb25zdDsKQEAgLTE1OCwxMiArMTU3LDEyIEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYWRqdXN0Vmlld1NpemUoKTsKICAgICAKLSAgICB2aXJ0dWFsIEludFJlY3Qgd2lu
ZG93Q2xpcFJlY3QoYm9vbCBjbGlwVG9Db250ZW50cyA9IHRydWUpIGNvbnN0OwotICAgIEludFJl
Y3Qgd2luZG93Q2xpcFJlY3RGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciosIGJvb2wgY2xpcFRv
TGF5ZXJDb250ZW50cykgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHdpbmRvd0NsaXBS
ZWN0KGJvb2wgY2xpcFRvQ29udGVudHMgPSB0cnVlKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IHdp
bmRvd0NsaXBSZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqLCBib29sIGNsaXBUb0xheWVy
Q29udGVudHMpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29u
c3Q7CiAKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CisgICAg
dm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZvaWQgc2Ny
b2xsUG9zaXRpb25DaGFuZ2VkVmlhUGxhdGZvcm1XaWRnZXQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludEZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZygpOwogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBjb25zdDsKQEAgLTE4
Niw5ICsxODUsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBGdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIHRo
ZSBjdXJyZW50IHNjcm9sbGVkIHBvc2l0aW9uLCBuZWdhdGluZyB0aGUgZWZmZWN0cyBvZiBvdmVy
aGFuZwogICAgIC8vIGFuZCBhZGp1c3RpbmcgZm9yIHBhZ2Ugc2NhbGUuCi0gICAgaW50IHNjcm9s
bFhGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgaW50IHNjcm9sbFlGb3JGaXhlZFBvc2l0
aW9uKCkgY29uc3Q7Ci0gICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkg
Y29uc3Q7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgc2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSBjb25zdDsKKyAgICBMYXlv
dXRTaXplIHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQg
YmVnaW5EZWZlcnJlZFJlcGFpbnRzKCk7CiAgICAgdm9pZCBlbmREZWZlcnJlZFJlcGFpbnRzKCk7
CkBAIC0yMTMsMTUgKzIxMiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRXaWRnZXRUb1VwZGF0
ZShSZW5kZXJFbWJlZGRlZE9iamVjdCopOwogICAgIHZvaWQgcmVtb3ZlV2lkZ2V0VG9VcGRhdGUo
UmVuZGVyRW1iZWRkZWRPYmplY3QqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QpOwogICAgIHZvaWQgc2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yKTsK
ICAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IoKSBjb25zdDsKICAgICBib29sIGlzUGFp
bnRpbmcoKSBjb25zdDsKICAgICBib29sIGhhc0V2ZXJQYWludGVkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0UGFpbnRUaW1lOyB9CiAgICAgdm9pZCBzZXROb2RlVG9EcmF3KE5vZGUqKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgdmVydGljYWxP
dmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGNvcm5l
clJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgTGF5
b3V0UmVjdCYgdmVydGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IExheW91dFJlY3QmIGNvcm5lclJlY3QpOwogCiAgICAgQ29sb3IgZG9jdW1lbnRCYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdDsKIApAQCAtMjYxLDEwICsyNjAsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgbWFpbnRhaW5TY3JvbGxQb3NpdGlvbkF0QW5jaG9yKE5vZGUqKTsKIAogICAgIC8vIE1l
dGhvZHMgdG8gY29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIGNvb3JkaW5hdGUg
c3BhY2Ugb2YgdGhlIHJlbmRlcmVyLCBhbmQgdGhpcyB2aWV3LgotICAgIHZpcnR1YWwgSW50UmVj
dCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQg
Y29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJl
Y3QgY29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRS
ZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnZlcnRUb1JlbmRlcmVyKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFBvaW50IGNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29u
c3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50IGNvbnZlcnRU
b1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7
CiAKICAgICBib29sIGlzRnJhbWVWaWV3U2Nyb2xsQ29ybmVyKFJlbmRlclNjcm9sbGJhclBhcnQq
IHNjcm9sbENvcm5lcikgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3JuZXIgPT0gc2Nyb2xsQ29y
bmVyOyB9CiAKQEAgLTI3OSw3ICsyNzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gT24gZWFjaCByZXBh
aW50IHRoZSBkZWxheSBpbmNyZXNlcyBieSB0aGlzIGFtb3VudAogICAgIHN0YXRpYyB2b2lkIHNl
dFJlcGFpbnRUaHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2Fk
aW5nKGRvdWJsZSBwKTsKIAotICAgIHZpcnR1YWwgSW50UG9pbnQgY3VycmVudE1vdXNlUG9zaXRp
b24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9u
KCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9kIG9uY2UgcGx1Z2lu
IGxvYWRpbmcgaXMgZGVjb3VwbGVkIGZyb20gbGF5b3V0LgogICAgIHZvaWQgZmx1c2hBbnlQZW5k
aW5nUG9zdExheW91dFRhc2tzKCk7CkBAIC0yOTEsOCArMjkwLDggQEAgcHVibGljOgogICAgIFJl
bmRlckJveCogZW1iZWRkZWRDb250ZW50Qm94KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCk7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFzdFBhdGgo
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IExheW91dFJlY3QmIHJlY3RUb1Njcm9s
bCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxD
b250ZW50c1Nsb3dQYXRoKGNvbnN0IExheW91dFJlY3QmIHVwZGF0ZVJlY3QpOwogCiAgICAgdmly
dHVhbCBib29sIGlzVmVydGljYWxEb2N1bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0ZsaXBwZWREb2N1bWVudCgpIGNvbnN0OwpAQCAtMzIwLDI3ICszMTksMjcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGZvcmNlTGF5b3V0UGFyZW50Vmlld0lmTmVlZGVkKCk7CiAgICAgdm9pZCBwZXJm
b3JtUG9zdExheW91dFRhc2tzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVwYWludENvbnRlbnRS
ZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYsIGJvb2wgaW1tZWRp
YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCk7CiAgICAgdmlydHVhbCB2
b2lkIHZpc2libGVDb250ZW50c1Jlc2l6ZWQoKTsKIAogICAgIC8vIE92ZXJyaWRlIFNjcm9sbFZp
ZXcgbWV0aG9kcyB0byBkbyBwb2ludCBjb252ZXJzaW9uIHZpYSByZW5kZXJlcnMsIGluIG9yZGVy
IHRvCiAgICAgLy8gdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KLSAgICB2aXJ0dWFsIElu
dFJlY3QgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAg
IHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBMYXlv
dXRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9p
bnQgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Owog
CiAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHNjcm9sbFRvKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21h
cmtzKFZlY3RvcjxMYXlvdXRSZWN0PiYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxU
byhjb25zdCBMYXlvdXRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UnViYmVyQmFu
ZChjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnVi
YmVyQmFuZChjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0
QW5pbWF0ZWRTY3JvbGwoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVBbmlt
YXRlZFNjcm9sbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJU
aHVtYlJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlU2Ny
b2xsZXJUaHVtYlJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc09u
QWN0aXZlUGFnZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAKQEAgLTM3Niw4ICszNzUsOCBAQCBwcml2YXRlOgog
ICAgIAogICAgIHN0YXRpYyBkb3VibGUgc0N1cnJlbnRQYWludFRpbWVTdGFtcDsgLy8gdXNlZCBm
b3IgZGV0ZWN0aW5nIGRlY29kZWQgcmVzb3VyY2UgdGhyYXNoIGluIHRoZSBjYWNoZQogCi0gICAg
SW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX21hcmdpbnM7CisgICAgTGF5b3V0U2l6ZSBt
X3NpemU7CisgICAgTGF5b3V0U2l6ZSBtX21hcmdpbnM7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNo
U2V0PFJlbmRlckVtYmVkZGVkT2JqZWN0Kj4gUmVuZGVyRW1iZWRkZWRPYmplY3RTZXQ7CiAgICAg
T3duUHRyPFJlbmRlckVtYmVkZGVkT2JqZWN0U2V0PiBtX3dpZGdldFVwZGF0ZVNldDsKQEAgLTQx
MSw3ICs0MTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9maXJzdExheW91dDsKICAgICBib29s
IG1faXNUcmFuc3BhcmVudDsKICAgICBDb2xvciBtX2Jhc2VCYWNrZ3JvdW5kQ29sb3I7Ci0gICAg
SW50U2l6ZSBtX2xhc3RMYXlvdXRTaXplOworICAgIExheW91dFNpemUgbV9sYXN0TGF5b3V0U2l6
ZTsKICAgICBmbG9hdCBtX2xhc3Rab29tRmFjdG9yOwogCiAgICAgU3RyaW5nIG1fbWVkaWFUeXBl
OwpAQCAtNDI5LDcgKzQyOCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdW5zaWduZWQgbV9kZWZl
cnJpbmdSZXBhaW50czsKICAgICB1bnNpZ25lZCBtX3JlcGFpbnRDb3VudDsKLSAgICBWZWN0b3I8
SW50UmVjdD4gbV9yZXBhaW50UmVjdHM7CisgICAgVmVjdG9yPExheW91dFJlY3Q+IG1fcmVwYWlu
dFJlY3RzOwogICAgIFRpbWVyPEZyYW1lVmlldz4gbV9kZWZlcnJlZFJlcGFpbnRUaW1lcjsKICAg
ICBkb3VibGUgbV9kZWZlcnJlZFJlcGFpbnREZWxheTsKICAgICBkb3VibGUgbV9sYXN0UGFpbnRU
aW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDkzMDQ3
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMwMyw3ICszMDMsNyBAQCBOU0ltYWdlKiBGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UoTm9k
ZSogCiAgICAgcmVuZGVyZXItPnVwZGF0ZURyYWdTdGF0ZSh0cnVlKTsgICAgLy8gbWFyayBkcmFn
Z2VkIG5vZGVzIChzbyB0aGV5IHBpY2sgdXAgdGhlIHJpZ2h0IENTUykKICAgICBtX2RvYy0+dXBk
YXRlTGF5b3V0KCk7ICAgICAgICAvLyBmb3JjZXMgc3R5bGUgcmVjYWxjIC0gbmVlZGVkIHNpbmNl
IGNoYW5naW5nIHRoZSBkcmFnIHN0YXRlIG1pZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW1wbHkgbmV3IHN0eWxlcywgcGx1cyBKUyBjb3VsZCBoYXZlIGNo
YW5nZWQgb3RoZXIgdGhpbmdzCi0gICAgSW50UmVjdCB0b3BMZXZlbFJlY3Q7CisgICAgTGF5b3V0
UmVjdCB0b3BMZXZlbFJlY3Q7CiAgICAgTlNSZWN0IHBhaW50aW5nUmVjdCA9IHJlbmRlcmVyLT5w
YWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCk7CiAKICAgICBtX3ZpZXctPnNldE5vZGVUb0Ry
YXcobm9kZSk7ICAgICAgICAgICAgICAvLyBpbnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5n
IG1vZGUKQEAgLTMyNyw3ICszMjcsNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFnZShO
b2RlKiBub2RlCiAKICAgICBtX2RvYy0+dXBkYXRlTGF5b3V0KCk7IC8vIGZvcmNlcyBzdHlsZSBy
ZWNhbGMKIAotICAgIEludFJlY3QgdG9wTGV2ZWxSZWN0OworICAgIExheW91dFJlY3QgdG9wTGV2
ZWxSZWN0OwogICAgIE5TUmVjdCBwYWludGluZ1JlY3QgPSByZW5kZXJlci0+cGFpbnRpbmdSb290
UmVjdCh0b3BMZXZlbFJlY3QpOwogCiAgICAgbV92aWV3LT5zZXROb2RlVG9EcmF3KG5vZGUpOyAv
LyBpbnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5nIG1vZGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103988</attachid>
            <date>2011-08-15 17:54:10 -0700</date>
            <delta_ts>2011-08-17 12:17:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66147-20110815175409.patch</filename>
            <type>text/plain</type>
            <size>41381</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMDcxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDgtMTUgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBGcmFtZVZpZXcgdG8g
dG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb252ZXJ0IEZyYW1lICYgRnJhbWVWaWV3IHRvIG5ldyBsYXlvdXQgYWJzdHJh
Y3Rpb24gYXMgYSBwYXJ0IG9mIHRoZQorICAgICAgICBvbmdvaW5nIGNvbnZlcnNpb24gd29yay4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6dmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRvY3VtZW50QXRQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6c2NhbGVQYWdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlk
YXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEZyYW1lUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldE1hcmdpbldpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6c2V0TWFyZ2luSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
YWRqdXN0Vmlld1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxYRm9y
Rml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFlGb3JG
aXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0
Rm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmN1cnJlbnRN
b3VzZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVu
dHNGYXN0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRz
U2xvd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmdldFRpY2tt
YXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6cGFpbnRPdmVyaGFuZ0FyZWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6Y29udmVydEZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OmNvbnZlcnRUb1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29u
dmVydFRvQ29udGFpbmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjptYXJnaW5XaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6Om1hcmdpbkhlaWdodCk6CisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6Om5vZGVJbWFnZSk6CisKIDIwMTEtMDgtMTUgIEVtaWwgQSBFa2x1
bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN3aXRjaCBFbGVtZW50L05vZGUgdG8g
dG8gbmV3IGxheW91dCB0eXBlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDkz
MDcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgzNiw3ICs4MzYsNyBAQCBTdHJpbmcgRnJhbWU6OmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5j
CiAgICAgcmV0dXJuIGRvY3VtZW50KCkgPyBkb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5nTW9kaWZp
ZWRCeUVuY29kaW5nKHN0cikgOiBzdHI7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBGcmFtZTo6dmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCitWaXNpYmxl
UG9zaXRpb24gRnJhbWU6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50
JiBmcmFtZVBvaW50KQogewogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZXZlbnRIYW5kbGVy
KCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KGZyYW1lUG9pbnQsIHRydWUpOwogICAgIE5vZGUqIG5v
ZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CkBAIC04NTEsMTIgKzg1MSwxMiBAQCBW
aXNpYmxlUG9zaXRpb24gRnJhbWU6OnZpc2libGVQb3NpdGlvbkZvCiAgICAgcmV0dXJuIHZpc2li
bGVQb3M7CiB9CiAKLURvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCkKK0RvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IExheW91
dFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAoIXZpZXcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBJbnRQb2ludCBwdCA9IHZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCk7CisgICAg
TGF5b3V0UG9pbnQgcHQgPSB2aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpOwogICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0ID0gSGl0VGVzdFJlc3VsdChwdCk7CiAKICAgICBpZiAoY29udGVu
dFJlbmRlcmVyKCkpCkBAIC04NjQsNyArODY0LDcgQEAgRG9jdW1lbnQqIEZyYW1lOjpkb2N1bWVu
dEF0UG9pbnQoY29uc3QgSQogICAgIHJldHVybiByZXN1bHQuaW5uZXJOb2RlKCkgPyByZXN1bHQu
aW5uZXJOb2RlKCktPmRvY3VtZW50KCkgOiAwOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBGcmFt
ZTo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKK1Bhc3NSZWZQdHI8
UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBmcmFtZVBvaW50
KQogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBv
aW50KGZyYW1lUG9pbnQpOwogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKQEAgLTg3MywxNCAr
ODczLDE0IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGMKICAgICBW
aXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygpOwogICAgIGlmIChw
cmV2aW91cy5pc05vdE51bGwoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHByZXZpb3VzQ2hh
cmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsKLSAgICAgICAgSW50
UmVjdCByZWN0ID0gZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVy
UmFuZ2UuZ2V0KCkpOworICAgICAgICBMYXlvdXRSZWN0IHJlY3QgPSBlZGl0b3IoKS0+Zmlyc3RS
ZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CiAgICAgICAgIGlmIChy
ZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQogICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hh
cmFjdGVyUmFuZ2UucmVsZWFzZSgpOwogICAgIH0KIAogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0
ID0gcG9zaXRpb24ubmV4dCgpOwogICAgIGlmIChSZWZQdHI8UmFuZ2U+IG5leHRDaGFyYWN0ZXJS
YW5nZSA9IG1ha2VSYW5nZShwb3NpdGlvbiwgbmV4dCkpIHsKLSAgICAgICAgSW50UmVjdCByZWN0
ID0gZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7
CisgICAgICAgIExheW91dFJlY3QgcmVjdCA9IGVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShu
ZXh0Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwogICAgICAgICBpZiAocmVjdC5jb250YWlucyhmcmFt
ZVBvaW50KSkKICAgICAgICAgICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgp
OwogICAgIH0KQEAgLTEwNDMsNyArMTA0Myw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0
Wm9vbUZhY3RvcnMoZmwKICAgICBpZiAobV9wYWdlWm9vbUZhY3RvciAhPSBwYWdlWm9vbUZhY3Rv
cikgewogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpKSB7CiAgICAg
ICAgICAgICAvLyBVcGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZnVsbCBw
YWdlIHpvb20sIHNvIHRoZSBjb250ZW50IHN0YXlzIGluIHJlbGF0aXZlbHkgdGhlIHNhbWUgcG9z
aXRpb24uCi0gICAgICAgICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHZpZXctPnNjcm9s
bFBvc2l0aW9uKCk7CisgICAgICAgICAgICBMYXlvdXRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHZp
ZXctPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBmbG9hdCBwZXJjZW50RGlmZmVyZW5j
ZSA9IChwYWdlWm9vbUZhY3RvciAvIG1fcGFnZVpvb21GYWN0b3IpOwogICAgICAgICAgICAgdmll
dy0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24ueCgpICogcGVyY2Vu
dERpZmZlcmVuY2UsIHNjcm9sbFBvc2l0aW9uLnkoKSAqIHBlcmNlbnREaWZmZXJlbmNlKSk7CiAg
ICAgICAgIH0KQEAgLTEwNzUsNyArMTA3NSw3IEBAIHZvaWQgRnJhbWU6OmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmcKIH0KICNlbmRpZgogCi12b2lkIEZyYW1lOjpzY2FsZVBhZ2UoZmxvYXQg
c2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4pCit2b2lkIEZyYW1lOjpzY2FsZVBhZ2UoZmxv
YXQgc2NhbGUsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4pCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuaAkocmV2aXNpb24gOTMwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgc2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZh
Y3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBm
dW5jdGlvbnMgc2hvdWxkIG1vdmUgdG8gUGFnZS4KLSAgICAgICAgdm9pZCBzY2FsZVBhZ2UoZmxv
YXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4pOworICAgICAgICB2b2lkIHNjYWxlUGFn
ZShmbG9hdCBzY2FsZSwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbik7CiAgICAgICAgIGZsb2F0
IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVNjYWxlRmFjdG9yOyB9CiAg
ICAgICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKQEAgLTE4Nyw5ICsxODcs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERyYWdJbWFnZVJlZiBub2RlSW1hZ2Uo
Tm9kZSopOwogICAgICAgICBEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCk7CiAK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IElu
dFBvaW50JiBmcmFtZVBvaW50KTsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2ludChj
b25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpOwotICAgICAgICBQYXNzUmVmUHRyPFJhbmdlPiBy
YW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KTsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBmcmFt
ZVBvaW50KTsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYgd2luZG93UG9pbnQpOworICAgICAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiBmcmFtZVBvaW50KTsKIAogICAgICAgICBTdHJpbmcgc2Vh
cmNoRm9yTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqLCBzaXplX3QqIHJlc3VsdERpc3RhbmNlRnJvbVN0YXJ0T2ZDZWxsKTsKICAgICAgICAg
U3RyaW5nIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGxhYmVscywgRWxlbWVudCosIHNpemVfdCogcmVzdWx0RGlzdGFuY2UsIGJvb2wqIHJlc3VsdElz
SW5DZWxsQWJvdmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24g
OTMwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OCw3ICsxNTgsNyBAQCBQYXNzUmVmUHRyPEZyYW1lVmlldz4gRnJhbWVWaWV3Ojpj
cmVhdGUoCiBQYXNzUmVmUHRyPEZyYW1lVmlldz4gRnJhbWVWaWV3OjpjcmVhdGUoRnJhbWUqIGZy
YW1lLCBjb25zdCBJbnRTaXplJiBpbml0aWFsU2l6ZSkKIHsKICAgICBSZWZQdHI8RnJhbWVWaWV3
PiB2aWV3ID0gYWRvcHRSZWYobmV3IEZyYW1lVmlldyhmcmFtZSkpOwotICAgIHZpZXctPldpZGdl
dDo6c2V0RnJhbWVSZWN0KEludFJlY3Qodmlldy0+bG9jYXRpb24oKSwgaW5pdGlhbFNpemUpKTsK
KyAgICB2aWV3LT5XaWRnZXQ6OnNldEZyYW1lUmVjdChMYXlvdXRSZWN0KHZpZXctPmxvY2F0aW9u
KCksIGluaXRpYWxTaXplKSk7CiAgICAgdmlldy0+c2V0SW5pdGlhbEJvdW5kc1NpemUoaW5pdGlh
bFNpemUpOwogICAgIHZpZXctPnNob3coKTsKICAgICByZXR1cm4gdmlldy5yZWxlYXNlKCk7CkBA
IC0yMTgsNyArMjE4LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnJlc2V0KCkKICAgICBtX2ZpcnN0TGF5
b3V0ID0gdHJ1ZTsKICAgICBtX2ZpcnN0TGF5b3V0Q2FsbGJhY2tQZW5kaW5nID0gZmFsc2U7CiAg
ICAgbV93YXNTY3JvbGxlZEJ5VXNlciA9IGZhbHNlOwotICAgIG1fbGFzdExheW91dFNpemUgPSBJ
bnRTaXplKCk7CisgICAgbV9sYXN0TGF5b3V0U2l6ZSA9IExheW91dFNpemUoKTsKICAgICBtX2xh
c3Rab29tRmFjdG9yID0gMS4wZjsKICAgICBtX2RlZmVycmluZ1JlcGFpbnRzID0gMDsKICAgICBt
X3JlcGFpbnRDb3VudCA9IDA7CkBAIC0yNzAsOCArMjcwLDggQEAgdm9pZCBGcmFtZVZpZXc6Omlu
aXQoKQogewogICAgIHJlc2V0KCk7CiAKLSAgICBtX21hcmdpbnMgPSBJbnRTaXplKC0xLCAtMSk7
IC8vIHVuZGVmaW5lZAotICAgIG1fc2l6ZSA9IEludFNpemUoKTsKKyAgICBtX21hcmdpbnMgPSBM
YXlvdXRTaXplKC0xLCAtMSk7IC8vIHVuZGVmaW5lZAorICAgIG1fc2l6ZSA9IExheW91dFNpemUo
KTsKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgbWFyZ2lud2lkdGgvaGVpZ2h0IGFuZCBzY3JvbGxp
bmcgbW9kZXMgdG8gdGhlIHZpZXcuCiAgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFt
ZSA/IG1fZnJhbWUtPm93bmVyRWxlbWVudCgpIDogMDsKQEAgLTI3OSw4ICsyNzksMTAgQEAgdm9p
ZCBGcmFtZVZpZXc6OmluaXQoKQogICAgICAgICBIVE1MRnJhbWVFbGVtZW50KiBmcmFtZUVsdCA9
IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihvd25lckVsZW1lbnQpOwogICAgICAgICBp
ZiAoZnJhbWVFbHQtPnNjcm9sbGluZ01vZGUoKSA9PSBTY3JvbGxiYXJBbHdheXNPZmYpCiAgICAg
ICAgICAgICBzZXRDYW5IYXZlU2Nyb2xsYmFycyhmYWxzZSk7Ci0gICAgICAgIGludCBtYXJnaW5X
aWR0aCA9IGZyYW1lRWx0LT5tYXJnaW5XaWR0aCgpOwotICAgICAgICBpbnQgbWFyZ2luSGVpZ2h0
ID0gZnJhbWVFbHQtPm1hcmdpbkhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IG1hcmdpbldp
ZHRoID0gZnJhbWVFbHQtPm1hcmdpbldpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgbWFyZ2lu
SGVpZ2h0ID0gZnJhbWVFbHQtPm1hcmdpbkhlaWdodCgpOworICAgICAgICAvLyBGSVhNRTogQ2hh
bmdlIHRvIHJvdWdobHlFcXVhbHMgb3IgPj0gMCB3aGVuIHdlIG1vdmUgdG8gZmxvYXRzLiAKKyAg
ICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjE0
OAogICAgICAgICBpZiAobWFyZ2luV2lkdGggIT0gLTEpCiAgICAgICAgICAgICBzZXRNYXJnaW5X
aWR0aChtYXJnaW5XaWR0aCk7CiAgICAgICAgIGlmIChtYXJnaW5IZWlnaHQgIT0gLTEpCkBAIC0z
NjEsNyArMzYzLDcgQEAgYm9vbCBGcmFtZVZpZXc6OmRpZEZpcnN0TGF5b3V0KCkgY29uc3QKICAg
ICByZXR1cm4gIW1fZmlyc3RMYXlvdXQ7CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRl
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVSZWN0
KGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFwYXJlbnQoKSkgewogICAgICAg
ICBpZiAoaG9zdFdpbmRvdygpKQpAQCAtMzc2LDE1ICszNzgsMTUgQEAgdm9pZCBGcmFtZVZpZXc6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludAogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEludFJlY3QgcmVwYWludFJlY3QgPSByZWN0OworICAgIExheW91dFJlY3Qg
cmVwYWludFJlY3QgPSByZWN0OwogICAgIHJlcGFpbnRSZWN0Lm1vdmUocmVuZGVyZXItPmJvcmRl
ckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAg
cmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CiAgICAgcmVu
ZGVyZXItPnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwogfQogCi12b2lkIEZyYW1lVmll
dzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit2b2lkIEZyYW1lVmlldzo6
c2V0RnJhbWVSZWN0KGNvbnN0IExheW91dFJlY3QmIG5ld1JlY3QpCiB7Ci0gICAgSW50UmVjdCBv
bGRSZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBvbGRSZWN0ID0gZnJhbWVSZWN0
KCk7CiAgICAgaWYgKG5ld1JlY3QgPT0gb2xkUmVjdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00
MDYsMTMgKzQwOCwxMyBAQCB2b2lkIEZyYW1lVmlldzo6c2NoZWR1bGVBbmltYXRpb24oKQogfQog
I2VuZGlmCiAKLXZvaWQgRnJhbWVWaWV3OjpzZXRNYXJnaW5XaWR0aChpbnQgdykKK3ZvaWQgRnJh
bWVWaWV3OjpzZXRNYXJnaW5XaWR0aChMYXlvdXRVbml0IHcpCiB7CiAgICAgLy8gbWFrZSBpdCB1
cGRhdGUgdGhlIHJlbmRlcmluZyBhcmVhIHdoZW4gc2V0CiAgICAgbV9tYXJnaW5zLnNldFdpZHRo
KHcpOwogfQogCi12b2lkIEZyYW1lVmlldzo6c2V0TWFyZ2luSGVpZ2h0KGludCBoKQordm9pZCBG
cmFtZVZpZXc6OnNldE1hcmdpbkhlaWdodChMYXlvdXRVbml0IGgpCiB7CiAgICAgLy8gbWFrZSBp
dCB1cGRhdGUgdGhlIHJlbmRlcmluZyBhcmVhIHdoZW4gc2V0CiAgICAgbV9tYXJnaW5zLnNldEhl
aWdodChoKTsKQEAgLTQ3Niw3ICs0NzgsNyBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gRnJhbWVW
aWV3OjpjcmVhdGVTCiAgICAgcmV0dXJuIFNjcm9sbFZpZXc6OmNyZWF0ZVNjcm9sbGJhcihvcmll
bnRhdGlvbik7CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1NpemUoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3ZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1NpemUoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZSA9PSBjb250ZW50c1NpemUoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNTA1LDkgKzUwNyw5IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RWaWV3U2l6
ZSgpCiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBJbnRSZWN0
JiByZWN0ID0gcm9vdC0+ZG9jdW1lbnRSZWN0KCk7Ci0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSA9
IHJlY3Quc2l6ZSgpOwotICAgIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgt
cmVjdC54KCksIC1yZWN0LnkoKSksICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5wcmludGluZygpLCBz
aXplID09IGNvbnRlbnRzU2l6ZSgpKTsKKyAgICBjb25zdCBMYXlvdXRSZWN0JiByZWN0ID0gcm9v
dC0+ZG9jdW1lbnRSZWN0KCk7CisgICAgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSA9IHJlY3Quc2l6
ZSgpOworICAgIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9yaWdpbihMYXlvdXRQb2ludCgtcmVjdC54
KCksIC1yZWN0LnkoKSksICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5wcmludGluZygpLCBzaXplID09
IGNvbnRlbnRzU2l6ZSgpKTsKICAgICAKICAgICBzZXRDb250ZW50c1NpemUoc2l6ZSk7CiB9CkBA
IC0xMjgyLDE1ICsxMjg0LDE1IEBAIHZvaWQgRnJhbWVWaWV3OjpyZW1vdmVGaXhlZE9iamVjdCgp
CiAgICAgICAgIHVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5KCk7CiB9CiAKLWludCBG
cmFtZVZpZXc6OnNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QKK0xheW91dFVuaXQgRnJh
bWVWaWV3OjpzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaW50IHZpc2li
bGVDb250ZW50V2lkdGggPSB2aXNpYmxlQ29udGVudFJlY3QoKS53aWR0aCgpOwotICAgIGludCBt
YXhYID0gY29udGVudHNXaWR0aCgpIC0gdmlzaWJsZUNvbnRlbnRXaWR0aDsKKyAgICBMYXlvdXRV
bml0IHZpc2libGVDb250ZW50V2lkdGggPSB2aXNpYmxlQ29udGVudFJlY3QoKS53aWR0aCgpOwor
ICAgIExheW91dFVuaXQgbWF4WCA9IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250ZW50V2lk
dGg7CiAKICAgICBpZiAobWF4WCA9PSAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCB4
ID0gc2Nyb2xsWCgpOworICAgIExheW91dFVuaXQgeCA9IHNjcm9sbFgoKTsKIAogICAgIGlmICgh
U2Nyb2xsVmlldzo6c2Nyb2xsT3JpZ2luKCkueCgpKSB7CiAgICAgICAgIGlmICh4IDwgMCkKQEAg
LTEzMTcsMTUgKzEzMTksMTUgQEAgaW50IEZyYW1lVmlldzo6c2Nyb2xsWEZvckZpeGVkUG9zaXRp
b24oKQogICAgIHJldHVybiB4ICogZHJhZ0ZhY3RvciAvIHBhZ2VTY2FsZUZhY3RvcjsKIH0KIAot
aW50IEZyYW1lVmlldzo6c2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSBjb25zdAorTGF5b3V0VW5p
dCBGcmFtZVZpZXc6OnNjcm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpbnQg
dmlzaWJsZUNvbnRlbnRIZWlnaHQgPSB2aXNpYmxlQ29udGVudFJlY3QoKS5oZWlnaHQoKTsKKyAg
ICBMYXlvdXRVbml0IHZpc2libGVDb250ZW50SGVpZ2h0ID0gdmlzaWJsZUNvbnRlbnRSZWN0KCku
aGVpZ2h0KCk7CiAKLSAgICBpbnQgbWF4WSA9IGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlQ29u
dGVudEhlaWdodDsKKyAgICBMYXlvdXRVbml0IG1heFkgPSBjb250ZW50c0hlaWdodCgpIC0gdmlz
aWJsZUNvbnRlbnRIZWlnaHQ7CiAgICAgaWYgKG1heFkgPT0gMCkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBpbnQgeSA9IHNjcm9sbFkoKTsKKyAgICBMYXlvdXRVbml0IHkgPSBzY3JvbGxZKCk7
CiAKICAgICBpZiAoIVNjcm9sbFZpZXc6OnNjcm9sbE9yaWdpbigpLnkoKSkgewogICAgICAgICBp
ZiAoeSA8IDApCkBAIC0xMzQ4LDE3ICsxMzUwLDE3IEBAIGludCBGcmFtZVZpZXc6OnNjcm9sbFlG
b3JGaXhlZFBvc2l0aW9uKCkKICAgICByZXR1cm4geSAqIGRyYWdGYWN0b3IgLyBwYWdlU2NhbGVG
YWN0b3I7CiB9CiAKLUludFNpemUgRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0
aW9uKCkgY29uc3QKK0xheW91dFNpemUgRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBv
c2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxYRm9yRml4ZWRQb3Np
dGlvbigpLCBzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6
ZShzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpLCBzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpKTsK
IH0KIAotSW50UG9pbnQgRnJhbWVWaWV3OjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0CitM
YXlvdXRQb2ludCBGcmFtZVZpZXc6OmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91c2VQ
b3NpdGlvbigpIDogSW50UG9pbnQoKTsKIH0KIAotYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRl
bnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJl
Y3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCitib29sIEZyYW1lVmlldzo6c2Ny
b2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgTGF5
b3V0UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkKIHsKICAg
ICBjb25zdCBzaXplX3QgZml4ZWRPYmplY3RUaHJlc2hvbGQgPSA1OwogCkBAIC0xMzc0LDE0ICsx
Mzc2LDE0IEBAIGJvb2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGMKICAgICBj
b25zdCBib29sIGlzQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IGNvbnRlbnRzSW5Db21wb3NpdGVk
TGF5ZXIoKTsKIAogICAgIC8vIEdldCB0aGUgcmVjdHMgb2YgdGhlIGZpeGVkIG9iamVjdHMgdmlz
aWJsZSBpbiB0aGUgcmVjdFRvU2Nyb2xsCi0gICAgVmVjdG9yPEludFJlY3QsIGZpeGVkT2JqZWN0
VGhyZXNob2xkPiBzdWJSZWN0VG9VcGRhdGU7CisgICAgVmVjdG9yPExheW91dFJlY3QsIGZpeGVk
T2JqZWN0VGhyZXNob2xkPiBzdWJSZWN0VG9VcGRhdGU7CiAgICAgYm9vbCB1cGRhdGVJbnZhbGlk
YXRlZFN1YlJlY3QgPSB0cnVlOwogICAgIFJlbmRlckJsb2NrOjpQb3NpdGlvbmVkT2JqZWN0c0xp
c3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7
CiAgICAgZm9yIChSZW5kZXJCbG9jazo6UG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gKml0OwogICAgICAgICBpZiAo
cmVuZGVyQm94LT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gcmVuZGVyQm94LT5s
YXllcigpLT5yZXBhaW50UmVjdEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisgICAgICAgIExheW91
dFJlY3QgdXBkYXRlUmVjdCA9IHJlbmRlckJveC0+bGF5ZXIoKS0+cmVwYWludFJlY3RJbmNsdWRp
bmdEZXNjZW5kYW50cygpOwogICAgICAgICB1cGRhdGVSZWN0ID0gY29udGVudHNUb1dpbmRvdyh1
cGRhdGVSZWN0KTsKICAgICAgICAgaWYgKCFpc0NvbXBvc2l0ZWRDb250ZW50TGF5ZXIgJiYgY2xp
cHNSZXBhaW50cygpKQogICAgICAgICAgICAgdXBkYXRlUmVjdC5pbnRlcnNlY3QocmVjdFRvU2Ny
b2xsKTsKQEAgLTE0MDIsOCArMTQwNCw4IEBAIGJvb2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50
c0Zhc3RQYXRoKGMKICAgICAgICAgLy8gMikgdXBkYXRlIHRoZSBhcmVhIG9mIGZpeGVkIG9iamVj
dHMgdGhhdCBoYXMgYmVlbiBpbnZhbGlkYXRlZAogICAgICAgICBzaXplX3QgZml4T2JqZWN0c0Nv
dW50ID0gc3ViUmVjdFRvVXBkYXRlLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaXhPYmplY3RzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgSW50UmVjdCB1cGRhdGVS
ZWN0ID0gc3ViUmVjdFRvVXBkYXRlW2ldOwotICAgICAgICAgICAgSW50UmVjdCBzY3JvbGxlZFJl
Y3QgPSB1cGRhdGVSZWN0OworICAgICAgICAgICAgTGF5b3V0UmVjdCB1cGRhdGVSZWN0ID0gc3Vi
UmVjdFRvVXBkYXRlW2ldOworICAgICAgICAgICAgTGF5b3V0UmVjdCBzY3JvbGxlZFJlY3QgPSB1
cGRhdGVSZWN0OwogICAgICAgICAgICAgc2Nyb2xsZWRSZWN0Lm1vdmUoc2Nyb2xsRGVsdGEpOwog
ICAgICAgICAgICAgdXBkYXRlUmVjdC51bml0ZShzY3JvbGxlZFJlY3QpOwogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKQEAgLTE0MjYsNyArMTQyOCw3IEBAIGJvb2wgRnJhbWVWaWV3
OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
RnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QpCit2b2lkIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBMYXlvdXRS
ZWN0JiB1cGRhdGVSZWN0KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBpZiAoY29udGVudHNJbkNvbXBvc2l0ZWRMYXllcigpKSB7CkBAIC0xNDM2LDkgKzE0MzgsOSBA
QCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNTbG93UGF0aChjCiAgICAgfQogICAgIGlm
IChSZW5kZXJQYXJ0KiBmcmFtZVJlbmRlcmVyID0gbV9mcmFtZS0+b3duZXJSZW5kZXJlcigpKSB7
CiAgICAgICAgIGlmIChmcmFtZVJlbmRlcmVyLT5jb250YWluZXJGb3JSZXBhaW50KCkpIHsKLSAg
ICAgICAgICAgIEludFJlY3QgcmVjdChmcmFtZVJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBmcmFt
ZVJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1l
UmVuZGVyZXItPmJvcmRlclRvcCgpICsgZnJhbWVSZW5kZXJlci0+cGFkZGluZ1RvcCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpOwor
ICAgICAgICAgICAgTGF5b3V0UmVjdCByZWN0KGZyYW1lUmVuZGVyZXItPmJvcmRlckxlZnQoKSAr
IGZyYW1lUmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnJhbWVSZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyBmcmFtZVJlbmRlcmVyLT5wYWRkaW5nVG9w
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVdpZHRoKCksIHZpc2libGVI
ZWlnaHQoKSk7CiAgICAgICAgICAgICBmcmFtZVJlbmRlcmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJl
Y3QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNTgxLDcgKzE1ODMsNyBA
QCB2b2lkIEZyYW1lVmlldzo6bWFpbnRhaW5TY3JvbGxQb3NpdGlvbkF0CiAgICAgICAgIHNjcm9s
bFRvQW5jaG9yKCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpCit2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRp
b24oY29uc3QgTGF5b3V0UG9pbnQmIHNjcm9sbFBvaW50KQogewogICAgIGJvb2wgd2FzSW5Qcm9n
cmFtbWF0aWNTY3JvbGwgPSBtX2luUHJvZ3JhbW1hdGljU2Nyb2xsOwogICAgIG1faW5Qcm9ncmFt
bWF0aWNTY3JvbGwgPSB0cnVlOwpAQCAtMTY0MSwxOSArMTY0MywxOSBAQCBIb3N0V2luZG93KiBG
cmFtZVZpZXc6Omhvc3RXaW5kb3coKSBjb25zCiAKIGNvbnN0IHVuc2lnbmVkIGNSZXBhaW50UmVj
dFVuaW9uVGhyZXNob2xkID0gMjU7CiAKLXZvaWQgRnJhbWVWaWV3OjpyZXBhaW50Q29udGVudFJl
Y3RhbmdsZShjb25zdCBJbnRSZWN0JiByLCBib29sIGltbWVkaWF0ZSkKK3ZvaWQgRnJhbWVWaWV3
OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiByLCBib29sIGltbWVk
aWF0ZSkKIHsKICAgICBBU1NFUlQoIW1fZnJhbWUtPm93bmVyRWxlbWVudCgpKTsKIAogICAgIGRv
dWJsZSBkZWxheSA9IG1fZGVmZXJyaW5nUmVwYWludHMgPyAwIDogYWRqdXN0ZWREZWZlcnJlZFJl
cGFpbnREZWxheSgpOwogICAgIGlmICgobV9kZWZlcnJpbmdSZXBhaW50cyB8fCBtX2RlZmVycmVk
UmVwYWludFRpbWVyLmlzQWN0aXZlKCkgfHwgZGVsYXkpICYmICFpbW1lZGlhdGUpIHsKLSAgICAg
ICAgSW50UmVjdCBwYWludFJlY3QgPSByOworICAgICAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9
IHI7CiAgICAgICAgIGlmIChjbGlwc1JlcGFpbnRzKCkgJiYgIXBhaW50c0VudGlyZUNvbnRlbnRz
KCkpCiAgICAgICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KHZpc2libGVDb250ZW50UmVjdCgp
KTsKICAgICAgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGlmIChtX3JlcGFpbnRDb3VudCA9PSBjUmVwYWludFJlY3RVbmlvblRocmVzaG9s
ZCkgewotICAgICAgICAgICAgSW50UmVjdCB1bmlvbmVkUmVjdDsKKyAgICAgICAgICAgIExheW91
dFJlY3QgdW5pb25lZFJlY3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y1JlcGFpbnRSZWN0VW5pb25UaHJlc2hvbGQ7ICsraSkKICAgICAgICAgICAgICAgICB1bmlvbmVk
UmVjdC51bml0ZShtX3JlcGFpbnRSZWN0c1tpXSk7CiAgICAgICAgICAgICBtX3JlcGFpbnRSZWN0
cy5jbGVhcigpOwpAQCAtMjA0Miw3ICsyMDQ0LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRv
QW5jaG9yKCkKICAgICBpZiAoIWFuY2hvck5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEludFJlY3QgcmVjdDsKKyAgICBMYXlvdXRSZWN0IHJlY3Q7CiAgICAgaWYgKGFu
Y2hvck5vZGUgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmVjdCA9IGFuY2hvck5v
ZGUtPmdldFJlY3QoKTsKIApAQCAtMjE2Niw3ICsyMTY4LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnBl
cmZvcm1Qb3N0TGF5b3V0VGFza3MoKQogICAgIG1fYWN0aW9uU2NoZWR1bGVyLT5yZXN1bWUoKTsK
IAogICAgIGlmICghcm9vdC0+cHJpbnRpbmcoKSkgewotICAgICAgICBJbnRTaXplIGN1cnJlbnRT
aXplID0gSW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIExheW91dFNpemUgY3Vy
cmVudFNpemUgPSBMYXlvdXRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgZmxvYXQg
Y3VycmVudFpvb21GYWN0b3IgPSByb290LT5zdHlsZSgpLT56b29tKCk7CiAgICAgICAgIGJvb2wg
cmVzaXplZCA9ICFtX2ZpcnN0TGF5b3V0ICYmIChjdXJyZW50U2l6ZSAhPSBtX2xhc3RMYXlvdXRT
aXplIHx8IGN1cnJlbnRab29tRmFjdG9yICE9IG1fbGFzdFpvb21GYWN0b3IpOwogICAgICAgICBt
X2xhc3RMYXlvdXRTaXplID0gY3VycmVudFNpemU7CkBAIC0yMjA3LDE1ICsyMjA5LDE1IEBAIHZv
aWQgRnJhbWVWaWV3Ojp1cGRhdGVPdmVyZmxvd1N0YXR1cyhib28KICAgICAKIH0KIAotSW50UmVj
dCBGcmFtZVZpZXc6OndpbmRvd0NsaXBSZWN0KGJvb2wgY2xpcFRvQ29udGVudHMpIGNvbnN0CitM
YXlvdXRSZWN0IEZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QoYm9vbCBjbGlwVG9Db250ZW50cykg
Y29uc3QKIHsKICAgICBBU1NFUlQobV9mcmFtZS0+dmlldygpID09IHRoaXMpOwogCiAgICAgaWYg
KHBhaW50c0VudGlyZUNvbnRlbnRzKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50
KDAsIDApLCBjb250ZW50c1NpemUoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91
dFBvaW50KDAsIDApLCBjb250ZW50c1NpemUoKSk7CiAKICAgICAvLyBTZXQgb3VyIGNsaXAgcmVj
dCB0byBiZSBvdXIgY29udGVudHMuCi0gICAgSW50UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRzVG9X
aW5kb3codmlzaWJsZUNvbnRlbnRSZWN0KCFjbGlwVG9Db250ZW50cykpOworICAgIExheW91dFJl
Y3QgY2xpcFJlY3QgPSBjb250ZW50c1RvV2luZG93KHZpc2libGVDb250ZW50UmVjdCghY2xpcFRv
Q29udGVudHMpKTsKICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPm93bmVyRWxlbWVudCgp
KQogICAgICAgICByZXR1cm4gY2xpcFJlY3Q7CiAKQEAgLTIyMzEsMTQgKzIyMzMsMTQgQEAgSW50
UmVjdCBGcmFtZVZpZXc6OndpbmRvd0NsaXBSZWN0KGJvb2wgYwogICAgIHJldHVybiBjbGlwUmVj
dDsKIH0KIAotSW50UmVjdCBGcmFtZVZpZXc6OndpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIoY29uc3Qg
UmVuZGVyTGF5ZXIqIGxheWVyLCBib29sIGNsaXBUb0xheWVyQ29udGVudHMpIGNvbnN0CitMYXlv
dXRSZWN0IEZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3RGb3JMYXllcihjb25zdCBSZW5kZXJMYXll
ciogbGF5ZXIsIGJvb2wgY2xpcFRvTGF5ZXJDb250ZW50cykgY29uc3QKIHsKICAgICAvLyBJZiB3
ZSBoYXZlIG5vIGxheWVyLCBqdXN0IHJldHVybiBvdXIgd2luZG93IGNsaXAgcmVjdC4KICAgICBp
ZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gd2luZG93Q2xpcFJlY3QoKTsKIAogICAgIC8vIEFw
cGx5IHRoZSBjbGlwIGZyb20gdGhlIGxheWVyLgotICAgIEludFJlY3QgY2xpcFJlY3Q7CisgICAg
TGF5b3V0UmVjdCBjbGlwUmVjdDsKICAgICBpZiAoY2xpcFRvTGF5ZXJDb250ZW50cykKICAgICAg
ICAgY2xpcFJlY3QgPSBsYXllci0+Y2hpbGRyZW5DbGlwUmVjdCgpOwogICAgIGVsc2UKQEAgLTIy
NTMsMzMgKzIyNTUsMzMgQEAgYm9vbCBGcmFtZVZpZXc6OmlzQWN0aXZlKCkgY29uc3QKICAgICBy
ZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAot
dm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCkKK3ZvaWQg
RnJhbWVWaWV3OjpzY3JvbGxUbyhjb25zdCBMYXlvdXRTaXplJiBuZXdPZmZzZXQpCiB7Ci0gICAg
SW50U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICBMYXlvdXRTaXplIG9mZnNldCA9
IHNjcm9sbE9mZnNldCgpOwogICAgIFNjcm9sbFZpZXc6OnNjcm9sbFRvKG5ld09mZnNldCk7CiAg
ICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKICAgICAgICAgc2Nyb2xsUG9zaXRpb25D
aGFuZ2VkKCk7CiAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDaGFuZ2VTY3Jv
bGxPZmZzZXQoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBGcmFtZVZp
ZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBM
YXlvdXRSZWN0JiByZWN0KQogewogICAgIC8vIEFkZCBpbiBvdXIgb2Zmc2V0IHdpdGhpbiB0aGUg
RnJhbWVWaWV3LgotICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKKyAgICBMYXlvdXRSZWN0
IGRpcnR5UmVjdCA9IHJlY3Q7CiAgICAgZGlydHlSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0
aW9uKCkpOwogICAgIGludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CiB9CiAKLXZvaWQgRnJhbWVW
aWV3OjpnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpIGNvbnN0Cit2b2lk
IEZyYW1lVmlldzo6Z2V0VGlja21hcmtzKFZlY3RvcjxMYXlvdXRSZWN0PiYgdGlja21hcmtzKSBj
b25zdAogewogICAgIHRpY2ttYXJrcyA9IGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiB9CiAK
LUludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0CitMYXlvdXRSZWN0
IEZyYW1lVmlldzo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAogewogICAgIFBhZ2UqIHBhZ2Ug
PSBmcmFtZSgpID8gZnJhbWUoKS0+cGFnZSgpIDogMDsKICAgICBpZiAoIXBhZ2UpCi0gICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAgICAgcmV0
dXJuIHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZXNpemVyUmVjdCgpOwogfQogCkBAIC0yMzE1LDcg
KzIzMTcsNyBAQCB2b2lkIEZyYW1lVmlldzo6ZGlkQ29tcGxldGVBbmltYXRlZFNjcm9sCiAgICAg
cmV0dXJuIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+ZGlkQ29tcGxldGVBbmltYXRlZFNjcm9s
bCgpOwogfQogCi12b2lkIEZyYW1lVmlldzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNv
bnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCit2b2lkIEZyYW1lVmlldzo6c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KGNvbnN0IExheW91dFJlY3QmIHNjcm9sbGVyVGh1bWIpCiB7CiAgICAg
UGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0yNDQ2LDcg
KzI0NDgsNyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlU2Nyb2xsQ29ybmVyKCkKICAgICBTY3Jv
bGxWaWV3Ojp1cGRhdGVTY3JvbGxDb3JuZXIoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnBhaW50
U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29y
bmVyUmVjdCkKK3ZvaWQgRnJhbWVWaWV3OjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGNvcm5lclJlY3QpCiB7CiAgICAgaWYgKGNv
bnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKICAgICAgICAgdXBkYXRlU2Nyb2xsQ29y
bmVyKCk7CkBAIC0yNTY2LDcgKzI1NjgsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0V2FzU2Nyb2xs
ZWRCeVVzZXIoYm9vCiAgICAgbV93YXNTY3JvbGxlZEJ5VXNlciA9IHdhc1Njcm9sbGVkQnlVc2Vy
OwogfQogCi12b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIHAs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFw
aGljc0NvbnRleHQqIHAsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFmcmFt
ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjg1LDcgKzI2ODcsNyBAQCB2b2lkIEZyYW1lVmll
dzo6c2V0Tm9kZVRvRHJhdyhOb2RlKiBub2RlCiAgICAgbV9ub2RlVG9EcmF3ID0gbm9kZTsKIH0K
IAotdm9pZCBGcmFtZVZpZXc6OnBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJl
Y3QmIHZlcnRpY2FsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lk
IEZyYW1lVmlldzo6cGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgTGF5b3V0UmVj
dCYgdmVydGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKIHsK
ICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yNzUzLDcgKzI3NTUsNyBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0
aW9uCiAgICAgICAgIGZsb2F0IHBhZ2VMb2dpY2FsV2lkdGggPSByb290LT5zdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gcGFnZVNpemUud2lkdGgoKSA6IHBhZ2VTaXplLmhlaWdo
dCgpOwogICAgICAgICBmbG9hdCBwYWdlTG9naWNhbEhlaWdodCA9IHJvb3QtPnN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwYWdlU2l6ZS5oZWlnaHQoKSA6IHBhZ2VTaXplLndp
ZHRoKCk7CiAKLSAgICAgICAgaW50IGZsb29yZWRQYWdlTG9naWNhbFdpZHRoID0gc3RhdGljX2Nh
c3Q8aW50PihwYWdlTG9naWNhbFdpZHRoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBmbG9vcmVkUGFn
ZUxvZ2ljYWxXaWR0aCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHBhZ2VMb2dpY2FsV2lkdGgp
OwogICAgICAgICByb290LT5zZXRMb2dpY2FsV2lkdGgoZmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGgp
OwogICAgICAgICByb290LT5zZXRQYWdlTG9naWNhbEhlaWdodChwYWdlTG9naWNhbEhlaWdodCk7
CiAgICAgICAgIHJvb3QtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwpAQCAt
Mjc2NCw3ICsyNzY2LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlv
bgogICAgICAgICAvLyBGSVhNRTogV2UgYXJlIGFzc3VtaW5nIGEgc2hyaW5rLXRvLWZpdCBwcmlu
dGluZyBpbXBsZW1lbnRhdGlvbi4gIEEgY3JvcHBpbmcKICAgICAgICAgLy8gaW1wbGVtZW50YXRp
b24gc2hvdWxkIG5vdCBkbyB0aGlzIQogICAgICAgICBib29sIGhvcml6b250YWxXcml0aW5nTW9k
ZSA9IHJvb3QtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgICAgIGlu
dCBkb2NMb2dpY2FsV2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyByb290LT5kb2N1bWVu
dFJlY3QoKS53aWR0aCgpIDogcm9vdC0+ZG9jdW1lbnRSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAg
IExheW91dFVuaXQgZG9jTG9naWNhbFdpZHRoID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gcm9v
dC0+ZG9jdW1lbnRSZWN0KCkud2lkdGgoKSA6IHJvb3QtPmRvY3VtZW50UmVjdCgpLmhlaWdodCgp
OwogICAgICAgICBpZiAoZG9jTG9naWNhbFdpZHRoID4gcGFnZUxvZ2ljYWxXaWR0aCkgewogICAg
ICAgICAgICAgZmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGggPSBzdGQ6Om1pbjxmbG9hdD4oZG9jTG9n
aWNhbFdpZHRoLCBwYWdlTG9naWNhbFdpZHRoICogbWF4aW11bVNocmlua0ZhY3Rvcik7CiAgICAg
ICAgICAgICBpZiAocGFnZUxvZ2ljYWxIZWlnaHQpCkBAIC0yNzcyLDE0ICsyNzc0LDE0IEBAIHZv
aWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24KICAgICAgICAgICAgIHJvb3Qt
PnNldExvZ2ljYWxXaWR0aChmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBy
b290LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIGZv
cmNlTGF5b3V0KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBkb2N1bWVudFJlY3QgPSBy
b290LT5kb2N1bWVudFJlY3QoKTsKLSAgICAgICAgICAgIGludCBkb2NMb2dpY2FsSGVpZ2h0ID0g
aG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZG9jdW1lbnRSZWN0LmhlaWdodCgpIDogZG9jdW1lbnRS
ZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBpbnQgZG9jTG9naWNhbFRvcCA9IGhvcml6b250YWxX
cml0aW5nTW9kZSA/IGRvY3VtZW50UmVjdC55KCkgOiBkb2N1bWVudFJlY3QueCgpOwotICAgICAg
ICAgICAgaW50IGRvY0xvZ2ljYWxSaWdodCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGRvY3Vt
ZW50UmVjdC5tYXhYKCkgOiBkb2N1bWVudFJlY3QubWF4WSgpOwotICAgICAgICAgICAgaW50IGNs
aXBwZWRMb2dpY2FsTGVmdCA9IDA7CisgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBkb2N1
bWVudFJlY3QgPSByb290LT5kb2N1bWVudFJlY3QoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQg
ZG9jTG9naWNhbEhlaWdodCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGRvY3VtZW50UmVjdC5o
ZWlnaHQoKSA6IGRvY3VtZW50UmVjdC53aWR0aCgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBk
b2NMb2dpY2FsVG9wID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZG9jdW1lbnRSZWN0LnkoKSA6
IGRvY3VtZW50UmVjdC54KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGRvY0xvZ2ljYWxSaWdo
dCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGRvY3VtZW50UmVjdC5tYXhYKCkgOiBkb2N1bWVu
dFJlY3QubWF4WSgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBjbGlwcGVkTG9naWNhbExlZnQg
PSAwOwogICAgICAgICAgICAgaWYgKCFyb290LT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCiAgICAgICAgICAgICAgICAgY2xpcHBlZExvZ2ljYWxMZWZ0ID0gZG9jTG9naWNhbFJp
Z2h0IC0gZmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICBJbnRSZWN0IG92ZXJm
bG93KGNsaXBwZWRMb2dpY2FsTGVmdCwgZG9jTG9naWNhbFRvcCwgZmxvb3JlZFBhZ2VMb2dpY2Fs
V2lkdGgsIGRvY0xvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBvdmVyZmxv
dyhjbGlwcGVkTG9naWNhbExlZnQsIGRvY0xvZ2ljYWxUb3AsIGZsb29yZWRQYWdlTG9naWNhbFdp
ZHRoLCBkb2NMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIGlmICghaG9yaXpvbnRhbFdyaXRp
bmdNb2RlKQogICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gb3ZlcmZsb3cudHJhbnNwb3NlZFJl
Y3QoKTsKICAgICAgICAgICAgIHJvb3QtPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKQEAgLTI4MDks
OSArMjgxMSw5IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXQKICAg
ICAgICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRvbTsKIH0KIAotSW50UmVjdCBGcmFtZVZpZXc6OmNv
bnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50
UmVjdCYgcmVuZGVyZXJSZWN0KSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRG
cm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVj
dCYgcmVuZGVyZXJSZWN0KSBjb25zdAogewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyLT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZW5kZXJlclJlY3QpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOworICAgIExheW91dFJlY3QgcmVjdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChyZW5kZXJlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwog
CiAgICAgLy8gQ29udmVydCBmcm9tIHBhZ2UgKCJhYnNvbHV0ZSIpIHRvIEZyYW1lVmlldyBjb29y
ZGluYXRlcy4KICAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CkBAIC0yODE5LDMx
ICsyODIxLDMxIEBAIEludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVyKGMKICAg
ICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRUb1JlbmRlcmVy
KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIHZpZXdSZWN0KSBj
b25zdAorTGF5b3V0UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHZpZXdSZWN0KSBjb25zdAogewot
ICAgIEludFJlY3QgcmVjdCA9IHZpZXdSZWN0OworICAgIExheW91dFJlY3QgcmVjdCA9IHZpZXdS
ZWN0OwogICAgIAogICAgIC8vIENvbnZlcnQgZnJvbSBGcmFtZVZpZXcgY29vcmRzIGludG8gcGFn
ZSAoImFic29sdXRlIikgY29vcmRpbmF0ZXMuCiAgICAgcmVjdC5tb3ZlQnkoc2Nyb2xsUG9zaXRp
b24oKSk7CiAKICAgICAvLyBGSVhNRTogd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBtYXAgYW4gYWJz
b2x1dGUgcmVjdCBkb3duIHRvIGEgbG9jYWwgcXVhZCwgc28ganVzdAogICAgIC8vIG1vdmUgdGhl
IHJlY3QgZm9yIG5vdy4KLSAgICByZWN0LnNldExvY2F0aW9uKHJvdW5kZWRJbnRQb2ludChyZW5k
ZXJlci0+YWJzb2x1dGVUb0xvY2FsKHJlY3QubG9jYXRpb24oKSwgZmFsc2UsIHRydWUgLyogdXNl
IHRyYW5zZm9ybXMgKi8pKSk7CisgICAgcmVjdC5zZXRMb2NhdGlvbihyb3VuZGVkTGF5b3V0UG9p
bnQocmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChyZWN0LmxvY2F0aW9uKCksIGZhbHNlLCB0cnVl
IC8qIHVzZSB0cmFuc2Zvcm1zICovKSkpOwogICAgIHJldHVybiByZWN0OwogfQogCi1JbnRQb2lu
dCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgSW50UG9pbnQmIHJlbmRlcmVyUG9pbnQpIGNvbnN0CitMYXlvdXRQb2ludCBG
cmFtZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgTGF5b3V0UG9pbnQmIHJlbmRlcmVyUG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UG9p
bnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQocmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShyZW5k
ZXJlclBvaW50LCBmYWxzZSwgdHJ1ZSAvKiB1c2UgdHJhbnNmb3JtcyAqLykpOworICAgIExheW91
dFBvaW50IHBvaW50ID0gcm91bmRlZExheW91dFBvaW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGUocmVuZGVyZXJQb2ludCwgZmFsc2UsIHRydWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKTsKIAog
ICAgIC8vIENvbnZlcnQgZnJvbSBwYWdlICgiYWJzb2x1dGUiKSB0byBGcmFtZVZpZXcgY29vcmRp
bmF0ZXMuCiAgICAgcG9pbnQubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKICAgICByZXR1cm4g
cG9pbnQ7CiB9CiAKLUludFBvaW50IEZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVyZXIoY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UG9pbnQmIHZpZXdQb2ludCkgY29uc3QK
K0xheW91dFBvaW50IEZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0UG9pbnQmIHZpZXdQb2ludCkgY29uc3QKIHsKLSAg
ICBJbnRQb2ludCBwb2ludCA9IHZpZXdQb2ludDsKKyAgICBMYXlvdXRQb2ludCBwb2ludCA9IHZp
ZXdQb2ludDsKICAgICAKICAgICAvLyBDb252ZXJ0IGZyb20gRnJhbWVWaWV3IGNvb3JkcyBpbnRv
IHBhZ2UgKCJhYnNvbHV0ZSIpIGNvb3JkaW5hdGVzLgogICAgIHBvaW50ICs9IEludFNpemUoc2Ny
b2xsWCgpLCBzY3JvbGxZKCkpOwpAQCAtMjg1MSw3ICsyODUzLDcgQEAgSW50UG9pbnQgRnJhbWVW
aWV3Ojpjb252ZXJ0VG9SZW5kZXJlcihjbwogICAgIHJldHVybiByb3VuZGVkSW50UG9pbnQocmVu
ZGVyZXItPmFic29sdXRlVG9Mb2NhbChwb2ludCwgZmFsc2UsIHRydWUgLyogdXNlIHRyYW5zZm9y
bXMgKi8pKTsKIH0KIAotSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK0xheW91dFJlY3QgRnJhbWVWaWV3Ojpj
b252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0
CiB7CiAgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQo
KSkgewogICAgICAgICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkgewpAQCAt
Mjg2MSw3ICsyODYzLDcgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRUb0NvbnRhaW5pbmdW
aQogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gbG9j
YWxSZWN0OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgSW50UmVjdCByZWN0KGxvY2Fs
UmVjdCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHJlY3QobG9jYWxSZWN0KTsKICAgICAgICAg
ICAgIC8vIEFkZCBib3JkZXJzIGFuZCBwYWRkaW5nPz8KICAgICAgICAgICAgIHJlY3QubW92ZShy
ZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdU
b3AoKSk7CkBAIC0yODc0LDcgKzI4NzYsNyBAQCBJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVydFRv
Q29udGFpbmluZ1ZpCiAgICAgcmV0dXJuIGxvY2FsUmVjdDsKIH0KIAotSW50UmVjdCBGcmFtZVZp
ZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkg
Y29uc3QKK0xheW91dFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNv
bnN0IExheW91dFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnN0IFNjcm9s
bFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgewogICAgICAgICBpZiAocGFyZW50
U2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkgewpAQCAtMjg4NSw3ICsyODg3LDcgQEAgSW50UmVj
dCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZwogICAgICAgICAgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50UmVjdDsKIAotICAgICAgICAgICAg
SW50UmVjdCByZWN0ID0gcGFyZW50Vmlldy0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIsIHBh
cmVudFJlY3QpOworICAgICAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gcGFyZW50Vmlldy0+Y29u
dmVydFRvUmVuZGVyZXIocmVuZGVyZXIsIHBhcmVudFJlY3QpOwogICAgICAgICAgICAgLy8gU3Vi
dHJhY3QgYm9yZGVycyBhbmQgcGFkZGluZwogICAgICAgICAgICAgcmVjdC5tb3ZlKC1yZW5kZXJl
ci0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkp
OwpAQCAtMjg5OCw3ICsyOTAwLDcgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZwogICAgIHJldHVybiBwYXJlbnRSZWN0OwogfQogCi1JbnRQb2ludCBGcmFtZVZpZXc6
OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25z
dAorTGF5b3V0UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBM
YXlvdXRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKIHsKICAgICBpZiAoY29uc3QgU2Nyb2xsVmll
dyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7CiAgICAgICAgIGlmIChwYXJlbnRTY3Jv
bGxWaWV3LT5pc0ZyYW1lVmlldygpKSB7CkBAIC0yOTA5LDcgKzI5MTEsNyBAQCBJbnRQb2ludCBG
cmFtZVZpZXc6OmNvbnZlcnRUb0NvbnRhaW5pbmdWCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFBvaW50OwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgSW50UG9pbnQgcG9pbnQobG9jYWxQb2ludCk7CisgICAgICAgICAgICBMYXlv
dXRQb2ludCBwb2ludChsb2NhbFBvaW50KTsKIAogICAgICAgICAgICAgLy8gQWRkIGJvcmRlcnMg
YW5kIHBhZGRpbmcKICAgICAgICAgICAgIHBvaW50Lm1vdmUocmVuZGVyZXItPmJvcmRlckxlZnQo
KSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLApAQCAtMjkyMyw3ICsyOTI1LDcgQEAgSW50UG9p
bnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVgogICAgIHJldHVybiBsb2NhbFBvaW50
OwogfQogCi1JbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29u
c3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAorTGF5b3V0UG9pbnQgRnJhbWVWaWV3Ojpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFBvaW50JiBwYXJlbnRQb2ludCkg
Y29uc3QKIHsKICAgICBpZiAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBh
cmVudCgpKSB7CiAgICAgICAgIGlmIChwYXJlbnRTY3JvbGxWaWV3LT5pc0ZyYW1lVmlldygpKSB7
CkBAIC0yOTM0LDcgKzI5MzYsNyBAQCBJbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29u
dGFpbmluCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIHJldHVy
biBwYXJlbnRQb2ludDsKIAotICAgICAgICAgICAgSW50UG9pbnQgcG9pbnQgPSBwYXJlbnRWaWV3
LT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJlciwgcGFyZW50UG9pbnQpOworICAgICAgICAgICAg
TGF5b3V0UG9pbnQgcG9pbnQgPSBwYXJlbnRWaWV3LT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJl
ciwgcGFyZW50UG9pbnQpOwogICAgICAgICAgICAgLy8gU3VidHJhY3QgYm9yZGVycyBhbmQgcGFk
ZGluZwogICAgICAgICAgICAgcG9pbnQubW92ZSgtcmVuZGVyZXItPmJvcmRlckxlZnQoKSAtIHJl
bmRlcmVyLT5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAtcmVuZGVyZXIt
PmJvcmRlclRvcCgpIC0gcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgJKHJldmlzaW9uIDkzMDcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCBjbGFzcyBFdmVudDsKIGNs
YXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVBY3Rpb25TY2hlZHVsZXI7
Ci1jbGFzcyBJbnRSZWN0OwogY2xhc3MgS1VSTDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOwpA
QCAtNjMsOCArNjIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3coKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBMYXlvdXRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CiAjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRp
b24oKTsKICNlbmRpZgpAQCAtNzIsMTAgKzcxLDEwIEBAIHB1YmxpYzoKICAgICBGcmFtZSogZnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lLmdldCgpOyB9CiAgICAgdm9pZCBjbGVhckZyYW1l
KCk7CiAKLSAgICBpbnQgbWFyZ2luV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbnMud2lk
dGgoKTsgfSAvLyAtMSBtZWFucyBkZWZhdWx0Ci0gICAgaW50IG1hcmdpbkhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFyZ2lucy5oZWlnaHQoKTsgfSAvLyAtMSBtZWFucyBkZWZhdWx0Ci0gICAg
dm9pZCBzZXRNYXJnaW5XaWR0aChpbnQpOwotICAgIHZvaWQgc2V0TWFyZ2luSGVpZ2h0KGludCk7
CisgICAgTGF5b3V0VW5pdCBtYXJnaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2lucy53
aWR0aCgpOyB9IC8vIC0xIG1lYW5zIGRlZmF1bHQKKyAgICBMYXlvdXRVbml0IG1hcmdpbkhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2lucy5oZWlnaHQoKTsgfSAvLyAtMSBtZWFucyBkZWZh
dWx0CisgICAgdm9pZCBzZXRNYXJnaW5XaWR0aChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldE1h
cmdpbkhlaWdodChMYXlvdXRVbml0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDYW5IYXZlU2Ny
b2xsYmFycyhib29sKTsKICAgICB2b2lkIHVwZGF0ZUNhbkhhdmVTY3JvbGxiYXJzKCk7CkBAIC04
Niw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZUhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNT
aXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTaXplKGNv
bnN0IExheW91dFNpemUmKTsKIAogICAgIHZvaWQgbGF5b3V0KGJvb2wgYWxsb3dTdWJ0cmVlID0g
dHJ1ZSk7CiAgICAgYm9vbCBkaWRGaXJzdExheW91dCgpIGNvbnN0OwpAQCAtMTU4LDEyICsxNTcs
MTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGp1c3RWaWV3U2l6ZSgpOwogICAgIAotICAgIHZp
cnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdChib29sIGNsaXBUb0NvbnRlbnRzID0gdHJ1ZSkg
Y29uc3Q7Ci0gICAgSW50UmVjdCB3aW5kb3dDbGlwUmVjdEZvckxheWVyKGNvbnN0IFJlbmRlckxh
eWVyKiwgYm9vbCBjbGlwVG9MYXllckNvbnRlbnRzKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91
dFJlY3Qgd2luZG93Q2xpcFJlY3QoYm9vbCBjbGlwVG9Db250ZW50cyA9IHRydWUpIGNvbnN0Owor
ICAgIExheW91dFJlY3Qgd2luZG93Q2xpcFJlY3RGb3JMYXllcihjb25zdCBSZW5kZXJMYXllcios
IGJvb2wgY2xpcFRvTGF5ZXJDb250ZW50cykgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEludFJlY3Qg
d2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgd2luZG93
UmVzaXplclJlY3QoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IExheW91dFBvaW50
Jik7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldCgpOwog
ICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7CiAg
ICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rp
b24pIGNvbnN0OwpAQCAtMTg2LDkgKzE4NSw5IEBAIHB1YmxpYzoKIAogICAgIC8vIEZ1bmN0aW9u
cyBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsZWQgcG9zaXRpb24sIG5lZ2F0aW5nIHRo
ZSBlZmZlY3RzIG9mIG92ZXJoYW5nCiAgICAgLy8gYW5kIGFkanVzdGluZyBmb3IgcGFnZSBzY2Fs
ZS4KLSAgICBpbnQgc2Nyb2xsWEZvckZpeGVkUG9zaXRpb24oKSBjb25zdDsKLSAgICBpbnQgc2Ny
b2xsWUZvckZpeGVkUG9zaXRpb24oKSBjb25zdDsKLSAgICBJbnRTaXplIHNjcm9sbE9mZnNldEZv
ckZpeGVkUG9zaXRpb24oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNjcm9sbFhGb3JGaXhlZFBv
c2l0aW9uKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigp
IGNvbnN0OworICAgIExheW91dFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNv
bnN0OwogCiAgICAgdm9pZCBiZWdpbkRlZmVycmVkUmVwYWludHMoKTsKICAgICB2b2lkIGVuZERl
ZmVycmVkUmVwYWludHMoKTsKQEAgLTIxMywxNSArMjEyLDE1IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZFdpZGdldFRvVXBkYXRlKFJlbmRlckVtYmVkZGVkT2JqZWN0Kik7CiAgICAgdm9pZCByZW1v
dmVXaWRnZXRUb1VwZGF0ZShSZW5kZXJFbWJlZGRlZE9iamVjdCopOwogCi0gICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7CiAgICAgdm9pZCBzZXRQYWludEJlaGF2aW9y
KFBhaW50QmVoYXZpb3IpOwogICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcigpIGNvbnN0
OwogICAgIGJvb2wgaXNQYWludGluZygpIGNvbnN0OwogICAgIGJvb2wgaGFzRXZlclBhaW50ZWQo
KSBjb25zdCB7IHJldHVybiBtX2xhc3RQYWludFRpbWU7IH0KICAgICB2b2lkIHNldE5vZGVUb0Ry
YXcoTm9kZSopOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25zdCBJ
bnRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsK
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50T3ZlcmhhbmdB
cmVhcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiBob3Jpem9udGFsT3Zlcmhh
bmdBcmVhLCBjb25zdCBMYXlvdXRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nQXJlYSwgY29uc3QgTGF5
b3V0UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgY29ybmVyUmVjdCk7CiAKICAgICBD
b2xvciBkb2N1bWVudEJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogCkBAIC0yNjEsMTAgKzI2MCwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWludGFpblNjcm9sbFBvc2l0aW9uQXRBbmNob3IoTm9k
ZSopOwogCiAgICAgLy8gTWV0aG9kcyB0byBjb252ZXJ0IHBvaW50cyBhbmQgcmVjdHMgYmV0d2Vl
biB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgcmVuZGVyZXIsIGFuZCB0aGlzIHZpZXcuCi0g
ICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9S
ZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCos
IGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0VG9S
ZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVj
dCosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgY29u
dmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNv
bnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydEZyb21SZW5kZXJlcihjb25zdCBS
ZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5
b3V0UG9pbnQgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5
b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIGJvb2wgaXNGcmFtZVZpZXdTY3JvbGxDb3JuZXIoUmVu
ZGVyU2Nyb2xsYmFyUGFydCogc2Nyb2xsQ29ybmVyKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbENv
cm5lciA9PSBzY3JvbGxDb3JuZXI7IH0KIApAQCAtMjc5LDcgKzI3OCw3IEBAIHB1YmxpYzoKICAg
ICAvLyBPbiBlYWNoIHJlcGFpbnQgdGhlIGRlbGF5IGluY3Jlc2VzIGJ5IHRoaXMgYW1vdW50CiAg
ICAgc3RhdGljIHZvaWQgc2V0UmVwYWludFRocm90dGxpbmdEZWZlcnJlZFJlcGFpbnREZWxheUlu
Y3JlbWVudER1cmluZ0xvYWRpbmcoZG91YmxlIHApOwogCi0gICAgdmlydHVhbCBJbnRQb2ludCBj
dXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY3Vy
cmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBt
ZXRob2Qgb25jZSBwbHVnaW4gbG9hZGluZyBpcyBkZWNvdXBsZWQgZnJvbSBsYXlvdXQuCiAgICAg
dm9pZCBmbHVzaEFueVBlbmRpbmdQb3N0TGF5b3V0VGFza3MoKTsKQEAgLTI5MSw4ICsyOTAsOCBA
QCBwdWJsaWM6CiAgICAgUmVuZGVyQm94KiBlbWJlZGRlZENvbnRlbnRCb3goKSBjb25zdDsKIAog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQ29udGVudHNTbG93
UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xs
Q29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgTGF5b3V0
UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCk7CisgICAgdmly
dHVhbCB2b2lkIHNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgTGF5b3V0UmVjdCYgdXBkYXRl
UmVjdCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWZXJ0aWNhbERvY3VtZW50KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGlzRmxpcHBlZERvY3VtZW50KCkgY29uc3Q7CkBAIC0zMjAsMjcgKzMx
OSwyNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZm9yY2VMYXlvdXRQYXJlbnRWaWV3SWZOZWVkZWQo
KTsKICAgICB2b2lkIHBlcmZvcm1Qb3N0TGF5b3V0VGFza3MoKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCByZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUp
OworICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBMYXlvdXRS
ZWN0JiwgYm9vbCBpbW1lZGlhdGUpOwogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6ZWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaWJsZUNvbnRlbnRzUmVzaXplZCgpOwogCiAgICAgLy8g
T3ZlcnJpZGUgU2Nyb2xsVmlldyBtZXRob2RzIHRvIGRvIHBvaW50IGNvbnZlcnNpb24gdmlhIHJl
bmRlcmVycywgaW4gb3JkZXIgdG8KICAgICAvLyB0YWtlIHRyYW5zZm9ybXMgaW50byBhY2NvdW50
LgotICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRS
ZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgTGF5b3V0
UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50
IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CisgICAg
dmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91
dFBvaW50JikgY29uc3Q7CiAKICAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxi
YXIqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1
YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPExheW91dFJlY3Q+JikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHNjcm9sbFRvKGNvbnN0IExheW91dFNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkU3RhcnRSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkU3RhcnRBbmltYXRlZFNjcm9sbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZUFuaW1hdGVkU2Nyb2xsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAg
dmlydHVhbCBib29sIGlzT25BY3RpdmVQYWdlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JvbGxh
YmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKIApAQCAtMzc2LDggKzM3
NSw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGRvdWJsZSBzQ3VycmVudFBhaW50VGlt
ZVN0YW1wOyAvLyB1c2VkIGZvciBkZXRlY3RpbmcgZGVjb2RlZCByZXNvdXJjZSB0aHJhc2ggaW4g
dGhlIGNhY2hlCiAKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbWFyZ2luczsK
KyAgICBMYXlvdXRTaXplIG1fc2l6ZTsKKyAgICBMYXlvdXRTaXplIG1fbWFyZ2luczsKICAgICAK
ICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVuZGVyRW1iZWRkZWRPYmplY3QqPiBSZW5kZXJFbWJlZGRl
ZE9iamVjdFNldDsKICAgICBPd25QdHI8UmVuZGVyRW1iZWRkZWRPYmplY3RTZXQ+IG1fd2lkZ2V0
VXBkYXRlU2V0OwpAQCAtNDExLDcgKzQxMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZpcnN0
TGF5b3V0OwogICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50OwogICAgIENvbG9yIG1fYmFzZUJhY2tn
cm91bmRDb2xvcjsKLSAgICBJbnRTaXplIG1fbGFzdExheW91dFNpemU7CisgICAgTGF5b3V0U2l6
ZSBtX2xhc3RMYXlvdXRTaXplOwogICAgIGZsb2F0IG1fbGFzdFpvb21GYWN0b3I7CiAKICAgICBT
dHJpbmcgbV9tZWRpYVR5cGU7CkBAIC00MjksNyArNDI4LDcgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB1bnNpZ25lZCBtX2RlZmVycmluZ1JlcGFpbnRzOwogICAgIHVuc2lnbmVkIG1fcmVwYWludENv
dW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX3JlcGFpbnRSZWN0czsKKyAgICBWZWN0b3I8TGF5
b3V0UmVjdD4gbV9yZXBhaW50UmVjdHM7CiAgICAgVGltZXI8RnJhbWVWaWV3PiBtX2RlZmVycmVk
UmVwYWludFRpbWVyOwogICAgIGRvdWJsZSBtX2RlZmVycmVkUmVwYWludERlbGF5OwogICAgIGRv
dWJsZSBtX2xhc3RQYWludFRpbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9GcmFt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5t
bQkocmV2aXNpb24gOTMwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBAIE5TSW1hZ2UqIEZyYW1lOjpzbmFw
c2hvdERyYWdJbWFnZShOb2RlKiAKICAgICByZW5kZXJlci0+dXBkYXRlRHJhZ1N0YXRlKHRydWUp
OyAgICAvLyBtYXJrIGRyYWdnZWQgbm9kZXMgKHNvIHRoZXkgcGljayB1cCB0aGUgcmlnaHQgQ1NT
KQogICAgIG1fZG9jLT51cGRhdGVMYXlvdXQoKTsgICAgICAgIC8vIGZvcmNlcyBzdHlsZSByZWNh
bGMgLSBuZWVkZWQgc2luY2UgY2hhbmdpbmcgdGhlIGRyYWcgc3RhdGUgbWlnaHQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBseSBuZXcgc3R5bGVzLCBwbHVz
IEpTIGNvdWxkIGhhdmUgY2hhbmdlZCBvdGhlciB0aGluZ3MKLSAgICBJbnRSZWN0IHRvcExldmVs
UmVjdDsKKyAgICBMYXlvdXRSZWN0IHRvcExldmVsUmVjdDsKICAgICBOU1JlY3QgcGFpbnRpbmdS
ZWN0ID0gcmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2ZWxSZWN0KTsKIAogICAgIG1f
dmlldy0+c2V0Tm9kZVRvRHJhdyhub2RlKTsgICAgICAgICAgICAgIC8vIGludm9rZSBzcGVjaWFs
IHN1Yi10cmVlIGRyYXdpbmcgbW9kZQpAQCAtMzI3LDcgKzMyNyw3IEBAIERyYWdJbWFnZVJlZiBG
cmFtZTo6bm9kZUltYWdlKE5vZGUqIG5vZGUKIAogICAgIG1fZG9jLT51cGRhdGVMYXlvdXQoKTsg
Ly8gZm9yY2VzIHN0eWxlIHJlY2FsYwogCi0gICAgSW50UmVjdCB0b3BMZXZlbFJlY3Q7CisgICAg
TGF5b3V0UmVjdCB0b3BMZXZlbFJlY3Q7CiAgICAgTlNSZWN0IHBhaW50aW5nUmVjdCA9IHJlbmRl
cmVyLT5wYWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCk7CiAKICAgICBtX3ZpZXctPnNldE5v
ZGVUb0RyYXcobm9kZSk7IC8vIGludm9rZSBzcGVjaWFsIHN1Yi10cmVlIGRyYXdpbmcgbW9kZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104210</attachid>
            <date>2011-08-17 12:17:34 -0700</date>
            <delta_ts>2011-08-17 21:06:19 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-66147-20110817121733.patch</filename>
            <type>text/plain</type>
            <size>41399</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMjMxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDgtMTcgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBGcmFtZVZpZXcgdG8g
dG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKwor
ICAgICAgICBDb252ZXJ0IEZyYW1lICYgRnJhbWVWaWV3IHRvIG5ldyBsYXlvdXQgYWJzdHJhY3Rp
b24gYXMgYSBwYXJ0IG9mIHRoZQorICAgICAgICBvbmdvaW5nIGNvbnZlcnNpb24gd29yay4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6dmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRvY3VtZW50QXRQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6c2NhbGVQYWdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFn
ZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEZyYW1lUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldE1hcmdpbldpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6c2V0TWFyZ2luSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRq
dXN0Vmlld1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxYRm9yRml4
ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFlGb3JGaXhl
ZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9y
Rml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmN1cnJlbnRNb3Vz
ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNG
YXN0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzU2xv
d1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmdldFRpY2ttYXJr
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6cGFpbnRPdmVyaGFuZ0FyZWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6Y29udmVydEZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OmNvbnZlcnRUb1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udmVy
dFRvQ29udGFpbmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjptYXJnaW5XaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6Om1hcmdpbkhlaWdodCk6CisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWU6Om5vZGVJbWFnZSk6CisKIDIwMTEtMDgtMTcgIFRvbnkgQ2hhbmcgIDx0
b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggY2hyb21pdW0gbWFjIGNvbXBpbGUuICBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLiogbW92ZWQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCShyZXZpc2lvbiA5MzIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzgsNyArODM4LDcgQEAgU3RyaW5nIEZyYW1lOjpkaXNw
bGF5U3RyaW5nTW9kaWZpZWRCeUVuYwogICAgIHJldHVybiBkb2N1bWVudCgpID8gZG9jdW1lbnQo
KS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzdHIpIDogc3RyOwogfQogCi1WaXNp
YmxlUG9zaXRpb24gRnJhbWU6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50
JiBmcmFtZVBvaW50KQorVmlzaWJsZVBvc2l0aW9uIEZyYW1lOjp2aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYgZnJhbWVQb2ludCkKIHsKICAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IGV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChmcmFtZVBvaW50
LCB0cnVlKTsKICAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwpA
QCAtODUzLDEyICs4NTMsMTIgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lOjp2aXNpYmxlUG9zaXRp
b25GbwogICAgIHJldHVybiB2aXNpYmxlUG9zOwogfQogCi1Eb2N1bWVudCogRnJhbWU6OmRvY3Vt
ZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCitEb2N1bWVudCogRnJhbWU6OmRvY3Vt
ZW50QXRQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKCF2aWV3KCkp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSW50UG9pbnQgcHQgPSB2aWV3KCktPndpbmRvd1Rv
Q29udGVudHMocG9pbnQpOworICAgIExheW91dFBvaW50IHB0ID0gdmlldygpLT53aW5kb3dUb0Nv
bnRlbnRzKHBvaW50KTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IEhpdFRlc3RSZXN1bHQo
cHQpOwogCiAgICAgaWYgKGNvbnRlbnRSZW5kZXJlcigpKQpAQCAtODY2LDcgKzg2Niw3IEBAIERv
Y3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEkKICAgICByZXR1cm4gcmVzdWx0
LmlubmVyTm9kZSgpID8gcmVzdWx0LmlubmVyTm9kZSgpLT5kb2N1bWVudCgpIDogMDsKIH0KIAot
UGFzc1JlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZy
YW1lUG9pbnQpCitQYXNzUmVmUHRyPFJhbmdlPiBGcmFtZTo6cmFuZ2VGb3JQb2ludChjb25zdCBM
YXlvdXRQb2ludCYgZnJhbWVQb2ludCkKIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24g
PSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKICAgICBpZiAocG9zaXRpb24u
aXNOdWxsKCkpCkBAIC04NzUsMTQgKzg3NSwxNCBAQCBQYXNzUmVmUHRyPFJhbmdlPiBGcmFtZTo6
cmFuZ2VGb3JQb2ludChjCiAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gcG9zaXRpb24u
cHJldmlvdXMoKTsKICAgICBpZiAocHJldmlvdXMuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgUmVm
UHRyPFJhbmdlPiBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHByZXZpb3VzLCBw
b3NpdGlvbik7Ci0gICAgICAgIEludFJlY3QgcmVjdCA9IGVkaXRvcigpLT5maXJzdFJlY3RGb3JS
YW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCBy
ZWN0ID0gZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2Uu
Z2V0KCkpOwogICAgICAgICBpZiAocmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKICAgICAgICAg
ICAgIHJldHVybiBwcmV2aW91c0NoYXJhY3RlclJhbmdlLnJlbGVhc2UoKTsKICAgICB9CiAKICAg
ICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9uLm5leHQoKTsKICAgICBpZiAoUmVmUHRy
PFJhbmdlPiBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocG9zaXRpb24sIG5leHQpKSB7
Ci0gICAgICAgIEludFJlY3QgcmVjdCA9IGVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShuZXh0
Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgICAgICBMYXlvdXRSZWN0IHJlY3QgPSBlZGl0b3Io
KS0+Zmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlLmdldCgpKTsKICAgICAgICAg
aWYgKHJlY3QuY29udGFpbnMoZnJhbWVQb2ludCkpCiAgICAgICAgICAgICByZXR1cm4gbmV4dENo
YXJhY3RlclJhbmdlLnJlbGVhc2UoKTsKICAgICB9CkBAIC0xMDQ1LDcgKzEwNDUsNyBAQCB2b2lk
IEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsCiAgICAgaWYgKG1fcGFnZVpvb21G
YWN0b3IgIT0gcGFnZVpvb21GYWN0b3IpIHsKICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9
IHRoaXMtPnZpZXcoKSkgewogICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzY3JvbGwgcG9zaXRp
b24gd2hlbiBkb2luZyBhIGZ1bGwgcGFnZSB6b29tLCBzbyB0aGUgY29udGVudCBzdGF5cyBpbiBy
ZWxhdGl2ZWx5IHRoZSBzYW1lIHBvc2l0aW9uLgotICAgICAgICAgICAgSW50UG9pbnQgc2Nyb2xs
UG9zaXRpb24gPSB2aWV3LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgTGF5b3V0UG9p
bnQgc2Nyb2xsUG9zaXRpb24gPSB2aWV3LT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICAgICAg
ZmxvYXQgcGVyY2VudERpZmZlcmVuY2UgPSAocGFnZVpvb21GYWN0b3IgLyBtX3BhZ2Vab29tRmFj
dG9yKTsKICAgICAgICAgICAgIHZpZXctPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KHNjcm9s
bFBvc2l0aW9uLngoKSAqIHBlcmNlbnREaWZmZXJlbmNlLCBzY3JvbGxQb3NpdGlvbi55KCkgKiBw
ZXJjZW50RGlmZmVyZW5jZSkpOwogICAgICAgICB9CkBAIC0xMDc3LDcgKzEwNzcsNyBAQCB2b2lk
IEZyYW1lOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nCiB9CiAjZW5kaWYKIAotdm9pZCBG
cmFtZTo6c2NhbGVQYWdlKGZsb2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQordm9p
ZCBGcmFtZTo6c2NhbGVQYWdlKGZsb2F0IHNjYWxlLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2lu
KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CiAgICAgaWYg
KCFkb2N1bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDkzMjMxKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFBhZ2VBbmRUZXh0Wm9vbUZh
Y3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yKTsKIAogICAg
ICAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBtb3ZlIHRvIFBhZ2UuCi0gICAg
ICAgIHZvaWQgc2NhbGVQYWdlKGZsb2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKTsK
KyAgICAgICAgdm9pZCBzY2FsZVBhZ2UoZmxvYXQgc2NhbGUsIGNvbnN0IExheW91dFBvaW50JiBv
cmlnaW4pOwogICAgICAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2VTY2FsZUZhY3RvcjsgfQogICAgICAgICB2b2lkIGRldmljZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpOwogCkBAIC0xODcsOSArMTg3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBE
cmFnSW1hZ2VSZWYgbm9kZUltYWdlKE5vZGUqKTsKICAgICAgICAgRHJhZ0ltYWdlUmVmIGRyYWdJ
bWFnZUZvclNlbGVjdGlvbigpOwogCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7Ci0gICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLSAgICAg
ICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQ
b2ludCk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChj
b25zdCBMYXlvdXRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dEF0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAgICAgICAgUGFzc1Jl
ZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgZnJhbWVQb2ludCk7
CiAKICAgICAgICAgU3RyaW5nIHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChSZWd1bGFyRXhwcmVz
c2lvbiosIEhUTUxUYWJsZUNlbGxFbGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZUZyb21T
dGFydE9mQ2VsbCk7CiAgICAgICAgIFN0cmluZyBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQqLCBzaXplX3QqIHJlc3VsdERp
c3RhbmNlLCBib29sKiByZXN1bHRJc0luQ2VsbEFib3ZlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAJKHJldmlzaW9uIDkzMjMxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgUGFzc1JlZlB0cjxG
cmFtZVZpZXc+IEZyYW1lVmlldzo6Y3JlYXRlKAogUGFzc1JlZlB0cjxGcmFtZVZpZXc+IEZyYW1l
Vmlldzo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUpCiB7
CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGFkb3B0UmVmKG5ldyBGcmFtZVZpZXcoZnJh
bWUpKTsKLSAgICB2aWV3LT5XaWRnZXQ6OnNldEZyYW1lUmVjdChJbnRSZWN0KHZpZXctPmxvY2F0
aW9uKCksIGluaXRpYWxTaXplKSk7CisgICAgdmlldy0+V2lkZ2V0OjpzZXRGcmFtZVJlY3QoTGF5
b3V0UmVjdCh2aWV3LT5sb2NhdGlvbigpLCBpbml0aWFsU2l6ZSkpOwogICAgIHZpZXctPnNldElu
aXRpYWxCb3VuZHNTaXplKGluaXRpYWxTaXplKTsKICAgICB2aWV3LT5zaG93KCk7CiAgICAgcmV0
dXJuIHZpZXcucmVsZWFzZSgpOwpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgRnJhbWVWaWV3Ojpy
ZXNldCgpCiAgICAgbV9maXJzdExheW91dCA9IHRydWU7CiAgICAgbV9maXJzdExheW91dENhbGxi
YWNrUGVuZGluZyA9IGZhbHNlOwogICAgIG1fd2FzU2Nyb2xsZWRCeVVzZXIgPSBmYWxzZTsKLSAg
ICBtX2xhc3RMYXlvdXRTaXplID0gSW50U2l6ZSgpOworICAgIG1fbGFzdExheW91dFNpemUgPSBM
YXlvdXRTaXplKCk7CiAgICAgbV9sYXN0Wm9vbUZhY3RvciA9IDEuMGY7CiAgICAgbV9kZWZlcnJp
bmdSZXBhaW50cyA9IDA7CiAgICAgbV9yZXBhaW50Q291bnQgPSAwOwpAQCAtMjcwLDggKzI3MCw4
IEBAIHZvaWQgRnJhbWVWaWV3Ojppbml0KCkKIHsKICAgICByZXNldCgpOwogCi0gICAgbV9tYXJn
aW5zID0gSW50U2l6ZSgtMSwgLTEpOyAvLyB1bmRlZmluZWQKLSAgICBtX3NpemUgPSBJbnRTaXpl
KCk7CisgICAgbV9tYXJnaW5zID0gTGF5b3V0U2l6ZSgtMSwgLTEpOyAvLyB1bmRlZmluZWQKKyAg
ICBtX3NpemUgPSBMYXlvdXRTaXplKCk7CiAKICAgICAvLyBQcm9wYWdhdGUgdGhlIG1hcmdpbndp
ZHRoL2hlaWdodCBhbmQgc2Nyb2xsaW5nIG1vZGVzIHRvIHRoZSB2aWV3LgogICAgIEVsZW1lbnQq
IG93bmVyRWxlbWVudCA9IG1fZnJhbWUgPyBtX2ZyYW1lLT5vd25lckVsZW1lbnQoKSA6IDA7CkBA
IC0yNzksOCArMjc5LDEwIEBAIHZvaWQgRnJhbWVWaWV3Ojppbml0KCkKICAgICAgICAgSFRNTEZy
YW1lRWxlbWVudCogZnJhbWVFbHQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4ob3du
ZXJFbGVtZW50KTsKICAgICAgICAgaWYgKGZyYW1lRWx0LT5zY3JvbGxpbmdNb2RlKCkgPT0gU2Ny
b2xsYmFyQWx3YXlzT2ZmKQogICAgICAgICAgICAgc2V0Q2FuSGF2ZVNjcm9sbGJhcnMoZmFsc2Up
OwotICAgICAgICBpbnQgbWFyZ2luV2lkdGggPSBmcmFtZUVsdC0+bWFyZ2luV2lkdGgoKTsKLSAg
ICAgICAgaW50IG1hcmdpbkhlaWdodCA9IGZyYW1lRWx0LT5tYXJnaW5IZWlnaHQoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBtYXJnaW5XaWR0aCA9IGZyYW1lRWx0LT5tYXJnaW5XaWR0aCgpOworICAg
ICAgICBMYXlvdXRVbml0IG1hcmdpbkhlaWdodCA9IGZyYW1lRWx0LT5tYXJnaW5IZWlnaHQoKTsK
KyAgICAgICAgLy8gRklYTUU6IENoYW5nZSB0byByb3VnaGx5RXF1YWxzIG9yID49IDAgd2hlbiB3
ZSBtb3ZlIHRvIGZsb2F0cy4gCisgICAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICAgICAgaWYgKG1hcmdpbldpZHRoICE9IC0xKQog
ICAgICAgICAgICAgc2V0TWFyZ2luV2lkdGgobWFyZ2luV2lkdGgpOwogICAgICAgICBpZiAobWFy
Z2luSGVpZ2h0ICE9IC0xKQpAQCAtMzYxLDcgKzM2Myw3IEBAIGJvb2wgRnJhbWVWaWV3OjpkaWRG
aXJzdExheW91dCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2ZpcnN0TGF5b3V0OwogfQogCi12b2lk
IEZyYW1lVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRnJh
bWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIGlm
ICghcGFyZW50KCkpIHsKICAgICAgICAgaWYgKGhvc3RXaW5kb3coKSkKQEAgLTM3NiwxNSArMzc4
LDE1IEBAIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnQKICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IHJlcGFpbnRSZWN0ID0g
cmVjdDsKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVjdDsKICAgICByZXBhaW50UmVj
dC5tb3ZlKHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwK
ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5w
YWRkaW5nVG9wKCkpOwogICAgIHJlbmRlcmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0
KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0KQordm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBMYXlvdXRSZWN0JiBuZXdS
ZWN0KQogewotICAgIEludFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOworICAgIExheW91dFJl
Y3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIGlmIChuZXdSZWN0ID09IG9sZFJlY3QpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNDA2LDEzICs0MDgsMTMgQEAgdm9pZCBGcmFtZVZpZXc6OnNj
aGVkdWxlQW5pbWF0aW9uKCkKIH0KICNlbmRpZgogCi12b2lkIEZyYW1lVmlldzo6c2V0TWFyZ2lu
V2lkdGgoaW50IHcpCit2b2lkIEZyYW1lVmlldzo6c2V0TWFyZ2luV2lkdGgoTGF5b3V0VW5pdCB3
KQogewogICAgIC8vIG1ha2UgaXQgdXBkYXRlIHRoZSByZW5kZXJpbmcgYXJlYSB3aGVuIHNldAog
ICAgIG1fbWFyZ2lucy5zZXRXaWR0aCh3KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNldE1hcmdp
bkhlaWdodChpbnQgaCkKK3ZvaWQgRnJhbWVWaWV3OjpzZXRNYXJnaW5IZWlnaHQoTGF5b3V0VW5p
dCBoKQogewogICAgIC8vIG1ha2UgaXQgdXBkYXRlIHRoZSByZW5kZXJpbmcgYXJlYSB3aGVuIHNl
dAogICAgIG1fbWFyZ2lucy5zZXRIZWlnaHQoaCk7CkBAIC00NzYsNyArNDc4LDcgQEAgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAgIHJldHVybiBTY3JvbGxWaWV3
OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwogfQogCi12b2lkIEZyYW1lVmlldzo6c2V0
Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIEZyYW1lVmlldzo6c2V0Q29u
dGVudHNTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUgPT0gY29u
dGVudHNTaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUwNSw5ICs1MDcsOSBAQCB2b2lkIEZy
YW1lVmlldzo6YWRqdXN0Vmlld1NpemUoKQogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCA9IHJvb3QtPmRvY3VtZW50UmVjdCgpOwotICAg
IGNvbnN0IEludFNpemUmIHNpemUgPSByZWN0LnNpemUoKTsKLSAgICBTY3JvbGxWaWV3OjpzZXRT
Y3JvbGxPcmlnaW4oSW50UG9pbnQoLXJlY3QueCgpLCAtcmVjdC55KCkpLCAhbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+cHJpbnRpbmcoKSwgc2l6ZSA9PSBjb250ZW50c1NpemUoKSk7CisgICAgY29uc3Qg
TGF5b3V0UmVjdCYgcmVjdCA9IHJvb3QtPmRvY3VtZW50UmVjdCgpOworICAgIGNvbnN0IExheW91
dFNpemUmIHNpemUgPSByZWN0LnNpemUoKTsKKyAgICBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPcmln
aW4oTGF5b3V0UG9pbnQoLXJlY3QueCgpLCAtcmVjdC55KCkpLCAhbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKSwgc2l6ZSA9PSBjb250ZW50c1NpemUoKSk7CiAgICAgCiAgICAgc2V0Q29u
dGVudHNTaXplKHNpemUpOwogfQpAQCAtMTI4MiwxNSArMTI4NCwxNSBAQCB2b2lkIEZyYW1lVmll
dzo6cmVtb3ZlRml4ZWRPYmplY3QoKQogICAgICAgICB1cGRhdGVDYW5CbGl0T25TY3JvbGxSZWN1
cnNpdmVseSgpOwogfQogCi1pbnQgRnJhbWVWaWV3OjpzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigp
IGNvbnN0CitMYXlvdXRVbml0IEZyYW1lVmlldzo6c2Nyb2xsWEZvckZpeGVkUG9zaXRpb24oKSBj
b25zdAogewotICAgIGludCB2aXNpYmxlQ29udGVudFdpZHRoID0gdmlzaWJsZUNvbnRlbnRSZWN0
KCkud2lkdGgoKTsKLSAgICBpbnQgbWF4WCA9IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250
ZW50V2lkdGg7CisgICAgTGF5b3V0VW5pdCB2aXNpYmxlQ29udGVudFdpZHRoID0gdmlzaWJsZUNv
bnRlbnRSZWN0KCkud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IG1heFggPSBjb250ZW50c1dpZHRo
KCkgLSB2aXNpYmxlQ29udGVudFdpZHRoOwogCiAgICAgaWYgKG1heFggPT0gMCkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBpbnQgeCA9IHNjcm9sbFgoKTsKKyAgICBMYXlvdXRVbml0IHggPSBz
Y3JvbGxYKCk7CiAKICAgICBpZiAoIVNjcm9sbFZpZXc6OnNjcm9sbE9yaWdpbigpLngoKSkgewog
ICAgICAgICBpZiAoeCA8IDApCkBAIC0xMzE3LDE1ICsxMzE5LDE1IEBAIGludCBGcmFtZVZpZXc6
OnNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkKICAgICByZXR1cm4geCAqIGRyYWdGYWN0b3IgLyBw
YWdlU2NhbGVGYWN0b3I7CiB9CiAKLWludCBGcmFtZVZpZXc6OnNjcm9sbFlGb3JGaXhlZFBvc2l0
aW9uKCkgY29uc3QKK0xheW91dFVuaXQgRnJhbWVWaWV3OjpzY3JvbGxZRm9yRml4ZWRQb3NpdGlv
bigpIGNvbnN0CiB7Ci0gICAgaW50IHZpc2libGVDb250ZW50SGVpZ2h0ID0gdmlzaWJsZUNvbnRl
bnRSZWN0KCkuaGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCB2aXNpYmxlQ29udGVudEhlaWdodCA9
IHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOwogCi0gICAgaW50IG1heFkgPSBjb250ZW50
c0hlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRIZWlnaHQ7CisgICAgTGF5b3V0VW5pdCBtYXhZID0g
Y29udGVudHNIZWlnaHQoKSAtIHZpc2libGVDb250ZW50SGVpZ2h0OwogICAgIGlmIChtYXhZID09
IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IHkgPSBzY3JvbGxZKCk7CisgICAgTGF5
b3V0VW5pdCB5ID0gc2Nyb2xsWSgpOwogCiAgICAgaWYgKCFTY3JvbGxWaWV3OjpzY3JvbGxPcmln
aW4oKS55KCkpIHsKICAgICAgICAgaWYgKHkgPCAwKQpAQCAtMTM0OCwxNyArMTM1MCwxNyBAQCBp
bnQgRnJhbWVWaWV3OjpzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpCiAgICAgcmV0dXJuIHkgKiBk
cmFnRmFjdG9yIC8gcGFnZVNjYWxlRmFjdG9yOwogfQogCi1JbnRTaXplIEZyYW1lVmlldzo6c2Ny
b2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CitMYXlvdXRTaXplIEZyYW1lVmlldzo6
c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEludFNp
emUoc2Nyb2xsWEZvckZpeGVkUG9zaXRpb24oKSwgc2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSk7
CisgICAgcmV0dXJuIExheW91dFNpemUoc2Nyb2xsWEZvckZpeGVkUG9zaXRpb24oKSwgc2Nyb2xs
WUZvckZpeGVkUG9zaXRpb24oKSk7CiB9CiAKLUludFBvaW50IEZyYW1lVmlldzo6Y3VycmVudE1v
dXNlUG9zaXRpb24oKSBjb25zdAorTGF5b3V0UG9pbnQgRnJhbWVWaWV3OjpjdXJyZW50TW91c2VQ
b3NpdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKSA6IEludFBvaW50KCk7CiB9CiAKLWJvb2wg
RnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KQorYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEsIGNvbnN0IExheW91dFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgTGF5b3V0
UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgY29uc3Qgc2l6ZV90IGZpeGVkT2JqZWN0VGhyZXNob2xk
ID0gNTsKIApAQCAtMTM3NCwxNCArMTM3NiwxNCBAQCBib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29u
dGVudHNGYXN0UGF0aChjCiAgICAgY29uc3QgYm9vbCBpc0NvbXBvc2l0ZWRDb250ZW50TGF5ZXIg
PSBjb250ZW50c0luQ29tcG9zaXRlZExheWVyKCk7CiAKICAgICAvLyBHZXQgdGhlIHJlY3RzIG9m
IHRoZSBmaXhlZCBvYmplY3RzIHZpc2libGUgaW4gdGhlIHJlY3RUb1Njcm9sbAotICAgIFZlY3Rv
cjxJbnRSZWN0LCBmaXhlZE9iamVjdFRocmVzaG9sZD4gc3ViUmVjdFRvVXBkYXRlOworICAgIFZl
Y3RvcjxMYXlvdXRSZWN0LCBmaXhlZE9iamVjdFRocmVzaG9sZD4gc3ViUmVjdFRvVXBkYXRlOwog
ICAgIGJvb2wgdXBkYXRlSW52YWxpZGF0ZWRTdWJSZWN0ID0gdHJ1ZTsKICAgICBSZW5kZXJCbG9j
azo6UG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcG9z
aXRpb25lZE9iamVjdHMtPmVuZCgpOwogICAgIGZvciAoUmVuZGVyQmxvY2s6OlBvc2l0aW9uZWRP
YmplY3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcG9zaXRpb25lZE9iamVjdHMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJv
eCA9ICppdDsKICAgICAgICAgaWYgKHJlbmRlckJveC0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBG
aXhlZFBvc2l0aW9uKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEludFJlY3QgdXBk
YXRlUmVjdCA9IHJlbmRlckJveC0+bGF5ZXIoKS0+cmVwYWludFJlY3RJbmNsdWRpbmdEZXNjZW5k
YW50cygpOworICAgICAgICBMYXlvdXRSZWN0IHVwZGF0ZVJlY3QgPSByZW5kZXJCb3gtPmxheWVy
KCktPnJlcGFpbnRSZWN0SW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKICAgICAgICAgdXBkYXRlUmVj
dCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdCk7CiAgICAgICAgIGlmICghaXNDb21wb3Np
dGVkQ29udGVudExheWVyICYmIGNsaXBzUmVwYWludHMoKSkKICAgICAgICAgICAgIHVwZGF0ZVJl
Y3QuaW50ZXJzZWN0KHJlY3RUb1Njcm9sbCk7CkBAIC0xNDAyLDggKzE0MDQsOCBAQCBib29sIEZy
YW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjCiAgICAgICAgIC8vIDIpIHVwZGF0ZSB0
aGUgYXJlYSBvZiBmaXhlZCBvYmplY3RzIHRoYXQgaGFzIGJlZW4gaW52YWxpZGF0ZWQKICAgICAg
ICAgc2l6ZV90IGZpeE9iamVjdHNDb3VudCA9IHN1YlJlY3RUb1VwZGF0ZS5zaXplKCk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZml4T2JqZWN0c0NvdW50OyArK2kpIHsKLSAgICAg
ICAgICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IHN1YlJlY3RUb1VwZGF0ZVtpXTsKLSAgICAgICAg
ICAgIEludFJlY3Qgc2Nyb2xsZWRSZWN0ID0gdXBkYXRlUmVjdDsKKyAgICAgICAgICAgIExheW91
dFJlY3QgdXBkYXRlUmVjdCA9IHN1YlJlY3RUb1VwZGF0ZVtpXTsKKyAgICAgICAgICAgIExheW91
dFJlY3Qgc2Nyb2xsZWRSZWN0ID0gdXBkYXRlUmVjdDsKICAgICAgICAgICAgIHNjcm9sbGVkUmVj
dC5tb3ZlKHNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHVwZGF0ZVJlY3QudW5pdGUoc2Nyb2xs
ZWRSZWN0KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xNDI2LDcgKzE0
MjgsNyBAQCBib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNTbG93UGF0aChj
b25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQordm9pZCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRz
U2xvd1BhdGgoY29uc3QgTGF5b3V0UmVjdCYgdXBkYXRlUmVjdCkKIHsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKGNvbnRlbnRzSW5Db21wb3NpdGVkTGF5ZXIoKSkg
ewpAQCAtMTQzNiw5ICsxNDM4LDkgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzU2xv
d1BhdGgoYwogICAgIH0KICAgICBpZiAoUmVuZGVyUGFydCogZnJhbWVSZW5kZXJlciA9IG1fZnJh
bWUtPm93bmVyUmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoZnJhbWVSZW5kZXJlci0+Y29udGFp
bmVyRm9yUmVwYWludCgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QoZnJhbWVSZW5kZXJl
ci0+Ym9yZGVyTGVmdCgpICsgZnJhbWVSZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBmcmFtZVJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGZyYW1lUmVuZGVy
ZXItPnBhZGRpbmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlV2lkdGgo
KSwgdmlzaWJsZUhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcmVjdChmcmFtZVJl
bmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBmcmFtZVJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lUmVuZGVyZXItPmJvcmRlclRvcCgpICsgZnJh
bWVSZW5kZXJlci0+cGFkZGluZ1RvcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZp
c2libGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICAgICAgZnJhbWVSZW5kZXJl
ci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMTU4MSw3ICsxNTgzLDcgQEAgdm9pZCBGcmFtZVZpZXc6Om1haW50YWluU2Nyb2xsUG9z
aXRpb25BdAogICAgICAgICBzY3JvbGxUb0FuY2hvcigpOwogfQogCi12b2lkIEZyYW1lVmlldzo6
c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQordm9pZCBGcmFt
ZVZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IExheW91dFBvaW50JiBzY3JvbGxQb2ludCkK
IHsKICAgICBib29sIHdhc0luUHJvZ3JhbW1hdGljU2Nyb2xsID0gbV9pblByb2dyYW1tYXRpY1Nj
cm9sbDsKICAgICBtX2luUHJvZ3JhbW1hdGljU2Nyb2xsID0gdHJ1ZTsKQEAgLTE2NDEsMTkgKzE2
NDMsMTkgQEAgSG9zdFdpbmRvdyogRnJhbWVWaWV3Ojpob3N0V2luZG93KCkgY29ucwogCiBjb25z
dCB1bnNpZ25lZCBjUmVwYWludFJlY3RVbmlvblRocmVzaG9sZCA9IDI1OwogCi12b2lkIEZyYW1l
Vmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgciwgYm9vbCBpbW1l
ZGlhdGUpCit2b2lkIEZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5
b3V0UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCiB7CiAgICAgQVNTRVJUKCFtX2ZyYW1lLT5vd25l
ckVsZW1lbnQoKSk7CiAKICAgICBkb3VibGUgZGVsYXkgPSBtX2RlZmVycmluZ1JlcGFpbnRzID8g
MCA6IGFkanVzdGVkRGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKICAgICBpZiAoKG1fZGVmZXJyaW5n
UmVwYWludHMgfHwgbV9kZWZlcnJlZFJlcGFpbnRUaW1lci5pc0FjdGl2ZSgpIHx8IGRlbGF5KSAm
JiAhaW1tZWRpYXRlKSB7Ci0gICAgICAgIEludFJlY3QgcGFpbnRSZWN0ID0gcjsKKyAgICAgICAg
TGF5b3V0UmVjdCBwYWludFJlY3QgPSByOwogICAgICAgICBpZiAoY2xpcHNSZXBhaW50cygpICYm
ICFwYWludHNFbnRpcmVDb250ZW50cygpKQogICAgICAgICAgICAgcGFpbnRSZWN0LmludGVyc2Vj
dCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CiAgICAgICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobV9yZXBhaW50Q291bnQgPT0gY1Jl
cGFpbnRSZWN0VW5pb25UaHJlc2hvbGQpIHsKLSAgICAgICAgICAgIEludFJlY3QgdW5pb25lZFJl
Y3Q7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHVuaW9uZWRSZWN0OwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNSZXBhaW50UmVjdFVuaW9uVGhyZXNob2xkOyArK2kpCiAg
ICAgICAgICAgICAgICAgdW5pb25lZFJlY3QudW5pdGUobV9yZXBhaW50UmVjdHNbaV0pOwogICAg
ICAgICAgICAgbV9yZXBhaW50UmVjdHMuY2xlYXIoKTsKQEAgLTIwNDIsNyArMjA0NCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hvcigpCiAgICAgaWYgKCFhbmNob3JOb2RlLT5yZW5k
ZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IHJlY3Q7CisgICAgTGF5b3V0
UmVjdCByZWN0OwogICAgIGlmIChhbmNob3JOb2RlICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpCiAg
ICAgICAgIHJlY3QgPSBhbmNob3JOb2RlLT5nZXRSZWN0KCk7CiAKQEAgLTIxNjYsNyArMjE2OCw3
IEBAIHZvaWQgRnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKCkKICAgICBtX2FjdGlv
blNjaGVkdWxlci0+cmVzdW1lKCk7CiAKICAgICBpZiAoIXJvb3QtPnByaW50aW5nKCkpIHsKLSAg
ICAgICAgSW50U2l6ZSBjdXJyZW50U2l6ZSA9IEludFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwor
ICAgICAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZSh3aWR0aCgpLCBoZWln
aHQoKSk7CiAgICAgICAgIGZsb2F0IGN1cnJlbnRab29tRmFjdG9yID0gcm9vdC0+c3R5bGUoKS0+
em9vbSgpOwogICAgICAgICBib29sIHJlc2l6ZWQgPSAhbV9maXJzdExheW91dCAmJiAoY3VycmVu
dFNpemUgIT0gbV9sYXN0TGF5b3V0U2l6ZSB8fCBjdXJyZW50Wm9vbUZhY3RvciAhPSBtX2xhc3Ra
b29tRmFjdG9yKTsKICAgICAgICAgbV9sYXN0TGF5b3V0U2l6ZSA9IGN1cnJlbnRTaXplOwpAQCAt
MjIwNywxNSArMjIwOSwxNSBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMo
Ym9vCiAgICAgCiB9CiAKLUludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdChib29sIGNs
aXBUb0NvbnRlbnRzKSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZpZXc6OndpbmRvd0NsaXBSZWN0
KGJvb2wgY2xpcFRvQ29udGVudHMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZnJhbWUtPnZpZXco
KSA9PSB0aGlzKTsKIAogICAgIGlmIChwYWludHNFbnRpcmVDb250ZW50cygpKQotICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgY29udGVudHNTaXplKCkpOworICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBjb250ZW50c1NpemUoKSk7CiAKICAgICAv
LyBTZXQgb3VyIGNsaXAgcmVjdCB0byBiZSBvdXIgY29udGVudHMuCi0gICAgSW50UmVjdCBjbGlw
UmVjdCA9IGNvbnRlbnRzVG9XaW5kb3codmlzaWJsZUNvbnRlbnRSZWN0KCFjbGlwVG9Db250ZW50
cykpOworICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBjb250ZW50c1RvV2luZG93KHZpc2libGVD
b250ZW50UmVjdCghY2xpcFRvQ29udGVudHMpKTsKICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJh
bWUtPm93bmVyRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gY2xpcFJlY3Q7CiAKQEAgLTIyMzEs
MTQgKzIyMzMsMTQgQEAgSW50UmVjdCBGcmFtZVZpZXc6OndpbmRvd0NsaXBSZWN0KGJvb2wgYwog
ICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotSW50UmVjdCBGcmFtZVZpZXc6OndpbmRvd0NsaXBS
ZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBib29sIGNsaXBUb0xheWVyQ29u
dGVudHMpIGNvbnN0CitMYXlvdXRSZWN0IEZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3RGb3JMYXll
cihjb25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGJvb2wgY2xpcFRvTGF5ZXJDb250ZW50cykgY29u
c3QKIHsKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGxheWVyLCBqdXN0IHJldHVybiBvdXIgd2luZG93
IGNsaXAgcmVjdC4KICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gd2luZG93Q2xpcFJl
Y3QoKTsKIAogICAgIC8vIEFwcGx5IHRoZSBjbGlwIGZyb20gdGhlIGxheWVyLgotICAgIEludFJl
Y3QgY2xpcFJlY3Q7CisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdDsKICAgICBpZiAoY2xpcFRvTGF5
ZXJDb250ZW50cykKICAgICAgICAgY2xpcFJlY3QgPSBsYXllci0+Y2hpbGRyZW5DbGlwUmVjdCgp
OwogICAgIGVsc2UKQEAgLTIyNTMsMzMgKzIyNTUsMzMgQEAgYm9vbCBGcmFtZVZpZXc6OmlzQWN0
aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
aXNBY3RpdmUoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvKGNvbnN0IEludFNpemUm
IG5ld09mZnNldCkKK3ZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUbyhjb25zdCBMYXlvdXRTaXplJiBu
ZXdPZmZzZXQpCiB7Ci0gICAgSW50U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICBM
YXlvdXRTaXplIG9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwogICAgIFNjcm9sbFZpZXc6OnNjcm9s
bFRvKG5ld09mZnNldCk7CiAgICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKICAgICAg
ICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CiAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQordm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIC8vIEFkZCBpbiBvdXIg
b2Zmc2V0IHdpdGhpbiB0aGUgRnJhbWVWaWV3LgotICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVj
dDsKKyAgICBMYXlvdXRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7CiAgICAgZGlydHlSZWN0Lm1vdmVC
eShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIGludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7
CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjpnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JiB0aWNr
bWFya3MpIGNvbnN0Cit2b2lkIEZyYW1lVmlldzo6Z2V0VGlja21hcmtzKFZlY3RvcjxMYXlvdXRS
ZWN0PiYgdGlja21hcmtzKSBjb25zdAogewogICAgIHRpY2ttYXJrcyA9IGZyYW1lKCktPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6
OlRleHRNYXRjaCk7CiB9CiAKLUludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dSZXNpemVyUmVjdCgp
IGNvbnN0CitMYXlvdXRSZWN0IEZyYW1lVmlldzo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAog
ewogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpID8gZnJhbWUoKS0+cGFnZSgpIDogMDsKICAgICBp
ZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KCk7CiAgICAgcmV0dXJuIHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZXNpemVyUmVjdCgp
OwogfQogCkBAIC0yMzE1LDcgKzIzMTcsNyBAQCB2b2lkIEZyYW1lVmlldzo6ZGlkQ29tcGxldGVB
bmltYXRlZFNjcm9sCiAgICAgcmV0dXJuIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+ZGlkQ29t
cGxldGVBbmltYXRlZFNjcm9sbCgpOwogfQogCi12b2lkIEZyYW1lVmlldzo6c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCit2b2lkIEZyYW1l
Vmlldzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IExheW91dFJlY3QmIHNjcm9s
bGVyVGh1bWIpCiB7CiAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAo
IXBhZ2UpCkBAIC0yNDQ2LDcgKzI0NDgsNyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlU2Nyb2xs
Q29ybmVyKCkKICAgICBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxDb3JuZXIoKTsKIH0KIAotdm9p
ZCBGcmFtZVZpZXc6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCkKK3ZvaWQgRnJhbWVWaWV3OjpwYWludFNjcm9sbENv
cm5lcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGNvcm5lclJl
Y3QpCiB7CiAgICAgaWYgKGNvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKICAgICAg
ICAgdXBkYXRlU2Nyb2xsQ29ybmVyKCk7CkBAIC0yNTY2LDcgKzI1NjgsNyBAQCB2b2lkIEZyYW1l
Vmlldzo6c2V0V2FzU2Nyb2xsZWRCeVVzZXIoYm9vCiAgICAgbV93YXNTY3JvbGxlZEJ5VXNlciA9
IHdhc1Njcm9sbGVkQnlVc2VyOwogfQogCi12b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhH
cmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIEZyYW1lVmlldzo6
cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IExheW91dFJlY3QmIHJlY3Qp
CiB7CiAgICAgaWYgKCFmcmFtZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjg1LDcgKzI2ODcs
NyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Tm9kZVRvRHJhdyhOb2RlKiBub2RlCiAgICAgbV9ub2Rl
VG9EcmF3ID0gbm9kZTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnBhaW50T3ZlcmhhbmdBcmVhcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGhvcml6b250YWxPdmVyaGFu
Z0FyZWEsIGNvbnN0IEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0
JiBkaXJ0eVJlY3QpCit2b2lkIEZyYW1lVmlldzo6cGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJl
YSwgY29uc3QgTGF5b3V0UmVjdCYgdmVydGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IExheW91dFJl
Y3QmIGRpcnR5UmVjdCkKIHsKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yNzUzLDcgKzI3NTUsNyBAQCB2b2lkIEZyYW1lVmlldzo6Zm9y
Y2VMYXlvdXRGb3JQYWdpbmF0aW9uCiAgICAgICAgIGZsb2F0IHBhZ2VMb2dpY2FsV2lkdGggPSBy
b290LT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcGFnZVNpemUud2lkdGgo
KSA6IHBhZ2VTaXplLmhlaWdodCgpOwogICAgICAgICBmbG9hdCBwYWdlTG9naWNhbEhlaWdodCA9
IHJvb3QtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwYWdlU2l6ZS5oZWln
aHQoKSA6IHBhZ2VTaXplLndpZHRoKCk7CiAKLSAgICAgICAgaW50IGZsb29yZWRQYWdlTG9naWNh
bFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihwYWdlTG9naWNhbFdpZHRoKTsKKyAgICAgICAgTGF5
b3V0VW5pdCBmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0aCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+
KHBhZ2VMb2dpY2FsV2lkdGgpOwogICAgICAgICByb290LT5zZXRMb2dpY2FsV2lkdGgoZmxvb3Jl
ZFBhZ2VMb2dpY2FsV2lkdGgpOwogICAgICAgICByb290LT5zZXRQYWdlTG9naWNhbEhlaWdodChw
YWdlTG9naWNhbEhlaWdodCk7CiAgICAgICAgIHJvb3QtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldp
ZHRoc1JlY2FsYygpOwpAQCAtMjc2NCw3ICsyNzY2LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmZvcmNl
TGF5b3V0Rm9yUGFnaW5hdGlvbgogICAgICAgICAvLyBGSVhNRTogV2UgYXJlIGFzc3VtaW5nIGEg
c2hyaW5rLXRvLWZpdCBwcmludGluZyBpbXBsZW1lbnRhdGlvbi4gIEEgY3JvcHBpbmcKICAgICAg
ICAgLy8gaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBkbyB0aGlzIQogICAgICAgICBib29sIGhv
cml6b250YWxXcml0aW5nTW9kZSA9IHJvb3QtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCk7Ci0gICAgICAgIGludCBkb2NMb2dpY2FsV2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01v
ZGUgPyByb290LT5kb2N1bWVudFJlY3QoKS53aWR0aCgpIDogcm9vdC0+ZG9jdW1lbnRSZWN0KCku
aGVpZ2h0KCk7CisgICAgICAgIExheW91dFVuaXQgZG9jTG9naWNhbFdpZHRoID0gaG9yaXpvbnRh
bFdyaXRpbmdNb2RlID8gcm9vdC0+ZG9jdW1lbnRSZWN0KCkud2lkdGgoKSA6IHJvb3QtPmRvY3Vt
ZW50UmVjdCgpLmhlaWdodCgpOwogICAgICAgICBpZiAoZG9jTG9naWNhbFdpZHRoID4gcGFnZUxv
Z2ljYWxXaWR0aCkgewogICAgICAgICAgICAgZmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGggPSBzdGQ6
Om1pbjxmbG9hdD4oZG9jTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbFdpZHRoICogbWF4aW11bVNo
cmlua0ZhY3Rvcik7CiAgICAgICAgICAgICBpZiAocGFnZUxvZ2ljYWxIZWlnaHQpCkBAIC0yNzcy
LDE0ICsyNzc0LDE0IEBAIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24K
ICAgICAgICAgICAgIHJvb3QtPnNldExvZ2ljYWxXaWR0aChmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0
aCk7CiAgICAgICAgICAgICByb290LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKICAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnRSZWN0
JiBkb2N1bWVudFJlY3QgPSByb290LT5kb2N1bWVudFJlY3QoKTsKLSAgICAgICAgICAgIGludCBk
b2NMb2dpY2FsSGVpZ2h0ID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZG9jdW1lbnRSZWN0Lmhl
aWdodCgpIDogZG9jdW1lbnRSZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBpbnQgZG9jTG9naWNh
bFRvcCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGRvY3VtZW50UmVjdC55KCkgOiBkb2N1bWVu
dFJlY3QueCgpOwotICAgICAgICAgICAgaW50IGRvY0xvZ2ljYWxSaWdodCA9IGhvcml6b250YWxX
cml0aW5nTW9kZSA/IGRvY3VtZW50UmVjdC5tYXhYKCkgOiBkb2N1bWVudFJlY3QubWF4WSgpOwot
ICAgICAgICAgICAgaW50IGNsaXBwZWRMb2dpY2FsTGVmdCA9IDA7CisgICAgICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiBkb2N1bWVudFJlY3QgPSByb290LT5kb2N1bWVudFJlY3QoKTsKKyAgICAg
ICAgICAgIExheW91dFVuaXQgZG9jTG9naWNhbEhlaWdodCA9IGhvcml6b250YWxXcml0aW5nTW9k
ZSA/IGRvY3VtZW50UmVjdC5oZWlnaHQoKSA6IGRvY3VtZW50UmVjdC53aWR0aCgpOworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBkb2NMb2dpY2FsVG9wID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8g
ZG9jdW1lbnRSZWN0LnkoKSA6IGRvY3VtZW50UmVjdC54KCk7CisgICAgICAgICAgICBMYXlvdXRV
bml0IGRvY0xvZ2ljYWxSaWdodCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGRvY3VtZW50UmVj
dC5tYXhYKCkgOiBkb2N1bWVudFJlY3QubWF4WSgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBj
bGlwcGVkTG9naWNhbExlZnQgPSAwOwogICAgICAgICAgICAgaWYgKCFyb290LT5zdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgY2xpcHBlZExvZ2ljYWxM
ZWZ0ID0gZG9jTG9naWNhbFJpZ2h0IC0gZmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGg7Ci0gICAgICAg
ICAgICBJbnRSZWN0IG92ZXJmbG93KGNsaXBwZWRMb2dpY2FsTGVmdCwgZG9jTG9naWNhbFRvcCwg
Zmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGgsIGRvY0xvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAg
TGF5b3V0UmVjdCBvdmVyZmxvdyhjbGlwcGVkTG9naWNhbExlZnQsIGRvY0xvZ2ljYWxUb3AsIGZs
b29yZWRQYWdlTG9naWNhbFdpZHRoLCBkb2NMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIGlm
ICghaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQogICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gb3Zl
cmZsb3cudHJhbnNwb3NlZFJlY3QoKTsKICAgICAgICAgICAgIHJvb3QtPmNsZWFyTGF5b3V0T3Zl
cmZsb3coKTsKQEAgLTI4MDksOSArMjgxMSw5IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQYWdl
SGVpZ2h0RGVwcmVjYXQKICAgICAgICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRvbTsKIH0KIAotSW50
UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgY29uc3QgSW50UmVjdCYgcmVuZGVyZXJSZWN0KSBjb25zdAorTGF5b3V0UmVjdCBG
cmFtZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgTGF5b3V0UmVjdCYgcmVuZGVyZXJSZWN0KSBjb25zdAogewotICAgIEludFJlY3Qg
cmVjdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZW5kZXJlclJl
Y3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgIExheW91dFJlY3QgcmVjdCA9IHJlbmRl
cmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZW5kZXJlclJlY3QpKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOwogCiAgICAgLy8gQ29udmVydCBmcm9tIHBhZ2UgKCJhYnNvbHV0ZSIp
IHRvIEZyYW1lVmlldyBjb29yZGluYXRlcy4KICAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRp
b24oKSk7CkBAIC0yODE5LDMxICsyODIxLDMxIEBAIEludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0
RnJvbVJlbmRlcmVyKGMKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBGcmFtZVZpZXc6
OmNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IElu
dFJlY3QmIHZpZXdSZWN0KSBjb25zdAorTGF5b3V0UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRUb1Jl
bmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHZp
ZXdSZWN0KSBjb25zdAogewotICAgIEludFJlY3QgcmVjdCA9IHZpZXdSZWN0OworICAgIExheW91
dFJlY3QgcmVjdCA9IHZpZXdSZWN0OwogICAgIAogICAgIC8vIENvbnZlcnQgZnJvbSBGcmFtZVZp
ZXcgY29vcmRzIGludG8gcGFnZSAoImFic29sdXRlIikgY29vcmRpbmF0ZXMuCiAgICAgcmVjdC5t
b3ZlQnkoc2Nyb2xsUG9zaXRpb24oKSk7CiAKICAgICAvLyBGSVhNRTogd2UgZG9uJ3QgaGF2ZSBh
IHdheSB0byBtYXAgYW4gYWJzb2x1dGUgcmVjdCBkb3duIHRvIGEgbG9jYWwgcXVhZCwgc28ganVz
dAogICAgIC8vIG1vdmUgdGhlIHJlY3QgZm9yIG5vdy4KLSAgICByZWN0LnNldExvY2F0aW9uKHJv
dW5kZWRJbnRQb2ludChyZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKHJlY3QubG9jYXRpb24oKSwg
ZmFsc2UsIHRydWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKSk7CisgICAgcmVjdC5zZXRMb2NhdGlv
bihyb3VuZGVkTGF5b3V0UG9pbnQocmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChyZWN0LmxvY2F0
aW9uKCksIGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zICovKSkpOwogICAgIHJldHVybiBy
ZWN0OwogfQogCi1JbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UG9pbnQmIHJlbmRlcmVyUG9pbnQpIGNv
bnN0CitMYXlvdXRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0UG9pbnQmIHJlbmRlcmVyUG9pbnQpIGNv
bnN0CiB7Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQocmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZShyZW5kZXJlclBvaW50LCBmYWxzZSwgdHJ1ZSAvKiB1c2UgdHJhbnNmb3Jt
cyAqLykpOworICAgIExheW91dFBvaW50IHBvaW50ID0gcm91bmRlZExheW91dFBvaW50KHJlbmRl
cmVyLT5sb2NhbFRvQWJzb2x1dGUocmVuZGVyZXJQb2ludCwgZmFsc2UsIHRydWUgLyogdXNlIHRy
YW5zZm9ybXMgKi8pKTsKIAogICAgIC8vIENvbnZlcnQgZnJvbSBwYWdlICgiYWJzb2x1dGUiKSB0
byBGcmFtZVZpZXcgY29vcmRpbmF0ZXMuCiAgICAgcG9pbnQubW92ZUJ5KC1zY3JvbGxQb3NpdGlv
bigpKTsKICAgICByZXR1cm4gcG9pbnQ7CiB9CiAKLUludFBvaW50IEZyYW1lVmlldzo6Y29udmVy
dFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UG9pbnQm
IHZpZXdQb2ludCkgY29uc3QKK0xheW91dFBvaW50IEZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVy
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0UG9pbnQmIHZpZXdQ
b2ludCkgY29uc3QKIHsKLSAgICBJbnRQb2ludCBwb2ludCA9IHZpZXdQb2ludDsKKyAgICBMYXlv
dXRQb2ludCBwb2ludCA9IHZpZXdQb2ludDsKICAgICAKICAgICAvLyBDb252ZXJ0IGZyb20gRnJh
bWVWaWV3IGNvb3JkcyBpbnRvIHBhZ2UgKCJhYnNvbHV0ZSIpIGNvb3JkaW5hdGVzLgogICAgIHBv
aW50ICs9IEludFNpemUoc2Nyb2xsWCgpLCBzY3JvbGxZKCkpOwpAQCAtMjg1MSw3ICsyODUzLDcg
QEAgSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9SZW5kZXJlcihjbwogICAgIHJldHVybiBy
b3VuZGVkSW50UG9pbnQocmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChwb2ludCwgZmFsc2UsIHRy
dWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKTsKIH0KIAotSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZl
cnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK0xheW91
dFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBMYXlvdXRSZWN0
JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNj
cm9sbFZpZXcgPSBwYXJlbnQoKSkgewogICAgICAgICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNG
cmFtZVZpZXcoKSkgewpAQCAtMjg2MSw3ICsyODYzLDcgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmNv
bnZlcnRUb0NvbnRhaW5pbmdWaQogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
ICAgICAgICByZXR1cm4gbG9jYWxSZWN0OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
SW50UmVjdCByZWN0KGxvY2FsUmVjdCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHJlY3QobG9j
YWxSZWN0KTsKICAgICAgICAgICAgIC8vIEFkZCBib3JkZXJzIGFuZCBwYWRkaW5nPz8KICAgICAg
ICAgICAgIHJlY3QubW92ZShyZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRp
bmdMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXItPmJvcmRlclRvcCgpICsg
cmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CkBAIC0yODc0LDcgKzI4NzYsNyBAQCBJbnRSZWN0IEZy
YW1lVmlldzo6Y29udmVydFRvQ29udGFpbmluZ1ZpCiAgICAgcmV0dXJuIGxvY2FsUmVjdDsKIH0K
IAotSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50
UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK0xheW91dFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CiB7CiAg
ICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgewog
ICAgICAgICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkgewpAQCAtMjg4NSw3
ICsyODg3LDcgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZwogICAg
ICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50UmVj
dDsKIAotICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gcGFyZW50Vmlldy0+Y29udmVydFRvUmVu
ZGVyZXIocmVuZGVyZXIsIHBhcmVudFJlY3QpOworICAgICAgICAgICAgTGF5b3V0UmVjdCByZWN0
ID0gcGFyZW50Vmlldy0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIsIHBhcmVudFJlY3QpOwog
ICAgICAgICAgICAgLy8gU3VidHJhY3QgYm9yZGVycyBhbmQgcGFkZGluZwogICAgICAgICAgICAg
cmVjdC5tb3ZlKC1yZW5kZXJlci0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVyZXItPnBhZGRpbmdMZWZ0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJlbmRl
cmVyLT5wYWRkaW5nVG9wKCkpOwpAQCAtMjg5OCw3ICsyOTAwLDcgQEAgSW50UmVjdCBGcmFtZVZp
ZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZwogICAgIHJldHVybiBwYXJlbnRSZWN0OwogfQogCi1J
bnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KSBjb25zdAorTGF5b3V0UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250
YWluaW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKIHsKICAgICBp
ZiAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7CiAgICAg
ICAgIGlmIChwYXJlbnRTY3JvbGxWaWV3LT5pc0ZyYW1lVmlldygpKSB7CkBAIC0yOTA5LDcgKzI5
MTEsNyBAQCBJbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRUb0NvbnRhaW5pbmdWCiAgICAgICAg
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFBvaW50Owog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgSW50UG9pbnQgcG9pbnQobG9jYWxQb2ludCk7
CisgICAgICAgICAgICBMYXlvdXRQb2ludCBwb2ludChsb2NhbFBvaW50KTsKIAogICAgICAgICAg
ICAgLy8gQWRkIGJvcmRlcnMgYW5kIHBhZGRpbmcKICAgICAgICAgICAgIHBvaW50Lm1vdmUocmVu
ZGVyZXItPmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLApAQCAtMjkyMyw3
ICsyOTI1LDcgQEAgSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVgogICAg
IHJldHVybiBsb2NhbFBvaW50OwogfQogCi1JbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAorTGF5b3V0
UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFBv
aW50JiBwYXJlbnRQb2ludCkgY29uc3QKIHsKICAgICBpZiAoY29uc3QgU2Nyb2xsVmlldyogcGFy
ZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7CiAgICAgICAgIGlmIChwYXJlbnRTY3JvbGxWaWV3
LT5pc0ZyYW1lVmlldygpKSB7CkBAIC0yOTM0LDcgKzI5MzYsNyBAQCBJbnRQb2ludCBGcmFtZVZp
ZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJlbnRQb2ludDsKIAotICAgICAgICAgICAgSW50UG9pbnQg
cG9pbnQgPSBwYXJlbnRWaWV3LT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJlciwgcGFyZW50UG9p
bnQpOworICAgICAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnQgPSBwYXJlbnRWaWV3LT5jb252ZXJ0
VG9SZW5kZXJlcihyZW5kZXJlciwgcGFyZW50UG9pbnQpOwogICAgICAgICAgICAgLy8gU3VidHJh
Y3QgYm9yZGVycyBhbmQgcGFkZGluZwogICAgICAgICAgICAgcG9pbnQubW92ZSgtcmVuZGVyZXIt
PmJvcmRlckxlZnQoKSAtIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAtcmVuZGVyZXItPmJvcmRlclRvcCgpIC0gcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDkzMjMxKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBA
QCBjbGFzcyBFdmVudDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJh
bWVBY3Rpb25TY2hlZHVsZXI7Ci1jbGFzcyBJbnRSZWN0OwogY2xhc3MgS1VSTDsKIGNsYXNzIE5v
ZGU7CiBjbGFzcyBQYWdlOwpAQCAtNjMsOCArNjIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFt
ZVJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChj
b25zdCBMYXlvdXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBM
YXlvdXRSZWN0Jik7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZv
aWQgc2NoZWR1bGVBbmltYXRpb24oKTsKICNlbmRpZgpAQCAtNzIsMTAgKzcxLDEwIEBAIHB1Ymxp
YzoKICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lLmdldCgpOyB9CiAg
ICAgdm9pZCBjbGVhckZyYW1lKCk7CiAKLSAgICBpbnQgbWFyZ2luV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX21hcmdpbnMud2lkdGgoKTsgfSAvLyAtMSBtZWFucyBkZWZhdWx0Ci0gICAgaW50IG1h
cmdpbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2lucy5oZWlnaHQoKTsgfSAvLyAtMSBt
ZWFucyBkZWZhdWx0Ci0gICAgdm9pZCBzZXRNYXJnaW5XaWR0aChpbnQpOwotICAgIHZvaWQgc2V0
TWFyZ2luSGVpZ2h0KGludCk7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5XaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFyZ2lucy53aWR0aCgpOyB9IC8vIC0xIG1lYW5zIGRlZmF1bHQKKyAgICBMYXlv
dXRVbml0IG1hcmdpbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2lucy5oZWlnaHQoKTsg
fSAvLyAtMSBtZWFucyBkZWZhdWx0CisgICAgdm9pZCBzZXRNYXJnaW5XaWR0aChMYXlvdXRVbml0
KTsKKyAgICB2b2lkIHNldE1hcmdpbkhlaWdodChMYXlvdXRVbml0KTsKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRDYW5IYXZlU2Nyb2xsYmFycyhib29sKTsKICAgICB2b2lkIHVwZGF0ZUNhbkhhdmVT
Y3JvbGxiYXJzKCk7CkBAIC04Niw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmKTsKIAogICAgIHZvaWQgbGF5b3V0KGJv
b2wgYWxsb3dTdWJ0cmVlID0gdHJ1ZSk7CiAgICAgYm9vbCBkaWRGaXJzdExheW91dCgpIGNvbnN0
OwpAQCAtMTU4LDEyICsxNTcsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGp1c3RWaWV3U2l6
ZSgpOwogICAgIAotICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdChib29sIGNsaXBU
b0NvbnRlbnRzID0gdHJ1ZSkgY29uc3Q7Ci0gICAgSW50UmVjdCB3aW5kb3dDbGlwUmVjdEZvckxh
eWVyKGNvbnN0IFJlbmRlckxheWVyKiwgYm9vbCBjbGlwVG9MYXllckNvbnRlbnRzKSBjb25zdDsK
KyAgICB2aXJ0dWFsIExheW91dFJlY3Qgd2luZG93Q2xpcFJlY3QoYm9vbCBjbGlwVG9Db250ZW50
cyA9IHRydWUpIGNvbnN0OworICAgIExheW91dFJlY3Qgd2luZG93Q2xpcFJlY3RGb3JMYXllcihj
b25zdCBSZW5kZXJMYXllciosIGJvb2wgY2xpcFRvTGF5ZXJDb250ZW50cykgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0U2Ny
b2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9u
KGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFQ
bGF0Zm9ybVdpZGdldCgpOwogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rml4ZWRFbGVtZW50c0Fm
dGVyU2Nyb2xsaW5nKCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVj
dGlvbihTY3JvbGxEaXJlY3Rpb24pIGNvbnN0OwpAQCAtMTg2LDkgKzE4NSw5IEBAIHB1YmxpYzoK
IAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsZWQgcG9z
aXRpb24sIG5lZ2F0aW5nIHRoZSBlZmZlY3RzIG9mIG92ZXJoYW5nCiAgICAgLy8gYW5kIGFkanVz
dGluZyBmb3IgcGFnZSBzY2FsZS4KLSAgICBpbnQgc2Nyb2xsWEZvckZpeGVkUG9zaXRpb24oKSBj
b25zdDsKLSAgICBpbnQgc2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSBjb25zdDsKLSAgICBJbnRT
aXplIHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IHNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxZ
Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0OworICAgIExheW91dFNpemUgc2Nyb2xsT2Zmc2V0Rm9y
Rml4ZWRQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBiZWdpbkRlZmVycmVkUmVwYWludHMo
KTsKICAgICB2b2lkIGVuZERlZmVycmVkUmVwYWludHMoKTsKQEAgLTIxMywxNSArMjEyLDE1IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFkZFdpZGdldFRvVXBkYXRlKFJlbmRlckVtYmVkZGVkT2JqZWN0
Kik7CiAgICAgdm9pZCByZW1vdmVXaWRnZXRUb1VwZGF0ZShSZW5kZXJFbWJlZGRlZE9iamVjdCop
OwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7CiAgICAgdm9p
ZCBzZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3IpOwogICAgIFBhaW50QmVoYXZpb3IgcGFp
bnRCZWhhdmlvcigpIGNvbnN0OwogICAgIGJvb2wgaXNQYWludGluZygpIGNvbnN0OwogICAgIGJv
b2wgaGFzRXZlclBhaW50ZWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQYWludFRpbWU7IH0KICAg
ICB2b2lkIHNldE5vZGVUb0RyYXcoTm9kZSopOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50T3Zl
cmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBob3Jpem9udGFsT3Zl
cmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0
JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25zdCBMYXlvdXRSZWN0JiB2ZXJ0aWNhbE92ZXJo
YW5nQXJlYSwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgY29y
bmVyUmVjdCk7CiAKICAgICBDb2xvciBkb2N1bWVudEJhY2tncm91bmRDb2xvcigpIGNvbnN0Owog
CkBAIC0yNjEsMTAgKzI2MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWludGFpblNjcm9sbFBv
c2l0aW9uQXRBbmNob3IoTm9kZSopOwogCiAgICAgLy8gTWV0aG9kcyB0byBjb252ZXJ0IHBvaW50
cyBhbmQgcmVjdHMgYmV0d2VlbiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgcmVuZGVyZXIs
IGFuZCB0aGlzIHZpZXcuCi0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tUmVuZGVyZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwg
SW50UmVjdCBjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRS
ZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJ
bnRQb2ludCBjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbVJlbmRlcmVy
KGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIExheW91dFJlY3QgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29u
c3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydEZy
b21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0
OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVy
T2JqZWN0KiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIGJvb2wgaXNGcmFtZVZp
ZXdTY3JvbGxDb3JuZXIoUmVuZGVyU2Nyb2xsYmFyUGFydCogc2Nyb2xsQ29ybmVyKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbENvcm5lciA9PSBzY3JvbGxDb3JuZXI7IH0KIApAQCAtMjc5LDcgKzI3
OCw3IEBAIHB1YmxpYzoKICAgICAvLyBPbiBlYWNoIHJlcGFpbnQgdGhlIGRlbGF5IGluY3Jlc2Vz
IGJ5IHRoaXMgYW1vdW50CiAgICAgc3RhdGljIHZvaWQgc2V0UmVwYWludFRocm90dGxpbmdEZWZl
cnJlZFJlcGFpbnREZWxheUluY3JlbWVudER1cmluZ0xvYWRpbmcoZG91YmxlIHApOwogCi0gICAg
dmlydHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1
YWwgTGF5b3V0UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKIAogICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyBtZXRob2Qgb25jZSBwbHVnaW4gbG9hZGluZyBpcyBkZWNvdXBsZWQg
ZnJvbSBsYXlvdXQuCiAgICAgdm9pZCBmbHVzaEFueVBlbmRpbmdQb3N0TGF5b3V0VGFza3MoKTsK
QEAgLTI5MSw4ICsyOTAsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyQm94KiBlbWJlZGRlZENvbnRl
bnRCb3goKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250
ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiBy
ZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBMYXlvdXRSZWN0JiBj
bGlwUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3Qg
TGF5b3V0UmVjdCYgdXBkYXRlUmVjdCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWZXJ0aWNhbERv
Y3VtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRmxpcHBlZERvY3VtZW50KCkgY29u
c3Q7CkBAIC0zMjAsMjcgKzMxOSwyNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZm9yY2VMYXlvdXRQ
YXJlbnRWaWV3SWZOZWVkZWQoKTsKICAgICB2b2lkIHBlcmZvcm1Qb3N0TGF5b3V0VGFza3MoKTsK
IAotICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0
JiwgYm9vbCBpbW1lZGlhdGUpOworICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Q29udGVudFJlY3Rh
bmdsZShjb25zdCBMYXlvdXRSZWN0JiwgYm9vbCBpbW1lZGlhdGUpOwogICAgIHZpcnR1YWwgdm9p
ZCBjb250ZW50c1Jlc2l6ZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaWJsZUNvbnRlbnRzUmVz
aXplZCgpOwogCiAgICAgLy8gT3ZlcnJpZGUgU2Nyb2xsVmlldyBtZXRob2RzIHRvIGRvIHBvaW50
IGNvbnZlcnNpb24gdmlhIHJlbmRlcmVycywgaW4gb3JkZXIgdG8KICAgICAvLyB0YWtlIHRyYW5z
Zm9ybXMgaW50byBhY2NvdW50LgotICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwg
SW50UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50
UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydFRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIExheW91dFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFBv
aW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKICAgICAvLyBTY3JvbGxhYmxlQXJl
YSBpbnRlcmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Ny
b2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdmlydHVhbCBi
b29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0
b3I8SW50UmVjdD4mKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29uc3QgSW50
U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPExheW91dFJlY3Q+
JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvKGNvbnN0IExheW91dFNpemUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUm
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRBbmltYXRlZFNjcm9sbCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZUFuaW1hdGVkU2Nyb2xsKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBM
YXlvdXRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzT25BY3RpdmVQYWdlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25z
dDsKIApAQCAtMzc2LDggKzM3NSw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGRvdWJs
ZSBzQ3VycmVudFBhaW50VGltZVN0YW1wOyAvLyB1c2VkIGZvciBkZXRlY3RpbmcgZGVjb2RlZCBy
ZXNvdXJjZSB0aHJhc2ggaW4gdGhlIGNhY2hlCiAKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJ
bnRTaXplIG1fbWFyZ2luczsKKyAgICBMYXlvdXRTaXplIG1fc2l6ZTsKKyAgICBMYXlvdXRTaXpl
IG1fbWFyZ2luczsKICAgICAKICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVuZGVyRW1iZWRkZWRPYmpl
Y3QqPiBSZW5kZXJFbWJlZGRlZE9iamVjdFNldDsKICAgICBPd25QdHI8UmVuZGVyRW1iZWRkZWRP
YmplY3RTZXQ+IG1fd2lkZ2V0VXBkYXRlU2V0OwpAQCAtNDExLDcgKzQxMCw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2ZpcnN0TGF5b3V0OwogICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50OwogICAg
IENvbG9yIG1fYmFzZUJhY2tncm91bmRDb2xvcjsKLSAgICBJbnRTaXplIG1fbGFzdExheW91dFNp
emU7CisgICAgTGF5b3V0U2l6ZSBtX2xhc3RMYXlvdXRTaXplOwogICAgIGZsb2F0IG1fbGFzdFpv
b21GYWN0b3I7CiAKICAgICBTdHJpbmcgbV9tZWRpYVR5cGU7CkBAIC00MjksNyArNDI4LDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICB1bnNpZ25lZCBtX2RlZmVycmluZ1JlcGFpbnRzOwogICAgIHVu
c2lnbmVkIG1fcmVwYWludENvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX3JlcGFpbnRSZWN0
czsKKyAgICBWZWN0b3I8TGF5b3V0UmVjdD4gbV9yZXBhaW50UmVjdHM7CiAgICAgVGltZXI8RnJh
bWVWaWV3PiBtX2RlZmVycmVkUmVwYWludFRpbWVyOwogICAgIGRvdWJsZSBtX2RlZmVycmVkUmVw
YWludERlbGF5OwogICAgIGRvdWJsZSBtX2xhc3RQYWludFRpbWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gOTMyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9GcmFtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBAIE5T
SW1hZ2UqIEZyYW1lOjpzbmFwc2hvdERyYWdJbWFnZShOb2RlKiAKICAgICByZW5kZXJlci0+dXBk
YXRlRHJhZ1N0YXRlKHRydWUpOyAgICAvLyBtYXJrIGRyYWdnZWQgbm9kZXMgKHNvIHRoZXkgcGlj
ayB1cCB0aGUgcmlnaHQgQ1NTKQogICAgIG1fZG9jLT51cGRhdGVMYXlvdXQoKTsgICAgICAgIC8v
IGZvcmNlcyBzdHlsZSByZWNhbGMgLSBuZWVkZWQgc2luY2UgY2hhbmdpbmcgdGhlIGRyYWcgc3Rh
dGUgbWlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBs
eSBuZXcgc3R5bGVzLCBwbHVzIEpTIGNvdWxkIGhhdmUgY2hhbmdlZCBvdGhlciB0aGluZ3MKLSAg
ICBJbnRSZWN0IHRvcExldmVsUmVjdDsKKyAgICBMYXlvdXRSZWN0IHRvcExldmVsUmVjdDsKICAg
ICBOU1JlY3QgcGFpbnRpbmdSZWN0ID0gcmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2
ZWxSZWN0KTsKIAogICAgIG1fdmlldy0+c2V0Tm9kZVRvRHJhdyhub2RlKTsgICAgICAgICAgICAg
IC8vIGludm9rZSBzcGVjaWFsIHN1Yi10cmVlIGRyYXdpbmcgbW9kZQpAQCAtMzI3LDcgKzMyNyw3
IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqIG5vZGUKIAogICAgIG1fZG9j
LT51cGRhdGVMYXlvdXQoKTsgLy8gZm9yY2VzIHN0eWxlIHJlY2FsYwogCi0gICAgSW50UmVjdCB0
b3BMZXZlbFJlY3Q7CisgICAgTGF5b3V0UmVjdCB0b3BMZXZlbFJlY3Q7CiAgICAgTlNSZWN0IHBh
aW50aW5nUmVjdCA9IHJlbmRlcmVyLT5wYWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCk7CiAK
ICAgICBtX3ZpZXctPnNldE5vZGVUb0RyYXcobm9kZSk7IC8vIGludm9rZSBzcGVjaWFsIHN1Yi10
cmVlIGRyYXdpbmcgbW9kZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>