<?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>71321</bug_id>
          
          <creation_ts>2011-11-01 14:22:16 -0700</creation_ts>
          <short_desc>Fix uses of LayoutUnit in Frame-, Scroll-, and RenderView</short_desc>
          <delta_ts>2011-11-01 23:26:37 -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="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494148</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 14:22:16 -0700</bug_when>
    <thetext>No behavior change yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494168</commentid>
    <comment_count>1</comment_count>
      <attachid>113224</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 14:36:27 -0700</bug_when>
    <thetext>Created attachment 113224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494171</commentid>
    <comment_count>2</comment_count>
      <attachid>113225</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 14:40:18 -0700</bug_when>
    <thetext>Created attachment 113225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494207</commentid>
    <comment_count>3</comment_count>
      <attachid>113225</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 15:25:40 -0700</bug_when>
    <thetext>Comment on attachment 113225
Patch

Attachment 113225 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10128399

New failing tests:
fast/events/wheelevent-in-horizontal-scrollbar-in-rtl.html
fast/events/wheelevent-in-vertical-scrollbar-in-rtl.html
fast/block/positioning/vertical-rl/fixed-positioning.html
fast/dom/horizontal-scrollbar-in-rtl.html
fast/dom/horizontal-scrollbar-when-dir-change.html
fast/dom/vertical-scrollbar-in-rtl.html
fast/dom/vertical-scrollbar-when-dir-change.html
fast/block/positioning/rtl-fixed-positioning.html
fast/dom/scroll-reveal-top-overflow.html
fast/dom/scroll-reveal-left-overflow.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494281</commentid>
    <comment_count>4</comment_count>
      <attachid>113252</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 16:31:39 -0700</bug_when>
    <thetext>Created attachment 113252
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494444</commentid>
    <comment_count>5</comment_count>
      <attachid>113252</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 23:06:49 -0700</bug_when>
    <thetext>Comment on attachment 113252
Patch

Thanks Darin!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494449</commentid>
    <comment_count>6</comment_count>
      <attachid>113252</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 23:26:32 -0700</bug_when>
    <thetext>Comment on attachment 113252
Patch

Clearing flags on attachment: 113252

Committed r99040: &lt;http://trac.webkit.org/changeset/99040&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494450</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 23:26:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113224</attachid>
            <date>2011-11-01 14:36:27 -0700</date>
            <delta_ts>2011-11-01 14:40:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71321-20111101143626.patch</filename>
            <type>text/plain</type>
            <size>53012</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4OTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMTEtMDEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpeCB1c2VzIG9mIExheW91
dFVuaXQgaW4gRnJhbWUtLCBTY3JvbGwtLCBhbmQgUmVuZGVyVmlldworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGluZyB0aGUgdXNhZ2Ugb2YgTGF5
b3V0VW5pdHMgaW4gdGhlICpWaWV3IGNsYXNzZXMgdG8gbWlycm9yIHRoZSBwcm9wZXIgdXNlCisg
ICAgICAgIGFzIGRlcml2ZWQgaW4gdGhlIHN1YnBpeGVsbGF5b3V0IGJyYW5jaC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcGFn
ZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEZyYW1lUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Onpvb21BbmltYXRvclRyYW5zZm9ybUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNTbG93UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbEVsZW1lbnRUb1JlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRh
dGVTY3JvbGxDb3JuZXIpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnRyYWNrZWRSZXBhaW50UmVjdHMpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmlzaWJs
ZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmxheW91dFdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmxheW91dEhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6c2V0Rml4ZWRMYXlvdXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXc6OmNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpz
ZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6b3ZlcmhhbmdB
bW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpyZWN0VG9Db3B5T25TY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpzY3JlZW5Ub0NvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OnNjcm9sbGJhckF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hl
ZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OnZpc2libGVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29u
dGVudHNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c0hlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjphZGp1c3RTY3JvbGxQb3NpdGlvbldp
dGhpblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpzaG91bGRSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFp
bnRWaWV3UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFpbnRS
ZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
dmlld1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6dW5zY2FsZWREb2N1bWVu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6ZG9jdW1lbnRSZWN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6cHJpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNldFByaW50
UmVjdCk6CisKIDIwMTEtMTEtMDEgIERvbWluaWMgQ29vbmV5ICA8ZG9taW5pY2NAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgYW5kIGJveC1zaXppbmc6IGJvcmRl
ci1ib3ggY2FsY3VsYXRlcyBjb250ZW50LWJveCBoZWlnaHQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAJKHJldmlzaW9uIDk4OTc2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNyArMzc2LDcgQEAgYm9vbCBGcmFtZVZp
ZXc6OmRpZEZpcnN0TGF5b3V0KCkgY29uc3QKICAgICByZXR1cm4gIW1fZmlyc3RMYXlvdXQ7CiB9
CiAKLXZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
dm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7
CiAgICAgaWYgKCFwYXJlbnQoKSkgewogICAgICAgICBpZiAoaG9zdFdpbmRvdygpKQpAQCAtMzk3
LDkgKzM5Nyw5IEBAIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnQKICAg
ICByZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7CiB9CiAKLXZvaWQgRnJh
bWVWaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3ZvaWQgRnJhbWVW
aWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbmV3UmVjdCkKIHsKLSAgICBJbnRS
ZWN0IG9sZFJlY3QgPSBmcmFtZVJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IG9sZFJlY3QgPSBmcmFt
ZVJlY3QoKTsKICAgICBpZiAobmV3UmVjdCA9PSBvbGRSZWN0KQogICAgICAgICByZXR1cm47CiAK
QEAgLTEyMjcsNyArMTIyNyw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp6b29tQW5pbWF0b3JUcmFuc2Zv
cm1DaGEKIHsKICAgICBpZiAoc3RhdGUgPT0gWm9vbUFuaW1hdGlvbkZpbmlzaGluZykgewogICAg
ICAgICBtX3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihtX3BhZ2UtPnBhZ2VTY2FsZUZhY3Rvcigp
ICogc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFBvaW50
KHNjYWxlICogc2Nyb2xsWCgpIC0geCwgc2NhbGUgKiBzY3JvbGxZKCkgLSB5KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHNjYWxlICogc2Nyb2xsWCgpIC0g
eCwgc2NhbGUgKiBzY3JvbGxZKCkgLSB5KSk7CiAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPnJl
c2V0Wm9vbSgpOwogICAgIH0KIApAQCAtMTQzMyw3ICsxNDMzLDcgQEAgTGF5b3V0UG9pbnQgRnJh
bWVWaWV3OjpjdXJyZW50TW91c2VQb3NpdAogICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgOiBJbnRQb2ludCgpOwogfQog
Ci1ib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBz
Y3JvbGxEZWx0YSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBMYXlvdXRS
ZWN0JiBjbGlwUmVjdCkKK2Jvb2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIGNvbnN0IHNpemVfdCBmaXhlZE9iamVjdFRo
cmVzaG9sZCA9IDU7CiAKQEAgLTE0NDksMTQgKzE0NDksMTQgQEAgYm9vbCBGcmFtZVZpZXc6OnNj
cm9sbENvbnRlbnRzRmFzdFBhdGgoYwogICAgIGNvbnN0IGJvb2wgaXNDb21wb3NpdGVkQ29udGVu
dExheWVyID0gY29udGVudHNJbkNvbXBvc2l0ZWRMYXllcigpOwogCiAgICAgLy8gR2V0IHRoZSBy
ZWN0cyBvZiB0aGUgZml4ZWQgb2JqZWN0cyB2aXNpYmxlIGluIHRoZSByZWN0VG9TY3JvbGwKLSAg
ICBWZWN0b3I8TGF5b3V0UmVjdCwgZml4ZWRPYmplY3RUaHJlc2hvbGQ+IHN1YlJlY3RUb1VwZGF0
ZTsKKyAgICBWZWN0b3I8SW50UmVjdCwgZml4ZWRPYmplY3RUaHJlc2hvbGQ+IHN1YlJlY3RUb1Vw
ZGF0ZTsKICAgICBib29sIHVwZGF0ZUludmFsaWRhdGVkU3ViUmVjdCA9IHRydWU7CiAgICAgUmVu
ZGVyQmxvY2s6OlBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHBvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICBmb3IgKFJlbmRlckJsb2NrOjpQb3Np
dGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBvc2l0aW9uZWRP
YmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUmVuZGVyQm94KiBy
ZW5kZXJCb3ggPSAqaXQ7CiAgICAgICAgIGlmIChyZW5kZXJCb3gtPnN0eWxlKCktPnBvc2l0aW9u
KCkgIT0gRml4ZWRQb3NpdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBMYXlv
dXRSZWN0IHVwZGF0ZVJlY3QgPSByZW5kZXJCb3gtPmxheWVyKCktPnJlcGFpbnRSZWN0SW5jbHVk
aW5nRGVzY2VuZGFudHMoKTsKKyAgICAgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gcmVuZGVyQm94
LT5sYXllcigpLT5yZXBhaW50UmVjdEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAgICAgICAgIHVw
ZGF0ZVJlY3QgPSBjb250ZW50c1RvV2luZG93KHVwZGF0ZVJlY3QpOwogICAgICAgICBpZiAoIWlz
Q29tcG9zaXRlZENvbnRlbnRMYXllciAmJiBjbGlwc1JlcGFpbnRzKCkpCiAgICAgICAgICAgICB1
cGRhdGVSZWN0LmludGVyc2VjdChyZWN0VG9TY3JvbGwpOwpAQCAtMTQ3Nyw4ICsxNDc3LDggQEAg
Ym9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoYwogICAgICAgICAvLyAyKSB1
cGRhdGUgdGhlIGFyZWEgb2YgZml4ZWQgb2JqZWN0cyB0aGF0IGhhcyBiZWVuIGludmFsaWRhdGVk
CiAgICAgICAgIHNpemVfdCBmaXhPYmplY3RzQ291bnQgPSBzdWJSZWN0VG9VcGRhdGUuc2l6ZSgp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpeE9iamVjdHNDb3VudDsgKytpKSB7
Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IHVwZGF0ZVJlY3QgPSBzdWJSZWN0VG9VcGRhdGVbaV07
Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbGVkUmVjdCA9IHVwZGF0ZVJlY3Q7CisgICAg
ICAgICAgICBJbnRSZWN0IHVwZGF0ZVJlY3QgPSBzdWJSZWN0VG9VcGRhdGVbaV07CisgICAgICAg
ICAgICBJbnRSZWN0IHNjcm9sbGVkUmVjdCA9IHVwZGF0ZVJlY3Q7CiAgICAgICAgICAgICBzY3Jv
bGxlZFJlY3QubW92ZShzY3JvbGxEZWx0YSk7CiAgICAgICAgICAgICB1cGRhdGVSZWN0LnVuaXRl
KHNjcm9sbGVkUmVjdCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTUw
MSw3ICsxNTAxLDcgQEAgYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoYwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzU2xv
d1BhdGgoY29uc3QgTGF5b3V0UmVjdCYgdXBkYXRlUmVjdCkKK3ZvaWQgRnJhbWVWaWV3OjpzY3Jv
bGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCiB7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChjb250ZW50c0luQ29tcG9zaXRlZExh
eWVyKCkpIHsKQEAgLTE2NjQsMTAgKzE2NjQsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbEVs
ZW1lbnRUb1JlY3QoRWxlbQogICAgIExheW91dFJlY3QgYm91bmRzID0gZWxlbWVudC0+Z2V0UmVj
dCgpOwogICAgIGludCBjZW50ZXJpbmdPZmZzZXRYID0gKHJlY3Qud2lkdGgoKSAtIGJvdW5kcy53
aWR0aCgpKSAvIDI7CiAgICAgaW50IGNlbnRlcmluZ09mZnNldFkgPSAocmVjdC5oZWlnaHQoKSAt
IGJvdW5kcy5oZWlnaHQoKSkgLyAyOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKExheW91dFBvaW50
KGJvdW5kcy54KCkgLSBjZW50ZXJpbmdPZmZzZXRYIC0gcmVjdC54KCksIGJvdW5kcy55KCkgLSBj
ZW50ZXJpbmdPZmZzZXRZIC0gcmVjdC55KCkpKTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihJbnRQ
b2ludChib3VuZHMueCgpIC0gY2VudGVyaW5nT2Zmc2V0WCAtIHJlY3QueCgpLCBib3VuZHMueSgp
IC0gY2VudGVyaW5nT2Zmc2V0WSAtIHJlY3QueSgpKSk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojpz
ZXRTY3JvbGxQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYgc2Nyb2xsUG9pbnQpCit2b2lkIEZy
YW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQog
ewogICAgIGJvb2wgd2FzSW5Qcm9ncmFtbWF0aWNTY3JvbGwgPSBtX2luUHJvZ3JhbW1hdGljU2Ny
b2xsOwogICAgIG1faW5Qcm9ncmFtbWF0aWNTY3JvbGwgPSB0cnVlOwpAQCAtMTc0MSw3ICsxNzQx
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKAogICAgIEFTU0VS
VCghbV9mcmFtZS0+b3duZXJFbGVtZW50KCkpOwogICAgIAogICAgIGlmIChtX2lzVHJhY2tpbmdS
ZXBhaW50cykgewotICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0ID0gcjsKKyAgICAgICAgTGF5
b3V0UmVjdCByZXBhaW50UmVjdCA9IHI7CiAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmUoLXNjcm9s
bE9mZnNldCgpKTsKICAgICAgICAgbV90cmFja2VkUmVwYWludFJlY3RzLmFwcGVuZChyZXBhaW50
UmVjdCk7CiAgICAgfQpAQCAtMjM1NSw3ICsyMzU1LDcgQEAgYm9vbCBGcmFtZVZpZXc6OmlzQWN0
aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
aXNBY3RpdmUoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvKGNvbnN0IExheW91dFNp
emUmIG5ld09mZnNldCkKK3ZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUbyhjb25zdCBJbnRTaXplJiBu
ZXdPZmZzZXQpCiB7CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKICAg
ICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwpAQCAtMjUxMSw3ICsyNTExLDcgQEAg
dm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVNjcm9sbENvcm5lcigpCiB7CiAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IDA7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjb3JuZXJTdHlsZTsKLSAg
ICBJbnRSZWN0IGNvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgTGF5b3V0UmVj
dCBjb3JuZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogICAgIAogICAgIGlmICghY29ybmVy
UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVHJ5IHRoZSA8Ym9keT4gZWxlbWVudCBmaXJz
dCBhcyBhIHNjcm9sbCBjb3JuZXIgc291cmNlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CShyZXZpc2lvbiA5ODk3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBIb3N0
V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0
KGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0
UmVjdCYpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZvaWQg
c2NoZWR1bGVBbmltYXRpb24oKTsKQEAgLTMwMSwxMSArMzAxLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFRyYWNrc1JlcGFpbnRzKGJvb2wpOwogICAgIGJvb2wgaXNUcmFja2luZ1JlcGFpbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9pc1RyYWNraW5nUmVwYWludHM7IH0KICAgICB2b2lkIHJlc2V0
VHJhY2tlZFJlcGFpbnRzKCkgeyBtX3RyYWNrZWRSZXBhaW50UmVjdHMuY2xlYXIoKTsgfQotICAg
IGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdHJhY2tlZFJlcGFpbnRSZWN0cygpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhY2tlZFJlcGFpbnRSZWN0czsgfQorICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0
PiYgdHJhY2tlZFJlcGFpbnRSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tlZFJlcGFpbnRS
ZWN0czsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFz
dFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IExheW91dFJlY3QmIHJlY3RU
b1Njcm9sbCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IExheW91dFJlY3QmIHVwZGF0ZVJlY3QpOworICAg
IHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRS
ZWN0JiB1cGRhdGVSZWN0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnRpY2FsRG9jdW1lbnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGbGlwcGVkRG9jdW1lbnQoKSBjb25zdDsKQEAg
LTM1MCw3ICszNTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdmlydHVhbCBi
b29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0
b3I8TGF5b3V0UmVjdD4mKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29uc3Qg
TGF5b3V0U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUbyhjb25zdCBJbnRTaXplJik7
CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UnViYmVyQmFuZChjb25zdCBJbnRTaXplJikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnViYmVyQmFuZChjb25zdCBJbnRTaXpl
JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0QW5pbWF0ZWRTY3JvbGwoKSBjb25z
dDsKQEAgLTQ1Niw3ICs0NTYsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX2xhc3RQYWludFRp
bWU7CiAgICAgCiAgICAgYm9vbCBtX2lzVHJhY2tpbmdSZXBhaW50czsgLy8gVXNlZCBmb3IgdGVz
dGluZy4KLSAgICBWZWN0b3I8SW50UmVjdD4gbV90cmFja2VkUmVwYWludFJlY3RzOworICAgIFZl
Y3RvcjxMYXlvdXRSZWN0PiBtX3RyYWNrZWRSZXBhaW50UmVjdHM7CiAKICAgICBib29sIG1fc2hv
dWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwCShyZXZpc2lvbiA5ODk3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsMzMgKzIzMSwzNCBAQCBJbnRS
ZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdChiCiAgICAgaWYgKCFtX2ZpeGVkVmlz
aWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fZml4ZWRWaXNpYmxl
Q29udGVudFJlY3Q7CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IHZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigp
CisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gdmVydGljYWxTY3JvbGxi
YXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkKICAgICAg
ICAgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6
IDA7Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkKKyAg
ICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkKICAg
ICAgICAgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWln
aHQoKSA6IDA7CiAKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNldC53
aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgSW50
U2l6ZShtYXgoMCwgd2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1heCgwLCBoZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQpKSk7CisgICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQobV9zY3JvbGxPZmZz
ZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAg
ICAgIExheW91dFNpemUobWF4PExheW91dFVuaXQ+KDAsIHdpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg8TGF5b3V0
VW5pdD4oMCwgaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KSkpOworCiB9CiAj
ZW5kaWYKIAotaW50IFNjcm9sbFZpZXc6OmxheW91dFdpZHRoKCkgY29uc3QKK0xheW91dFVuaXQg
U2Nyb2xsVmlldzo6bGF5b3V0V2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpeGVkTGF5
b3V0U2l6ZS5pc0VtcHR5KCkgfHwgIW1fdXNlRml4ZWRMYXlvdXQgPyB2aXNpYmxlV2lkdGgoKSA6
IG1fZml4ZWRMYXlvdXRTaXplLndpZHRoKCk7CiB9CiAKLWludCBTY3JvbGxWaWV3OjpsYXlvdXRI
ZWlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBTY3JvbGxWaWV3OjpsYXlvdXRIZWlnaHQoKSBjb25z
dAogewogICAgIHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgIW1fdXNlRml4
ZWRMYXlvdXQgPyB2aXNpYmxlSGVpZ2h0KCkgOiBtX2ZpeGVkTGF5b3V0U2l6ZS5oZWlnaHQoKTsK
IH0KIAotSW50U2l6ZSBTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUoKSBjb25zdAorTGF5b3V0
U2l6ZSBTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUoKSBjb25zdAogewogICAgIHJldHVybiBt
X2ZpeGVkTGF5b3V0U2l6ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzZXRGaXhlZExheW91dFNp
emUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0Rml4ZWRMYXlv
dXRTaXplKGNvbnN0IExheW91dFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKGZpeGVkTGF5b3V0
U2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTI3OCwxMiArMjc5LDEyIEBA
IHZvaWQgU2Nyb2xsVmlldzo6c2V0VXNlRml4ZWRMYXlvdXQoYm9vbCAKICAgICB1cGRhdGVTY3Jv
bGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKIH0KIAotSW50U2l6ZSBTY3JvbGxWaWV3Ojpjb250ZW50
c1NpemUoKSBjb25zdAorTGF5b3V0U2l6ZSBTY3JvbGxWaWV3Ojpjb250ZW50c1NpemUoKSBjb25z
dAogewogICAgIHJldHVybiBtX2NvbnRlbnRzU2l6ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojpz
ZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQgU2Nyb2xsVmlldzo6
c2V0Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKGNv
bnRlbnRzU2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNCwxNyArNDA1
LDE3IEBAIGJvb2wgU2Nyb2xsVmlldzo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2cKICAgICByZXR1
cm4gc2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNWZXJ0aWNhbERvY3VtZW50
KCksIGlzRmxpcHBlZERvY3VtZW50KCkpLCBncmFudWxhcml0eSk7CiB9CiAKLUludFNpemUgU2Ny
b2xsVmlldzo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAorTGF5b3V0U2l6ZSBTY3JvbGxWaWV3Ojpv
dmVyaGFuZ0Ftb3VudCgpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBzdHJldGNoOworICAgIExheW91
dFNpemUgc3RyZXRjaDsKIAotICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3JvbGxQb3NpdGlv
bigpLnkoKSArIG1fc2Nyb2xsT3JpZ2luLnkoKTsKKyAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Ny
b2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgbV9zY3JvbGxPcmlnaW4ueSgpOwogICAgIGlm
IChwaHlzaWNhbFNjcm9sbFkgPCAwKQogICAgICAgICBzdHJldGNoLnNldEhlaWdodChwaHlzaWNh
bFNjcm9sbFkpOwogICAgIGVsc2UgaWYgKGNvbnRlbnRzSGVpZ2h0KCkgJiYgcGh5c2ljYWxTY3Jv
bGxZID4gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKICAgICAgICAgc3RyZXRj
aC5zZXRIZWlnaHQocGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxl
SGVpZ2h0KCkpKTsKIAotICAgIGludCBwaHlzaWNhbFNjcm9sbFggPSBzY3JvbGxQb3NpdGlvbigp
LngoKSArIG1fc2Nyb2xsT3JpZ2luLngoKTsKKyAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Nyb2xs
WCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgbV9zY3JvbGxPcmlnaW4ueCgpOwogICAgIGlmIChw
aHlzaWNhbFNjcm9sbFggPCAwKQogICAgICAgICBzdHJldGNoLnNldFdpZHRoKHBoeXNpY2FsU2Ny
b2xsWCk7CiAgICAgZWxzZSBpZiAoY29udGVudHNXaWR0aCgpICYmIHBoeXNpY2FsU2Nyb2xsWCA+
IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQpAQCAtNDQ3LDcgKzQ0OCw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgbV9pblVwZGF0
ZVNjcm9sbGJhcnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBJbnRSZWN0IG9sZFNjcm9sbENvcm5l
clJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBvbGRTY3JvbGxDb3Ju
ZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogCiAgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwogICAgIGJvb2wgaGFzVmVydGljYWxTY3Jv
bGxiYXIgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwpAQCAtNDcxLDggKzQ3Miw4IEBAIHZvaWQgU2Ny
b2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICB9IGVsc2UgewogICAgICAgICBi
b29sIHNlbmRDb250ZW50UmVzaXplZE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgSW50U2l6ZSBkb2NTaXplID0gY29udGVudHNTaXplKCk7Ci0gICAgICAgIEludFNpemUg
ZnJhbWVTaXplID0gZnJhbWVSZWN0KCkuc2l6ZSgpOworICAgICAgICBMYXlvdXRTaXplIGRvY1Np
emUgPSBjb250ZW50c1NpemUoKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBmcmFtZVNpemUgPSBmcmFt
ZVJlY3QoKS5zaXplKCk7CiAKICAgICAgICAgaWYgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykg
ewogICAgICAgICAgICAgbmV3SGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGRvY1NpemUud2lkdGgo
KSA+IHZpc2libGVXaWR0aCgpOwpAQCAtNTE0LDcgKzUxNSw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6
dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1fdXBkYXRlU2Nyb2xsYmFyc1Bh
c3MrKzsKICAgICAgICAgICAgIGNvbnRlbnRzUmVzaXplZCgpOwogICAgICAgICAgICAgdmlzaWJs
ZUNvbnRlbnRzUmVzaXplZCgpOwotICAgICAgICAgICAgSW50U2l6ZSBuZXdEb2NTaXplID0gY29u
dGVudHNTaXplKCk7CisgICAgICAgICAgICBMYXlvdXRTaXplIG5ld0RvY1NpemUgPSBjb250ZW50
c1NpemUoKTsKICAgICAgICAgICAgIGlmIChuZXdEb2NTaXplID09IGRvY1NpemUpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgbGF5b3V0IHdpdGggdGhlIG5ldyBzY3JvbGwgc3RhdGUgaGFkIG5v
IGltcGFjdCBvbgogICAgICAgICAgICAgICAgIC8vIHRoZSBkb2N1bWVudCdzIG92ZXJhbGwgc2l6
ZSwgc28gdXBkYXRlU2Nyb2xsYmFycyBkaWRuJ3QgZ2V0IGNhbGxlZC4KQEAgLTUzNCwxMiArNTM1
LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKIAogICAgIGlm
IChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IGNsaWVudFdpZHRoID0gdmlz
aWJsZVdpZHRoKCk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRX
aWR0aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudFdp
ZHRoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKLSAgICAgICAg
SW50UmVjdCBvbGRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotICAg
ICAgICBJbnRSZWN0IGhCYXJSZWN0ID0gSW50UmVjdCgwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV92ZXJ0aWNh
bFNjcm9sbGJhciA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQo
KSk7CisgICAgICAgIExheW91dFVuaXQgcGFnZVN0ZXAgPSBtYXg8TGF5b3V0VW5pdD4obWF4PExh
eW91dFVuaXQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5Q
YWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSksIDEpOworICAgICAgICBMYXlvdXRSZWN0IG9sZFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5mcmFtZVJlY3QoKSk7CisgICAgICAgIExheW91dFJlY3QgaEJhclJlY3QgPSBMYXlvdXRSZWN0
KDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIChtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gbV92ZXJ0
aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKICAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoaEJhclJlY3QpOwogICAgICAgICBp
ZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5p
bnZhbGlkYXRlKCk7CkBAIC01NTUsMTIgKzU1NiwxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgewogICAg
ICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOwotICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSBtYXgobWF4PGludD4oY2xpZW50SGVpZ2h0ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlv
blRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50SGVpZ2h0IC0gU2Nyb2xsYmFyOjptYXhPdmVybGFw
QmV0d2VlblBhZ2VzKCkpLCAxKTsKLSAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1fdmVydGljYWxT
Y3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAgICAgICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJl
Y3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkpOworICAgICAgICBMYXlvdXRVbml0IHBhZ2VT
dGVwID0gbWF4PExheW91dFVuaXQ+KG1heDxMYXlvdXRVbml0PihjbGllbnRIZWlnaHQgKiBTY3Jv
bGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRIZWlnaHQgLSBTY3Jv
bGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICBMYXlvdXRSZWN0
IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgICAgICBMYXlv
dXRSZWN0IHZCYXJSZWN0ID0gTGF5b3V0UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSwgCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgIGhlaWdodCgpIC0gKG1faG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwKSk7CiAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdCh2QmFyUmVjdCk7CiAgICAgICAgIGlmICgh
bV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1fdmVydGljYWxTY3JvbGxiYXIt
PmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0
ZSgpOwpAQCAtNTgzLDcgKzU4NCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFy
cyhjb25zdCAKICAgICAgICAgICAgIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KG9sZFNjcm9s
bENvcm5lclJlY3QpOwogICAgIH0KIAotICAgIEludFBvaW50IHNjcm9sbFBvaW50ID0gYWRqdXN0
U2Nyb2xsUG9zaXRpb25XaXRoaW5SYW5nZShJbnRQb2ludChkZXNpcmVkT2Zmc2V0KSkgKyBJbnRT
aXplKG1fc2Nyb2xsT3JpZ2luLngoKSwgbV9zY3JvbGxPcmlnaW4ueSgpKTsKKyAgICBJbnRQb2lu
dCBzY3JvbGxQb2ludCA9IGFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UoZGVzaXJlZE9m
ZnNldCArIHRvU2l6ZShtX3Njcm9sbE9yaWdpbikpOwogICAgIGlmIChzY3JvbGxQb2ludCAhPSBz
Y3JvbGxQb3NpdGlvbigpKQogICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKHNjcm9sbFBvaW50KTsKIApAQCAtNjAyLDggKzYwMyw4IEBAIEludFJl
Y3QgU2Nyb2xsVmlldzo6cmVjdFRvQ29weU9uU2Nyb2xsKCkKIHsKICAgICBJbnRSZWN0IHNjcm9s
bFZpZXdSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhJbnRSZWN0KDAsIDAsIHZpc2li
bGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpKTsKICAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSkgewotICAgICAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICh2ZXJ0aWNhbFNj
cm9sbGJhcigpICYmICFoYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpID8gdmVydGljYWxT
Y3JvbGxiYXIoKS0+d2lkdGgoKSA6IDA7Ci0gICAgICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaGFzTGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6IDA7CisgICAg
ICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICh2ZXJ0aWNhbFNjcm9sbGJh
cigpICYmICFoYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpID8gdmVydGljYWxTY3JvbGxi
YXIoKS0+d2lkdGgoKSA6IDA7CisgICAgICAgIExheW91dFVuaXQgaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCA9IChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhhc0xheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpKSA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwOwogICAg
ICAgICAKICAgICAgICAgc2Nyb2xsVmlld1JlY3Quc2V0V2lkdGgoc2Nyb2xsVmlld1JlY3Qud2lk
dGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwogICAgICAgICBzY3JvbGxWaWV3UmVjdC5z
ZXRIZWlnaHQoc2Nyb2xsVmlld1JlY3QuaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KTsKQEAgLTYyOSw5ICs2MzAsOSBAQCB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbENvbnRlbnRz
KGNvbnN0IEluCiAgICAgaWYgKG1fZHJhd1BhblNjcm9sbEljb24pIHsKICAgICAgICAgLy8gRklY
TUU6IHRoZSBwYW4gaWNvbiBpcyBicm9rZW4gd2hlbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBp
cyBvbiwgc2luY2UgaXQgd2lsbCBkcmF3IHVuZGVyIHRoZSBjb21wb3NpdGluZyBsYXllcnMuCiAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzgzNwot
ICAgICAgICBpbnQgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCA9IDIgKiAocGFuSWNvblNp
emVMZW5ndGggKyBtYXgoYWJzKHNjcm9sbERlbHRhLndpZHRoKCkpLCBhYnMoc2Nyb2xsRGVsdGEu
aGVpZ2h0KCkpKSk7IC8vIFdlIG9ubHkgd2FudCB0byByZXBhaW50IHdoYXQncyBuZWNlc3NhcnkK
LSAgICAgICAgSW50UG9pbnQgcGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRpb24gPSBJbnRQb2ludCht
X3BhblNjcm9sbEljb25Qb2ludC54KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAv
IDIpLCBtX3BhblNjcm9sbEljb25Qb2ludC55KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxl
bmd0aCAvIDIpKTsKLSAgICAgICAgSW50UmVjdCBwYW5TY3JvbGxJY29uRGlydHlSZWN0ID0gSW50
UmVjdChwYW5JY29uRGlydHlTcXVhcmVMb2NhdGlvbiAsIEludFNpemUocGFuSWNvbkRpcnR5U3F1
YXJlU2l6ZUxlbmd0aCwgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCkpOworICAgICAgICBM
YXlvdXRVbml0IHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggPSAyICogKHBhbkljb25TaXpl
TGVuZ3RoICsgbWF4KGFicyhzY3JvbGxEZWx0YS53aWR0aCgpKSwgYWJzKHNjcm9sbERlbHRhLmhl
aWdodCgpKSkpOyAvLyBXZSBvbmx5IHdhbnQgdG8gcmVwYWludCB3aGF0J3MgbmVjZXNzYXJ5Cisg
ICAgICAgIExheW91dFBvaW50IHBhbkljb25EaXJ0eVNxdWFyZUxvY2F0aW9uID0gTGF5b3V0UG9p
bnQobV9wYW5TY3JvbGxJY29uUG9pbnQueCgpIC0gKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5n
dGggLyAyKSwgbV9wYW5TY3JvbGxJY29uUG9pbnQueSgpIC0gKHBhbkljb25EaXJ0eVNxdWFyZVNp
emVMZW5ndGggLyAyKSk7CisgICAgICAgIExheW91dFJlY3QgcGFuU2Nyb2xsSWNvbkRpcnR5UmVj
dCA9IExheW91dFJlY3QocGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRpb24gLCBMYXlvdXRTaXplKHBh
bkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGgsIHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGgp
KTsKICAgICAgICAgcGFuU2Nyb2xsSWNvbkRpcnR5UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwog
ICAgICAgICBob3N0V2luZG93KCktPmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhwYW5TY3Jv
bGxJY29uRGlydHlSZWN0LCBmYWxzZSAvKmltbWVkaWF0ZSovKTsKICAgICB9CkBAIC02NDcsOCAr
NjQ4LDggQEAgdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50cyhjb25zdCBJbgogICAgIH0K
IAogICAgIC8vIEludmFsaWRhdGUgdGhlIG92ZXJoYW5nIGFyZWFzIGlmIHRoZXkgYXJlIHZpc2li
bGUuCi0gICAgSW50UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdSZWN0OwotICAgIEludFJlY3QgdmVy
dGljYWxPdmVyaGFuZ1JlY3Q7CisgICAgTGF5b3V0UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdSZWN0
OworICAgIExheW91dFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7CiAgICAgY2FsY3VsYXRlT3Zl
cmhhbmdBcmVhc0ZvclBhaW50aW5nKGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIHZlcnRpY2FsT3Zl
cmhhbmdSZWN0KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgaWYgKEdyYXBoaWNzTGF5
ZXIqIG92ZXJoYW5nTGF5ZXIgPSBsYXllckZvck92ZXJoYW5nQXJlYXMoKSkgewpAQCAtNzIxLDcg
KzcyMiw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY28KIAogSW50
UmVjdCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFJlY3QmIHdpbmRvd1Jl
Y3QpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCB2aWV3UmVjdCA9IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1dpbmRvdyh3aW5kb3dSZWN0KTsKKyAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gY29udmVydEZy
b21Db250YWluaW5nV2luZG93KHdpbmRvd1JlY3QpOwogICAgIHZpZXdSZWN0Lm1vdmUoc2Nyb2xs
T2Zmc2V0KCkpOwogICAgIHJldHVybiB2aWV3UmVjdDsKIH0KQEAgLTc0MiwxMiArNzQzLDEyIEBA
IEludFJlY3QgU2Nyb2xsVmlldzo6Y29udGVudHNUb1NjcmVlbihjb24KICAgICByZXR1cm4gaG9z
dFdpbmRvdygpLT53aW5kb3dUb1NjcmVlbihjb250ZW50c1RvV2luZG93KHJlY3QpKTsKIH0KIAot
SW50UG9pbnQgU2Nyb2xsVmlldzo6c2NyZWVuVG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0CitMYXlvdXRQb2ludCBTY3JvbGxWaWV3OjpzY3JlZW5Ub0NvbnRlbnRzKGNvbnN0
IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKICAg
ICAgICAgcmV0dXJuIHBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhwb2ludCk7CiAgICAgaWYgKCFo
b3N0V2luZG93KCkpCi0gICAgICAgIHJldHVybiBJbnRQb2ludCgpOworICAgICAgICByZXR1cm4g
TGF5b3V0UG9pbnQoKTsKICAgICByZXR1cm4gd2luZG93VG9Db250ZW50cyhob3N0V2luZG93KCkt
PnNjcmVlblRvV2luZG93KHBvaW50KSk7CiB9CiAKQEAgLTgxMSw3ICs4MTIsNyBAQCBTY3JvbGxi
YXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhckF0UG9pbnQoCiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0
KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVy
dEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKKyAgICBMYXlvdXRQb2ludCB2aWV3
UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93UG9pbnQpOwogICAgIGlm
IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKS5jb250YWlucyh2aWV3UG9pbnQpKQogICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLmdldCgpOwogICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIG1fdmVydGljYWxT
Y3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKHZpZXdQb2ludCkpCkBAIC04NDksOSArODUw
LDkgQEAgdm9pZCBTY3JvbGxWaWV3OjpnZXN0dXJlRXZlbnQoY29uc3QgUGxhdAogfQogI2VuZGlm
CiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3Qp
Cit2b2lkIFNjcm9sbFZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBMYXlvdXRSZWN0JiBuZXdSZWN0
KQogewotICAgIEludFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOworICAgIExheW91dFJlY3Qg
b2xkUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIAogICAgIGlmIChuZXdSZWN0ID09IG9sZFJlY3Qp
CiAgICAgICAgIHJldHVybjsKQEAgLTg4MiwxNCArODgzLDE0IEBAIHN0YXRpYyB2b2lkIHBvc2l0
aW9uU2Nyb2xsYmFyTGF5ZXIoR3JhcGgKICAgICBpZiAoIWdyYXBoaWNzTGF5ZXIgfHwgIXNjcm9s
bGJhcikKICAgICAgICAgcmV0dXJuOwogICAgIGdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKLSAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1lUmVj
dCgpOworICAgIExheW91dFJlY3Qgc2Nyb2xsYmFyUmVjdCA9IHNjcm9sbGJhci0+ZnJhbWVSZWN0
KCk7CiAgICAgZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oc2Nyb2xsYmFyUmVjdC5sb2NhdGlv
bigpKTsKICAgICBpZiAoc2Nyb2xsYmFyUmVjdC5zaXplKCkgIT0gZ3JhcGhpY3NMYXllci0+c2l6
ZSgpKQogICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICBncmFw
aGljc0xheWVyLT5zZXRTaXplKHNjcm9sbGJhclJlY3Quc2l6ZSgpKTsKIH0KIAotc3RhdGljIHZv
aWQgcG9zaXRpb25TY3JvbGxDb3JuZXJMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVy
LCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KQorc3RhdGljIHZvaWQgcG9zaXRpb25TY3JvbGxD
b3JuZXJMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBjb25zdCBMYXlvdXRSZWN0
JiBjb3JuZXJSZWN0KQogewogICAgIGlmICghZ3JhcGhpY3NMYXllcikKICAgICAgICAgcmV0dXJu
OwpAQCAtOTExLDkgKzkxMiw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6cG9zaXRpb25TY3JvbGxiYXJM
YXllcnMKICNlbmRpZgogfQogCi12b2lkIFNjcm9sbFZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFu
Z2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgbm93KQordm9pZCBTY3JvbGxWaWV3OjpyZXBh
aW50Q29udGVudFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBib29sIG5vdykKIHsK
LSAgICBJbnRSZWN0IHBhaW50UmVjdCA9IHJlY3Q7CisgICAgTGF5b3V0UmVjdCBwYWludFJlY3Qg
PSByZWN0OwogICAgIGlmIChjbGlwc1JlcGFpbnRzKCkgJiYgIXBhaW50c0VudGlyZUNvbnRlbnRz
KCkpCiAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOwog
ICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQpAQCAtOTY4LDE3ICs5NjksMTcgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxDb3JuZXIoKQogewogfQogCi12b2lkIFNjcm9sbFZpZXc6
OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgY29ybmVyUmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBjb3JuZXJSZWN0KQogewogICAg
IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWludFNjcm9sbENvcm5lcih0aGlzLCBjb250ZXh0
LCBjb3JuZXJSZWN0KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjppbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBTY3JvbGxWaWV3OjppbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIGludmFsaWRh
dGVSZWN0KHJlY3QpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnBhaW50U2Nyb2xsYmFycyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFNjcm9sbFZp
ZXc6OnBhaW50U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcgogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTEwMDYsNyArMTAwNyw3IEBAIHZvaWQgU2Nyb2xs
Vmlldzo6cGFpbnRQYW5TY3JvbGxJY29uKEdyYXAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocGFu
U2Nyb2xsSWNvbiwgQ29sb3JTcGFjZURldmljZVJHQiwgbV9wYW5TY3JvbGxJY29uUG9pbnQpOwog
fQogCi12b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIGlmIChwbGF0Zm9ybVdp
ZGdldCgpKSB7CiAgICAgICAgIFdpZGdldDo6cGFpbnQoY29udGV4dCwgcmVjdCk7CkBAIC0xMDIx
LDEzICsxMDIyLDEzIEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAK
ICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYW55IG92ZXJsYXkgc2Nyb2xsYmFycyBhcyB3ZSBwYWlu
dCwgdGhpcyB3aWxsIGJlIHNldCB0byB0cnVlLgogICAgIG1fY29udGFpbnNTY3JvbGxhYmxlQXJl
YVdpdGhPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwogCi0gICAgSW50UmVjdCBjbGlwUmVjdCA9
IGZyYW1lUmVjdCgpOworICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBmcmFtZVJlY3QoKTsKICAg
ICBpZiAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIoKS0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIGNsaXBSZWN0LnNldFdpZHRoKGNsaXBSZWN0LndpZHRo
KCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpKTsKICAgICBpZiAoaG9yaXpvbnRhbFNj
cm9sbGJhcigpICYmICFob3Jpem9udGFsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigp
KQogICAgICAgICBjbGlwUmVjdC5zZXRIZWlnaHQoY2xpcFJlY3QuaGVpZ2h0KCkgLSBob3Jpem9u
dGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpKTsKIAotICAgIEludFJlY3QgZG9jdW1lbnREaXJ0eVJl
Y3QgPSByZWN0OworICAgIExheW91dFJlY3QgZG9jdW1lbnREaXJ0eVJlY3QgPSByZWN0OwogICAg
IGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7CiAKICAgICBpZiAoIWRvY3Vt
ZW50RGlydHlSZWN0LmlzRW1wdHkoKSkgewpAQCAtMTA1Niw3ICsxMDU3LDcgQEAgdm9pZCBTY3Jv
bGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAgIC8vIE5vdyBwYWludCB0aGUgc2Ny
b2xsYmFycy4KICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKG1faG9yaXpvbnRh
bFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyKSkgewogICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotICAgICAgICBJbnRSZWN0IHNj
cm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0OworICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbFZpZXdE
aXJ0eVJlY3QgPSByZWN0OwogICAgICAgICBzY3JvbGxWaWV3RGlydHlSZWN0LmludGVyc2VjdChm
cmFtZVJlY3QoKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7CiAgICAg
ICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QubW92ZUJ5KC1sb2NhdGlvbigpKTsKQEAgLTEwNjksMjUg
KzEwNzAsMjUgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAg
ICAgICBwYWludFBhblNjcm9sbEljb24oY29udGV4dCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6
Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKEludFJlY3QmIGhvcml6b250YWxPdmVy
aGFuZ1JlY3QsIEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdSZWN0KQordm9pZCBTY3JvbGxWaWV3
OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFzRm9yUGFpbnRpbmcoTGF5b3V0UmVjdCYgaG9yaXpvbnRh
bE92ZXJoYW5nUmVjdCwgTGF5b3V0UmVjdCYgdmVydGljYWxPdmVyaGFuZ1JlY3QpCiB7Ci0gICAg
aW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVy
dGljYWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCisgICAgTGF5b3V0VW5pdCB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2Fs
U2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICA/IHZlcnRpY2FsU2Ny
b2xsYmFyKCktPndpZHRoKCkgOiAwOwotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgPSAoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFob3Jpem9udGFsU2Nyb2xsYmFyKCktPmlz
T3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVp
Z2h0KCkgOiAwOwogCi0gICAgaW50IHBoeXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCku
eSgpICsgbV9zY3JvbGxPcmlnaW4ueSgpOworICAgIExheW91dFVuaXQgcGh5c2ljYWxTY3JvbGxZ
ID0gc2Nyb2xsUG9zaXRpb24oKS55KCkgKyBtX3Njcm9sbE9yaWdpbi55KCk7CiAgICAgaWYgKHBo
eXNpY2FsU2Nyb2xsWSA8IDApIHsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCA9IGZy
YW1lUmVjdCgpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LnNldEhlaWdodCgtcGh5
c2ljYWxTY3JvbGxZKTsKICAgICB9IGVsc2UgaWYgKGNvbnRlbnRzSGVpZ2h0KCkgJiYgcGh5c2lj
YWxTY3JvbGxZID4gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkgewotICAgICAg
ICBpbnQgaGVpZ2h0ID0gcGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpOworICAgICAgICBMYXlvdXRVbml0IGhlaWdodCA9IHBoeXNpY2FsU2Nyb2xs
WSAtIChjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKICAgICAgICAgaG9yaXpv
bnRhbE92ZXJoYW5nUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgICAgICBob3Jpem9udGFsT3Zlcmhh
bmdSZWN0LnNldFkoZnJhbWVSZWN0KCkubWF4WSgpIC0gaGVpZ2h0IC0gaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCk7CiAgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KGhl
aWdodCk7CiAgICAgfQogCi0gICAgaW50IHBoeXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0aW9u
KCkueCgpICsgbV9zY3JvbGxPcmlnaW4ueCgpOworICAgIExheW91dFVuaXQgcGh5c2ljYWxTY3Jv
bGxYID0gc2Nyb2xsUG9zaXRpb24oKS54KCkgKyBtX3Njcm9sbE9yaWdpbi54KCk7CiAgICAgaWYg
KHBoeXNpY2FsU2Nyb2xsWCA8IDApIHsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0
V2lkdGgoLXBoeXNpY2FsU2Nyb2xsWCk7CiAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNl
dEhlaWdodChmcmFtZVJlY3QoKS5oZWlnaHQoKSAtIGhvcml6b250YWxPdmVyaGFuZ1JlY3QuaGVp
Z2h0KCkpOwpAQCAtMTA5Nyw3ICsxMDk4LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVP
dmVyaGFuZ0FyZWFzRgogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5n
UmVjdC5zZXRZKGZyYW1lUmVjdCgpLnkoKSk7CiAgICAgfSBlbHNlIGlmIChjb250ZW50c1dpZHRo
KCkgJiYgcGh5c2ljYWxTY3JvbGxYID4gY29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkp
IHsKLSAgICAgICAgaW50IHdpZHRoID0gcGh5c2ljYWxTY3JvbGxYIC0gKGNvbnRlbnRzV2lkdGgo
KSAtIHZpc2libGVXaWR0aCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCB3aWR0aCA9IHBoeXNpY2Fs
U2Nyb2xsWCAtIChjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSk7CiAgICAgICAgIHZl
cnRpY2FsT3ZlcmhhbmdSZWN0LnNldFdpZHRoKHdpZHRoKTsKICAgICAgICAgdmVydGljYWxPdmVy
aGFuZ1JlY3Quc2V0SGVpZ2h0KGZyYW1lUmVjdCgpLmhlaWdodCgpIC0gaG9yaXpvbnRhbE92ZXJo
YW5nUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFgoZnJh
bWVSZWN0KCkubWF4WCgpIC0gd2lkdGggLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKQEAgLTEx
MDgsMTUgKzExMDksMTUgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFz
RgogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdSZWN0
LCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCwgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KQordm9pZCBTY3JvbGxWaWV3OjpwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0KQogewogICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWludE92ZXJoYW5n
QXJlYXModGhpcywgY29udGV4dCwgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCwgdmVydGljYWxPdmVy
aGFuZ1JlY3QsIGRpcnR5UmVjdCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlQW5k
UGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQordm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVBbmRQYWludE92ZXJoYW5n
QXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJl
Y3QpCiB7Ci0gICAgSW50UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdSZWN0OwotICAgIEludFJlY3Qg
dmVydGljYWxPdmVyaGFuZ1JlY3Q7CisgICAgTGF5b3V0UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdS
ZWN0OworICAgIExheW91dFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7CiAgICAgY2FsY3VsYXRl
T3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIHZlcnRpY2Fs
T3ZlcmhhbmdSZWN0KTsKIAogICAgIGlmIChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhob3Jpem9udGFs
T3ZlcmhhbmdSZWN0KSB8fCBkaXJ0eVJlY3QuaW50ZXJzZWN0cyh2ZXJ0aWNhbE92ZXJoYW5nUmVj
dCkpCkBAIC0xMTI4LDE5ICsxMTI5LDE5IEBAIGJvb2wgU2Nyb2xsVmlldzo6aXNQb2ludEluU2Ny
b2xsYmFyQ29ybmUKICAgICBpZiAoIXNjcm9sbGJhckNvcm5lclByZXNlbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250
YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKKyAgICBMYXlvdXRQb2ludCB2aWV3UG9pbnQgPSBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93UG9pbnQpOwogCiAgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhcllNaW4g
PSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKTsKLSAgICAgICAgaW50IGhv
cml6b250YWxTY3JvbGxiYXJZTWF4ID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KS55KCkgKyBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOwotICAg
ICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhclhNaW4gPSBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmZyYW1lUmVjdCgpLngoKSArIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkud2lk
dGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsU2Nyb2xsYmFyWU1pbiA9IG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpOworICAgICAgICBMYXlvdXRVbml0IGhv
cml6b250YWxTY3JvbGxiYXJZTWF4ID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KS55KCkgKyBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOworICAg
ICAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJYTWluID0gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5mcmFtZVJlY3QoKS54KCkgKyBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVj
dCgpLndpZHRoKCk7CiAKICAgICAgICAgcmV0dXJuIHZpZXdQb2ludC55KCkgPiBob3Jpem9udGFs
U2Nyb2xsYmFyWU1pbiAmJiB2aWV3UG9pbnQueSgpIDwgaG9yaXpvbnRhbFNjcm9sbGJhcllNYXgg
JiYgdmlld1BvaW50LngoKSA+IGhvcml6b250YWxTY3JvbGxiYXJYTWluOwogICAgIH0KIAotICAg
IGludCB2ZXJ0aWNhbFNjcm9sbGJhclhNaW4gPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKS54KCk7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyWE1heCA9IG1fdmVydGljYWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLngoKSArIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgp
LndpZHRoKCk7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyWU1pbiA9IG1fdmVydGljYWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLnkoKSArIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgp
LmhlaWdodCgpOworICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJYTWluID0gbV92ZXJ0
aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpOworICAgIExheW91dFVuaXQgdmVydGljYWxT
Y3JvbGxiYXJYTWF4ID0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpICsgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHZl
cnRpY2FsU2Nyb2xsYmFyWU1pbiA9IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnko
KSArIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOwogICAgIAogICAg
IHJldHVybiB2aWV3UG9pbnQueCgpID4gdmVydGljYWxTY3JvbGxiYXJYTWluICYmIHZpZXdQb2lu
dC54KCkgPCB2ZXJ0aWNhbFNjcm9sbGJhclhNYXggJiYgdmlld1BvaW50LnkoKSA+IHZlcnRpY2Fs
U2Nyb2xsYmFyWU1pbjsKIH0KQEAgLTExNTEsMzQgKzExNTIsMzQgQEAgYm9vbCBTY3JvbGxWaWV3
OjpzY3JvbGxiYXJDb3JuZXJQcmVzZW50KAogICAgICAgICB8fCAobV92ZXJ0aWNhbFNjcm9sbGJh
ciAmJiBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpID4gMCk7CiB9CiAK
LUludFJlY3QgU2Nyb2xsVmlldzo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNv
bnN0CitMYXlvdXRSZWN0IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgbG9j
YWxSZWN0KSBjb25zdAogewogICAgIC8vIFNjcm9sbGJhcnMgd29uJ3QgYmUgdHJhbnNmb3JtZWQg
d2l0aGluIHVzCi0gICAgSW50UmVjdCBuZXdSZWN0ID0gbG9jYWxSZWN0OworICAgIExheW91dFJl
Y3QgbmV3UmVjdCA9IGxvY2FsUmVjdDsKICAgICBuZXdSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxv
Y2F0aW9uKCkpOwogICAgIHJldHVybiBuZXdSZWN0OwogfQogCi1JbnRSZWN0IFNjcm9sbFZpZXc6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK0xheW91dFJlY3QgU2Ny
b2xsVmlldzo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAogewot
ICAgIEludFJlY3QgbmV3UmVjdCA9IHBhcmVudFJlY3Q7CisgICAgTGF5b3V0UmVjdCBuZXdSZWN0
ID0gcGFyZW50UmVjdDsKICAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdp
dGhpbiB1cwogICAgIG5ld1JlY3QubW92ZUJ5KC1zY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAg
IHJldHVybiBuZXdSZWN0OwogfQogCiAvLyBGSVhNRTogdGVzdCB0aGVzZSBvbiB3aW5kb3dzCi1J
bnRQb2ludCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBj
b25zdAorTGF5b3V0UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRh
aW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRQb2ludCYg
bG9jYWxQb2ludCkgY29uc3QKIHsKICAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9y
bWVkIHdpdGhpbiB1cwotICAgIEludFBvaW50IG5ld1BvaW50ID0gbG9jYWxQb2ludDsKKyAgICBM
YXlvdXRQb2ludCBuZXdQb2ludCA9IGxvY2FsUG9pbnQ7CiAgICAgbmV3UG9pbnQubW92ZUJ5KHNj
cm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIG5ld1BvaW50OwogfQogCi1JbnRQb2lu
dCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QK
K0xheW91dFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIHBhcmVu
dFBvaW50KSBjb25zdAogewotICAgIEludFBvaW50IG5ld1BvaW50ID0gcGFyZW50UG9pbnQ7Cisg
ICAgTGF5b3V0UG9pbnQgbmV3UG9pbnQgPSBwYXJlbnRQb2ludDsKICAgICAvLyBTY3JvbGxiYXJz
IHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwogICAgIG5ld1BvaW50Lm1vdmVCeSgtc2Ny
b2xsYmFyLT5sb2NhdGlvbigpKTsKICAgICByZXR1cm4gbmV3UG9pbnQ7CkBAIC0xMjQxLDcgKzEy
NDIsNyBAQCBib29sIFNjcm9sbFZpZXc6OmlzT2Zmc2NyZWVuKCkgY29uc3QKIH0KIAogCi12b2lk
IFNjcm9sbFZpZXc6OmFkZFBhblNjcm9sbEljb24oY29uc3QgSW50UG9pbnQmIGljb25Qb3NpdGlv
bikKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkUGFuU2Nyb2xsSWNvbihjb25zdCBMYXlvdXRQb2ludCYg
aWNvblBvc2l0aW9uKQogewogICAgIGlmICghaG9zdFdpbmRvdygpKQogICAgICAgICByZXR1cm47
CkBAIC0xMzQ1LDEyICsxMzQ2LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDb250
ZW50c1NpemUKIHsKIH0KIAotSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzVG9T
Y3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxh
dGZvcm1Db250ZW50c1RvU2NyZWVuKGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUludFBvaW50IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2NyZWVu
VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitMYXlvdXRQb2ludCBTY3Jv
bGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAogewogICAgIHJldHVybiBwb2ludDsKIH0KQEAgLTEzNjQsNyArMTM2NSw3IEBAIGJvb2wg
U2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGwoU2Nyb2xsRGkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0
IEludFJlY3QmLCBib29sIC8qbm93Ki8pCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWlu
dENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYsIGJvb2wgLypub3cqLykKIHsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gOTg5NzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgU2Nyb2xsVmlld19oCiAjZGVmaW5lIFNjcm9sbFZp
ZXdfaAogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlICJTY3JvbGxUeXBlcy5oIgpAQCAtMTQ2LDI0ICsxNDYsMjQgQEAgcHVibGljOgogICAgIC8v
IHdoaWNoIHVzdWFsbHkgd2lsbCBoYXBwZW4gd2hlbiBwYW5uaW5nLCBwaW5jaGluZyBhbmQgcm90
YXRpb24gZW5kcywgb3Igd2hlbiBzY2FsZSBvciBwb3NpdGlvbiBhcmUgY2hhbmdlZCBtYW51YWxs
eS4KICAgICB2aXJ0dWFsIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNj
cm9sbGJhcnMgPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldEZpeGVkVmlzaWJs
ZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkgeyBtX2ZpeGVk
VmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OyB9Ci0gICAgTGF5b3V0VW5p
dCB2aXNpYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKS53aWR0
aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gdmlz
aWJsZUNvbnRlbnRSZWN0KCkuaGVpZ2h0KCk7IH0KKyAgICBpbnQgdmlzaWJsZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgoKTsgfQorICAgIGludCB2aXNp
YmxlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkuaGVpZ2h0KCk7
IH0KIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRoZSBzaXplIHdlYmtp
dCBzaG91bGQgdXNlIHRvIGxheW91dCB0aGUgY29udGVudHMuIEJ5IGRlZmF1bHQgdGhpcyBpcyB0
aGUgc2FtZSBhcyB0aGUgdmlzaWJsZQogICAgIC8vIGNvbnRlbnQgc2l6ZS4gRXhwbGljaXRseSBz
ZXR0aW5nIGEgbGF5b3V0IHNpemUgdmFsdWUgd2lsbCBjYXVzZSB3ZWJraXQgdG8gbGF5b3V0IHRo
ZSBjb250ZW50cyB1c2luZyB0aGlzIHNpemUgaW5zdGVhZC4KLSAgICBpbnQgbGF5b3V0V2lkdGgo
KSBjb25zdDsKLSAgICBpbnQgbGF5b3V0SGVpZ2h0KCkgY29uc3Q7Ci0gICAgSW50U2l6ZSBmaXhl
ZExheW91dFNpemUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBJ
bnRTaXplJik7CisgICAgTGF5b3V0VW5pdCBsYXlvdXRXaWR0aCgpIGNvbnN0OworICAgIExheW91
dFVuaXQgbGF5b3V0SGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0U2l6ZSBmaXhlZExheW91dFNp
emUoKSBjb25zdDsKKyAgICB2b2lkIHNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBMYXlvdXRTaXpl
Jik7CiAgICAgYm9vbCB1c2VGaXhlZExheW91dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VXNlRml4
ZWRMYXlvdXQoYm9vbCBlbmFibGUpOwogICAgIAotICAgIC8vIEZ1bmN0aW9ucyBmb3IgZ2V0dGlu
Zy9zZXR0aW5nIHRoZSBzaXplIG9mIHRoZSBkb2N1bWVudCBjb250YWluZWQgaW5zaWRlIHRoZSBT
Y3JvbGxWaWV3IChhcyBhbiBJbnRTaXplIG9yIGFzIGluZGl2aWR1YWwgd2lkdGggYW5kIGhlaWdo
dAorICAgIC8vIEZ1bmN0aW9ucyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRoZSBzaXplIG9mIHRoZSBk
b2N1bWVudCBjb250YWluZWQgaW5zaWRlIHRoZSBTY3JvbGxWaWV3IChhcyBhbiBMYXlvdXRTaXpl
IG9yIGFzIGluZGl2aWR1YWwgd2lkdGggYW5kIGhlaWdodAogICAgIC8vIHZhbHVlcykuCi0gICAg
SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsgLy8gQWx3YXlzIGF0IGxlYXN0IGFzIGJpZyBh
cyB0aGUgdmlzaWJsZVdpZHRoKCkvdmlzaWJsZUhlaWdodCgpLgotICAgIGludCBjb250ZW50c1dp
ZHRoKCkgY29uc3QgeyByZXR1cm4gY29udGVudHNTaXplKCkud2lkdGgoKTsgfQotICAgIGludCBj
b250ZW50c0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAg
TGF5b3V0U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsgLy8gQWx3YXlzIGF0IGxlYXN0IGFzIGJp
ZyBhcyB0aGUgdmlzaWJsZVdpZHRoKCkvdmlzaWJsZUhlaWdodCgpLgorICAgIExheW91dFVuaXQg
Y29udGVudHNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzU2l6ZSgpLndpZHRoKCk7IH0K
KyAgICBMYXlvdXRVbml0IGNvbnRlbnRzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29udGVudHNT
aXplKCkuaGVpZ2h0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0
IExheW91dFNpemUmKTsKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgcXVlcnlpbmcgdGhlIGN1cnJl
bnQgc2Nyb2xsZWQgcG9zaXRpb24gKGJvdGggYXMgYSBwb2ludCwgYSBzaXplLCBvciBhcyBpbmRp
dmlkdWFsIFggYW5kIFkgdmFsdWVzKS4KICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCk7IH0KQEAgLTE3MSwx
MSArMTcxLDE1IEBAIHB1YmxpYzoKICAgICBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KSBjb25zdDsgLy8gVGhlIG1heGltdW0gcG9zaXRpb24gd2UgY2FuIGJlIHNjcm9sbGVkIHRvLgog
ICAgIEludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0OyAvLyBUaGUgbWluaW11
bSBwb3NpdGlvbiB3ZSBjYW4gYmUgc2Nyb2xsZWQgdG8uCiAgICAgLy8gQWRqdXN0IHRoZSBwYXNz
ZWQgaW4gc2Nyb2xsIHBvc2l0aW9uIHRvIGtlZXAgaXQgYmV0d2VlbiB0aGUgbWluaW11bSBhbmQg
bWF4aW11bSBwb3NpdGlvbnMuCi0gICAgSW50UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25XaXRo
aW5SYW5nZShjb25zdCBJbnRQb2ludCYpIGNvbnN0OyAKKyAgICBJbnRQb2ludCBhZGp1c3RTY3Jv
bGxQb3NpdGlvbldpdGhpblJhbmdlKGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50UG9p
bnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25XaXRoaW5SYW5nZShjb25zdCBJbnRTaXplJiBzKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2Uo
SW50UG9pbnQocy53aWR0aCgpLCBzLmhlaWdodCgpKSk7CisgICAgfQogICAgIGludCBzY3JvbGxY
KCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54KCk7IH0KICAgICBpbnQgc2Nyb2xs
WSgpIGNvbnN0IHsgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueSgpOyB9CiAKLSAgICBJbnRTaXpl
IG92ZXJoYW5nQW1vdW50KCkgY29uc3Q7CisgICAgTGF5b3V0U2l6ZSBvdmVyaGFuZ0Ftb3VudCgp
IGNvbnN0OwogCiAgICAgdm9pZCBjYWNoZUN1cnJlbnRTY3JvbGxQb3NpdGlvbigpIHsgbV9jYWNo
ZWRTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7IH0KICAgICBJbnRQb2ludCBjYWNo
ZWRTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2Nyb2xsUG9zaXRpb247
IH0KQEAgLTIwNywxMiArMjExLDEzIEBAIHB1YmxpYzoKICAgICAvLyBvZiBjb250YWluaW5nIHdp
bmRvdyBpcy4gKEZvciBleGFtcGxlIG9uIE1hYyBpdCBpcyB0aGUgY29udGFpbmluZyBOU1dpbmRv
dy4pCiAgICAgSW50UG9pbnQgd2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYpIGNvbnN0
OwogICAgIEludFBvaW50IGNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdDsK
KwogICAgIEludFJlY3Qgd2luZG93VG9Db250ZW50cyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAg
ICAgSW50UmVjdCBjb250ZW50c1RvV2luZG93KGNvbnN0IEludFJlY3QmKSBjb25zdDsKIAogICAg
IC8vIEZ1bmN0aW9ucyBmb3IgY29udmVydGluZyB0byBhbmQgZnJvbSBzY3JlZW4gY29vcmRpbmF0
ZXMuCi0gICAgSW50UmVjdCBjb250ZW50c1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdDsK
LSAgICBJbnRQb2ludCBzY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IEludFBvaW50JikgY29uc3Q7Cisg
ICAgSW50UmVjdCBjb250ZW50c1RvU2NyZWVuKGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAg
ICBMYXlvdXRQb2ludCBzY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAK
ICAgICAvLyBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGFuc3dlciB3aGV0aGVy
IG9yIG5vdCB0aGUgc2Nyb2xsIHZpZXcgaXMgY3VycmVudGx5IHZpc2libGUuIEFuaW1hdGlvbnMg
YW5kIHBhaW50aW5nIHVwZGF0ZXMgY2FuIGJlIHN1c3BlbmRlZCBpZgogICAgIC8vIHdlIGtub3cg
dGhhdCB3ZSBhcmUgZWl0aGVyIG5vdCBpbiBhIHdpbmRvdyByaWdodCBub3cgb3IgaWYgdGhhdCB3
aW5kb3cgaXMgbm90IHZpc2libGUuCkBAIC0yMzEsNyArMjM2LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgpOwogICAgIAogICAgIC8vIFdpZGdldCBvdmVy
cmlkZSB0byB1cGRhdGUgb3VyIHNjcm9sbGJhcnMgYW5kIG5vdGlmeSBvdXIgY29udGVudHMgb2Yg
dGhlIHJlc2l6ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IExheW91dFJlY3QmKTsKIAog
ICAgIC8vIEZvciBwbGF0Zm9ybXMgdGhhdCBuZWVkIHRvIGhpdCB0ZXN0IHNjcm9sbGJhcnMgZnJv
bSB3aXRoaW4gdGhlIGVuZ2luZSdzIGV2ZW50IGhhbmRsZXJzIChsaWtlIFdpbjMyKS4KICAgICBT
Y3JvbGxiYXIqIHNjcm9sbGJhckF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsK
QEAgLTI2Myw4ICsyNjgsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gV2lkZ2V0IG92ZXJy
aWRlLiBIYW5kbGVzIHBhaW50aW5nIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgdmlldyBhcyB3ZWxs
IGFzIHRoZSBzY3JvbGxiYXJzLgotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBwYWludFNjcm9sbGJhcnMoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCBwYWludFNjcm9sbGJhcnMo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYpOwogCiAgICAgLy8gV2lkZ2V0IG92
ZXJyaWRlcyB0byBlbnN1cmUgdGhhdCBvdXIgY2hpbGRyZW4ncyB2aXNpYmlsaXR5IHN0YXR1cyBp
cyBrZXB0IHVwIHRvIGRhdGUgd2hlbiB3ZSBnZXQgc2hvd24gYW5kIGhpZGRlbi4KICAgICB2aXJ0
dWFsIHZvaWQgc2hvdygpOwpAQCAtMjczLDMzICsyNzgsMzMgQEAgcHVibGljOgogICAgIAogICAg
IC8vIFBhbiBzY3JvbGxpbmcuCiAgICAgc3RhdGljIGNvbnN0IGludCBub1BhblNjcm9sbFJhZGl1
cyA9IDE1OwotICAgIHZvaWQgYWRkUGFuU2Nyb2xsSWNvbihjb25zdCBJbnRQb2ludCYpOworICAg
IHZvaWQgYWRkUGFuU2Nyb2xsSWNvbihjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZvaWQgcmVt
b3ZlUGFuU2Nyb2xsSWNvbigpOwogICAgIHZvaWQgcGFpbnRQYW5TY3JvbGxJY29uKEdyYXBoaWNz
Q29udGV4dCopOwogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJblNjcm9sbGJhckNvcm5lcihj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xs
Q29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIGNvcm5lclJlY3QpOwog
Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJ
bnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0
RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50
UG9pbnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0
OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5
b3V0UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRQb2lu
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwg
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIGJvb2wgY29udGFpbnNTY3JvbGxhYmxl
QXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNTY3Jv
bGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFyczsgfQogICAgIHZvaWQgc2V0Q29udGFpbnNT
Y3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycyhib29sIGNvbnRhaW5zKSB7IG1fY29u
dGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycyA9IGNvbnRhaW5zOyB9CiAK
LSAgICB2b2lkIGNhbGN1bGF0ZUFuZFBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgY2FsY3VsYXRlQW5kUGFpbnRP
dmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCk7CiAKIHByb3RlY3RlZDoKICAgICBTY3JvbGxWaWV3KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgbm93ID0gZmFsc2Up
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwYWludENvbnRl
bnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYsIGJvb2wgbm93ID0gZmFsc2UpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QpID0gMDsKIAotICAgIHZvaWQgY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0Zv
clBhaW50aW5nKEludFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIEludFJlY3QmIHZlcnRp
Y2FsT3ZlcmhhbmdSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVyaGFuZ0FyZWFzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNv
bnN0IEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpOworICAgIHZvaWQgY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKExheW91dFJl
Y3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIExheW91dFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdS
ZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IExheW91dFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IExheW91
dFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdBcmVhLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3Qp
OwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgdmlzaWJsZUNvbnRlbnRzUmVzaXplZCgpID0gMDsKQEAgLTMxMSw3ICszMTYsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKIAogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CiAKICAgICAv
LyBTY3JvbGwgdGhlIGNvbnRlbnQgYnkgYmxpdHRpbmcgdGhlIHBpeGVscy4KICAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwg
Y29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CkBA
IC0zNDUsOCArMzUwLDggQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fZml4ZWRWaXNpYmxlQ29u
dGVudFJlY3Q7CiAgICAgSW50U2l6ZSBtX3Njcm9sbE9mZnNldDsgLy8gRklYTUU6IFdvdWxkIHJh
dGhlciBzdG9yZSB0aGlzIGFzIGEgcG9zaXRpb24sIGJ1dCB3ZSB3aWxsIHdhaXQgdG8gbWFrZSB0
aGlzIGNoYW5nZSB1bnRpbCBtb3JlIGNvZGUgaXMgc2hhcmVkLgogICAgIEludFBvaW50IG1fY2Fj
aGVkU2Nyb2xsUG9zaXRpb247Ci0gICAgSW50U2l6ZSBtX2ZpeGVkTGF5b3V0U2l6ZTsKLSAgICBJ
bnRTaXplIG1fY29udGVudHNTaXplOworICAgIExheW91dFNpemUgbV9maXhlZExheW91dFNpemU7
CisgICAgTGF5b3V0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKIAogICAgIGludCBtX3Njcm9sbGJhcnNB
dm9pZGluZ1Jlc2l6ZXI7CiAgICAgYm9vbCBtX3Njcm9sbGJhcnNTdXBwcmVzc2VkOwpAQCAtMzg0
LDEyICszODksMTIgQEAgcHJpdmF0ZToKICAgICBib29sIHBsYXRmb3JtQ2FuQmxpdE9uU2Nyb2xs
KCkgY29uc3Q7CiAgICAgSW50UmVjdCBwbGF0Zm9ybVZpc2libGVDb250ZW50UmVjdChib29sIGlu
Y2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKICAgICB2b2lkIHBsYXRmb3JtU2V0Q29udGVudHNTaXpl
KCk7Ci0gICAgSW50UmVjdCBwbGF0Zm9ybUNvbnRlbnRzVG9TY3JlZW4oY29uc3QgSW50UmVjdCYp
IGNvbnN0OwotICAgIEludFBvaW50IHBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OworICAgIEludFJlY3QgcGxhdGZvcm1Db250ZW50c1RvU2NyZWVuKGNvbnN0
IExheW91dFJlY3QmKSBjb25zdDsKKyAgICBMYXlvdXRQb2ludCBwbGF0Zm9ybVNjcmVlblRvQ29u
dGVudHMoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIHBsYXRmb3JtU2V0U2Nyb2xs
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBib29sIHBsYXRmb3JtU2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOwogICAgIHZvaWQgcGxhdGZvcm1TZXRTY3Jv
bGxiYXJzU3VwcHJlc3NlZChib29sIHJlcGFpbnRPblVuc3VwcHJlc3MpOwotICAgIHZvaWQgcGxh
dGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cpOwor
ICAgIHZvaWQgcGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0
JiwgYm9vbCBub3cpOwogICAgIGJvb2wgcGxhdGZvcm1Jc09mZnNjcmVlbigpIGNvbnN0OwogICAg
IHZvaWQgcGxhdGZvcm1TZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKTsKICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAko
cmV2aXNpb24gOTg5NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsOCBAQCB2b2lkIFJlbmRlclZpZXc6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJCiB7CiAgICAgLy8gSWYgd2UgZXZlciByZXF1aXJlIGxheW91
dCBidXQgcmVjZWl2ZSBhIHBhaW50IGFueXdheSwgc29tZXRoaW5nIGhhcyBnb25lIGhvcnJpYmx5
IHdyb25nLgogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CisgICAgLy8gV2Ugc2hvdWxkIG5l
dmVyIGJlIGNhbGxlZCB0byBwYWludCB3aXRoIGFuIG9mZnNldCBub3Qgb24gZGV2aWNlIHBpeGVs
cy4KKyAgICBBU1NFUlQoTGF5b3V0UG9pbnQoSW50UG9pbnQocGFpbnRPZmZzZXQueCgpLCBwYWlu
dE9mZnNldC55KCkpKSA9PSBwYWludE9mZnNldCk7CiAgICAgcGFpbnRPYmplY3QocGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CiB9CiAKQEAgLTI1NCw3ICsyNTYsNyBAQCB2b2lkIFJlbmRlclZpZXc6
OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpCiAgICAgfQogfQogCi1ib29sIFJlbmRlclZpZXc6OnNo
b3VsZFJlcGFpbnQoY29uc3QgSW50UmVjdCYgcikgY29uc3QKK2Jvb2wgUmVuZGVyVmlldzo6c2hv
dWxkUmVwYWludChjb25zdCBMYXlvdXRSZWN0JiByKSBjb25zdAogewogICAgIGlmIChwcmludGlu
ZygpIHx8IHIud2lkdGgoKSA9PSAwIHx8IHIuaGVpZ2h0KCkgPT0gMCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjY1LDcgKzI2Nyw3IEBAIGJvb2wgUmVuZGVyVmlldzo6c2hvdWxkUmVwYWlu
dChjb25zdCBJbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJWaWV3OjpyZXBh
aW50Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiB1ciwgYm9vbCBpbW1lZGlhdGUpCit2b2lk
IFJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0IExheW91dFJlY3QmIHVyLCBi
b29sIGltbWVkaWF0ZSkKIHsKICAgICBpZiAoIXNob3VsZFJlcGFpbnQodXIpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yNzYsOCArMjc4LDggQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1Jl
Y3RhbmdsZShjbwogICAgIGlmICghZWx0KQogICAgICAgICBtX2ZyYW1lVmlldy0+cmVwYWludENv
bnRlbnRSZWN0YW5nbGUodXIsIGltbWVkaWF0ZSk7CiAgICAgZWxzZSBpZiAoUmVuZGVyQm94KiBv
YmogPSBlbHQtPnJlbmRlckJveCgpKSB7Ci0gICAgICAgIEludFJlY3QgdnIgPSB2aWV3UmVjdCgp
OwotICAgICAgICBJbnRSZWN0IHIgPSBpbnRlcnNlY3Rpb24odXIsIHZyKTsKKyAgICAgICAgTGF5
b3V0UmVjdCB2ciA9IHZpZXdSZWN0KCk7CisgICAgICAgIExheW91dFJlY3QgciA9IGludGVyc2Vj
dGlvbih1ciwgdnIpOwogICAgICAgICAKICAgICAgICAgLy8gU3VidHJhY3Qgb3V0IHRoZSBjb250
ZW50c1ggYW5kIGNvbnRlbnRzWSBvZmZzZXRzIHRvIGdldCBvdXIgY29vcmRzIHdpdGhpbiB0aGUg
dmlld2luZwogICAgICAgICAvLyByZWN0YW5nbGUuCkBAIC0yOTAsNyArMjkyLDcgQEAgdm9pZCBS
ZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZShjbwogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJWaWV3OjpyZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhjb25zdCBJ
bnRSZWN0JiB1ciwgYm9vbCBpbW1lZGlhdGUpCit2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRSZWN0
YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IExheW91dFJlY3QmIHVyLCBib29s
IGltbWVkaWF0ZSkKIHsKICAgICBpZiAoIXNob3VsZFJlcGFpbnQodXIpKQogICAgICAgICByZXR1
cm47CkBAIC0zMDMsNyArMzA1LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50UmVjdGFuZ2xl
SW5WaWV3QQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6Y29tcHV0ZVJlY3RGb3JSZXBh
aW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZWN0
LCBib29sIGZpeGVkKSBjb25zdAordm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3QmIHJl
Y3QsIGJvb2wgZml4ZWQpIGNvbnN0CiB7CiAgICAgLy8gSWYgYSBjb250YWluZXIgd2FzIHNwZWNp
ZmllZCwgYW5kIHdhcyBub3QgMCBvciB0aGUgUmVuZGVyVmlldywKICAgICAvLyB0aGVuIHdlIHNo
b3VsZCBoYXZlIGZvdW5kIGl0IGJ5IG5vdy4KQEAgLTM3NywxMiArMzc5LDEyIEBAIEludFJlY3Qg
UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wKICAgICB9CiAKICAgICAvLyBOb3cgY3Jl
YXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIHdob2xlIHNl
bGVjdGlvbi4KLSAgICBJbnRSZWN0IHNlbFJlY3Q7CisgICAgTGF5b3V0UmVjdCBzZWxSZWN0Owog
ICAgIFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0gc2VsZWN0ZWRPYmplY3RzLmVuZCgpOwog
ICAgIGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRvciBpID0gc2VsZWN0ZWRPYmplY3RzLmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpIHsKICAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9
IGktPnNlY29uZDsKICAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGlu
IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2Ug
Y29vcmRpbmF0ZXMuCi0gICAgICAgIEludFJlY3QgY3VyclJlY3QgPSBpbmZvLT5yZWN0KCk7Cisg
ICAgICAgIExheW91dFJlY3QgY3VyclJlY3QgPSBpbmZvLT5yZWN0KCk7CiAgICAgICAgIGlmIChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRDb250
YWluZXIoKSkgewogICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1YWQgPSByZXBhaW50Q29udGFp
bmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJyUmVjdCkpOwogICAgICAgICAg
ICAgY3VyclJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7IApAQCAtNjU0LDI2
ICs2NTYsMjYgQEAgdm9pZCBSZW5kZXJWaWV3Ojpub3RpZnlXaWRnZXRzKFdpZGdldE5vdAogICAg
IHJlbGVhc2VXaWRnZXRzKHJlbmRlcldpZGdldHMpOwogfQogCi1JbnRSZWN0IFJlbmRlclZpZXc6
OnZpZXdSZWN0KCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyVmlldzo6dmlld1JlY3QoKSBjb25z
dAogewogICAgIGlmIChwcmludGluZygpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3
aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KDAsIDAsIHdpZHRo
KCksIGhlaWdodCgpKTsKICAgICBpZiAobV9mcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBtX2Zy
YW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKKyAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOwogfQogCiAKLUludFJlY3QgUmVuZGVyVmlldzo6dW5zY2Fs
ZWREb2N1bWVudFJlY3QoKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJWaWV3Ojp1bnNjYWxlZERv
Y3VtZW50UmVjdCgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBvdmVyZmxvd1JlY3QobGF5b3V0T3Zl
cmZsb3dSZWN0KCkpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGxheW91dE92ZXJmbG93
UmVjdCgpKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICByZXR1
cm4gb3ZlcmZsb3dSZWN0OwogfQogCi1JbnRSZWN0IFJlbmRlclZpZXc6OmRvY3VtZW50UmVjdCgp
IGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlclZpZXc6OmRvY3VtZW50UmVjdCgpIGNvbnN0CiB7Ci0g
ICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodW5zY2FsZWREb2N1bWVudFJlY3QoKSk7CisgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QodW5zY2FsZWREb2N1bWVudFJlY3QoKSk7CiAgICAgaWYgKGhh
c1RyYW5zZm9ybSgpKQogICAgICAgICBvdmVyZmxvd1JlY3QgPSBsYXllcigpLT5jdXJyZW50VHJh
bnNmb3JtKCkubWFwUmVjdChvdmVyZmxvd1JlY3QpOwogICAgIHJldHVybiBvdmVyZmxvd1JlY3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDk4OTc2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsMTQgKzY3LDE0IEBAIHB1YmxpYzoKIAogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXc7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBjb21w
dXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBy
ZXBhaW50Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUgPSBmYWxz
ZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxz
ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0IExh
eW91dFJlY3QmLCBib29sIGltbWVkaWF0ZSA9IGZhbHNlKTsKICAgICAvLyBSZXBhaW50IHRoZSB2
aWV3LCBhbmQgYWxsIGNvbXBvc2l0ZWQgbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBnaXZlbiBh
YnNvbHV0ZSByZWN0YW5nbGUuCiAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2UnZCBuZXZlciBoYXZl
IHRvIGRvIHRoaXMsIGlmIGFsbCByZXBhaW50cyBhcmUgY29udGFpbmVyLXJlbGF0aXZlLgotICAg
IHZpcnR1YWwgdm9pZCByZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhj
b25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lk
IHJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IExheW91dFJl
Y3QmLCBib29sIGltbWVkaWF0ZSA9IGZhbHNlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJv
eERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
IAogICAgIGVudW0gU2VsZWN0aW9uUmVwYWludE1vZGUgeyBSZXBhaW50TmV3WE9ST2xkLCBSZXBh
aW50TmV3TWludXNPbGQgfTsKICAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0
YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zLCBTZWxlY3Rp
b25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwpAQCAtOTYsNyArOTYsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICBpbnQgbWF4aW1hbE91dGxpbmVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhpbWFsT3V0bGluZVNpemU7IH0KIAotICAgIHZpcnR1YWwgSW50UmVjdCB2aWV3UmVjdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCB2aWV3UmVjdCgpIGNvbnN0OwogCiAgICAg
dm9pZCB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKICAgICB2b2lkIGFkZFdpZGdldChSZW5kZXJX
aWRnZXQqKTsKQEAgLTE1MSw4ICsxNTEsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGVnYWN5UHJp
bnRpbmcubV90cnVuY2F0b3JXaWR0aCA9IDA7CiAgICAgICAgIG1fbGVnYWN5UHJpbnRpbmcubV9m
b3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsKICAgICB9Ci0gICAgY29uc3QgSW50UmVjdCYgcHJpbnRS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sZWdhY3lQcmludGluZy5tX3ByaW50UmVjdDsgfQotICAg
IHZvaWQgc2V0UHJpbnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9sZWdhY3lQcmludGluZy5t
X3ByaW50UmVjdCA9IHI7IH0KKyAgICBjb25zdCBMYXlvdXRSZWN0JiBwcmludFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX2xlZ2FjeVByaW50aW5nLm1fcHJpbnRSZWN0OyB9CisgICAgdm9pZCBzZXRQ
cmludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikgeyBtX2xlZ2FjeVByaW50aW5nLm1fcHJpbnRS
ZWN0ID0gcjsgfQogICAgIC8vIEVuZCBkZXByZWNhdGVkIGZ1bmN0aW9ucy4KIAogICAgIC8vIE5v
dGlmaWNhdGlvbnMgdGhhdCB0aGlzIHZpZXcgYmVjYW1lIHZpc2libGUgaW4gYSB3aW5kb3csIG9y
IHdpbGwgYmUKQEAgLTE2NSw5ICsxNjUsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzQ29tcG9z
aXRpbmcoKSBjb25zdDsKICNlbmRpZgogCi0gICAgSW50UmVjdCB1bnNjYWxlZERvY3VtZW50UmVj
dCgpIGNvbnN0OworICAgIExheW91dFJlY3QgdW5zY2FsZWREb2N1bWVudFJlY3QoKSBjb25zdDsK
IAotICAgIEludFJlY3QgZG9jdW1lbnRSZWN0KCkgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBkb2N1
bWVudFJlY3QoKSBjb25zdDsKIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIHJlbmRlckZsb3dUaHJl
YWRXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGZsb3dUaHJlYWQpOwogICAgIGJvb2wgaGFz
UmVuZGVyRmxvd1RocmVhZHMoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlckZsb3dUaHJlYWRMaXN0
ICYmICFtX3JlbmRlckZsb3dUaHJlYWRMaXN0LT5pc0VtcHR5KCk7IH0KQEAgLTE5MSw3ICsxOTEs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50
KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsK
IAogcHJpdmF0ZToKLSAgICBib29sIHNob3VsZFJlcGFpbnQoY29uc3QgSW50UmVjdCYgcikgY29u
c3Q7CisgICAgYm9vbCBzaG91bGRSZXBhaW50KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAog
ICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBtYXkgb25seSBiZSBhY2Nlc3NlZCBieSBMYXlvdXRTdGF0
ZU1haW50YWluZXIuCiAgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyRmxvd1RocmVhZCos
IGJvb2wgcmVnaW9uc0NoYW5nZWQpOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgaW50IG1fYmVzdFRydW5jYXRlZEF0OwogICAgICAgICBpbnQgbV90cnVuY2F0ZWRBdDsK
ICAgICAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7Ci0gICAgICAgIEludFJlY3QgbV9wcmludFJl
Y3Q7CisgICAgICAgIExheW91dFJlY3QgbV9wcmludFJlY3Q7CiAgICAgICAgIGJvb2wgbV9mb3Jj
ZWRQYWdlQnJlYWs7CiAgICAgfTsKICAgICBMZWdhY3lQcmludGluZyBtX2xlZ2FjeVByaW50aW5n
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113225</attachid>
            <date>2011-11-01 14:40:18 -0700</date>
            <delta_ts>2011-11-01 16:31:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71321-20111101144017.patch</filename>
            <type>text/plain</type>
            <size>53201</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4OTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMTEtMDEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpeCB1c2VzIG9mIExheW91
dFVuaXQgaW4gRnJhbWUtLCBTY3JvbGwtLCBhbmQgUmVuZGVyVmlldworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGluZyB0aGUgdXNhZ2Ugb2YgTGF5
b3V0VW5pdHMgaW4gdGhlICpWaWV3IGNsYXNzZXMgdG8gbWlycm9yIHRoZSBwcm9wZXIgdXNlCisg
ICAgICAgIGFzIGRlcml2ZWQgaW4gdGhlIHN1YnBpeGVsbGF5b3V0IGJyYW5jaC4KKworICAgICAg
ICBUaGlzIGVudGFpbHMgc2Nyb2xsaW5nIG9ubHkgd2l0aCBpbnRlZ2VycyAoYW5kIHJvdW5kaW5n
IG9uY2Ugd2UndmUgbWFkZSB0aGUgc3dpdGNoKQorICAgICAgICBhbmQgdXNpbmcgaW50ZWdlcnMg
Zm9yIHdpbmRvdyBjb29yZGluYXRlcywgd2l0aCBMYXlvdXRVbml0cyBmb3IgY29udGVudCBjb29y
ZGluYXRlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdlIGluIGJlaGF2aW9y
LgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Onpvb21BbmltYXRvclRy
YW5zZm9ybUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxDb250
ZW50c0Zhc3RQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVu
dHNTbG93UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbEVsZW1lbnRU
b1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojp1cGRhdGVTY3JvbGxDb3JuZXIpOgorICAgICAgICAqIHBhZ2UvRnJhbWVW
aWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYWNrZWRSZXBhaW50UmVjdHMp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OmxheW91dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmxheW91
dEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0Rml4ZWRMYXlvdXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6b3ZlcmhhbmdBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpyZWN0VG9D
b3B5T25TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JlZW5Ub0NvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbGJhckF0UG9pbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmll
dy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZVdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6Y29udGVudHNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3Ojpjb250ZW50c0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjphZGp1
c3RTY3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzaG91bGRSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OnJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6dmlld1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6dW5zY2FsZWREb2N1bWVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
ZG9jdW1lbnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHJpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OnNldFByaW50UmVjdCk6CisKIDIwMTEtMTEtMDEgIERvbWluaWMgQ29vbmV5ICA8
ZG9taW5pY2NAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgYW5k
IGJveC1zaXppbmc6IGJvcmRlci1ib3ggY2FsY3VsYXRlcyBjb250ZW50LWJveCBoZWlnaHQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDk4OTc2KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNyArMzc2
LDcgQEAgYm9vbCBGcmFtZVZpZXc6OmRpZEZpcnN0TGF5b3V0KCkgY29uc3QKICAgICByZXR1cm4g
IW1fZmlyc3RMYXlvdXQ7CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQordm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IExh
eW91dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFwYXJlbnQoKSkgewogICAgICAgICBpZiAoaG9z
dFdpbmRvdygpKQpAQCAtMzk3LDkgKzM5Nyw5IEBAIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRl
UmVjdChjb25zdCBJbnQKICAgICByZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVj
dCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3
UmVjdCkKK3ZvaWQgRnJhbWVWaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbmV3
UmVjdCkKIHsKLSAgICBJbnRSZWN0IG9sZFJlY3QgPSBmcmFtZVJlY3QoKTsKKyAgICBMYXlvdXRS
ZWN0IG9sZFJlY3QgPSBmcmFtZVJlY3QoKTsKICAgICBpZiAobmV3UmVjdCA9PSBvbGRSZWN0KQog
ICAgICAgICByZXR1cm47CiAKQEAgLTEyMjcsNyArMTIyNyw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp6
b29tQW5pbWF0b3JUcmFuc2Zvcm1DaGEKIHsKICAgICBpZiAoc3RhdGUgPT0gWm9vbUFuaW1hdGlv
bkZpbmlzaGluZykgewogICAgICAgICBtX3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihtX3BhZ2Ut
PnBhZ2VTY2FsZUZhY3RvcigpICogc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExheW91dFBvaW50KHNjYWxlICogc2Nyb2xsWCgpIC0geCwgc2NhbGUgKiBzY3JvbGxZ
KCkgLSB5KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHNj
YWxlICogc2Nyb2xsWCgpIC0geCwgc2NhbGUgKiBzY3JvbGxZKCkgLSB5KSk7CiAgICAgICAgIHNj
cm9sbEFuaW1hdG9yKCktPnJlc2V0Wm9vbSgpOwogICAgIH0KIApAQCAtMTQzMyw3ICsxNDMzLDcg
QEAgTGF5b3V0UG9pbnQgRnJhbWVWaWV3OjpjdXJyZW50TW91c2VQb3NpdAogICAgIHJldHVybiBt
X2ZyYW1lID8gbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkg
OiBJbnRQb2ludCgpOwogfQogCi1ib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0
aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdFRvU2Ny
b2xsLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkKK2Jvb2wgRnJhbWVWaWV3OjpzY3JvbGxD
b250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0
JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIGNvbnN0IHNp
emVfdCBmaXhlZE9iamVjdFRocmVzaG9sZCA9IDU7CiAKQEAgLTE0NDksMTQgKzE0NDksMTQgQEAg
Ym9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoYwogICAgIGNvbnN0IGJvb2wg
aXNDb21wb3NpdGVkQ29udGVudExheWVyID0gY29udGVudHNJbkNvbXBvc2l0ZWRMYXllcigpOwog
CiAgICAgLy8gR2V0IHRoZSByZWN0cyBvZiB0aGUgZml4ZWQgb2JqZWN0cyB2aXNpYmxlIGluIHRo
ZSByZWN0VG9TY3JvbGwKLSAgICBWZWN0b3I8TGF5b3V0UmVjdCwgZml4ZWRPYmplY3RUaHJlc2hv
bGQ+IHN1YlJlY3RUb1VwZGF0ZTsKKyAgICBWZWN0b3I8SW50UmVjdCwgZml4ZWRPYmplY3RUaHJl
c2hvbGQ+IHN1YlJlY3RUb1VwZGF0ZTsKICAgICBib29sIHVwZGF0ZUludmFsaWRhdGVkU3ViUmVj
dCA9IHRydWU7CiAgICAgUmVuZGVyQmxvY2s6OlBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICBmb3Ig
KFJlbmRlckJsb2NrOjpQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHBvc2l0aW9uZWRPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSAqaXQ7CiAgICAgICAgIGlmIChyZW5kZXJCb3gt
PnN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBMYXlvdXRSZWN0IHVwZGF0ZVJlY3QgPSByZW5kZXJCb3gtPmxheWVyKCkt
PnJlcGFpbnRSZWN0SW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKKyAgICAgICAgSW50UmVjdCB1cGRh
dGVSZWN0ID0gcmVuZGVyQm94LT5sYXllcigpLT5yZXBhaW50UmVjdEluY2x1ZGluZ0Rlc2NlbmRh
bnRzKCk7CiAgICAgICAgIHVwZGF0ZVJlY3QgPSBjb250ZW50c1RvV2luZG93KHVwZGF0ZVJlY3Qp
OwogICAgICAgICBpZiAoIWlzQ29tcG9zaXRlZENvbnRlbnRMYXllciAmJiBjbGlwc1JlcGFpbnRz
KCkpCiAgICAgICAgICAgICB1cGRhdGVSZWN0LmludGVyc2VjdChyZWN0VG9TY3JvbGwpOwpAQCAt
MTQ3Nyw4ICsxNDc3LDggQEAgYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgo
YwogICAgICAgICAvLyAyKSB1cGRhdGUgdGhlIGFyZWEgb2YgZml4ZWQgb2JqZWN0cyB0aGF0IGhh
cyBiZWVuIGludmFsaWRhdGVkCiAgICAgICAgIHNpemVfdCBmaXhPYmplY3RzQ291bnQgPSBzdWJS
ZWN0VG9VcGRhdGUuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpeE9i
amVjdHNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IHVwZGF0ZVJlY3QgPSBz
dWJSZWN0VG9VcGRhdGVbaV07Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbGVkUmVjdCA9
IHVwZGF0ZVJlY3Q7CisgICAgICAgICAgICBJbnRSZWN0IHVwZGF0ZVJlY3QgPSBzdWJSZWN0VG9V
cGRhdGVbaV07CisgICAgICAgICAgICBJbnRSZWN0IHNjcm9sbGVkUmVjdCA9IHVwZGF0ZVJlY3Q7
CiAgICAgICAgICAgICBzY3JvbGxlZFJlY3QubW92ZShzY3JvbGxEZWx0YSk7CiAgICAgICAgICAg
ICB1cGRhdGVSZWN0LnVuaXRlKHNjcm9sbGVkUmVjdCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpAQCAtMTUwMSw3ICsxNTAxLDcgQEAgYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENv
bnRlbnRzRmFzdFBhdGgoYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6
OnNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgTGF5b3V0UmVjdCYgdXBkYXRlUmVjdCkKK3Zv
aWQgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0
ZVJlY3QpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChjb250
ZW50c0luQ29tcG9zaXRlZExheWVyKCkpIHsKQEAgLTE2NjQsMTAgKzE2NjQsMTAgQEAgdm9pZCBG
cmFtZVZpZXc6OnNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbQogICAgIExheW91dFJlY3QgYm91bmRz
ID0gZWxlbWVudC0+Z2V0UmVjdCgpOwogICAgIGludCBjZW50ZXJpbmdPZmZzZXRYID0gKHJlY3Qu
d2lkdGgoKSAtIGJvdW5kcy53aWR0aCgpKSAvIDI7CiAgICAgaW50IGNlbnRlcmluZ09mZnNldFkg
PSAocmVjdC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSkgLyAyOwotICAgIHNldFNjcm9sbFBv
c2l0aW9uKExheW91dFBvaW50KGJvdW5kcy54KCkgLSBjZW50ZXJpbmdPZmZzZXRYIC0gcmVjdC54
KCksIGJvdW5kcy55KCkgLSBjZW50ZXJpbmdPZmZzZXRZIC0gcmVjdC55KCkpKTsKKyAgICBzZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludChib3VuZHMueCgpIC0gY2VudGVyaW5nT2Zmc2V0WCAtIHJl
Y3QueCgpLCBib3VuZHMueSgpIC0gY2VudGVyaW5nT2Zmc2V0WSAtIHJlY3QueSgpKSk7CiB9CiAK
LXZvaWQgRnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYgc2Ny
b2xsUG9pbnQpCit2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvaW50KQogewogICAgIGJvb2wgd2FzSW5Qcm9ncmFtbWF0aWNTY3JvbGwgPSBt
X2luUHJvZ3JhbW1hdGljU2Nyb2xsOwogICAgIG1faW5Qcm9ncmFtbWF0aWNTY3JvbGwgPSB0cnVl
OwpAQCAtMTc0MSw3ICsxNzQxLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVj
dGFuZ2xlKAogICAgIEFTU0VSVCghbV9mcmFtZS0+b3duZXJFbGVtZW50KCkpOwogICAgIAogICAg
IGlmIChtX2lzVHJhY2tpbmdSZXBhaW50cykgewotICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0
ID0gcjsKKyAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHI7CiAgICAgICAgIHJlcGFp
bnRSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCgpKTsKICAgICAgICAgbV90cmFja2VkUmVwYWludFJl
Y3RzLmFwcGVuZChyZXBhaW50UmVjdCk7CiAgICAgfQpAQCAtMjM1NSw3ICsyMzU1LDcgQEAgYm9v
bCBGcmFtZVZpZXc6OmlzQWN0aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNjcm9s
bFRvKGNvbnN0IExheW91dFNpemUmIG5ld09mZnNldCkKK3ZvaWQgRnJhbWVWaWV3OjpzY3JvbGxU
byhjb25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCiB7CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwpAQCAt
MjUxMSw3ICsyNTExLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVNjcm9sbENvcm5lcigpCiB7
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IDA7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBjb3JuZXJTdHlsZTsKLSAgICBJbnRSZWN0IGNvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0
KCk7CisgICAgTGF5b3V0UmVjdCBjb3JuZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogICAg
IAogICAgIGlmICghY29ybmVyUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVHJ5IHRoZSA8
Ym9keT4gZWxlbWVudCBmaXJzdCBhcyBhIHNjcm9sbCBjb3JuZXIgc291cmNlLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA5ODk3NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFt
ZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKQEAgLTMwMSwxMSArMzAxLDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRyYWNrc1JlcGFpbnRzKGJvb2wpOwogICAgIGJvb2wg
aXNUcmFja2luZ1JlcGFpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pc1RyYWNraW5nUmVwYWludHM7
IH0KICAgICB2b2lkIHJlc2V0VHJhY2tlZFJlcGFpbnRzKCkgeyBtX3RyYWNrZWRSZXBhaW50UmVj
dHMuY2xlYXIoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdHJhY2tlZFJlcGFpbnRS
ZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tlZFJlcGFpbnRSZWN0czsgfQorICAgIGNvbnN0
IFZlY3RvcjxMYXlvdXRSZWN0PiYgdHJhY2tlZFJlcGFpbnRSZWN0cygpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhY2tlZFJlcGFpbnRSZWN0czsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29s
IHNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0
IExheW91dFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpOwot
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IExheW91dFJlY3Qm
IHVwZGF0ZVJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQ29udGVudHNT
bG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBp
c1ZlcnRpY2FsRG9jdW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGbGlwcGVkRG9j
dW1lbnQoKSBjb25zdDsKQEAgLTM1MCw3ICszNTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRSZWN0
Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGdldFRpY2ttYXJrcyhWZWN0b3I8TGF5b3V0UmVjdD4mKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsVG8oY29uc3QgTGF5b3V0U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxU
byhjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UnViYmVyQmFuZChj
b25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnViYmVy
QmFuZChjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0QW5p
bWF0ZWRTY3JvbGwoKSBjb25zdDsKQEAgLTQ1Niw3ICs0NTYsNyBAQCBwcml2YXRlOgogICAgIGRv
dWJsZSBtX2xhc3RQYWludFRpbWU7CiAgICAgCiAgICAgYm9vbCBtX2lzVHJhY2tpbmdSZXBhaW50
czsgLy8gVXNlZCBmb3IgdGVzdGluZy4KLSAgICBWZWN0b3I8SW50UmVjdD4gbV90cmFja2VkUmVw
YWludFJlY3RzOworICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBtX3RyYWNrZWRSZXBhaW50UmVjdHM7
CiAKICAgICBib29sIG1fc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA5ODk3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEs
MzMgKzIzMSwzNCBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdChiCiAg
ICAgaWYgKCFtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxi
YXJXaWR0aCA9IHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlz
T3ZlcmxheVNjcm9sbGJhcigpCisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
ID0gdmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkKICAgICAgICAgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gdmVydGljYWxTY3Jv
bGxiYXIoKS0+d2lkdGgoKSA6IDA7Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkKKyAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkKICAgICAgICAgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gaG9yaXpvbnRh
bFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6IDA7CiAKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2lu
dChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSksCi0gICAg
ICAgICAgICAgICAgICAgSW50U2l6ZShtYXgoMCwgd2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgwLCBoZWlnaHQoKSAtIGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQpKSk7CisgICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0
UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpLAor
ICAgICAgICAgICAgICAgICAgICAgIExheW91dFNpemUobWF4PExheW91dFVuaXQ+KDAsIHdpZHRo
KCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXg8TGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KSkpOworCiB9CiAjZW5kaWYKIAotaW50IFNjcm9sbFZpZXc6OmxheW91dFdpZHRoKCkg
Y29uc3QKK0xheW91dFVuaXQgU2Nyb2xsVmlldzo6bGF5b3V0V2lkdGgoKSBjb25zdAogewogICAg
IHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgIW1fdXNlRml4ZWRMYXlvdXQg
PyB2aXNpYmxlV2lkdGgoKSA6IG1fZml4ZWRMYXlvdXRTaXplLndpZHRoKCk7CiB9CiAKLWludCBT
Y3JvbGxWaWV3OjpsYXlvdXRIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBTY3JvbGxWaWV3Ojps
YXlvdXRIZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZS5pc0Vt
cHR5KCkgfHwgIW1fdXNlRml4ZWRMYXlvdXQgPyB2aXNpYmxlSGVpZ2h0KCkgOiBtX2ZpeGVkTGF5
b3V0U2l6ZS5oZWlnaHQoKTsKIH0KIAotSW50U2l6ZSBTY3JvbGxWaWV3OjpmaXhlZExheW91dFNp
emUoKSBjb25zdAorTGF5b3V0U2l6ZSBTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUoKSBjb25z
dAogewogICAgIHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3
OjpzZXRGaXhlZExheW91dFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQgU2Nyb2xs
Vmlldzo6c2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IExheW91dFNpemUmIG5ld1NpemUpCiB7CiAg
ICAgaWYgKGZpeGVkTGF5b3V0U2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKQEAg
LTI3OCwxMiArMjc5LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0VXNlRml4ZWRMYXlvdXQoYm9v
bCAKICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKIH0KIAotSW50U2l6ZSBT
Y3JvbGxWaWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAorTGF5b3V0U2l6ZSBTY3JvbGxWaWV3Ojpj
b250ZW50c1NpemUoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRlbnRzU2l6ZTsKIH0KIAot
dm9pZCBTY3JvbGxWaWV3OjpzZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkK
K3ZvaWQgU2Nyb2xsVmlldzo6c2V0Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmIG5ld1Np
emUpCiB7CiAgICAgaWYgKGNvbnRlbnRzU2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQwNCwxNyArNDA1LDE3IEBAIGJvb2wgU2Nyb2xsVmlldzo6bG9naWNhbFNjcm9sbChT
Y3JvbGxMb2cKICAgICByZXR1cm4gc2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwg
aXNWZXJ0aWNhbERvY3VtZW50KCksIGlzRmxpcHBlZERvY3VtZW50KCkpLCBncmFudWxhcml0eSk7
CiB9CiAKLUludFNpemUgU2Nyb2xsVmlldzo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAorTGF5b3V0
U2l6ZSBTY3JvbGxWaWV3OjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBz
dHJldGNoOworICAgIExheW91dFNpemUgc3RyZXRjaDsKIAotICAgIGludCBwaHlzaWNhbFNjcm9s
bFkgPSBzY3JvbGxQb3NpdGlvbigpLnkoKSArIG1fc2Nyb2xsT3JpZ2luLnkoKTsKKyAgICBMYXlv
dXRVbml0IHBoeXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgbV9zY3JvbGxP
cmlnaW4ueSgpOwogICAgIGlmIChwaHlzaWNhbFNjcm9sbFkgPCAwKQogICAgICAgICBzdHJldGNo
LnNldEhlaWdodChwaHlzaWNhbFNjcm9sbFkpOwogICAgIGVsc2UgaWYgKGNvbnRlbnRzSGVpZ2h0
KCkgJiYgcGh5c2ljYWxTY3JvbGxZID4gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQo
KSkKICAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQocGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRlbnRz
SGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKIAotICAgIGludCBwaHlzaWNhbFNjcm9sbFgg
PSBzY3JvbGxQb3NpdGlvbigpLngoKSArIG1fc2Nyb2xsT3JpZ2luLngoKTsKKyAgICBMYXlvdXRV
bml0IHBoeXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgbV9zY3JvbGxPcmln
aW4ueCgpOwogICAgIGlmIChwaHlzaWNhbFNjcm9sbFggPCAwKQogICAgICAgICBzdHJldGNoLnNl
dFdpZHRoKHBoeXNpY2FsU2Nyb2xsWCk7CiAgICAgZWxzZSBpZiAoY29udGVudHNXaWR0aCgpICYm
IHBoeXNpY2FsU2Nyb2xsWCA+IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQpAQCAt
NDQ3LDcgKzQ0OCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAK
ICAgICAgICAgbV9pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBJbnRS
ZWN0IG9sZFNjcm9sbENvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgTGF5b3V0
UmVjdCBvbGRTY3JvbGxDb3JuZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogCiAgICAgYm9v
bCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwogICAgIGJv
b2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwpAQCAtNDcxLDgg
KzQ3Miw4IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICB9
IGVsc2UgewogICAgICAgICBib29sIHNlbmRDb250ZW50UmVzaXplZE5vdGlmaWNhdGlvbiA9IGZh
bHNlOwogICAgICAgICAKLSAgICAgICAgSW50U2l6ZSBkb2NTaXplID0gY29udGVudHNTaXplKCk7
Ci0gICAgICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVSZWN0KCkuc2l6ZSgpOworICAgICAg
ICBMYXlvdXRTaXplIGRvY1NpemUgPSBjb250ZW50c1NpemUoKTsKKyAgICAgICAgTGF5b3V0U2l6
ZSBmcmFtZVNpemUgPSBmcmFtZVJlY3QoKS5zaXplKCk7CiAKICAgICAgICAgaWYgKGhTY3JvbGwg
PT0gU2Nyb2xsYmFyQXV0bykgewogICAgICAgICAgICAgbmV3SGFzSG9yaXpvbnRhbFNjcm9sbGJh
ciA9IGRvY1NpemUud2lkdGgoKSA+IHZpc2libGVXaWR0aCgpOwpAQCAtNTE0LDcgKzUxNSw3IEBA
IHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1f
dXBkYXRlU2Nyb2xsYmFyc1Bhc3MrKzsKICAgICAgICAgICAgIGNvbnRlbnRzUmVzaXplZCgpOwog
ICAgICAgICAgICAgdmlzaWJsZUNvbnRlbnRzUmVzaXplZCgpOwotICAgICAgICAgICAgSW50U2l6
ZSBuZXdEb2NTaXplID0gY29udGVudHNTaXplKCk7CisgICAgICAgICAgICBMYXlvdXRTaXplIG5l
d0RvY1NpemUgPSBjb250ZW50c1NpemUoKTsKICAgICAgICAgICAgIGlmIChuZXdEb2NTaXplID09
IGRvY1NpemUpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgbGF5b3V0IHdpdGggdGhlIG5ldyBz
Y3JvbGwgc3RhdGUgaGFkIG5vIGltcGFjdCBvbgogICAgICAgICAgICAgICAgIC8vIHRoZSBkb2N1
bWVudCdzIG92ZXJhbGwgc2l6ZSwgc28gdXBkYXRlU2Nyb2xsYmFycyBkaWRuJ3QgZ2V0IGNhbGxl
ZC4KQEAgLTUzNCwxMiArNTM1LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFy
cyhjb25zdCAKIAogICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50
IGNsaWVudFdpZHRoID0gdmlzaWJsZVdpZHRoKCk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IG1h
eChtYXg8aW50PihjbGllbnRXaWR0aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVu
UGFnaW5nKCksIGNsaWVudFdpZHRoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2Vz
KCkpLCAxKTsKLSAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
ZnJhbWVSZWN0KCkpOwotICAgICAgICBJbnRSZWN0IGhCYXJSZWN0ID0gSW50UmVjdCgwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoKCkgLSAobV92ZXJ0aWNhbFNjcm9sbGJhciA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRo
KCkgOiAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIExheW91dFVuaXQgcGFnZVN0ZXAgPSBtYXg8
TGF5b3V0VW5pdD4obWF4PExheW91dFVuaXQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjptaW5G
cmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1heE92
ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICBMYXlvdXRSZWN0IG9sZFJlY3QobV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CisgICAgICAgIExheW91dFJlY3QgaEJh
clJlY3QgPSBMYXlvdXRSZWN0KDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoaEJh
clJlY3QpOwogICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAh
PSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CkBAIC01NTUsMTIgKzU1NiwxMiBAQCB2b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICBpZiAobV92ZXJ0aWNh
bFNjcm9sbGJhcikgewogICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgp
OwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBtYXgobWF4PGludD4oY2xpZW50SGVpZ2h0ICogU2Ny
b2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50SGVpZ2h0IC0gU2Ny
b2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKLSAgICAgICAgSW50UmVjdCBv
bGRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAgICAgICAgSW50UmVj
dCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRo
KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hvcml6b250YWxT
Y3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkpOworICAgICAg
ICBMYXlvdXRVbml0IHBhZ2VTdGVwID0gbWF4PExheW91dFVuaXQ+KG1heDxMYXlvdXRVbml0Pihj
bGllbnRIZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBj
bGllbnRIZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOwor
ICAgICAgICBMYXlvdXRSZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0
KCkpOworICAgICAgICBMYXlvdXRSZWN0IHZCYXJSZWN0ID0gTGF5b3V0UmVjdCh3aWR0aCgpIC0g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgIGhlaWdodCgpIC0g
KG1faG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkg
OiAwKSk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdCh2QmFyUmVj
dCk7CiAgICAgICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1f
dmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+aW52YWxpZGF0ZSgpOwpAQCAtNTgzLDcgKzU4NCw3IEBAIHZvaWQgU2Nyb2xsVmll
dzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIGludmFsaWRhdGVTY3JvbGxD
b3JuZXJSZWN0KG9sZFNjcm9sbENvcm5lclJlY3QpOwogICAgIH0KIAotICAgIEludFBvaW50IHNj
cm9sbFBvaW50ID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25XaXRoaW5SYW5nZShJbnRQb2ludChkZXNp
cmVkT2Zmc2V0KSkgKyBJbnRTaXplKG1fc2Nyb2xsT3JpZ2luLngoKSwgbV9zY3JvbGxPcmlnaW4u
eSgpKTsKKyAgICBJbnRQb2ludCBzY3JvbGxQb2ludCA9IGFkanVzdFNjcm9sbFBvc2l0aW9uV2l0
aGluUmFuZ2UoZGVzaXJlZE9mZnNldCArIHRvU2l6ZShtX3Njcm9sbE9yaWdpbikpOwogICAgIGlm
IChzY3JvbGxQb2ludCAhPSBzY3JvbGxQb3NpdGlvbigpKQogICAgICAgICBTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHNjcm9sbFBvaW50KTsKIApAQCAtNjAy
LDggKzYwMyw4IEBAIEludFJlY3QgU2Nyb2xsVmlldzo6cmVjdFRvQ29weU9uU2Nyb2xsKCkKIHsK
ICAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhJ
bnRSZWN0KDAsIDAsIHZpc2libGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpKTsKICAgICBpZiAo
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkgewotICAgICAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJX
aWR0aCA9ICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFoYXNMYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCkpID8gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDA7Ci0gICAgICAgIGludCBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaGFz
TGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5o
ZWlnaHQoKSA6IDA7CisgICAgICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9
ICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFoYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
ID8gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDA7CisgICAgICAgIExheW91dFVuaXQg
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhh
c0xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+
aGVpZ2h0KCkgOiAwOwogICAgICAgICAKICAgICAgICAgc2Nyb2xsVmlld1JlY3Quc2V0V2lkdGgo
c2Nyb2xsVmlld1JlY3Qud2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwogICAgICAg
ICBzY3JvbGxWaWV3UmVjdC5zZXRIZWlnaHQoc2Nyb2xsVmlld1JlY3QuaGVpZ2h0KCkgLSBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKQEAgLTYyOSw5ICs2MzAsOSBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnNjcm9sbENvbnRlbnRzKGNvbnN0IEluCiAgICAgaWYgKG1fZHJhd1BhblNjcm9sbEljb24p
IHsKICAgICAgICAgLy8gRklYTUU6IHRoZSBwYW4gaWNvbiBpcyBicm9rZW4gd2hlbiBhY2NlbGVy
YXRlZCBjb21wb3NpdGluZyBpcyBvbiwgc2luY2UgaXQgd2lsbCBkcmF3IHVuZGVyIHRoZSBjb21w
b3NpdGluZyBsYXllcnMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NzgzNwotICAgICAgICBpbnQgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0
aCA9IDIgKiAocGFuSWNvblNpemVMZW5ndGggKyBtYXgoYWJzKHNjcm9sbERlbHRhLndpZHRoKCkp
LCBhYnMoc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKSk7IC8vIFdlIG9ubHkgd2FudCB0byByZXBhaW50
IHdoYXQncyBuZWNlc3NhcnkKLSAgICAgICAgSW50UG9pbnQgcGFuSWNvbkRpcnR5U3F1YXJlTG9j
YXRpb24gPSBJbnRQb2ludChtX3BhblNjcm9sbEljb25Qb2ludC54KCkgLSAocGFuSWNvbkRpcnR5
U3F1YXJlU2l6ZUxlbmd0aCAvIDIpLCBtX3BhblNjcm9sbEljb25Qb2ludC55KCkgLSAocGFuSWNv
bkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAvIDIpKTsKLSAgICAgICAgSW50UmVjdCBwYW5TY3JvbGxJ
Y29uRGlydHlSZWN0ID0gSW50UmVjdChwYW5JY29uRGlydHlTcXVhcmVMb2NhdGlvbiAsIEludFNp
emUocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCwgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxl
bmd0aCkpOworICAgICAgICBMYXlvdXRVbml0IHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGgg
PSAyICogKHBhbkljb25TaXplTGVuZ3RoICsgbWF4KGFicyhzY3JvbGxEZWx0YS53aWR0aCgpKSwg
YWJzKHNjcm9sbERlbHRhLmhlaWdodCgpKSkpOyAvLyBXZSBvbmx5IHdhbnQgdG8gcmVwYWludCB3
aGF0J3MgbmVjZXNzYXJ5CisgICAgICAgIExheW91dFBvaW50IHBhbkljb25EaXJ0eVNxdWFyZUxv
Y2F0aW9uID0gTGF5b3V0UG9pbnQobV9wYW5TY3JvbGxJY29uUG9pbnQueCgpIC0gKHBhbkljb25E
aXJ0eVNxdWFyZVNpemVMZW5ndGggLyAyKSwgbV9wYW5TY3JvbGxJY29uUG9pbnQueSgpIC0gKHBh
bkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggLyAyKSk7CisgICAgICAgIExheW91dFJlY3QgcGFu
U2Nyb2xsSWNvbkRpcnR5UmVjdCA9IExheW91dFJlY3QocGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRp
b24gLCBMYXlvdXRTaXplKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGgsIHBhbkljb25EaXJ0
eVNxdWFyZVNpemVMZW5ndGgpKTsKICAgICAgICAgcGFuU2Nyb2xsSWNvbkRpcnR5UmVjdC5pbnRl
cnNlY3QoY2xpcFJlY3QpOwogICAgICAgICBob3N0V2luZG93KCktPmludmFsaWRhdGVDb250ZW50
c0FuZFdpbmRvdyhwYW5TY3JvbGxJY29uRGlydHlSZWN0LCBmYWxzZSAvKmltbWVkaWF0ZSovKTsK
ICAgICB9CkBAIC02NDcsOCArNjQ4LDggQEAgdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50
cyhjb25zdCBJbgogICAgIH0KIAogICAgIC8vIEludmFsaWRhdGUgdGhlIG92ZXJoYW5nIGFyZWFz
IGlmIHRoZXkgYXJlIHZpc2libGUuCi0gICAgSW50UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdSZWN0
OwotICAgIEludFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7CisgICAgTGF5b3V0UmVjdCBob3Jp
em9udGFsT3ZlcmhhbmdSZWN0OworICAgIExheW91dFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7
CiAgICAgY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKGhvcml6b250YWxPdmVyaGFu
Z1JlY3QsIHZlcnRpY2FsT3ZlcmhhbmdSZWN0KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpICYmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAg
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJoYW5nTGF5ZXIgPSBsYXllckZvck92ZXJoYW5nQXJl
YXMoKSkgewpAQCAtNzIxLDcgKzcyMiw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRz
VG9XaW5kb3coY28KIAogSW50UmVjdCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0
IEludFJlY3QmIHdpbmRvd1JlY3QpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCB2aWV3UmVjdCA9IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dSZWN0KTsKKyAgICBMYXlvdXRSZWN0IHZp
ZXdSZWN0ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1JlY3QpOwogICAgIHZp
ZXdSZWN0Lm1vdmUoc2Nyb2xsT2Zmc2V0KCkpOwogICAgIHJldHVybiB2aWV3UmVjdDsKIH0KQEAg
LTc0MiwxMiArNzQzLDEyIEBAIEludFJlY3QgU2Nyb2xsVmlldzo6Y29udGVudHNUb1NjcmVlbihj
b24KICAgICByZXR1cm4gaG9zdFdpbmRvdygpLT53aW5kb3dUb1NjcmVlbihjb250ZW50c1RvV2lu
ZG93KHJlY3QpKTsKIH0KIAotSW50UG9pbnQgU2Nyb2xsVmlldzo6c2NyZWVuVG9Db250ZW50cyhj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitMYXlvdXRQb2ludCBTY3JvbGxWaWV3OjpzY3Jl
ZW5Ub0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAocGxh
dGZvcm1XaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhw
b2ludCk7CiAgICAgaWYgKCFob3N0V2luZG93KCkpCi0gICAgICAgIHJldHVybiBJbnRQb2ludCgp
OworICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQoKTsKICAgICByZXR1cm4gd2luZG93VG9Db250
ZW50cyhob3N0V2luZG93KCktPnNjcmVlblRvV2luZG93KHBvaW50KSk7CiB9CiAKQEAgLTgxMSw3
ICs4MTIsNyBAQCBTY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhckF0UG9pbnQoCiAgICAg
aWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSW50UG9pbnQg
dmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKKyAg
ICBMYXlvdXRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2lu
ZG93UG9pbnQpOwogICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh2aWV3UG9pbnQpKQogICAgICAgICByZXR1
cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOwogICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
YmFyICYmIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKHZpZXdQb2lu
dCkpCkBAIC04NDksOSArODUwLDkgQEAgdm9pZCBTY3JvbGxWaWV3OjpnZXN0dXJlRXZlbnQoY29u
c3QgUGxhdAogfQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmIG5ld1JlY3QpCit2b2lkIFNjcm9sbFZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBM
YXlvdXRSZWN0JiBuZXdSZWN0KQogewotICAgIEludFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgp
OworICAgIExheW91dFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIAogICAgIGlmIChu
ZXdSZWN0ID09IG9sZFJlY3QpCiAgICAgICAgIHJldHVybjsKQEAgLTg4MiwxNCArODgzLDE0IEBA
IHN0YXRpYyB2b2lkIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoR3JhcGgKICAgICBpZiAoIWdyYXBo
aWNzTGF5ZXIgfHwgIXNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwogICAgIGdyYXBoaWNzTGF5
ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QgPSBz
Y3JvbGxiYXItPmZyYW1lUmVjdCgpOworICAgIExheW91dFJlY3Qgc2Nyb2xsYmFyUmVjdCA9IHNj
cm9sbGJhci0+ZnJhbWVSZWN0KCk7CiAgICAgZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oc2Ny
b2xsYmFyUmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoc2Nyb2xsYmFyUmVjdC5zaXplKCkgIT0g
Z3JhcGhpY3NMYXllci0+c2l6ZSgpKQogICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rp
c3BsYXkoKTsKICAgICBncmFwaGljc0xheWVyLT5zZXRTaXplKHNjcm9sbGJhclJlY3Quc2l6ZSgp
KTsKIH0KIAotc3RhdGljIHZvaWQgcG9zaXRpb25TY3JvbGxDb3JuZXJMYXllcihHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KQorc3RhdGljIHZv
aWQgcG9zaXRpb25TY3JvbGxDb3JuZXJMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVy
LCBjb25zdCBMYXlvdXRSZWN0JiBjb3JuZXJSZWN0KQogewogICAgIGlmICghZ3JhcGhpY3NMYXll
cikKICAgICAgICAgcmV0dXJuOwpAQCAtOTExLDkgKzkxMiw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6
cG9zaXRpb25TY3JvbGxiYXJMYXllcnMKICNlbmRpZgogfQogCi12b2lkIFNjcm9sbFZpZXc6OnJl
cGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgbm93KQordm9p
ZCBTY3JvbGxWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0LCBib29sIG5vdykKIHsKLSAgICBJbnRSZWN0IHBhaW50UmVjdCA9IHJlY3Q7CisgICAgTGF5
b3V0UmVjdCBwYWludFJlY3QgPSByZWN0OwogICAgIGlmIChjbGlwc1JlcGFpbnRzKCkgJiYgIXBh
aW50c0VudGlyZUNvbnRlbnRzKCkpCiAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QodmlzaWJs
ZUNvbnRlbnRSZWN0KCkpOwogICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQpAQCAtOTY4LDE3
ICs5NjksMTcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxDb3JuZXIoKQogewogfQog
Ci12b2lkIFNjcm9sbFZpZXc6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFpbnRT
Y3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBj
b3JuZXJSZWN0KQogewogICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWludFNjcm9sbENv
cm5lcih0aGlzLCBjb250ZXh0LCBjb3JuZXJSZWN0KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojpp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBTY3Jv
bGxWaWV3OjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0
KQogewogICAgIGludmFsaWRhdGVSZWN0KHJlY3QpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnBh
aW50U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbGJhcgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTEwMDYsNyArMTAw
Nyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnRQYW5TY3JvbGxJY29uKEdyYXAKICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UocGFuU2Nyb2xsSWNvbiwgQ29sb3JTcGFjZURldmljZVJHQiwgbV9wYW5T
Y3JvbGxJY29uUG9pbnQpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewog
ICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAgIFdpZGdldDo6cGFpbnQoY29udGV4
dCwgcmVjdCk7CkBAIC0xMDIxLDEzICsxMDIyLDEzIEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiAKICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYW55IG92ZXJsYXkgc2Ny
b2xsYmFycyBhcyB3ZSBwYWludCwgdGhpcyB3aWxsIGJlIHNldCB0byB0cnVlLgogICAgIG1fY29u
dGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwogCi0gICAg
SW50UmVjdCBjbGlwUmVjdCA9IGZyYW1lUmVjdCgpOworICAgIExheW91dFJlY3QgY2xpcFJlY3Qg
PSBmcmFtZVJlY3QoKTsKICAgICBpZiAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVydGljYWxT
Y3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIGNsaXBSZWN0LnNldFdp
ZHRoKGNsaXBSZWN0LndpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpKTsKICAg
ICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFob3Jpem9udGFsU2Nyb2xsYmFyKCktPmlz
T3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICBjbGlwUmVjdC5zZXRIZWlnaHQoY2xpcFJlY3Qu
aGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpKTsKIAotICAgIEludFJl
Y3QgZG9jdW1lbnREaXJ0eVJlY3QgPSByZWN0OworICAgIExheW91dFJlY3QgZG9jdW1lbnREaXJ0
eVJlY3QgPSByZWN0OwogICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7
CiAKICAgICBpZiAoIWRvY3VtZW50RGlydHlSZWN0LmlzRW1wdHkoKSkgewpAQCAtMTA1Niw3ICsx
MDU3LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAgIC8v
IE5vdyBwYWludCB0aGUgc2Nyb2xsYmFycy4KICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNz
ZWQgJiYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyKSkgewog
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwot
ICAgICAgICBJbnRSZWN0IHNjcm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0OworICAgICAgICBMYXlv
dXRSZWN0IHNjcm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0OwogICAgICAgICBzY3JvbGxWaWV3RGly
dHlSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSh4KCksIHkoKSk7CiAgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QubW92ZUJ5KC1sb2NhdGlv
bigpKTsKQEAgLTEwNjksMjUgKzEwNzAsMjUgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIAogICAgICAgICBwYWludFBhblNjcm9sbEljb24oY29udGV4dCk7CiB9CiAK
LXZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKEludFJl
Y3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdSZWN0
KQordm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFzRm9yUGFpbnRpbmcoTGF5
b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCwgTGF5b3V0UmVjdCYgdmVydGljYWxPdmVy
aGFuZ1JlY3QpCiB7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAodmVydGljYWxT
Y3JvbGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkp
CisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKHZlcnRpY2FsU2Nyb2xs
YmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAg
ICAgICA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAwOwotICAgIGludCBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRh
bFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICBMYXlvdXRVbml0IGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQgPSAoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFob3Jpem9u
dGFsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICA/IGhvcml6b250
YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwOwogCi0gICAgaW50IHBoeXNpY2FsU2Nyb2xsWSA9
IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgbV9zY3JvbGxPcmlnaW4ueSgpOworICAgIExheW91dFVu
aXQgcGh5c2ljYWxTY3JvbGxZID0gc2Nyb2xsUG9zaXRpb24oKS55KCkgKyBtX3Njcm9sbE9yaWdp
bi55KCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWSA8IDApIHsKICAgICAgICAgaG9yaXpvbnRh
bE92ZXJoYW5nUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdS
ZWN0LnNldEhlaWdodCgtcGh5c2ljYWxTY3JvbGxZKTsKICAgICB9IGVsc2UgaWYgKGNvbnRlbnRz
SGVpZ2h0KCkgJiYgcGh5c2ljYWxTY3JvbGxZID4gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVI
ZWlnaHQoKSkgewotICAgICAgICBpbnQgaGVpZ2h0ID0gcGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRl
bnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpOworICAgICAgICBMYXlvdXRVbml0IGhlaWdo
dCA9IHBoeXNpY2FsU2Nyb2xsWSAtIChjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgp
KTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgICAg
ICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCkubWF4WSgpIC0gaGVpZ2h0
IC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CiAgICAgICAgIGhvcml6b250YWxPdmVyaGFu
Z1JlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CiAgICAgfQogCi0gICAgaW50IHBoeXNpY2FsU2Nyb2xs
WCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgbV9zY3JvbGxPcmlnaW4ueCgpOworICAgIExheW91
dFVuaXQgcGh5c2ljYWxTY3JvbGxYID0gc2Nyb2xsUG9zaXRpb24oKS54KCkgKyBtX3Njcm9sbE9y
aWdpbi54KCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWCA8IDApIHsKICAgICAgICAgdmVydGlj
YWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgoLXBoeXNpY2FsU2Nyb2xsWCk7CiAgICAgICAgIHZlcnRp
Y2FsT3ZlcmhhbmdSZWN0LnNldEhlaWdodChmcmFtZVJlY3QoKS5oZWlnaHQoKSAtIGhvcml6b250
YWxPdmVyaGFuZ1JlY3QuaGVpZ2h0KCkpOwpAQCAtMTA5Nyw3ICsxMDk4LDcgQEAgdm9pZCBTY3Jv
bGxWaWV3OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFzRgogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRZKGZyYW1lUmVjdCgpLnkoKSk7CiAgICAgfSBlbHNl
IGlmIChjb250ZW50c1dpZHRoKCkgJiYgcGh5c2ljYWxTY3JvbGxYID4gY29udGVudHNXaWR0aCgp
IC0gdmlzaWJsZVdpZHRoKCkpIHsKLSAgICAgICAgaW50IHdpZHRoID0gcGh5c2ljYWxTY3JvbGxY
IC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKTsKKyAgICAgICAgTGF5b3V0VW5p
dCB3aWR0aCA9IHBoeXNpY2FsU2Nyb2xsWCAtIChjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lk
dGgoKSk7CiAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFdpZHRoKHdpZHRoKTsKICAg
ICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KGZyYW1lUmVjdCgpLmhlaWdodCgp
IC0gaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHZlcnRpY2FsT3Zl
cmhhbmdSZWN0LnNldFgoZnJhbWVSZWN0KCkubWF4WCgpIC0gd2lkdGggLSB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKTsKQEAgLTExMDgsMTUgKzExMDksMTUgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxj
dWxhdGVPdmVyaGFuZ0FyZWFzRgogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpwYWludE92
ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBob3Jp
em9udGFsT3ZlcmhhbmdSZWN0LCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBTY3JvbGxWaWV3OjpwYWludE92ZXJoYW5n
QXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBob3Jpem9u
dGFsT3ZlcmhhbmdSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQogewogICAgIFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLT5wYWludE92ZXJoYW5nQXJlYXModGhpcywgY29udGV4dCwgaG9yaXpvbnRhbE92ZXJoYW5n
UmVjdCwgdmVydGljYWxPdmVyaGFuZ1JlY3QsIGRpcnR5UmVjdCk7CiB9CiAKLXZvaWQgU2Nyb2xs
Vmlldzo6Y2FsY3VsYXRlQW5kUGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVBbmRQYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBM
YXlvdXRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgSW50UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdS
ZWN0OwotICAgIEludFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7CisgICAgTGF5b3V0UmVjdCBo
b3Jpem9udGFsT3ZlcmhhbmdSZWN0OworICAgIExheW91dFJlY3QgdmVydGljYWxPdmVyaGFuZ1Jl
Y3Q7CiAgICAgY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKGhvcml6b250YWxPdmVy
aGFuZ1JlY3QsIHZlcnRpY2FsT3ZlcmhhbmdSZWN0KTsKIAogICAgIGlmIChkaXJ0eVJlY3QuaW50
ZXJzZWN0cyhob3Jpem9udGFsT3ZlcmhhbmdSZWN0KSB8fCBkaXJ0eVJlY3QuaW50ZXJzZWN0cyh2
ZXJ0aWNhbE92ZXJoYW5nUmVjdCkpCkBAIC0xMTI4LDE5ICsxMTI5LDE5IEBAIGJvb2wgU2Nyb2xs
Vmlldzo6aXNQb2ludEluU2Nyb2xsYmFyQ29ybmUKICAgICBpZiAoIXNjcm9sbGJhckNvcm5lclBy
ZXNlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UG9pbnQgdmlld1BvaW50
ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKKyAgICBMYXlvdXRQ
b2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93UG9pbnQp
OwogCiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgaG9yaXpv
bnRhbFNjcm9sbGJhcllNaW4gPSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnko
KTsKLSAgICAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJZTWF4ID0gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5mcmFtZVJlY3QoKS55KCkgKyBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVj
dCgpLmhlaWdodCgpOwotICAgICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhclhNaW4gPSBtX2hv
cml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSArIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkud2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsU2Ny
b2xsYmFyWU1pbiA9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpOworICAg
ICAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJZTWF4ID0gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5mcmFtZVJlY3QoKS55KCkgKyBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVj
dCgpLmhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJYTWlu
ID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCkgKyBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCk7CiAKICAgICAgICAgcmV0dXJuIHZpZXdQb2lu
dC55KCkgPiBob3Jpem9udGFsU2Nyb2xsYmFyWU1pbiAmJiB2aWV3UG9pbnQueSgpIDwgaG9yaXpv
bnRhbFNjcm9sbGJhcllNYXggJiYgdmlld1BvaW50LngoKSA+IGhvcml6b250YWxTY3JvbGxiYXJY
TWluOwogICAgIH0KIAotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhclhNaW4gPSBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCk7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyWE1h
eCA9IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSArIG1fdmVydGljYWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCk7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyWU1p
biA9IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSArIG1fdmVydGljYWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOworICAgIExheW91dFVuaXQgdmVydGljYWxTY3Jv
bGxiYXJYTWluID0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpOworICAgIExh
eW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJYTWF4ID0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJh
bWVSZWN0KCkueCgpICsgbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkud2lkdGgoKTsK
KyAgICBMYXlvdXRVbml0IHZlcnRpY2FsU2Nyb2xsYmFyWU1pbiA9IG1fdmVydGljYWxTY3JvbGxi
YXItPmZyYW1lUmVjdCgpLnkoKSArIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmhl
aWdodCgpOwogICAgIAogICAgIHJldHVybiB2aWV3UG9pbnQueCgpID4gdmVydGljYWxTY3JvbGxi
YXJYTWluICYmIHZpZXdQb2ludC54KCkgPCB2ZXJ0aWNhbFNjcm9sbGJhclhNYXggJiYgdmlld1Bv
aW50LnkoKSA+IHZlcnRpY2FsU2Nyb2xsYmFyWU1pbjsKIH0KQEAgLTExNTEsMzQgKzExNTIsMzQg
QEAgYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGxiYXJDb3JuZXJQcmVzZW50KAogICAgICAgICB8fCAo
bV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPmhl
aWdodCgpID4gMCk7CiB9CiAKLUludFJlY3QgU2Nyb2xsVmlldzo6Y29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiBsb2NhbFJlY3QpIGNvbnN0CitMYXlvdXRSZWN0IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIC8vIFNjcm9sbGJhcnMgd29u
J3QgYmUgdHJhbnNmb3JtZWQgd2l0aGluIHVzCi0gICAgSW50UmVjdCBuZXdSZWN0ID0gbG9jYWxS
ZWN0OworICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGxvY2FsUmVjdDsKICAgICBuZXdSZWN0Lm1v
dmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIHJldHVybiBuZXdSZWN0OwogfQogCi1J
bnRSZWN0IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29u
c3QKK0xheW91dFJlY3QgU2Nyb2xsVmlldzo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Ny
b2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiBwYXJl
bnRSZWN0KSBjb25zdAogewotICAgIEludFJlY3QgbmV3UmVjdCA9IHBhcmVudFJlY3Q7CisgICAg
TGF5b3V0UmVjdCBuZXdSZWN0ID0gcGFyZW50UmVjdDsKICAgICAvLyBTY3JvbGxiYXJzIHdvbid0
IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwogICAgIG5ld1JlY3QubW92ZUJ5KC1zY3JvbGxiYXIt
PmxvY2F0aW9uKCkpOwogICAgIHJldHVybiBuZXdSZWN0OwogfQogCiAvLyBGSVhNRTogdGVzdCB0
aGVzZSBvbiB3aW5kb3dzCi1JbnRQb2ludCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBv
aW50JiBsb2NhbFBvaW50KSBjb25zdAorTGF5b3V0UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBMYXlvdXRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKIHsKICAgICAvLyBTY3JvbGxiYXJz
IHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwotICAgIEludFBvaW50IG5ld1BvaW50ID0g
bG9jYWxQb2ludDsKKyAgICBMYXlvdXRQb2ludCBuZXdQb2ludCA9IGxvY2FsUG9pbnQ7CiAgICAg
bmV3UG9pbnQubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIG5ld1Bv
aW50OwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBw
YXJlbnRQb2ludCkgY29uc3QKK0xheW91dFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogewotICAgIEludFBvaW50IG5ld1BvaW50
ID0gcGFyZW50UG9pbnQ7CisgICAgTGF5b3V0UG9pbnQgbmV3UG9pbnQgPSBwYXJlbnRQb2ludDsK
ICAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwogICAgIG5l
d1BvaW50Lm1vdmVCeSgtc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAgICByZXR1cm4gbmV3UG9p
bnQ7CkBAIC0xMjQxLDcgKzEyNDIsNyBAQCBib29sIFNjcm9sbFZpZXc6OmlzT2Zmc2NyZWVuKCkg
Y29uc3QKIH0KIAogCi12b2lkIFNjcm9sbFZpZXc6OmFkZFBhblNjcm9sbEljb24oY29uc3QgSW50
UG9pbnQmIGljb25Qb3NpdGlvbikKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkUGFuU2Nyb2xsSWNvbihj
b25zdCBMYXlvdXRQb2ludCYgaWNvblBvc2l0aW9uKQogewogICAgIGlmICghaG9zdFdpbmRvdygp
KQogICAgICAgICByZXR1cm47CkBAIC0xMzQ1LDEyICsxMzQ2LDEyIEBAIHZvaWQgU2Nyb2xsVmll
dzo6cGxhdGZvcm1TZXRDb250ZW50c1NpemUKIHsKIH0KIAotSW50UmVjdCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybUNvbnRlbnRzVG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK0ludFJl
Y3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1RvU2NyZWVuKGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUludFBvaW50IFNjcm9sbFZp
ZXc6OnBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
CitMYXlvdXRQb2ludCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIHJldHVybiBwb2ludDsKIH0KQEAgLTEzNjQs
NyArMTM2NSw3IEBAIGJvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGwoU2Nyb2xsRGkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRDb250
ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIC8qbm93Ki8pCit2b2lkIFNjcm9sbFZp
ZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYsIGJv
b2wgLypub3cqLykKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
aAkocmV2aXNpb24gOTg5NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgU2Nyb2xsVmlld19o
CiAjZGVmaW5lIFNjcm9sbFZpZXdfaAogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
IkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
YWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgpAQCAtMTQ2LDI0ICsxNDYsMjQg
QEAgcHVibGljOgogICAgIC8vIHdoaWNoIHVzdWFsbHkgd2lsbCBoYXBwZW4gd2hlbiBwYW5uaW5n
LCBwaW5jaGluZyBhbmQgcm90YXRpb24gZW5kcywgb3Igd2hlbiBzY2FsZSBvciBwb3NpdGlvbiBh
cmUgY2hhbmdlZCBtYW51YWxseS4KICAgICB2aXJ0dWFsIEludFJlY3QgdmlzaWJsZUNvbnRlbnRS
ZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMgPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250
ZW50UmVjdCkgeyBtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0
OyB9Ci0gICAgTGF5b3V0VW5pdCB2aXNpYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiB2aXNpYmxl
Q29udGVudFJlY3QoKS53aWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCB2aXNpYmxlSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkuaGVpZ2h0KCk7IH0KKyAgICBpbnQg
dmlzaWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgo
KTsgfQorICAgIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gdmlzaWJsZUNvbnRl
bnRSZWN0KCkuaGVpZ2h0KCk7IH0KIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgZ2V0dGluZy9zZXR0
aW5nIHRoZSBzaXplIHdlYmtpdCBzaG91bGQgdXNlIHRvIGxheW91dCB0aGUgY29udGVudHMuIEJ5
IGRlZmF1bHQgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgdmlzaWJsZQogICAgIC8vIGNvbnRlbnQg
c2l6ZS4gRXhwbGljaXRseSBzZXR0aW5nIGEgbGF5b3V0IHNpemUgdmFsdWUgd2lsbCBjYXVzZSB3
ZWJraXQgdG8gbGF5b3V0IHRoZSBjb250ZW50cyB1c2luZyB0aGlzIHNpemUgaW5zdGVhZC4KLSAg
ICBpbnQgbGF5b3V0V2lkdGgoKSBjb25zdDsKLSAgICBpbnQgbGF5b3V0SGVpZ2h0KCkgY29uc3Q7
Ci0gICAgSW50U2l6ZSBmaXhlZExheW91dFNpemUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZpeGVk
TGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgTGF5b3V0VW5pdCBsYXlvdXRXaWR0aCgp
IGNvbnN0OworICAgIExheW91dFVuaXQgbGF5b3V0SGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0
U2l6ZSBmaXhlZExheW91dFNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNldEZpeGVkTGF5b3V0U2l6
ZShjb25zdCBMYXlvdXRTaXplJik7CiAgICAgYm9vbCB1c2VGaXhlZExheW91dCgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0VXNlRml4ZWRMYXlvdXQoYm9vbCBlbmFibGUpOwogICAgIAotICAgIC8vIEZ1
bmN0aW9ucyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRoZSBzaXplIG9mIHRoZSBkb2N1bWVudCBjb250
YWluZWQgaW5zaWRlIHRoZSBTY3JvbGxWaWV3IChhcyBhbiBJbnRTaXplIG9yIGFzIGluZGl2aWR1
YWwgd2lkdGggYW5kIGhlaWdodAorICAgIC8vIEZ1bmN0aW9ucyBmb3IgZ2V0dGluZy9zZXR0aW5n
IHRoZSBzaXplIG9mIHRoZSBkb2N1bWVudCBjb250YWluZWQgaW5zaWRlIHRoZSBTY3JvbGxWaWV3
IChhcyBhbiBMYXlvdXRTaXplIG9yIGFzIGluZGl2aWR1YWwgd2lkdGggYW5kIGhlaWdodAogICAg
IC8vIHZhbHVlcykuCi0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsgLy8gQWx3YXlz
IGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgdmlzaWJsZVdpZHRoKCkvdmlzaWJsZUhlaWdodCgpLgot
ICAgIGludCBjb250ZW50c1dpZHRoKCkgY29uc3QgeyByZXR1cm4gY29udGVudHNTaXplKCkud2lk
dGgoKTsgfQotICAgIGludCBjb250ZW50c0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRz
U2l6ZSgpLmhlaWdodCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25z
dCBJbnRTaXplJik7CisgICAgTGF5b3V0U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsgLy8gQWx3
YXlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgdmlzaWJsZVdpZHRoKCkvdmlzaWJsZUhlaWdodCgp
LgorICAgIExheW91dFVuaXQgY29udGVudHNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRz
U2l6ZSgpLndpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IGNvbnRlbnRzSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gY29udGVudHNTaXplKCkuaGVpZ2h0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmKTsKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3Ig
cXVlcnlpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsZWQgcG9zaXRpb24gKGJvdGggYXMgYSBwb2ludCwg
YSBzaXplLCBvciBhcyBpbmRpdmlkdWFsIFggYW5kIFkgdmFsdWVzKS4KICAgICBJbnRQb2ludCBz
Y3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0
aW9uKCk7IH0KQEAgLTE3MSwxMSArMTcxLDE1IEBAIHB1YmxpYzoKICAgICBJbnRQb2ludCBtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsgLy8gVGhlIG1heGltdW0gcG9zaXRpb24gd2UgY2Fu
IGJlIHNjcm9sbGVkIHRvLgogICAgIEludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNv
bnN0OyAvLyBUaGUgbWluaW11bSBwb3NpdGlvbiB3ZSBjYW4gYmUgc2Nyb2xsZWQgdG8uCiAgICAg
Ly8gQWRqdXN0IHRoZSBwYXNzZWQgaW4gc2Nyb2xsIHBvc2l0aW9uIHRvIGtlZXAgaXQgYmV0d2Vl
biB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBwb3NpdGlvbnMuCi0gICAgSW50UG9pbnQgYWRqdXN0
U2Nyb2xsUG9zaXRpb25XaXRoaW5SYW5nZShjb25zdCBJbnRQb2ludCYpIGNvbnN0OyAKKyAgICBJ
bnRQb2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CisgICAgSW50UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25XaXRoaW5SYW5nZShjb25z
dCBJbnRTaXplJiBzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNjcm9sbFBv
c2l0aW9uV2l0aGluUmFuZ2UoSW50UG9pbnQocy53aWR0aCgpLCBzLmhlaWdodCgpKSk7CisgICAg
fQogICAgIGludCBzY3JvbGxYKCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54KCk7
IH0KICAgICBpbnQgc2Nyb2xsWSgpIGNvbnN0IHsgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueSgp
OyB9CiAKLSAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3Q7CisgICAgTGF5b3V0U2l6
ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0OwogCiAgICAgdm9pZCBjYWNoZUN1cnJlbnRTY3JvbGxQ
b3NpdGlvbigpIHsgbV9jYWNoZWRTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7IH0K
ICAgICBJbnRQb2ludCBjYWNoZWRTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkU2Nyb2xsUG9zaXRpb247IH0KQEAgLTIwNywxMiArMjExLDEzIEBAIHB1YmxpYzoKICAgICAv
LyBvZiBjb250YWluaW5nIHdpbmRvdyBpcy4gKEZvciBleGFtcGxlIG9uIE1hYyBpdCBpcyB0aGUg
Y29udGFpbmluZyBOU1dpbmRvdy4pCiAgICAgSW50UG9pbnQgd2luZG93VG9Db250ZW50cyhjb25z
dCBJbnRQb2ludCYpIGNvbnN0OwogICAgIEludFBvaW50IGNvbnRlbnRzVG9XaW5kb3coY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKKwogICAgIEludFJlY3Qgd2luZG93VG9Db250ZW50cyhjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CiAgICAgSW50UmVjdCBjb250ZW50c1RvV2luZG93KGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udmVydGluZyB0byBhbmQgZnJv
bSBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgSW50UmVjdCBjb250ZW50c1RvU2NyZWVuKGNvbnN0
IEludFJlY3QmKSBjb25zdDsKLSAgICBJbnRQb2ludCBzY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IElu
dFBvaW50JikgY29uc3Q7CisgICAgSW50UmVjdCBjb250ZW50c1RvU2NyZWVuKGNvbnN0IExheW91
dFJlY3QmKSBjb25zdDsKKyAgICBMYXlvdXRQb2ludCBzY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IElu
dFBvaW50JikgY29uc3Q7CiAKICAgICAvLyBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlz
IHRvIGFuc3dlciB3aGV0aGVyIG9yIG5vdCB0aGUgc2Nyb2xsIHZpZXcgaXMgY3VycmVudGx5IHZp
c2libGUuIEFuaW1hdGlvbnMgYW5kIHBhaW50aW5nIHVwZGF0ZXMgY2FuIGJlIHN1c3BlbmRlZCBp
ZgogICAgIC8vIHdlIGtub3cgdGhhdCB3ZSBhcmUgZWl0aGVyIG5vdCBpbiBhIHdpbmRvdyByaWdo
dCBub3cgb3IgaWYgdGhhdCB3aW5kb3cgaXMgbm90IHZpc2libGUuCkBAIC0yMzEsNyArMjM2LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgpOwogICAgIAog
ICAgIC8vIFdpZGdldCBvdmVycmlkZSB0byB1cGRhdGUgb3VyIHNjcm9sbGJhcnMgYW5kIG5vdGlm
eSBvdXIgY29udGVudHMgb2YgdGhlIHJlc2l6ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0
IExheW91dFJlY3QmKTsKIAogICAgIC8vIEZvciBwbGF0Zm9ybXMgdGhhdCBuZWVkIHRvIGhpdCB0
ZXN0IHNjcm9sbGJhcnMgZnJvbSB3aXRoaW4gdGhlIGVuZ2luZSdzIGV2ZW50IGhhbmRsZXJzIChs
aWtlIFdpbjMyKS4KICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhckF0UG9pbnQoY29uc3QgSW50UG9p
bnQmIHdpbmRvd1BvaW50KTsKQEAgLTI2Myw4ICsyNjgsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgLy8gV2lkZ2V0IG92ZXJyaWRlLiBIYW5kbGVzIHBhaW50aW5nIG9mIHRoZSBjb250ZW50cyBv
ZiB0aGUgdmlldyBhcyB3ZWxsIGFzIHRoZSBzY3JvbGxiYXJzLgotICAgIHZpcnR1YWwgdm9pZCBw
YWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBwYWludFNj
cm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9p
ZCBwYWludFNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYpOwog
CiAgICAgLy8gV2lkZ2V0IG92ZXJyaWRlcyB0byBlbnN1cmUgdGhhdCBvdXIgY2hpbGRyZW4ncyB2
aXNpYmlsaXR5IHN0YXR1cyBpcyBrZXB0IHVwIHRvIGRhdGUgd2hlbiB3ZSBnZXQgc2hvd24gYW5k
IGhpZGRlbi4KICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwpAQCAtMjczLDMzICsyNzgsMzMgQEAg
cHVibGljOgogICAgIAogICAgIC8vIFBhbiBzY3JvbGxpbmcuCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBub1BhblNjcm9sbFJhZGl1cyA9IDE1OwotICAgIHZvaWQgYWRkUGFuU2Nyb2xsSWNvbihjb25z
dCBJbnRQb2ludCYpOworICAgIHZvaWQgYWRkUGFuU2Nyb2xsSWNvbihjb25zdCBMYXlvdXRQb2lu
dCYpOwogICAgIHZvaWQgcmVtb3ZlUGFuU2Nyb2xsSWNvbigpOwogICAgIHZvaWQgcGFpbnRQYW5T
Y3JvbGxJY29uKEdyYXBoaWNzQ29udGV4dCopOwogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJ
blNjcm9sbGJhckNvcm5lcihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBzY3Jv
bGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNjcm9s
bENvcm5lclJlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJl
Y3QmIGNvcm5lclJlY3QpOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVh
bCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVj
dCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0
OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CisgICAg
dmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIGJvb2wg
Y29udGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFyczsgfQogICAg
IHZvaWQgc2V0Q29udGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycyhib29s
IGNvbnRhaW5zKSB7IG1fY29udGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFy
cyA9IGNvbnRhaW5zOyB9CiAKLSAgICB2b2lkIGNhbGN1bGF0ZUFuZFBhaW50T3ZlcmhhbmdBcmVh
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQg
Y2FsY3VsYXRlQW5kUGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCk7CiAKIHByb3RlY3RlZDoKICAgICBTY3JvbGxWaWV3KCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgcmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYs
IGJvb2wgbm93ID0gZmFsc2UpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYsIGJvb2wgbm93
ID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpID0gMDsKIAotICAgIHZvaWQgY2FsY3Vs
YXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKEludFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ1Jl
Y3QsIEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGhvcml6b250
YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdBcmVhLCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0Zv
clBhaW50aW5nKExheW91dFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIExheW91dFJlY3Qm
IHZlcnRpY2FsT3ZlcmhhbmdSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVyaGFuZ0Fy
ZWFzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIGhvcml6b250YWxPdmVyaGFu
Z0FyZWEsIGNvbnN0IExheW91dFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdBcmVhLCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaWJsZUNvbnRlbnRzUmVzaXplZCgpID0gMDsKQEAg
LTMxMSw3ICszMTYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcihib29sKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXIoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBMYXlv
dXRSZWN0Jik7CiAKICAgICAvLyBTY3JvbGwgdGhlIGNvbnRlbnQgYnkgYmxpdHRpbmcgdGhlIHBp
eGVscy4KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCk7CkBAIC0zNDUsOCArMzUwLDggQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0
IG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7CiAgICAgSW50U2l6ZSBtX3Njcm9sbE9mZnNldDsg
Ly8gRklYTUU6IFdvdWxkIHJhdGhlciBzdG9yZSB0aGlzIGFzIGEgcG9zaXRpb24sIGJ1dCB3ZSB3
aWxsIHdhaXQgdG8gbWFrZSB0aGlzIGNoYW5nZSB1bnRpbCBtb3JlIGNvZGUgaXMgc2hhcmVkLgog
ICAgIEludFBvaW50IG1fY2FjaGVkU2Nyb2xsUG9zaXRpb247Ci0gICAgSW50U2l6ZSBtX2ZpeGVk
TGF5b3V0U2l6ZTsKLSAgICBJbnRTaXplIG1fY29udGVudHNTaXplOworICAgIExheW91dFNpemUg
bV9maXhlZExheW91dFNpemU7CisgICAgTGF5b3V0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKIAogICAg
IGludCBtX3Njcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7CiAgICAgYm9vbCBtX3Njcm9sbGJhcnNT
dXBwcmVzc2VkOwpAQCAtMzg0LDEyICszODksMTIgQEAgcHJpdmF0ZToKICAgICBib29sIHBsYXRm
b3JtQ2FuQmxpdE9uU2Nyb2xsKCkgY29uc3Q7CiAgICAgSW50UmVjdCBwbGF0Zm9ybVZpc2libGVD
b250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKICAgICB2b2lkIHBsYXRm
b3JtU2V0Q29udGVudHNTaXplKCk7Ci0gICAgSW50UmVjdCBwbGF0Zm9ybUNvbnRlbnRzVG9TY3Jl
ZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIEludFBvaW50IHBsYXRmb3JtU2NyZWVuVG9D
b250ZW50cyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIEludFJlY3QgcGxhdGZvcm1Db250
ZW50c1RvU2NyZWVuKGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICBMYXlvdXRQb2ludCBw
bGF0Zm9ybVNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICB2b2lk
IHBsYXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBib29sIHBs
YXRmb3JtU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOwogICAgIHZv
aWQgcGxhdGZvcm1TZXRTY3JvbGxiYXJzU3VwcHJlc3NlZChib29sIHJlcGFpbnRPblVuc3VwcHJl
c3MpOwotICAgIHZvaWQgcGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRS
ZWN0JiwgYm9vbCBub3cpOworICAgIHZvaWQgcGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3Rhbmds
ZShjb25zdCBMYXlvdXRSZWN0JiwgYm9vbCBub3cpOwogICAgIGJvb2wgcGxhdGZvcm1Jc09mZnNj
cmVlbigpIGNvbnN0OwogICAgIHZvaWQgcGxhdGZvcm1TZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUo
U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKTsKICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gOTg5NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsOCBAQCB2
b2lkIFJlbmRlclZpZXc6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJCiB7CiAgICAgLy8gSWYgd2Ug
ZXZlciByZXF1aXJlIGxheW91dCBidXQgcmVjZWl2ZSBhIHBhaW50IGFueXdheSwgc29tZXRoaW5n
IGhhcyBnb25lIGhvcnJpYmx5IHdyb25nLgogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7Cisg
ICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB0byBwYWludCB3aXRoIGFuIG9mZnNldCBu
b3Qgb24gZGV2aWNlIHBpeGVscy4KKyAgICBBU1NFUlQoTGF5b3V0UG9pbnQoSW50UG9pbnQocGFp
bnRPZmZzZXQueCgpLCBwYWludE9mZnNldC55KCkpKSA9PSBwYWludE9mZnNldCk7CiAgICAgcGFp
bnRPYmplY3QocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiB9CiAKQEAgLTI1NCw3ICsyNTYsNyBA
QCB2b2lkIFJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpCiAgICAgfQogfQogCi1i
b29sIFJlbmRlclZpZXc6OnNob3VsZFJlcGFpbnQoY29uc3QgSW50UmVjdCYgcikgY29uc3QKK2Jv
b2wgUmVuZGVyVmlldzo6c2hvdWxkUmVwYWludChjb25zdCBMYXlvdXRSZWN0JiByKSBjb25zdAog
ewogICAgIGlmIChwcmludGluZygpIHx8IHIud2lkdGgoKSA9PSAwIHx8IHIuaGVpZ2h0KCkgPT0g
MCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjY1LDcgKzI2Nyw3IEBAIGJvb2wgUmVuZGVy
Vmlldzo6c2hvdWxkUmVwYWludChjb25zdCBJbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiB1ciwgYm9v
bCBpbW1lZGlhdGUpCit2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0
IExheW91dFJlY3QmIHVyLCBib29sIGltbWVkaWF0ZSkKIHsKICAgICBpZiAoIXNob3VsZFJlcGFp
bnQodXIpKQogICAgICAgICByZXR1cm47CkBAIC0yNzYsOCArMjc4LDggQEAgdm9pZCBSZW5kZXJW
aWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZShjbwogICAgIGlmICghZWx0KQogICAgICAgICBtX2Zy
YW1lVmlldy0+cmVwYWludENvbnRlbnRSZWN0YW5nbGUodXIsIGltbWVkaWF0ZSk7CiAgICAgZWxz
ZSBpZiAoUmVuZGVyQm94KiBvYmogPSBlbHQtPnJlbmRlckJveCgpKSB7Ci0gICAgICAgIEludFJl
Y3QgdnIgPSB2aWV3UmVjdCgpOwotICAgICAgICBJbnRSZWN0IHIgPSBpbnRlcnNlY3Rpb24odXIs
IHZyKTsKKyAgICAgICAgTGF5b3V0UmVjdCB2ciA9IHZpZXdSZWN0KCk7CisgICAgICAgIExheW91
dFJlY3QgciA9IGludGVyc2VjdGlvbih1ciwgdnIpOwogICAgICAgICAKICAgICAgICAgLy8gU3Vi
dHJhY3Qgb3V0IHRoZSBjb250ZW50c1ggYW5kIGNvbnRlbnRzWSBvZmZzZXRzIHRvIGdldCBvdXIg
Y29vcmRzIHdpdGhpbiB0aGUgdmlld2luZwogICAgICAgICAvLyByZWN0YW5nbGUuCkBAIC0yOTAs
NyArMjkyLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZShjbwogICAg
IH0KIH0KIAotdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9z
aXRlZExheWVycyhjb25zdCBJbnRSZWN0JiB1ciwgYm9vbCBpbW1lZGlhdGUpCit2b2lkIFJlbmRl
clZpZXc6OnJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IExh
eW91dFJlY3QmIHVyLCBib29sIGltbWVkaWF0ZSkKIHsKICAgICBpZiAoIXNob3VsZFJlcGFpbnQo
dXIpKQogICAgICAgICByZXR1cm47CkBAIC0zMDMsNyArMzA1LDcgQEAgdm9pZCBSZW5kZXJWaWV3
OjpyZXBhaW50UmVjdGFuZ2xlSW5WaWV3QQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBJbnRSZWN0JiByZWN0LCBib29sIGZpeGVkKSBjb25zdAordm9pZCBSZW5kZXJWaWV3Ojpj
b21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIExheW91dFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpIGNvbnN0CiB7CiAgICAgLy8gSWYgYSBj
b250YWluZXIgd2FzIHNwZWNpZmllZCwgYW5kIHdhcyBub3QgMCBvciB0aGUgUmVuZGVyVmlldywK
ICAgICAvLyB0aGVuIHdlIHNob3VsZCBoYXZlIGZvdW5kIGl0IGJ5IG5vdy4KQEAgLTM3NywxMiAr
Mzc5LDEyIEBAIEludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wKICAgICB9
CiAKICAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5j
bG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KLSAgICBJbnRSZWN0IHNlbFJlY3Q7CisgICAgTGF5
b3V0UmVjdCBzZWxSZWN0OwogICAgIFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0gc2VsZWN0
ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRvciBpID0gc2Vs
ZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKICAgICAgICAgUmVuZGVyU2Vs
ZWN0aW9uSW5mbyogaW5mbyA9IGktPnNlY29uZDsKICAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9u
SW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5l
ciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMuCi0gICAgICAgIEludFJlY3QgY3VyclJlY3Qg
PSBpbmZvLT5yZWN0KCk7CisgICAgICAgIExheW91dFJlY3QgY3VyclJlY3QgPSBpbmZvLT5yZWN0
KCk7CiAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9
IGluZm8tPnJlcGFpbnRDb250YWluZXIoKSkgewogICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1
YWQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJy
UmVjdCkpOwogICAgICAgICAgICAgY3VyclJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7IApAQCAtNjU0LDI2ICs2NTYsMjYgQEAgdm9pZCBSZW5kZXJWaWV3Ojpub3RpZnlXaWRn
ZXRzKFdpZGdldE5vdAogICAgIHJlbGVhc2VXaWRnZXRzKHJlbmRlcldpZGdldHMpOwogfQogCi1J
bnRSZWN0IFJlbmRlclZpZXc6OnZpZXdSZWN0KCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyVmll
dzo6dmlld1JlY3QoKSBjb25zdAogewogICAgIGlmIChwcmludGluZygpKQotICAgICAgICByZXR1
cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICBpZiAobV9mcmFtZVZpZXcpCiAg
ICAgICAgIHJldHVybiBtX2ZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgcmV0
dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogfQogCiAKLUludFJlY3Qg
UmVuZGVyVmlldzo6dW5zY2FsZWREb2N1bWVudFJlY3QoKSBjb25zdAorTGF5b3V0UmVjdCBSZW5k
ZXJWaWV3Ojp1bnNjYWxlZERvY3VtZW50UmVjdCgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBvdmVy
Zmxvd1JlY3QobGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dS
ZWN0KGxheW91dE92ZXJmbG93UmVjdCgpKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKICAgICByZXR1cm4gb3ZlcmZsb3dSZWN0OwogfQogCi1JbnRSZWN0IFJlbmRlclZp
ZXc6OmRvY3VtZW50UmVjdCgpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlclZpZXc6OmRvY3VtZW50
UmVjdCgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodW5zY2FsZWREb2N1bWVu
dFJlY3QoKSk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QodW5zY2FsZWREb2N1bWVudFJl
Y3QoKSk7CiAgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQogICAgICAgICBvdmVyZmxvd1JlY3QgPSBs
YXllcigpLT5jdXJyZW50VHJhbnNmb3JtKCkubWFwUmVjdChvdmVyZmxvd1JlY3QpOwogICAgIHJl
dHVybiBvdmVyZmxvd1JlY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmgJKHJldmlzaW9uIDk4OTc2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTQgKzY3LDE0IEBAIHB1YmxpYzoKIAogICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXc7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9v
bCBpbW1lZGlhdGUgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVw
YWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdCYs
IGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRWaWV3
UmVjdGFuZ2xlKGNvbnN0IExheW91dFJlY3QmLCBib29sIGltbWVkaWF0ZSA9IGZhbHNlKTsKICAg
ICAvLyBSZXBhaW50IHRoZSB2aWV3LCBhbmQgYWxsIGNvbXBvc2l0ZWQgbGF5ZXJzIHRoYXQgaW50
ZXJzZWN0IHRoZSBnaXZlbiBhYnNvbHV0ZSByZWN0YW5nbGUuCiAgICAgLy8gRklYTUU6IGlkZWFs
bHkgd2UnZCBuZXZlciBoYXZlIHRvIGRvIHRoaXMsIGlmIGFsbCByZXBhaW50cyBhcmUgY29udGFp
bmVyLXJlbGF0aXZlLgotICAgIHZpcnR1YWwgdm9pZCByZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5k
Q29tcG9zaXRlZExheWVycyhjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7
CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5
ZXJzKGNvbnN0IExheW91dFJlY3QmLCBib29sIGltbWVkaWF0ZSA9IGZhbHNlKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZp
cnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIGVudW0gU2VsZWN0aW9uUmVwYWludE1vZGUgeyBSZXBh
aW50TmV3WE9ST2xkLCBSZXBhaW50TmV3TWludXNPbGQgfTsKICAgICB2b2lkIHNldFNlbGVjdGlv
bihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBp
bnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwpAQCAt
OTYsNyArOTYsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICBpbnQgbWF4aW1hbE91dGxpbmVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbWFsT3V0bGluZVNpemU7IH0KIAotICAgIHZpcnR1YWwg
SW50UmVjdCB2aWV3UmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCB2aWV3UmVj
dCgpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKICAgICB2b2lk
IGFkZFdpZGdldChSZW5kZXJXaWRnZXQqKTsKQEAgLTE1MSw4ICsxNTEsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fbGVnYWN5UHJpbnRpbmcubV90cnVuY2F0b3JXaWR0aCA9IDA7CiAgICAgICAgIG1f
bGVnYWN5UHJpbnRpbmcubV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsKICAgICB9Ci0gICAgY29u
c3QgSW50UmVjdCYgcHJpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sZWdhY3lQcmludGluZy5t
X3ByaW50UmVjdDsgfQotICAgIHZvaWQgc2V0UHJpbnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsg
bV9sZWdhY3lQcmludGluZy5tX3ByaW50UmVjdCA9IHI7IH0KKyAgICBjb25zdCBMYXlvdXRSZWN0
JiBwcmludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xlZ2FjeVByaW50aW5nLm1fcHJpbnRSZWN0
OyB9CisgICAgdm9pZCBzZXRQcmludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikgeyBtX2xlZ2Fj
eVByaW50aW5nLm1fcHJpbnRSZWN0ID0gcjsgfQogICAgIC8vIEVuZCBkZXByZWNhdGVkIGZ1bmN0
aW9ucy4KIAogICAgIC8vIE5vdGlmaWNhdGlvbnMgdGhhdCB0aGlzIHZpZXcgYmVjYW1lIHZpc2li
bGUgaW4gYSB3aW5kb3csIG9yIHdpbGwgYmUKQEAgLTE2NSw5ICsxNjUsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCB1c2VzQ29tcG9zaXRpbmcoKSBjb25zdDsKICNlbmRpZgogCi0gICAgSW50UmVjdCB1
bnNjYWxlZERvY3VtZW50UmVjdCgpIGNvbnN0OworICAgIExheW91dFJlY3QgdW5zY2FsZWREb2N1
bWVudFJlY3QoKSBjb25zdDsKIAotICAgIEludFJlY3QgZG9jdW1lbnRSZWN0KCkgY29uc3Q7Cisg
ICAgTGF5b3V0UmVjdCBkb2N1bWVudFJlY3QoKSBjb25zdDsKIAogICAgIFJlbmRlckZsb3dUaHJl
YWQqIHJlbmRlckZsb3dUaHJlYWRXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGZsb3dUaHJl
YWQpOwogICAgIGJvb2wgaGFzUmVuZGVyRmxvd1RocmVhZHMoKSBjb25zdCB7IHJldHVybiBtX3Jl
bmRlckZsb3dUaHJlYWRMaXN0ICYmICFtX3JlbmRlckZsb3dUaHJlYWRMaXN0LT5pc0VtcHR5KCk7
IH0KQEAgLTE5MSw3ICsxOTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG1hcEFi
c29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNm
b3JtU3RhdGUmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBib29sIHNob3VsZFJlcGFpbnQoY29u
c3QgSW50UmVjdCYgcikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRSZXBhaW50KGNvbnN0IExheW91
dFJlY3QmKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBtYXkgb25seSBiZSBhY2Nl
c3NlZCBieSBMYXlvdXRTdGF0ZU1haW50YWluZXIuCiAgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUo
UmVuZGVyRmxvd1RocmVhZCosIGJvb2wgcmVnaW9uc0NoYW5nZWQpOwpAQCAtMjQ2LDcgKzI0Niw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgaW50IG1fYmVzdFRydW5jYXRlZEF0OwogICAgICAgICBp
bnQgbV90cnVuY2F0ZWRBdDsKICAgICAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7Ci0gICAgICAg
IEludFJlY3QgbV9wcmludFJlY3Q7CisgICAgICAgIExheW91dFJlY3QgbV9wcmludFJlY3Q7CiAg
ICAgICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7CiAgICAgfTsKICAgICBMZWdhY3lQcmludGlu
ZyBtX2xlZ2FjeVByaW50aW5nOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113252</attachid>
            <date>2011-11-01 16:31:39 -0700</date>
            <delta_ts>2011-11-01 23:26:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71321-20111101163138.patch</filename>
            <type>text/plain</type>
            <size>34748</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MDA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMTEtMDEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpeCB1c2VzIG9mIExheW91
dFVuaXQgaW4gRnJhbWUtLCBTY3JvbGwtLCBhbmQgUmVuZGVyVmlldworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGluZyB0aGUgdXNhZ2Ugb2YgTGF5
b3V0VW5pdHMgaW4gdGhlICpWaWV3IGNsYXNzZXMgdG8gbWlycm9yIHRoZSBwcm9wZXIgdXNlCisg
ICAgICAgIGFzIGRlcml2ZWQgaW4gdGhlIHN1YnBpeGVsbGF5b3V0IGJyYW5jaC4KKworICAgICAg
ICBUaGlzIGVudGFpbHMgc2Nyb2xsaW5nIG9ubHkgd2l0aCBpbnRlZ2VycyAoYW5kIHJvdW5kaW5n
IG9uY2Ugd2UndmUgbWFkZSB0aGUgc3dpdGNoKQorICAgICAgICBhbmQgdXNpbmcgaW50ZWdlcnMg
Zm9yIHdpbmRvdyBjb29yZGluYXRlcywgd2l0aCBMYXlvdXRVbml0cyBmb3IgY29udGVudCBjb29y
ZGluYXRlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdlIGluIGJlaGF2aW9y
LgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Onpvb21BbmltYXRvclRy
YW5zZm9ybUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxDb250
ZW50c0Zhc3RQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVu
dHNTbG93UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbEVsZW1lbnRU
b1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojp1cGRhdGVTY3JvbGxDb3JuZXIpOgorICAgICAgICAqIHBhZ2UvRnJhbWVW
aWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYWNrZWRSZXBhaW50UmVjdHMp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OmxheW91dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmxheW91
dEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0Rml4ZWRMYXlvdXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6b3ZlcmhhbmdBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpyZWN0VG9D
b3B5T25TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JlZW5Ub0NvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbGJhckF0UG9pbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmll
dy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZVdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6Y29udGVudHNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3Ojpjb250ZW50c0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjphZGp1
c3RTY3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzaG91bGRSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OnJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6dmlld1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6dW5zY2FsZWREb2N1bWVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
ZG9jdW1lbnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHJpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OnNldFByaW50UmVjdCk6CisKIDIwMTEtMTEtMDEgIFhpYW9tZWkgSmkgIDx4amlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlZmFjdG9yOiBjaGFuZ2UgU2Nyb2xsYWJsZTo6bV9z
Y3JvbGxPcmlnaW4gZnJvbSBwcm90ZWN0ZWQgdG8gcHJpdmF0ZS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDk5MDA2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNyArMzc2LDcgQEAgYm9vbCBGcmFt
ZVZpZXc6OmRpZEZpcnN0TGF5b3V0KCkgY29uc3QKICAgICByZXR1cm4gIW1fZmlyc3RMYXlvdXQ7
CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQordm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3Qp
CiB7CiAgICAgaWYgKCFwYXJlbnQoKSkgewogICAgICAgICBpZiAoaG9zdFdpbmRvdygpKQpAQCAt
Mzk3LDkgKzM5Nyw5IEBAIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnQK
ICAgICByZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7CiB9CiAKLXZvaWQg
RnJhbWVWaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3ZvaWQgRnJh
bWVWaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbmV3UmVjdCkKIHsKLSAgICBJ
bnRSZWN0IG9sZFJlY3QgPSBmcmFtZVJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IG9sZFJlY3QgPSBm
cmFtZVJlY3QoKTsKICAgICBpZiAobmV3UmVjdCA9PSBvbGRSZWN0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTEyMjcsNyArMTIyNyw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp6b29tQW5pbWF0b3JUcmFu
c2Zvcm1DaGEKIHsKICAgICBpZiAoc3RhdGUgPT0gWm9vbUFuaW1hdGlvbkZpbmlzaGluZykgewog
ICAgICAgICBtX3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihtX3BhZ2UtPnBhZ2VTY2FsZUZhY3Rv
cigpICogc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFBv
aW50KHNjYWxlICogc2Nyb2xsWCgpIC0geCwgc2NhbGUgKiBzY3JvbGxZKCkgLSB5KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHNjYWxlICogc2Nyb2xsWCgp
IC0geCwgc2NhbGUgKiBzY3JvbGxZKCkgLSB5KSk7CiAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkt
PnJlc2V0Wm9vbSgpOwogICAgIH0KIApAQCAtMTQzMyw3ICsxNDMzLDcgQEAgTGF5b3V0UG9pbnQg
RnJhbWVWaWV3OjpjdXJyZW50TW91c2VQb3NpdAogICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgOiBJbnRQb2ludCgpOwog
fQogCi1ib29sIEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXpl
JiBzY3JvbGxEZWx0YSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBMYXlv
dXRSZWN0JiBjbGlwUmVjdCkKK2Jvb2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRo
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGws
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIGNvbnN0IHNpemVfdCBmaXhlZE9iamVj
dFRocmVzaG9sZCA9IDU7CiAKQEAgLTE0NDksMTQgKzE0NDksMTQgQEAgYm9vbCBGcmFtZVZpZXc6
OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoYwogICAgIGNvbnN0IGJvb2wgaXNDb21wb3NpdGVkQ29u
dGVudExheWVyID0gY29udGVudHNJbkNvbXBvc2l0ZWRMYXllcigpOwogCiAgICAgLy8gR2V0IHRo
ZSByZWN0cyBvZiB0aGUgZml4ZWQgb2JqZWN0cyB2aXNpYmxlIGluIHRoZSByZWN0VG9TY3JvbGwK
LSAgICBWZWN0b3I8TGF5b3V0UmVjdCwgZml4ZWRPYmplY3RUaHJlc2hvbGQ+IHN1YlJlY3RUb1Vw
ZGF0ZTsKKyAgICBWZWN0b3I8SW50UmVjdCwgZml4ZWRPYmplY3RUaHJlc2hvbGQ+IHN1YlJlY3RU
b1VwZGF0ZTsKICAgICBib29sIHVwZGF0ZUludmFsaWRhdGVkU3ViUmVjdCA9IHRydWU7CiAgICAg
UmVuZGVyQmxvY2s6OlBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHBvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICBmb3IgKFJlbmRlckJsb2NrOjpQ
b3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBvc2l0aW9u
ZWRPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUmVuZGVyQm94
KiByZW5kZXJCb3ggPSAqaXQ7CiAgICAgICAgIGlmIChyZW5kZXJCb3gtPnN0eWxlKCktPnBvc2l0
aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBM
YXlvdXRSZWN0IHVwZGF0ZVJlY3QgPSByZW5kZXJCb3gtPmxheWVyKCktPnJlcGFpbnRSZWN0SW5j
bHVkaW5nRGVzY2VuZGFudHMoKTsKKyAgICAgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gcmVuZGVy
Qm94LT5sYXllcigpLT5yZXBhaW50UmVjdEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAgICAgICAg
IHVwZGF0ZVJlY3QgPSBjb250ZW50c1RvV2luZG93KHVwZGF0ZVJlY3QpOwogICAgICAgICBpZiAo
IWlzQ29tcG9zaXRlZENvbnRlbnRMYXllciAmJiBjbGlwc1JlcGFpbnRzKCkpCiAgICAgICAgICAg
ICB1cGRhdGVSZWN0LmludGVyc2VjdChyZWN0VG9TY3JvbGwpOwpAQCAtMTQ3Nyw4ICsxNDc3LDgg
QEAgYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoYwogICAgICAgICAvLyAy
KSB1cGRhdGUgdGhlIGFyZWEgb2YgZml4ZWQgb2JqZWN0cyB0aGF0IGhhcyBiZWVuIGludmFsaWRh
dGVkCiAgICAgICAgIHNpemVfdCBmaXhPYmplY3RzQ291bnQgPSBzdWJSZWN0VG9VcGRhdGUuc2l6
ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpeE9iamVjdHNDb3VudDsgKytp
KSB7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IHVwZGF0ZVJlY3QgPSBzdWJSZWN0VG9VcGRhdGVb
aV07Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbGVkUmVjdCA9IHVwZGF0ZVJlY3Q7Cisg
ICAgICAgICAgICBJbnRSZWN0IHVwZGF0ZVJlY3QgPSBzdWJSZWN0VG9VcGRhdGVbaV07CisgICAg
ICAgICAgICBJbnRSZWN0IHNjcm9sbGVkUmVjdCA9IHVwZGF0ZVJlY3Q7CiAgICAgICAgICAgICBz
Y3JvbGxlZFJlY3QubW92ZShzY3JvbGxEZWx0YSk7CiAgICAgICAgICAgICB1cGRhdGVSZWN0LnVu
aXRlKHNjcm9sbGVkUmVjdCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAt
MTUwMSw3ICsxNTAxLDcgQEAgYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgo
YwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRz
U2xvd1BhdGgoY29uc3QgTGF5b3V0UmVjdCYgdXBkYXRlUmVjdCkKK3ZvaWQgRnJhbWVWaWV3Ojpz
Y3JvbGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCiB7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChjb250ZW50c0luQ29tcG9zaXRl
ZExheWVyKCkpIHsKQEAgLTE2NjQsMTAgKzE2NjQsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9s
bEVsZW1lbnRUb1JlY3QoRWxlbQogICAgIExheW91dFJlY3QgYm91bmRzID0gZWxlbWVudC0+Z2V0
UmVjdCgpOwogICAgIGludCBjZW50ZXJpbmdPZmZzZXRYID0gKHJlY3Qud2lkdGgoKSAtIGJvdW5k
cy53aWR0aCgpKSAvIDI7CiAgICAgaW50IGNlbnRlcmluZ09mZnNldFkgPSAocmVjdC5oZWlnaHQo
KSAtIGJvdW5kcy5oZWlnaHQoKSkgLyAyOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKExheW91dFBv
aW50KGJvdW5kcy54KCkgLSBjZW50ZXJpbmdPZmZzZXRYIC0gcmVjdC54KCksIGJvdW5kcy55KCkg
LSBjZW50ZXJpbmdPZmZzZXRZIC0gcmVjdC55KCkpKTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihJ
bnRQb2ludChib3VuZHMueCgpIC0gY2VudGVyaW5nT2Zmc2V0WCAtIHJlY3QueCgpLCBib3VuZHMu
eSgpIC0gY2VudGVyaW5nT2Zmc2V0WSAtIHJlY3QueSgpKSk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3
OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYgc2Nyb2xsUG9pbnQpCit2b2lk
IEZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50
KQogewogICAgIGJvb2wgd2FzSW5Qcm9ncmFtbWF0aWNTY3JvbGwgPSBtX2luUHJvZ3JhbW1hdGlj
U2Nyb2xsOwogICAgIG1faW5Qcm9ncmFtbWF0aWNTY3JvbGwgPSB0cnVlOwpAQCAtMTc0MSw3ICsx
NzQxLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKAogICAgIEFT
U0VSVCghbV9mcmFtZS0+b3duZXJFbGVtZW50KCkpOwogICAgIAogICAgIGlmIChtX2lzVHJhY2tp
bmdSZXBhaW50cykgewotICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0ID0gcjsKKyAgICAgICAg
TGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHI7CiAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmUoLXNj
cm9sbE9mZnNldCgpKTsKICAgICAgICAgbV90cmFja2VkUmVwYWludFJlY3RzLmFwcGVuZChyZXBh
aW50UmVjdCk7CiAgICAgfQpAQCAtMjM1NSw3ICsyMzU1LDcgQEAgYm9vbCBGcmFtZVZpZXc6Omlz
QWN0aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+aXNBY3RpdmUoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvKGNvbnN0IExheW91
dFNpemUmIG5ld09mZnNldCkKK3ZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUbyhjb25zdCBJbnRTaXpl
JiBuZXdPZmZzZXQpCiB7CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsK
ICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwpAQCAtMjUxMSw3ICsyNTExLDcg
QEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVNjcm9sbENvcm5lcigpCiB7CiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IDA7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjb3JuZXJTdHlsZTsK
LSAgICBJbnRSZWN0IGNvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgTGF5b3V0
UmVjdCBjb3JuZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogICAgIAogICAgIGlmICghY29y
bmVyUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVHJ5IHRoZSA8Ym9keT4gZWxlbWVudCBm
aXJzdCBhcyBhIHNjcm9sbCBjb3JuZXIgc291cmNlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCShyZXZpc2lvbiA5OTAwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBI
b3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5
b3V0UmVjdCYpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZv
aWQgc2NoZWR1bGVBbmltYXRpb24oKTsKQEAgLTMwMSwxMSArMzAxLDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFRyYWNrc1JlcGFpbnRzKGJvb2wpOwogICAgIGJvb2wgaXNUcmFja2luZ1JlcGFp
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9pc1RyYWNraW5nUmVwYWludHM7IH0KICAgICB2b2lkIHJl
c2V0VHJhY2tlZFJlcGFpbnRzKCkgeyBtX3RyYWNrZWRSZXBhaW50UmVjdHMuY2xlYXIoKTsgfQot
ICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdHJhY2tlZFJlcGFpbnRSZWN0cygpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhY2tlZFJlcGFpbnRSZWN0czsgfQorICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRS
ZWN0PiYgdHJhY2tlZFJlcGFpbnRSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tlZFJlcGFp
bnRSZWN0czsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRz
RmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IExheW91dFJlY3QmIHJl
Y3RUb1Njcm9sbCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpOwotICAgIHZpcnR1YWwgdm9p
ZCBzY3JvbGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IExheW91dFJlY3QmIHVwZGF0ZVJlY3QpOwor
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnRpY2FsRG9jdW1l
bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGbGlwcGVkRG9jdW1lbnQoKSBjb25zdDsK
QEAgLTM1MCw3ICszNTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdmlydHVh
bCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhW
ZWN0b3I8TGF5b3V0UmVjdD4mKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29u
c3QgTGF5b3V0U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUbyhjb25zdCBJbnRTaXpl
Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UnViYmVyQmFuZChjb25zdCBJbnRTaXplJikg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnViYmVyQmFuZChjb25zdCBJbnRT
aXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0QW5pbWF0ZWRTY3JvbGwoKSBj
b25zdDsKQEAgLTQ1Niw3ICs0NTYsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX2xhc3RQYWlu
dFRpbWU7CiAgICAgCiAgICAgYm9vbCBtX2lzVHJhY2tpbmdSZXBhaW50czsgLy8gVXNlZCBmb3Ig
dGVzdGluZy4KLSAgICBWZWN0b3I8SW50UmVjdD4gbV90cmFja2VkUmVwYWludFJlY3RzOworICAg
IFZlY3RvcjxMYXlvdXRSZWN0PiBtX3RyYWNrZWRSZXBhaW50UmVjdHM7CiAKICAgICBib29sIG1f
c2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA5OTAwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsMzMgKzIzMSwzNCBAQCBJ
bnRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdChiCiAgICAgaWYgKCFtX2ZpeGVk
VmlzaWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fZml4ZWRWaXNp
YmxlQ29udGVudFJlY3Q7CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IHZlcnRp
Y2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJh
cigpCisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gdmVydGljYWxTY3Jv
bGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkKICAg
ICAgICAgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgo
KSA6IDA7Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBob3Jpem9udGFsU2Ny
b2xsYmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkK
KyAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBob3Jpem9udGFsU2Ny
b2xsYmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkK
ICAgICAgICAgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5o
ZWlnaHQoKSA6IDA7CiAKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNl
dC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAg
SW50U2l6ZShtYXgoMCwgd2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1heCgwLCBoZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQpKSk7CisgICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQobV9zY3JvbGxP
ZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpLAorICAgICAgICAgICAgICAg
ICAgICAgIExheW91dFNpemUobWF4PExheW91dFVuaXQ+KDAsIHdpZHRoKCkgLSB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg8TGF5
b3V0VW5pdD4oMCwgaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KSkpOworCiB9
CiAjZW5kaWYKIAotaW50IFNjcm9sbFZpZXc6OmxheW91dFdpZHRoKCkgY29uc3QKK0xheW91dFVu
aXQgU2Nyb2xsVmlldzo6bGF5b3V0V2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpeGVk
TGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgIW1fdXNlRml4ZWRMYXlvdXQgPyB2aXNpYmxlV2lkdGgo
KSA6IG1fZml4ZWRMYXlvdXRTaXplLndpZHRoKCk7CiB9CiAKLWludCBTY3JvbGxWaWV3OjpsYXlv
dXRIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBTY3JvbGxWaWV3OjpsYXlvdXRIZWlnaHQoKSBj
b25zdAogewogICAgIHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgIW1fdXNl
Rml4ZWRMYXlvdXQgPyB2aXNpYmxlSGVpZ2h0KCkgOiBtX2ZpeGVkTGF5b3V0U2l6ZS5oZWlnaHQo
KTsKIH0KIAotSW50U2l6ZSBTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUoKSBjb25zdAorTGF5
b3V0U2l6ZSBTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUoKSBjb25zdAogewogICAgIHJldHVy
biBtX2ZpeGVkTGF5b3V0U2l6ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzZXRGaXhlZExheW91
dFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0Rml4ZWRM
YXlvdXRTaXplKGNvbnN0IExheW91dFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKGZpeGVkTGF5
b3V0U2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTI3OCwxMiArMjc5LDEy
IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0VXNlRml4ZWRMYXlvdXQoYm9vbCAKICAgICB1cGRhdGVT
Y3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKIH0KIAotSW50U2l6ZSBTY3JvbGxWaWV3Ojpjb250
ZW50c1NpemUoKSBjb25zdAorTGF5b3V0U2l6ZSBTY3JvbGxWaWV3Ojpjb250ZW50c1NpemUoKSBj
b25zdAogewogICAgIHJldHVybiBtX2NvbnRlbnRzU2l6ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3
OjpzZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQgU2Nyb2xsVmll
dzo6c2V0Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYg
KGNvbnRlbnRzU2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNCwxNyAr
NDA1LDE3IEBAIGJvb2wgU2Nyb2xsVmlldzo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2cKICAgICBy
ZXR1cm4gc2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNWZXJ0aWNhbERvY3Vt
ZW50KCksIGlzRmxpcHBlZERvY3VtZW50KCkpLCBncmFudWxhcml0eSk7CiB9CiAKLUludFNpemUg
U2Nyb2xsVmlldzo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAorTGF5b3V0U2l6ZSBTY3JvbGxWaWV3
OjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBzdHJldGNoOworICAgIExh
eW91dFNpemUgc3RyZXRjaDsKIAotICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3JvbGxQb3Np
dGlvbigpLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKTsKKyAgICBMYXlvdXRVbml0IHBoeXNpY2Fs
U2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpOwogICAg
IGlmIChwaHlzaWNhbFNjcm9sbFkgPCAwKQogICAgICAgICBzdHJldGNoLnNldEhlaWdodChwaHlz
aWNhbFNjcm9sbFkpOwogICAgIGVsc2UgaWYgKGNvbnRlbnRzSGVpZ2h0KCkgJiYgcGh5c2ljYWxT
Y3JvbGxZID4gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKICAgICAgICAgc3Ry
ZXRjaC5zZXRIZWlnaHQocGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpKTsKIAotICAgIGludCBwaHlzaWNhbFNjcm9sbFggPSBzY3JvbGxQb3NpdGlv
bigpLngoKSArIHNjcm9sbE9yaWdpbigpLngoKTsKKyAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Ny
b2xsWCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpOwogICAgIGlm
IChwaHlzaWNhbFNjcm9sbFggPCAwKQogICAgICAgICBzdHJldGNoLnNldFdpZHRoKHBoeXNpY2Fs
U2Nyb2xsWCk7CiAgICAgZWxzZSBpZiAoY29udGVudHNXaWR0aCgpICYmIHBoeXNpY2FsU2Nyb2xs
WCA+IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQpAQCAtNDQ3LDcgKzQ0OCw3IEBA
IHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgbV9pblVw
ZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBJbnRSZWN0IG9sZFNjcm9sbENv
cm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBvbGRTY3JvbGxD
b3JuZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogCiAgICAgYm9vbCBoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwogICAgIGJvb2wgaGFzVmVydGljYWxT
Y3JvbGxiYXIgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwpAQCAtNDcxLDggKzQ3Miw4IEBAIHZvaWQg
U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICB9IGVsc2UgewogICAgICAg
ICBib29sIHNlbmRDb250ZW50UmVzaXplZE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICAK
LSAgICAgICAgSW50U2l6ZSBkb2NTaXplID0gY29udGVudHNTaXplKCk7Ci0gICAgICAgIEludFNp
emUgZnJhbWVTaXplID0gZnJhbWVSZWN0KCkuc2l6ZSgpOworICAgICAgICBMYXlvdXRTaXplIGRv
Y1NpemUgPSBjb250ZW50c1NpemUoKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBmcmFtZVNpemUgPSBm
cmFtZVJlY3QoKS5zaXplKCk7CiAKICAgICAgICAgaWYgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0
bykgewogICAgICAgICAgICAgbmV3SGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGRvY1NpemUud2lk
dGgoKSA+IHZpc2libGVXaWR0aCgpOwpAQCAtNTE0LDcgKzUxNSw3IEBAIHZvaWQgU2Nyb2xsVmll
dzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1fdXBkYXRlU2Nyb2xsYmFy
c1Bhc3MrKzsKICAgICAgICAgICAgIGNvbnRlbnRzUmVzaXplZCgpOwogICAgICAgICAgICAgdmlz
aWJsZUNvbnRlbnRzUmVzaXplZCgpOwotICAgICAgICAgICAgSW50U2l6ZSBuZXdEb2NTaXplID0g
Y29udGVudHNTaXplKCk7CisgICAgICAgICAgICBMYXlvdXRTaXplIG5ld0RvY1NpemUgPSBjb250
ZW50c1NpemUoKTsKICAgICAgICAgICAgIGlmIChuZXdEb2NTaXplID09IGRvY1NpemUpIHsKICAg
ICAgICAgICAgICAgICAvLyBUaGUgbGF5b3V0IHdpdGggdGhlIG5ldyBzY3JvbGwgc3RhdGUgaGFk
IG5vIGltcGFjdCBvbgogICAgICAgICAgICAgICAgIC8vIHRoZSBkb2N1bWVudCdzIG92ZXJhbGwg
c2l6ZSwgc28gdXBkYXRlU2Nyb2xsYmFycyBkaWRuJ3QgZ2V0IGNhbGxlZC4KQEAgLTUzNCwxMiAr
NTM1LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKIAogICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IGNsaWVudFdpZHRoID0g
dmlzaWJsZVdpZHRoKCk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGll
bnRXaWR0aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVu
dFdpZHRoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKLSAgICAg
ICAgSW50UmVjdCBvbGRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwot
ICAgICAgICBJbnRSZWN0IGhCYXJSZWN0ID0gSW50UmVjdCgwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV92ZXJ0
aWNhbFNjcm9sbGJhciA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSk7CisgICAgICAgIExheW91dFVuaXQgcGFnZVN0ZXAgPSBtYXg8TGF5b3V0VW5pdD4obWF4
PExheW91dFVuaXQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdo
ZW5QYWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFn
ZXMoKSksIDEpOworICAgICAgICBMYXlvdXRSZWN0IG9sZFJlY3QobV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKSk7CisgICAgICAgIExheW91dFJlY3QgaEJhclJlY3QgPSBMYXlvdXRS
ZWN0KDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgp
IC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIChtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gbV92
ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoaEJhclJlY3QpOwogICAgICAg
ICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5pbnZhbGlkYXRlKCk7CkBAIC01NTUsMTIgKzU1NiwxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVw
ZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgewog
ICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOwotICAgICAgICBpbnQg
cGFnZVN0ZXAgPSBtYXgobWF4PGludD4oY2xpZW50SGVpZ2h0ICogU2Nyb2xsYmFyOjptaW5GcmFj
dGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50SGVpZ2h0IC0gU2Nyb2xsYmFyOjptYXhPdmVy
bGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKLSAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1fdmVydGlj
YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAgICAgICAgSW50UmVjdCB2QmFyUmVjdCA9IElu
dFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hvcml6b250YWxTY3JvbGxiYXIgPyBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkpOworICAgICAgICBMYXlvdXRVbml0IHBh
Z2VTdGVwID0gbWF4PExheW91dFVuaXQ+KG1heDxMYXlvdXRVbml0PihjbGllbnRIZWlnaHQgKiBT
Y3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRIZWlnaHQgLSBT
Y3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICBMYXlvdXRS
ZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgICAgICBM
YXlvdXRSZWN0IHZCYXJSZWN0ID0gTGF5b3V0UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgIGhlaWdodCgpIC0gKG1faG9yaXpvbnRhbFNj
cm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwKSk7CiAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdCh2QmFyUmVjdCk7CiAgICAgICAgIGlm
ICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1fdmVydGljYWxTY3JvbGxi
YXItPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxp
ZGF0ZSgpOwpAQCAtNjAyLDggKzYwMyw4IEBAIEludFJlY3QgU2Nyb2xsVmlldzo6cmVjdFRvQ29w
eU9uU2Nyb2xsKCkKIHsKICAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0ID0gY29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyhJbnRSZWN0KDAsIDAsIHZpc2libGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0
KCkpKTsKICAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkgewotICAgICAgICBpbnQgdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCA9ICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFoYXNMYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkpID8gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDA7
Ci0gICAgICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3Jv
bGxiYXIoKSAmJiAhaGFzTGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpID8gaG9yaXpvbnRh
bFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6IDA7CisgICAgICAgIExheW91dFVuaXQgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCA9ICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFoYXNMYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkpID8gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDA7CisgICAg
ICAgIExheW91dFVuaXQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChob3Jpem9udGFsU2Ny
b2xsYmFyKCkgJiYgIWhhc0xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSA/IGhvcml6b250
YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwOwogICAgICAgICAKICAgICAgICAgc2Nyb2xsVmll
d1JlY3Quc2V0V2lkdGgoc2Nyb2xsVmlld1JlY3Qud2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgpOwogICAgICAgICBzY3JvbGxWaWV3UmVjdC5zZXRIZWlnaHQoc2Nyb2xsVmlld1JlY3Qu
aGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKQEAgLTYyOSw5ICs2MzAsOSBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbENvbnRlbnRzKGNvbnN0IEluCiAgICAgaWYgKG1fZHJh
d1BhblNjcm9sbEljb24pIHsKICAgICAgICAgLy8gRklYTUU6IHRoZSBwYW4gaWNvbiBpcyBicm9r
ZW4gd2hlbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBvbiwgc2luY2UgaXQgd2lsbCBkcmF3
IHVuZGVyIHRoZSBjb21wb3NpdGluZyBsYXllcnMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzgzNwotICAgICAgICBpbnQgcGFuSWNvbkRpcnR5
U3F1YXJlU2l6ZUxlbmd0aCA9IDIgKiAocGFuSWNvblNpemVMZW5ndGggKyBtYXgoYWJzKHNjcm9s
bERlbHRhLndpZHRoKCkpLCBhYnMoc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKSk7IC8vIFdlIG9ubHkg
d2FudCB0byByZXBhaW50IHdoYXQncyBuZWNlc3NhcnkKLSAgICAgICAgSW50UG9pbnQgcGFuSWNv
bkRpcnR5U3F1YXJlTG9jYXRpb24gPSBJbnRQb2ludChtX3BhblNjcm9sbEljb25Qb2ludC54KCkg
LSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAvIDIpLCBtX3BhblNjcm9sbEljb25Qb2lu
dC55KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAvIDIpKTsKLSAgICAgICAgSW50
UmVjdCBwYW5TY3JvbGxJY29uRGlydHlSZWN0ID0gSW50UmVjdChwYW5JY29uRGlydHlTcXVhcmVM
b2NhdGlvbiAsIEludFNpemUocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCwgcGFuSWNvbkRp
cnR5U3F1YXJlU2l6ZUxlbmd0aCkpOworICAgICAgICBMYXlvdXRVbml0IHBhbkljb25EaXJ0eVNx
dWFyZVNpemVMZW5ndGggPSAyICogKHBhbkljb25TaXplTGVuZ3RoICsgbWF4KGFicyhzY3JvbGxE
ZWx0YS53aWR0aCgpKSwgYWJzKHNjcm9sbERlbHRhLmhlaWdodCgpKSkpOyAvLyBXZSBvbmx5IHdh
bnQgdG8gcmVwYWludCB3aGF0J3MgbmVjZXNzYXJ5CisgICAgICAgIExheW91dFBvaW50IHBhbklj
b25EaXJ0eVNxdWFyZUxvY2F0aW9uID0gTGF5b3V0UG9pbnQobV9wYW5TY3JvbGxJY29uUG9pbnQu
eCgpIC0gKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggLyAyKSwgbV9wYW5TY3JvbGxJY29u
UG9pbnQueSgpIC0gKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggLyAyKSk7CisgICAgICAg
IExheW91dFJlY3QgcGFuU2Nyb2xsSWNvbkRpcnR5UmVjdCA9IExheW91dFJlY3QocGFuSWNvbkRp
cnR5U3F1YXJlTG9jYXRpb24gLCBMYXlvdXRTaXplKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5n
dGgsIHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGgpKTsKICAgICAgICAgcGFuU2Nyb2xsSWNv
bkRpcnR5UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwogICAgICAgICBob3N0V2luZG93KCktPmlu
dmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhwYW5TY3JvbGxJY29uRGlydHlSZWN0LCBmYWxzZSAv
KmltbWVkaWF0ZSovKTsKICAgICB9CkBAIC02NDcsOCArNjQ4LDggQEAgdm9pZCBTY3JvbGxWaWV3
OjpzY3JvbGxDb250ZW50cyhjb25zdCBJbgogICAgIH0KIAogICAgIC8vIEludmFsaWRhdGUgdGhl
IG92ZXJoYW5nIGFyZWFzIGlmIHRoZXkgYXJlIHZpc2libGUuCi0gICAgSW50UmVjdCBob3Jpem9u
dGFsT3ZlcmhhbmdSZWN0OwotICAgIEludFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7CisgICAg
TGF5b3V0UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdSZWN0OworICAgIExheW91dFJlY3QgdmVydGlj
YWxPdmVyaGFuZ1JlY3Q7CiAgICAgY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKGhv
cml6b250YWxPdmVyaGFuZ1JlY3QsIHZlcnRpY2FsT3ZlcmhhbmdSZWN0KTsKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJoYW5nTGF5ZXIgPSBsYXll
ckZvck92ZXJoYW5nQXJlYXMoKSkgewpAQCAtNzIxLDcgKzcyMiw3IEBAIEludFBvaW50IFNjcm9s
bFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY28KIAogSW50UmVjdCBTY3JvbGxWaWV3Ojp3aW5kb3dU
b0NvbnRlbnRzKGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QpIGNvbnN0CiB7Ci0gICAgSW50UmVj
dCB2aWV3UmVjdCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dSZWN0KTsKKyAg
ICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRv
d1JlY3QpOwogICAgIHZpZXdSZWN0Lm1vdmUoc2Nyb2xsT2Zmc2V0KCkpOwogICAgIHJldHVybiB2
aWV3UmVjdDsKIH0KQEAgLTc0MiwxMiArNzQzLDEyIEBAIEludFJlY3QgU2Nyb2xsVmlldzo6Y29u
dGVudHNUb1NjcmVlbihjb24KICAgICByZXR1cm4gaG9zdFdpbmRvdygpLT53aW5kb3dUb1NjcmVl
bihjb250ZW50c1RvV2luZG93KHJlY3QpKTsKIH0KIAotSW50UG9pbnQgU2Nyb2xsVmlldzo6c2Ny
ZWVuVG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitMYXlvdXRQb2ludCBT
Y3JvbGxWaWV3OjpzY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU2Ny
ZWVuVG9Db250ZW50cyhwb2ludCk7CiAgICAgaWYgKCFob3N0V2luZG93KCkpCi0gICAgICAgIHJl
dHVybiBJbnRQb2ludCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQoKTsKICAgICByZXR1
cm4gd2luZG93VG9Db250ZW50cyhob3N0V2luZG93KCktPnNjcmVlblRvV2luZG93KHBvaW50KSk7
CiB9CiAKQEAgLTgxMSw3ICs4MTIsNyBAQCBTY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJh
ckF0UG9pbnQoCiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdp
bmRvd1BvaW50KTsKKyAgICBMYXlvdXRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdXaW5kb3cod2luZG93UG9pbnQpOwogICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIg
JiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh2aWV3UG9pbnQp
KQogICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOwogICAgIGlmICht
X3ZlcnRpY2FsU2Nyb2xsYmFyICYmIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNv
bnRhaW5zKHZpZXdQb2ludCkpCkBAIC04NDksOSArODUwLDkgQEAgdm9pZCBTY3JvbGxWaWV3Ojpn
ZXN0dXJlRXZlbnQoY29uc3QgUGxhdAogfQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0
RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit2b2lkIFNjcm9sbFZpZXc6OnNldEZy
YW1lUmVjdChjb25zdCBMYXlvdXRSZWN0JiBuZXdSZWN0KQogewotICAgIEludFJlY3Qgb2xkUmVj
dCA9IGZyYW1lUmVjdCgpOworICAgIExheW91dFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOwog
ICAgIAogICAgIGlmIChuZXdSZWN0ID09IG9sZFJlY3QpCiAgICAgICAgIHJldHVybjsKQEAgLTg4
MiwxNCArODgzLDE0IEBAIHN0YXRpYyB2b2lkIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoR3JhcGgK
ICAgICBpZiAoIWdyYXBoaWNzTGF5ZXIgfHwgIXNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwog
ICAgIGdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBJbnRSZWN0IHNj
cm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOworICAgIExheW91dFJlY3Qgc2Ny
b2xsYmFyUmVjdCA9IHNjcm9sbGJhci0+ZnJhbWVSZWN0KCk7CiAgICAgZ3JhcGhpY3NMYXllci0+
c2V0UG9zaXRpb24oc2Nyb2xsYmFyUmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoc2Nyb2xsYmFy
UmVjdC5zaXplKCkgIT0gZ3JhcGhpY3NMYXllci0+c2l6ZSgpKQogICAgICAgICBncmFwaGljc0xh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICBncmFwaGljc0xheWVyLT5zZXRTaXplKHNjcm9s
bGJhclJlY3Quc2l6ZSgpKTsKIH0KIAotc3RhdGljIHZvaWQgcG9zaXRpb25TY3JvbGxDb3JuZXJM
YXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJS
ZWN0KQorc3RhdGljIHZvaWQgcG9zaXRpb25TY3JvbGxDb3JuZXJMYXllcihHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBjb3JuZXJSZWN0KQogewogICAgIGlm
ICghZ3JhcGhpY3NMYXllcikKICAgICAgICAgcmV0dXJuOwpAQCAtOTExLDkgKzkxMiw5IEBAIHZv
aWQgU2Nyb2xsVmlldzo6cG9zaXRpb25TY3JvbGxiYXJMYXllcnMKICNlbmRpZgogfQogCi12b2lk
IFNjcm9sbFZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGJvb2wgbm93KQordm9pZCBTY3JvbGxWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25z
dCBMYXlvdXRSZWN0JiByZWN0LCBib29sIG5vdykKIHsKLSAgICBJbnRSZWN0IHBhaW50UmVjdCA9
IHJlY3Q7CisgICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSByZWN0OwogICAgIGlmIChjbGlwc1Jl
cGFpbnRzKCkgJiYgIXBhaW50c0VudGlyZUNvbnRlbnRzKCkpCiAgICAgICAgIHBhaW50UmVjdC5p
bnRlcnNlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOwogICAgIGlmIChwYWludFJlY3QuaXNFbXB0
eSgpKQpAQCAtOTY4LDE3ICs5NjksMTcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxD
b3JuZXIoKQogewogfQogCi12b2lkIFNjcm9sbFZpZXc6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCkKK3ZvaWQgU2Ny
b2xsVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiBjb3JuZXJSZWN0KQogewogICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
LT5wYWludFNjcm9sbENvcm5lcih0aGlzLCBjb250ZXh0LCBjb3JuZXJSZWN0KTsKIH0KIAotdm9p
ZCBTY3JvbGxWaWV3OjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQordm9pZCBTY3JvbGxWaWV3OjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBM
YXlvdXRSZWN0JiByZWN0KQogewogICAgIGludmFsaWRhdGVSZWN0KHJlY3QpOwogfQogCi12b2lk
IFNjcm9sbFZpZXc6OnBhaW50U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50U2Nyb2xsYmFycyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbGJhcgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
QEAgLTEwMDYsNyArMTAwNyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnRQYW5TY3JvbGxJY29u
KEdyYXAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocGFuU2Nyb2xsSWNvbiwgQ29sb3JTcGFjZURl
dmljZVJHQiwgbV9wYW5TY3JvbGxJY29uUG9pbnQpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQg
U2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRS
ZWN0JiByZWN0KQogewogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAgIFdpZGdl
dDo6cGFpbnQoY29udGV4dCwgcmVjdCk7CkBAIC0xMDIxLDEzICsxMDIyLDEzIEBAIHZvaWQgU2Ny
b2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIg
YW55IG92ZXJsYXkgc2Nyb2xsYmFycyBhcyB3ZSBwYWludCwgdGhpcyB3aWxsIGJlIHNldCB0byB0
cnVlLgogICAgIG1fY29udGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycyA9
IGZhbHNlOwogCi0gICAgSW50UmVjdCBjbGlwUmVjdCA9IGZyYW1lUmVjdCgpOworICAgIExheW91
dFJlY3QgY2xpcFJlY3QgPSBmcmFtZVJlY3QoKTsKICAgICBpZiAodmVydGljYWxTY3JvbGxiYXIo
KSAmJiAhdmVydGljYWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAg
IGNsaXBSZWN0LnNldFdpZHRoKGNsaXBSZWN0LndpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcigp
LT53aWR0aCgpKTsKICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFob3Jpem9udGFs
U2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICBjbGlwUmVjdC5zZXRI
ZWlnaHQoY2xpcFJlY3QuaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgp
KTsKIAotICAgIEludFJlY3QgZG9jdW1lbnREaXJ0eVJlY3QgPSByZWN0OworICAgIExheW91dFJl
Y3QgZG9jdW1lbnREaXJ0eVJlY3QgPSByZWN0OwogICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVy
c2VjdChjbGlwUmVjdCk7CiAKICAgICBpZiAoIWRvY3VtZW50RGlydHlSZWN0LmlzRW1wdHkoKSkg
ewpAQCAtMTA1Niw3ICsxMDU3LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0Nv
bnRleHQqIAogICAgIC8vIE5vdyBwYWludCB0aGUgc2Nyb2xsYmFycy4KICAgICBpZiAoIW1fc2Ny
b2xsYmFyc1N1cHByZXNzZWQgJiYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0
OworICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0OwogICAgICAg
ICBzY3JvbGxWaWV3RGlydHlSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CiAgICAgICAgIGNv
bnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7CiAgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3Qu
bW92ZUJ5KC1sb2NhdGlvbigpKTsKQEAgLTEwNjksMjUgKzEwNzAsMjUgQEAgdm9pZCBTY3JvbGxW
aWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBwYWludFBhblNjcm9sbEljb24o
Y29udGV4dCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0Zv
clBhaW50aW5nKEludFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIEludFJlY3QmIHZlcnRp
Y2FsT3ZlcmhhbmdSZWN0KQordm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFz
Rm9yUGFpbnRpbmcoTGF5b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCwgTGF5b3V0UmVj
dCYgdmVydGljYWxPdmVyaGFuZ1JlY3QpCiB7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGggPSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIoKS0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0g
KHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNj
cm9sbGJhcigpKQogICAgICAgICA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAwOwot
ICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIo
KSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICBM
YXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAoaG9yaXpvbnRhbFNjcm9sbGJh
cigpICYmICFob3Jpem9udGFsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAg
ICAgICA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwOwogCi0gICAgaW50IHBo
eXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgp
OworICAgIExheW91dFVuaXQgcGh5c2ljYWxTY3JvbGxZID0gc2Nyb2xsUG9zaXRpb24oKS55KCkg
KyBzY3JvbGxPcmlnaW4oKS55KCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWSA8IDApIHsKICAg
ICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgICAgICBob3Jp
em9udGFsT3ZlcmhhbmdSZWN0LnNldEhlaWdodCgtcGh5c2ljYWxTY3JvbGxZKTsKICAgICB9IGVs
c2UgaWYgKGNvbnRlbnRzSGVpZ2h0KCkgJiYgcGh5c2ljYWxTY3JvbGxZID4gY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVIZWlnaHQoKSkgewotICAgICAgICBpbnQgaGVpZ2h0ID0gcGh5c2ljYWxT
Y3JvbGxZIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpOworICAgICAgICBM
YXlvdXRVbml0IGhlaWdodCA9IHBoeXNpY2FsU2Nyb2xsWSAtIChjb250ZW50c0hlaWdodCgpIC0g
dmlzaWJsZUhlaWdodCgpKTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCA9IGZyYW1l
UmVjdCgpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCku
bWF4WSgpIC0gaGVpZ2h0IC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CiAgICAgICAgIGhv
cml6b250YWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CiAgICAgfQogCi0gICAgaW50
IHBoeXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgc2Nyb2xsT3JpZ2luKCku
eCgpOworICAgIExheW91dFVuaXQgcGh5c2ljYWxTY3JvbGxYID0gc2Nyb2xsUG9zaXRpb24oKS54
KCkgKyBzY3JvbGxPcmlnaW4oKS54KCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWCA8IDApIHsK
ICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgoLXBoeXNpY2FsU2Nyb2xsWCk7
CiAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldEhlaWdodChmcmFtZVJlY3QoKS5oZWln
aHQoKSAtIGhvcml6b250YWxPdmVyaGFuZ1JlY3QuaGVpZ2h0KCkpOwpAQCAtMTA5Nyw3ICsxMDk4
LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFzRgogICAgICAgICBl
bHNlCiAgICAgICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRZKGZyYW1lUmVjdCgpLnko
KSk7CiAgICAgfSBlbHNlIGlmIChjb250ZW50c1dpZHRoKCkgJiYgcGh5c2ljYWxTY3JvbGxYID4g
Y29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpIHsKLSAgICAgICAgaW50IHdpZHRoID0g
cGh5c2ljYWxTY3JvbGxYIC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKTsKKyAg
ICAgICAgTGF5b3V0VW5pdCB3aWR0aCA9IHBoeXNpY2FsU2Nyb2xsWCAtIChjb250ZW50c1dpZHRo
KCkgLSB2aXNpYmxlV2lkdGgoKSk7CiAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFdp
ZHRoKHdpZHRoKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KGZyYW1l
UmVjdCgpLmhlaWdodCgpIC0gaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CiAgICAg
ICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFgoZnJhbWVSZWN0KCkubWF4WCgpIC0gd2lkdGgg
LSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKQEAgLTExMDgsMTUgKzExMDksMTUgQEAgdm9pZCBT
Y3JvbGxWaWV3OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFzRgogICAgIH0KIH0KIAotdm9pZCBTY3Jv
bGxWaWV3OjpwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNh
bE92ZXJoYW5nUmVjdCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBTY3JvbGxWaWV3
OjpwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlv
dXRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiB2ZXJ0aWNh
bE92ZXJoYW5nUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQogewogICAgIFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLT5wYWludE92ZXJoYW5nQXJlYXModGhpcywgY29udGV4dCwgaG9y
aXpvbnRhbE92ZXJoYW5nUmVjdCwgdmVydGljYWxPdmVyaGFuZ1JlY3QsIGRpcnR5UmVjdCk7CiB9
CiAKLXZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlQW5kUGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBTY3Jv
bGxWaWV3OjpjYWxjdWxhdGVBbmRQYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgSW50UmVjdCBob3Jp
em9udGFsT3ZlcmhhbmdSZWN0OwotICAgIEludFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7Cisg
ICAgTGF5b3V0UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdSZWN0OworICAgIExheW91dFJlY3QgdmVy
dGljYWxPdmVyaGFuZ1JlY3Q7CiAgICAgY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5n
KGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIHZlcnRpY2FsT3ZlcmhhbmdSZWN0KTsKIAogICAgIGlm
IChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhob3Jpem9udGFsT3ZlcmhhbmdSZWN0KSB8fCBkaXJ0eVJl
Y3QuaW50ZXJzZWN0cyh2ZXJ0aWNhbE92ZXJoYW5nUmVjdCkpCkBAIC0xMTI4LDE5ICsxMTI5LDE5
IEBAIGJvb2wgU2Nyb2xsVmlldzo6aXNQb2ludEluU2Nyb2xsYmFyQ29ybmUKICAgICBpZiAoIXNj
cm9sbGJhckNvcm5lclByZXNlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50
UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50
KTsKKyAgICBMYXlvdXRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5k
b3cod2luZG93UG9pbnQpOwogCiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAg
ICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhcllNaW4gPSBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmZyYW1lUmVjdCgpLnkoKTsKLSAgICAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJZTWF4ID0g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkgKyBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOwotICAgICAgICBpbnQgaG9yaXpvbnRhbFNjcm9s
bGJhclhNaW4gPSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSArIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkud2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5p
dCBob3Jpem9udGFsU2Nyb2xsYmFyWU1pbiA9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVS
ZWN0KCkueSgpOworICAgICAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJZTWF4ID0g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkgKyBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGhvcml6b250
YWxTY3JvbGxiYXJYTWluID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCkg
KyBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCk7CiAKICAgICAgICAg
cmV0dXJuIHZpZXdQb2ludC55KCkgPiBob3Jpem9udGFsU2Nyb2xsYmFyWU1pbiAmJiB2aWV3UG9p
bnQueSgpIDwgaG9yaXpvbnRhbFNjcm9sbGJhcllNYXggJiYgdmlld1BvaW50LngoKSA+IGhvcml6
b250YWxTY3JvbGxiYXJYTWluOwogICAgIH0KIAotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhclhN
aW4gPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCk7Ci0gICAgaW50IHZlcnRp
Y2FsU2Nyb2xsYmFyWE1heCA9IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSAr
IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCk7Ci0gICAgaW50IHZlcnRp
Y2FsU2Nyb2xsYmFyWU1pbiA9IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSAr
IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOworICAgIExheW91dFVu
aXQgdmVydGljYWxTY3JvbGxiYXJYTWluID0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0
KCkueCgpOworICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJYTWF4ID0gbV92ZXJ0aWNh
bFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpICsgbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVS
ZWN0KCkud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHZlcnRpY2FsU2Nyb2xsYmFyWU1pbiA9IG1f
dmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSArIG1fdmVydGljYWxTY3JvbGxiYXIt
PmZyYW1lUmVjdCgpLmhlaWdodCgpOwogICAgIAogICAgIHJldHVybiB2aWV3UG9pbnQueCgpID4g
dmVydGljYWxTY3JvbGxiYXJYTWluICYmIHZpZXdQb2ludC54KCkgPCB2ZXJ0aWNhbFNjcm9sbGJh
clhNYXggJiYgdmlld1BvaW50LnkoKSA+IHZlcnRpY2FsU2Nyb2xsYmFyWU1pbjsKIH0KQEAgLTEx
NTEsMzQgKzExNTIsMzQgQEAgYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGxiYXJDb3JuZXJQcmVzZW50
KAogICAgICAgICB8fCAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBoZWlnaHQoKSAtIG1fdmVydGlj
YWxTY3JvbGxiYXItPmhlaWdodCgpID4gMCk7CiB9CiAKLUludFJlY3QgU2Nyb2xsVmlldzo6Y29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CitMYXlvdXRSZWN0IFNjcm9sbFZp
ZXc6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIC8v
IFNjcm9sbGJhcnMgd29uJ3QgYmUgdHJhbnNmb3JtZWQgd2l0aGluIHVzCi0gICAgSW50UmVjdCBu
ZXdSZWN0ID0gbG9jYWxSZWN0OworICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGxvY2FsUmVjdDsK
ICAgICBuZXdSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIHJldHVybiBu
ZXdSZWN0OwogfQogCi1JbnRSZWN0IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cGFyZW50UmVjdCkgY29uc3QKK0xheW91dFJlY3QgU2Nyb2xsVmlldzo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBM
YXlvdXRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAogewotICAgIEludFJlY3QgbmV3UmVjdCA9IHBh
cmVudFJlY3Q7CisgICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gcGFyZW50UmVjdDsKICAgICAvLyBT
Y3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwogICAgIG5ld1JlY3QubW92
ZUJ5KC1zY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIHJldHVybiBuZXdSZWN0OwogfQogCiAv
LyBGSVhNRTogdGVzdCB0aGVzZSBvbiB3aW5kb3dzCi1JbnRQb2ludCBTY3JvbGxWaWV3Ojpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAorTGF5b3V0UG9pbnQgU2Nyb2xs
Vmlldzo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKIHsKICAg
ICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwotICAgIEludFBv
aW50IG5ld1BvaW50ID0gbG9jYWxQb2ludDsKKyAgICBMYXlvdXRQb2ludCBuZXdQb2ludCA9IGxv
Y2FsUG9pbnQ7CiAgICAgbmV3UG9pbnQubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAg
ICAgcmV0dXJuIG5ld1BvaW50OwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK0xheW91dFBvaW50IFNjcm9sbFZpZXc6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogewotICAgIElu
dFBvaW50IG5ld1BvaW50ID0gcGFyZW50UG9pbnQ7CisgICAgTGF5b3V0UG9pbnQgbmV3UG9pbnQg
PSBwYXJlbnRQb2ludDsKICAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdp
dGhpbiB1cwogICAgIG5ld1BvaW50Lm1vdmVCeSgtc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAg
ICByZXR1cm4gbmV3UG9pbnQ7CkBAIC0xMjQxLDcgKzEyNDIsNyBAQCBib29sIFNjcm9sbFZpZXc6
OmlzT2Zmc2NyZWVuKCkgY29uc3QKIH0KIAogCi12b2lkIFNjcm9sbFZpZXc6OmFkZFBhblNjcm9s
bEljb24oY29uc3QgSW50UG9pbnQmIGljb25Qb3NpdGlvbikKK3ZvaWQgU2Nyb2xsVmlldzo6YWRk
UGFuU2Nyb2xsSWNvbihjb25zdCBMYXlvdXRQb2ludCYgaWNvblBvc2l0aW9uKQogewogICAgIGlm
ICghaG9zdFdpbmRvdygpKQogICAgICAgICByZXR1cm47CkBAIC0xMzQ1LDEyICsxMzQ2LDEyIEBA
IHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDb250ZW50c1NpemUKIHsKIH0KIAotSW50UmVj
dCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzVG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVj
dCkgY29uc3QKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1RvU2NyZWVuKGNv
bnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUlu
dFBvaW50IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0CitMYXlvdXRQb2ludCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRv
Q29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIHJldHVybiBwb2lu
dDsKIH0KQEAgLTEzNjQsNyArMTM2NSw3IEBAIGJvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3Jv
bGwoU2Nyb2xsRGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybVJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIC8qbm93Ki8p
Cit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3Qg
TGF5b3V0UmVjdCYsIGJvb2wgLypub3cqLykKIHsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>