<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>164048</bug_id>
          
          <creation_ts>2008-06-14 12:48:59 +0000</creation_ts>
          <short_desc>[PATCH] Multi-monitor Desktop Grid</short_desc>
          <delta_ts>2008-07-29 16:40:57 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Plasma</classification>
          <product>kwin</product>
          <component>compositing</component>
          <version>unspecified</version>
          <rep_platform>Compiled Sources</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>wishlist</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>lucas</reporter>
          <assigned_to name="KWin default assignee">kwin-bugs-null</assigned_to>
          
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>611200</commentid>
    <comment_count>0</comment_count>
    <who name="">lucas</who>
    <bug_when>2008-06-14 12:48:59 +0000</bug_when>
    <thetext>Version:            (using Devel)
Installed from:    Compiled sources

Approximately half the effect needed to be rewritten (Mostly window handling stuff) so the patch file itself is kinda complex, but at least the effect is now usable on multi-monitor setups. Requires the effects-&gt;screenGeometry() and effects-&gt;addRepaint(QRegion) patches that were sent to the mailing list yesterday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611205</commentid>
    <comment_count>1</comment_count>
      <attachid>25330</attachid>
    <who name="">lucas</who>
    <bug_when>2008-06-14 12:51:27 +0000</bug_when>
    <thetext>Created attachment 25330
Patch file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612899</commentid>
    <comment_count>2</comment_count>
      <attachid>25415</attachid>
    <who name="">lucas</who>
    <bug_when>2008-06-17 17:47:11 +0000</bug_when>
    <thetext>Created attachment 25415
Patch file, r2

Replaced screenGeometry() with clientArea()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624554</commentid>
    <comment_count>3</comment_count>
      <attachid>26111</attachid>
    <who name="">lucas</who>
    <bug_when>2008-07-14 16:05:43 +0000</bug_when>
    <thetext>Created attachment 26111
Patch file, r3

- Removed whitespace changes
- Fixed unscalePos() so that it returns the correct desktop on non-square grids

- When clicking on black space activate the highlighted desktop, not desktop 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630469</commentid>
    <comment_count>4</comment_count>
    <who name="">lucas</who>
    <bug_when>2008-07-29 16:40:57 +0000</bug_when>
    <thetext>Patches above do not reach quality standards. Will post a WindowQuadList optimized version to the mailing list sometime soon.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25330</attachid>
            <date>2008-06-14 12:51:27 +0000</date>
            <delta_ts>2008-06-17 17:47:11 +0000</delta_ts>
            <desc>Patch file</desc>
            <filename>desktopgrid_multi-monitor.diff</filename>
            <type>text/plain</type>
            <size>22649</size>
            <attacher>lucas</attacher>
            
              <data encoding="base64">SW5kZXg6IGVmZmVjdHMvZGVza3RvcGdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZmZlY3RzL2Rlc2t0
b3BncmlkLmgJKHJldmlzaW9uIDgyMDQ0MCkKKysrIGVmZmVjdHMvZGVza3RvcGdyaWQuaAkod29y
a2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QuCgogQ29weXJpZ2h0IChDKSAyMDA3IEx1Ym9zIEx1bmFrIDxsLmx1bmFrQGtkZS5v
cmc+CitDb3B5cmlnaHQgKEMpIDIwMDggTHVjYXMgTXVycmF5IDxhZG1pbkB1bmRlZmluZWRmaXJl
LmNvbT4KCiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ4LDE0ICs0OSwxNiBAQCBjbGFz
cyBEZXNrdG9wR3JpZEVmZmVjdAogICAgICAgICB2b2lkIHRvZ2dsZSgpOwogICAgIHByaXZhdGU6
CiAgICAgICAgIFFSZWN0IGRlc2t0b3BSZWN0KCBpbnQgZGVza3RvcCwgYm9vbCBzY2FsZWQgKSBj
b25zdDsKKyAgICAgICAgUVJlY3Qgc2NyZWVuUmVjdCggaW50IGRlc2t0b3AsIGludCBzY3JlZW4s
IGJvb2wgc2NhbGVkLCBib29sIG1hc2sgPSB0cnVlICkgY29uc3Q7CisgICAgICAgIFFQb2ludCB1
bnNjYWxlUG9zKCBjb25zdCBRUG9pbnQmIHBvcywgaW50KiBkZXNrdG9wID0gTlVMTCwgYm9vbCBv
bkdyaWQgPSB0cnVlICkgY29uc3Q7CiAgICAgICAgIGludCBwb3NUb0Rlc2t0b3AoIGNvbnN0IFFQ
b2ludCYgcG9zICkgY29uc3Q7Ci0gICAgICAgIFFSZWN0IHdpbmRvd1JlY3QoIEVmZmVjdFdpbmRv
dyogdyApIGNvbnN0OyAvLyByZXR1cm5zIGFsd2F5cyBzY2FsZWQKLSAgICAgICAgRWZmZWN0V2lu
ZG93KiB3aW5kb3dBdCggY29uc3QgUVBvaW50JiBwb3MsIFFSZWN0KiByZWN0ID0gTlVMTCApIGNv
bnN0OworICAgICAgICBRUmVnaW9uIHdpbmRvd1JlZ2lvbiggRWZmZWN0V2luZG93KiB3ICkgY29u
c3Q7CisgICAgICAgIEVmZmVjdFdpbmRvdyogd2luZG93QXQoIGNvbnN0IFFQb2ludCYgcG9zICkg
Y29uc3Q7CiAgICAgICAgIHZvaWQgc2V0QWN0aXZlKCBib29sIGFjdGl2ZSApOwogICAgICAgICB2
b2lkIHNldHVwKCk7CiAgICAgICAgIHZvaWQgZmluaXNoKCk7CiAgICAgICAgIHZvaWQgcGFpbnRT
bGlkZSggaW50IG1hc2ssIFFSZWdpb24gcmVnaW9uLCBjb25zdCBTY3JlZW5QYWludERhdGEmIGRh
dGEgKTsKLSAgICAgICAgdm9pZCBwYWludFNjcmVlbkRlc2t0b3AoIGludCBkZXNrdG9wLCBpbnQg
bWFzaywgUVJlZ2lvbiByZWdpb24sIFNjcmVlblBhaW50RGF0YSBkYXRhICk7CisgICAgICAgIHZv
aWQgcGFpbnRTY3JlZW5EZXNrdG9wKCBpbnQgZGVza3RvcCwgaW50IHNjcmVlbiwgaW50IG1hc2ss
IFFSZWdpb24gcmVnaW9uLCBTY3JlZW5QYWludERhdGEgZGF0YSApOwogICAgICAgICB2b2lkIHNs
aWRlRGVza3RvcENoYW5nZWQoIGludCBvbGQgKTsKICAgICAgICAgdm9pZCBzZXRIaWdobGlnaHRl
ZERlc2t0b3AoIGludCBkZXNrdG9wICk7CiAgICAgICAgIGJvb2wgYWN0aXZhdGVkOwpAQCAtNjcs
MTQgKzcwLDEyIEBAIGNsYXNzIERlc2t0b3BHcmlkRWZmZWN0CiAgICAgICAgIGJvb2wgd2FzX3dp
bmRvd19tb3ZlOwogICAgICAgICBFZmZlY3RXaW5kb3cqIHdpbmRvd19tb3ZlOwogICAgICAgICBR
UG9pbnQgd2luZG93X21vdmVfZGlmZjsKLSAgICAgICAgUVBvaW50IHdpbmRvd19tb3ZlX3BvczsK
ICAgICAgICAgYm9vbCBzbGlkZUVuYWJsZWQ7CiAgICAgICAgIGJvb2wgc2xpZGU7CiAgICAgICAg
IFFQb2ludCBzbGlkZV9zdGFydF9wb3M7CiAgICAgICAgIGJvb2wgc2xpZGVfcGFpbnRpbmdfc3Rp
Y2t5OwogICAgICAgICBRUG9pbnQgc2xpZGVfcGFpbnRpbmdfZGlmZjsKICAgICAgICAgRWxlY3Ry
aWNCb3JkZXIgYm9yZGVyQWN0aXZhdGU7Ci0KICAgICB9OwoKIH0gLy8gbmFtZXNwYWNlCkluZGV4
OiBlZmZlY3RzL2Rlc2t0b3BncmlkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZmZlY3RzL2Rlc2t0b3Bn
cmlkLmNwcAkocmV2aXNpb24gODIwNDQwKQorKysgZWZmZWN0cy9kZXNrdG9wZ3JpZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0LgoKIENvcHlyaWdodCAoQykgMjAwNyBMdWJvcyBMdW5hayA8bC5sdW5ha0BrZGUu
b3JnPgorQ29weXJpZ2h0IChDKSAyMDA4IEx1Y2FzIE11cnJheSA8YWRtaW5AdW5kZWZpbmVkZmly
ZS5jb20+CgogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00MCw2ICs0Myw3IEBAIERlc2t0
b3BHcmlkRWZmZWN0OjpEZXNrdG9wR3JpZEVmZmVjdCgpCiAgICAgLCBrZXlib2FyZF9ncmFiKCBm
YWxzZSApCiAgICAgLCB3YXNfd2luZG93X21vdmUoIGZhbHNlICkKICAgICAsIHdpbmRvd19tb3Zl
KCBOVUxMICkKKyAgICAsIHdpbmRvd19tb3ZlX2RpZmYoKQogICAgICwgc2xpZGUoIGZhbHNlICkK
ICAgICB7CiAgICAgS0FjdGlvbkNvbGxlY3Rpb24qIGFjdGlvbkNvbGxlY3Rpb24gPSBuZXcgS0Fj
dGlvbkNvbGxlY3Rpb24oIHRoaXMgKTsKQEAgLTExNCwxMiArMTE4LDYgQEAgdm9pZCBEZXNrdG9w
R3JpZEVmZmVjdDo6cHJlUGFpbnRXaW5kb3coCiAgICAgICAgICAgICB3LT5lbmFibGVQYWludGlu
ZyggRWZmZWN0V2luZG93OjpQQUlOVF9ESVNBQkxFRF9CWV9ERVNLVE9QICk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHctPmRpc2FibGVQYWludGluZyggRWZmZWN0V2luZG93OjpQQUlOVF9E
SVNBQkxFRF9CWV9ERVNLVE9QICk7Ci0gICAgICAgIGlmKCB3ID09IHdpbmRvd19tb3ZlICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIGRhdGEuc2V0VHJhbnNmb3JtZWQoKTsKLSAgICAgICAg
ICAgIGlmKCB3LT5pc09uQWxsRGVza3RvcHMoKSAmJiBwYWludGluZ19kZXNrdG9wICE9IHBvc1Rv
RGVza3RvcCggd2luZG93X21vdmVfcG9zIC0gd2luZG93X21vdmVfZGlmZiApKQotICAgICAgICAg
ICAgICAgIHctPmRpc2FibGVQYWludGluZyggRWZmZWN0V2luZG93OjpQQUlOVF9ESVNBQkxFRF9C
WV9ERVNLVE9QICk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICBlZmZlY3RzLT5wcmVQ
YWludFdpbmRvdyggdywgZGF0YSwgdGltZSApOwogICAgIH0KQEAgLTEzNiwzNCArMTM0LDY0IEBA
IHZvaWQgRGVza3RvcEdyaWRFZmZlY3Q6OnBhaW50U2NyZWVuKCBpbnQKICAgICAgICAgcGFpbnRT
bGlkZSggbWFzaywgcmVnaW9uLCBkYXRhICk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgIGludCBkZXNrdG9wX3dpdGhfbW92ZSA9IC0xOwotICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBO
VUxMICkKLSAgICAgICAgZGVza3RvcF93aXRoX21vdmUgPSB3aW5kb3dfbW92ZS0+aXNPbkFsbERl
c2t0b3BzKCkKLSAgICAgICAgICAgID8gcG9zVG9EZXNrdG9wKCB3aW5kb3dfbW92ZV9wb3MgLSB3
aW5kb3dfbW92ZV9kaWZmICkgOiB3aW5kb3dfbW92ZS0+ZGVza3RvcCgpOwotICAgIGZvciggaW50
IGRlc2t0b3AgPSAxOwotICAgICAgICAgZGVza3RvcCA8PSBlZmZlY3RzLT5udW1iZXJPZkRlc2t0
b3BzKCk7Ci0gICAgICAgICArK2Rlc2t0b3AgKQorICAgIGZvciggaW50IHNjcmVlbiA9IDA7IHNj
cmVlbiA8IGVmZmVjdHMtPm51bVNjcmVlbnMoKTsgc2NyZWVuKysgKQogICAgICAgICB7Ci0gICAg
ICAgIGlmKCBkZXNrdG9wICE9IGRlc2t0b3Bfd2l0aF9tb3ZlICkKKyAgICAgICAgUVJlY3Qgc2Ny
ZWVuR2VvRnVsbCA9IHNjcmVlblJlY3QoIDEsIHNjcmVlbiwgZmFsc2UgKTsgLy8gRWZmZWN0IGFs
d2F5cyBvbiBkZXNrdG9wIDEKKyAgICAgICAgZm9yKCBpbnQgZGVza3RvcCA9IDE7IGRlc2t0b3Ag
PD0gZWZmZWN0cy0+bnVtYmVyT2ZEZXNrdG9wcygpOyBkZXNrdG9wKysgKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgUGFpbnRDbGlwcGVyIHBjKCBkZXNrdG9wUmVjdCggZGVza3RvcCwgdHJ1
ZSApKTsKLSAgICAgICAgICAgIHBhaW50U2NyZWVuRGVza3RvcCggZGVza3RvcCwgbWFzaywgcmVn
aW9uLCBkYXRhICk7CisgICAgICAgICAgICBpZiggIXdpbmRvd19tb3ZlIHx8ICggd2luZG93X21v
dmUgJiYgZGVza3RvcCAhPSB3aW5kb3dfbW92ZS0+ZGVza3RvcCgpICkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFBhaW50Q2xpcHBlciBwYyggc2NyZWVuR2VvRnVsbCAmIHNj
cmVlblJlY3QoIGRlc2t0b3AsIHNjcmVlbiwgdHJ1ZSApKTsKKyAgICAgICAgICAgICAgICBwYWlu
dFNjcmVlbkRlc2t0b3AoIGRlc2t0b3AsIHNjcmVlbiwgbWFzaywgcmVnaW9uLCBkYXRhICk7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgLy8gcGFpbnQg
dGhlIGRlc2t0b3Agd2l0aCB0aGUgd2luZG93IGJlaW5nIG1vdmVkIGFzIHRoZSBsYXN0IG9uZSwg
aS5lLiBvbiB0b3Agb2Ygb3RoZXJzCi0gICAgaWYoIGRlc2t0b3Bfd2l0aF9tb3ZlICE9IC0xICkK
LSAgICAgICAgewotICAgICAgICBRUmVnaW9uIHBhaW50cmVnID0gZGVza3RvcFJlY3QoIGRlc2t0
b3Bfd2l0aF9tb3ZlLCB0cnVlICk7IC8vIHBhaW50IG9ubHkgdGhlIGRlc2t0b3AKLSAgICAgICAg
cGFpbnRyZWcgfD0gd2luZG93UmVjdCggd2luZG93X21vdmUgKTsgLy8gYW5kIHdoZXJldmVyIHRo
ZSBtb3ZlZCB3aW5kb3cgaXMKLSAgICAgICAgUGFpbnRDbGlwcGVyIHBjKCBwYWludHJlZyApOwot
ICAgICAgICBwYWludFNjcmVlbkRlc2t0b3AoIGRlc2t0b3Bfd2l0aF9tb3ZlLCBtYXNrLCByZWdp
b24sIGRhdGEgKTsKKyAgICBpZiggd2luZG93X21vdmUgKQorICAgICAgICB7IC8vIEFsd2F5cyBw
YWludCB0aGUgZGVza3RvcCB3aXRoIHRoZSBtb3Zpbmcgd2luZG93IGxhc3QKKyAgICAgICAgZm9y
KCBpbnQgc2NyZWVuID0gMDsgc2NyZWVuIDwgZWZmZWN0cy0+bnVtU2NyZWVucygpOyBzY3JlZW4r
KyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBRUmVjdCBzY3JlZW5HZW9GdWxsID0gc2Ny
ZWVuUmVjdCggMSwgc2NyZWVuLCBmYWxzZSApOyAvLyBFZmZlY3QgYWx3YXlzIG9uIGRlc2t0b3Ag
MQorICAgICAgICAgICAgUVJlY3Qgc2NyZWVuR2VvID0gZWZmZWN0cy0+c2NyZWVuR2VvbWV0cnko
IHNjcmVlbiApOworICAgICAgICAgICAgaW50IGRlc2t0b3AgPSB3aW5kb3dfbW92ZS0+ZGVza3Rv
cCgpOworCisgICAgICAgICAgICAvLyBPbmx5IGFkZCB3aW5kb3cgbWFzayBvbiB0aGUgc2NyZWVu
IHdpdGggdGhlIG1vdXNlIHBvaW50ZXIKKyAgICAgICAgICAgIGlmKCBzY3JlZW5HZW8uY29udGFp
bnMoIHdpbmRvd19tb3ZlLT5wb3MoKSAtIHdpbmRvd19tb3ZlX2RpZmYgKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaW50IHgsIHksIGd4LCBneTsKKyAgICAgICAgICAgICAg
ICBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgICAgICAgICAgZWZmZWN0cy0+
Y2FsY0Rlc2t0b3BMYXlvdXQoICZ4LCAmeSwgJm9yaWVudGF0aW9uICk7CisgICAgICAgICAgICAg
ICAgaWYoIG9yaWVudGF0aW9uID09IFF0OjpIb3Jpem9udGFsICkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBneCA9ICggZGVza3RvcCAtIDEgKSAlIHg7CisgICAg
ICAgICAgICAgICAgICAgIGd5ID0gKCBkZXNrdG9wIC0gMSApIC8geDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBneCA9ICggZGVza3RvcCAtIDEgKSAvIHk7CisgICAgICAgICAgICAg
ICAgICAgIGd5ID0gKCBkZXNrdG9wIC0gMSApICUgeTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgUVJlZ2lvbiB3aW5kb3dSZWcoCisgICAgICAgICAgICAgICAgICAg
IHNjcmVlbkdlby54KCkgKyAoIHNjcmVlbkdlby53aWR0aCgpICogZ3ggKyB3aW5kb3dfbW92ZS0+
eCgpIC0gc2NyZWVuR2VvLngoKSApIC8geCwKKyAgICAgICAgICAgICAgICAgICAgc2NyZWVuR2Vv
LnkoKSArICggc2NyZWVuR2VvLmhlaWdodCgpICogZ3kgKyB3aW5kb3dfbW92ZS0+eSgpIC0gc2Ny
ZWVuR2VvLnkoKSApIC8geSwKKyAgICAgICAgICAgICAgICAgICAgd2luZG93X21vdmUtPndpZHRo
KCkgLyB4LCB3aW5kb3dfbW92ZS0+aGVpZ2h0KCkgLyB5ICk7CisKKyAgICAgICAgICAgICAgICBQ
YWludENsaXBwZXIgcGMoIHdpbmRvd1JlZyB8ICggc2NyZWVuR2VvRnVsbCAmIHNjcmVlblJlY3Qo
IGRlc2t0b3AsIHNjcmVlbiwgdHJ1ZSApKSk7CisgICAgICAgICAgICAgICAgcGFpbnRTY3JlZW5E
ZXNrdG9wKCBkZXNrdG9wLCBzY3JlZW4sIG1hc2ssIHJlZ2lvbiwgZGF0YSApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgUGFpbnRDbGlwcGVyIHBjKCBzY3JlZW5HZW9GdWxsICYgc2NyZWVuUmVjdCggZGVza3Rv
cCwgc2NyZWVuLCB0cnVlICkpOworICAgICAgICAgICAgICAgIHBhaW50U2NyZWVuRGVza3RvcCgg
ZGVza3RvcCwgc2NyZWVuLCBtYXNrLCByZWdpb24sIGRhdGEgKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Cgotdm9pZCBEZXNrdG9wR3JpZEVmZmVj
dDo6cGFpbnRTY3JlZW5EZXNrdG9wKCBpbnQgZGVza3RvcCwgaW50IG1hc2ssIFFSZWdpb24gcmVn
aW9uLCBTY3JlZW5QYWludERhdGEgZGF0YSApCit2b2lkIERlc2t0b3BHcmlkRWZmZWN0OjpwYWlu
dFNjcmVlbkRlc2t0b3AoIGludCBkZXNrdG9wLCBpbnQgc2NyZWVuLCBpbnQgbWFzaywgUVJlZ2lv
biByZWdpb24sIFNjcmVlblBhaW50RGF0YSBkYXRhICkKICAgICB7Ci0gICAgUVJlY3QgcmVjdCA9
IGRlc2t0b3BSZWN0KCBkZXNrdG9wLCB0cnVlICk7Ci0gICAgaWYoIHJlZ2lvbi5jb250YWlucygg
cmVjdCApKSAvLyB0aGlzIGRlc2t0b3AgbmVlZHMgcGFpbnRpbmcKKyAgICBRUmVjdCByZWN0ID0g
c2NyZWVuUmVjdCggZGVza3RvcCwgc2NyZWVuLCB0cnVlLCBmYWxzZSApOworICAgIGlmKCByZWdp
b24uY29udGFpbnMoIHJlY3QgKSkgLy8gdGhpcyBzY3JlZW4gbmVlZHMgcGFpbnRpbmcKICAgICAg
ICAgewogICAgICAgICBwYWludGluZ19kZXNrdG9wID0gZGVza3RvcDsKICAgICAgICAgU2NyZWVu
UGFpbnREYXRhIGQgPSBkYXRhOwpAQCAtMjU3LDIxICsyODUsOSBAQCB2b2lkIERlc2t0b3BHcmlk
RWZmZWN0OjpwYWludFdpbmRvdyggRWZmCiAgICAgICAgICAgICBkYXRhLnlUcmFuc2xhdGUgLT0g
c2xpZGVfcGFpbnRpbmdfZGlmZi55KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICBl
bHNlIGlmKCBtVGltZUxpbmUudmFsdWUoKSAhPSAwICkKLSAgICAgICAgewotICAgICAgICBpZigg
dyA9PSB3aW5kb3dfbW92ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCwgeTsK
LSAgICAgICAgICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICAgICAgICAgIGVm
ZmVjdHMtPmNhbGNEZXNrdG9wTGF5b3V0KCAmeCwgJnksICZvcmllbnRhdGlvbiApOwotICAgICAg
ICAgICAgUVJlY3QgZGVza3RvcCA9IGRlc2t0b3BSZWN0KCBwYWludGluZ19kZXNrdG9wLCBmYWxz
ZSApOwotICAgICAgICAgICAgZGF0YS54VHJhbnNsYXRlICs9IHdpbmRvd19tb3ZlX3Bvcy54KCkg
KiB4IC0gKCBkZXNrdG9wLngoKSArIHctPngoKSk7Ci0gICAgICAgICAgICBkYXRhLnlUcmFuc2xh
dGUgKz0gd2luZG93X21vdmVfcG9zLnkoKSAqIHkgLSAoIGRlc2t0b3AueSgpICsgdy0+eSgpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggcGFpbnRpbmdfZGVza3RvcCAhPSBoaWdo
bGlnaHRlZF9kZXNrdG9wICkKLSAgICAgICAgICAgIGRhdGEuYnJpZ2h0bmVzcyAqPSAwLjc7Ci0g
ICAgICAgIH0KLSAgICBlZmZlY3RzLT5wYWludFdpbmRvdyggdywgbWFzaywgcmVnaW9uLCBkYXRh
ICk7CisgICAgZWxzZSBpZiggbVRpbWVMaW5lLnZhbHVlKCkgIT0gMCAmJiBwYWludGluZ19kZXNr
dG9wICE9IGhpZ2hsaWdodGVkX2Rlc2t0b3AgKQorICAgICAgICBkYXRhLmJyaWdodG5lc3MgKj0g
MC43OyAvLyBUT0RPOiBXaW5kb3dzIG9uIGFsbCBkZXNrdG9wcyBmbGlja2VyLCBtYXkgbmVlZCBB
UEkgY2hhbmdlCisgICAgZWZmZWN0cy0+cGFpbnRXaW5kb3coIHcsIG1hc2ssIHJlZ2lvbiwgZGF0
YSApOwogICAgIH0KCiB2b2lkIERlc2t0b3BHcmlkRWZmZWN0Ojpwb3N0UGFpbnRTY3JlZW4oKQpA
QCAtMzA4LDM5ICszMjQsMTY3IEBAIFFSZWN0IERlc2t0b3BHcmlkRWZmZWN0OjpkZXNrdG9wUmVj
dCggaW4KICAgICByZXR1cm4gcmVjdDsKICAgICB9CgotaW50IERlc2t0b3BHcmlkRWZmZWN0Ojpw
b3NUb0Rlc2t0b3AoIGNvbnN0IFFQb2ludCYgcG9zICkgY29uc3QKKy8vIEdpdmVzIGEgcG9zaXRp
b24gb2YgdGhlIGdpdmVuIGRlc2t0b3Agc2NyZWVuIHdoZW4gYWxsIGRlc2t0b3BzIGFyZSBhcnJh
bmdlZCBpbiBhIGdyaWQKKy8vIFRoaXMgaXMgZGlmZmVyZW50IHRvIGRlc2t0b3BSZWN0IGFzIGl0
IHRha2VzIGludG8gYWNjb3VudCBlYWNoIHNjcmVlbiByZWxhdGl2ZSBwb3NpdGlvbiBzZXBlcmF0
ZWx5CitRUmVjdCBEZXNrdG9wR3JpZEVmZmVjdDo6c2NyZWVuUmVjdCggaW50IGRlc2t0b3AsIGlu
dCBzY3JlZW4sIGJvb2wgc2NhbGVkLCBib29sIG1hc2sgKSBjb25zdAogICAgIHsKLSAgICBmb3Io
IGludCBkZXNrdG9wID0gMTsgLy8gVE9ETyBjb3VsZCBiZSBwZXJoYXBzIG9wdGltaXplZAotICAg
ICAgICAgZGVza3RvcCA8PSBlZmZlY3RzLT5udW1iZXJPZkRlc2t0b3BzKCk7Ci0gICAgICAgICAr
K2Rlc2t0b3AgKQorICAgIGludCB4LCB5LCBneCwgZ3ksIGNneCwgY2d5OworICAgIFF0OjpPcmll
bnRhdGlvbiBvcmllbnRhdGlvbjsKKyAgICBlZmZlY3RzLT5jYWxjRGVza3RvcExheW91dCggJngs
ICZ5LCAmb3JpZW50YXRpb24gKTsKKworICAgIC8vIEdldCBjaG9zZW4gZGVza3RvcCdzIGdyaWQg
bG9jYXRpb24KKyAgICAtLWRlc2t0b3A7CisgICAgaWYoIG9yaWVudGF0aW9uID09IFF0OjpIb3Jp
em9udGFsICkKKyAgICAgICAgeworICAgICAgICBneCA9IGRlc2t0b3AgJSB4OworICAgICAgICBn
eSA9IGRlc2t0b3AgLyB4OworICAgICAgICB9CisgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
IGd4ID0gZGVza3RvcCAvIHk7CisgICAgICAgIGd5ID0gZGVza3RvcCAlIHk7CisgICAgICAgIH0K
KworICAgIFFSZWN0IHNjcmVlbkdlbyA9IGVmZmVjdHMtPnNjcmVlbkdlb21ldHJ5KCBzY3JlZW4g
KTsKKyAgICBRUmVjdCByZWN0OworICAgIGlmKCAhc2NhbGVkICkKKyAgICAgICAgeworICAgICAg
ICBpZiggbWFzayApCisgICAgICAgICAgICByZWN0ID0gUVJlY3QoIGd4ICogZGlzcGxheVdpZHRo
KCkgKyBzY3JlZW5HZW8ueCgpLCBneSAqIGRpc3BsYXlIZWlnaHQoKSArIHNjcmVlbkdlby55KCks
CisgICAgICAgICAgICAgICAgc2NyZWVuR2VvLndpZHRoKCksIHNjcmVlbkdlby5oZWlnaHQoKSAp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN0ID0gUVJlY3QoIGd4ICogZGlzcGxheVdp
ZHRoKCksIGd5ICogZGlzcGxheUhlaWdodCgpLAorICAgICAgICAgICAgICAgIGRpc3BsYXlXaWR0
aCgpLCBkaXNwbGF5SGVpZ2h0KCkgKTsKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIH0K
KworICAgIC8vIEdldCBjdXJyZW50IGRlc2t0b3AncyBncmlkIGxvY2F0aW9uIGFzIHdlbGwgYXMg
dmlydHVhbCBwb3NpdGlvbgorICAgIGRlc2t0b3AgPSBlZmZlY3RzLT5jdXJyZW50RGVza3RvcCgp
IC0gMTsKKyAgICBpZiggb3JpZW50YXRpb24gPT0gUXQ6Okhvcml6b250YWwgKQorICAgICAgICB7
CisgICAgICAgIGNneCA9IGRlc2t0b3AgJSB4OworICAgICAgICBjZ3kgPSBkZXNrdG9wIC8geDsK
KyAgICAgICAgfQorICAgIGVsc2UKICAgICAgICAgewotICAgICAgICBpZiggZGVza3RvcFJlY3Qo
IGRlc2t0b3AsIHRydWUgKS5jb250YWlucyggcG9zICkpCi0gICAgICAgICAgICByZXR1cm4gZGVz
a3RvcDsKKyAgICAgICAgY2d4ID0gZGVza3RvcCAvIHk7CisgICAgICAgIGNneSA9IGRlc2t0b3Ag
JSB5OwogICAgICAgICB9Ci0gICAgcmV0dXJuIDA7CisKKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSBt
VGltZUxpbmUudmFsdWUoKTsKKyAgICBpZiggbWFzayApIC8vIFZpc2libGUgcGFydCBvZiB0aGUg
c2NyZWVuIHRoYXQgaXMgdG8gYmUgcGFpbnRlZAorICAgICAgICByZWN0ID0gUVJlY3QoCisgICAg
ICAgICAgICBxUm91bmQoIGludGVycG9sYXRlKAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby54
KCkgKyBzY3JlZW5HZW8ud2lkdGgoKSAqIGd4IC0gc2NyZWVuR2VvLndpZHRoKCkgKiBjZ3gsCisg
ICAgICAgICAgICAgICAgc2NyZWVuR2VvLngoKSArIHNjcmVlbkdlby53aWR0aCgpICogZ3ggLyB4
LAorICAgICAgICAgICAgcHJvZ3Jlc3MgKSksIHFSb3VuZCggaW50ZXJwb2xhdGUoCisgICAgICAg
ICAgICAgICAgc2NyZWVuR2VvLnkoKSArIHNjcmVlbkdlby5oZWlnaHQoKSAqIGd5IC0gc2NyZWVu
R2VvLmhlaWdodCgpICogY2d5LAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby55KCkgKyBzY3Jl
ZW5HZW8uaGVpZ2h0KCkgKiBneSAvIHksCisgICAgICAgICAgICBwcm9ncmVzcyApKSwKKyAgICAg
ICAgICAgIHFSb3VuZCggaW50ZXJwb2xhdGUoIHNjcmVlbkdlby53aWR0aCgpLCAgc2NyZWVuR2Vv
LndpZHRoKCkgIC8geCwgcHJvZ3Jlc3MgKSksCisgICAgICAgICAgICBxUm91bmQoIGludGVycG9s
YXRlKCBzY3JlZW5HZW8uaGVpZ2h0KCksIHNjcmVlbkdlby5oZWlnaHQoKSAvIHksIHByb2dyZXNz
ICkpKTsKKyAgICBlbHNlIC8vIEFjdHVhbCBwb3NpdGlvbiBvZiB3aGVyZSB0aGUgZW50aXJlIGRl
c2t0b3AgbmVlZHMgdG8gYmUgcGFpbnRlZAorICAgICAgICAgLy8gVE9ETzogTWF5YmUgYWRkIGFu
IEFQSSBmdW5jdGlvbiB0aGF0IG9ubHkgcGFpbnRzIGEgc2luZ2xlIHNjcmVlbiBvZiB0aGUgZGVz
a3RvcCB0byBiZWdpbiB3aXRoCisgICAgICAgIHJlY3QgPSBRUmVjdCgKKyAgICAgICAgICAgIHFS
b3VuZCggaW50ZXJwb2xhdGUoCisgICAgICAgICAgICAgICAgc2NyZWVuR2VvLndpZHRoKCkgKiBn
eCAtIHNjcmVlbkdlby53aWR0aCgpICogY2d4LAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby54
KCkgKyAoIHNjcmVlbkdlby53aWR0aCgpICogZ3ggLSBzY3JlZW5HZW8ueCgpICkgLyB4LAorICAg
ICAgICAgICAgcHJvZ3Jlc3MgKSksIHFSb3VuZCggaW50ZXJwb2xhdGUoCisgICAgICAgICAgICAg
ICAgc2NyZWVuR2VvLmhlaWdodCgpICogZ3kgLSBzY3JlZW5HZW8uaGVpZ2h0KCkgKiBjZ3ksCisg
ICAgICAgICAgICAgICAgc2NyZWVuR2VvLnkoKSArICggc2NyZWVuR2VvLmhlaWdodCgpICogZ3kg
LSBzY3JlZW5HZW8ueSgpICkgLyB5LAorICAgICAgICAgICAgcHJvZ3Jlc3MgKSksCisgICAgICAg
ICAgICBxUm91bmQoIGludGVycG9sYXRlKCBkaXNwbGF5V2lkdGgoKSwgIGRpc3BsYXlXaWR0aCgp
ICAvIHgsIHByb2dyZXNzICkpLAorICAgICAgICAgICAgcVJvdW5kKCBpbnRlcnBvbGF0ZSggZGlz
cGxheUhlaWdodCgpLCBkaXNwbGF5SGVpZ2h0KCkgLyB5LCBwcm9ncmVzcyApKSk7CisgICAgcmV0
dXJuIHJlY3Q7CiAgICAgfQoKLVFSZWN0IERlc2t0b3BHcmlkRWZmZWN0Ojp3aW5kb3dSZWN0KCBF
ZmZlY3RXaW5kb3cqIHcgKSBjb25zdAorLy8gRGV0cmFuc2Zvcm0gYSBwb2ludCB0byBpdHMgcG9z
aXRpb24gb24gdGhlIGZ1bGwgZ3JpZAorUVBvaW50IERlc2t0b3BHcmlkRWZmZWN0Ojp1bnNjYWxl
UG9zKCBjb25zdCBRUG9pbnQmIHBvcywgaW50KiBkZXNrdG9wLCBib29sIG9uR3JpZCApIGNvbnN0
CiAgICAgeworICAgIGludCBzY3JlZW47CisgICAgUVJlY3Qgc2NyZWVuUmVjdDsKKyAgICBmb3Io
IHNjcmVlbiA9IDA7IHNjcmVlbiA8IGVmZmVjdHMtPm51bVNjcmVlbnMoKTsgc2NyZWVuKysgKQor
ICAgICAgICB7CisgICAgICAgIHNjcmVlblJlY3QgPSBlZmZlY3RzLT5zY3JlZW5HZW9tZXRyeSgg
c2NyZWVuICk7CisgICAgICAgIGlmKCBzY3JlZW5SZWN0LmNvbnRhaW5zKCBwb3MgKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICBpbnQgeCwgeTsKICAgICBRdDo6T3JpZW50
YXRpb24gb3JpZW50YXRpb247CiAgICAgZWZmZWN0cy0+Y2FsY0Rlc2t0b3BMYXlvdXQoICZ4LCAm
eSwgJm9yaWVudGF0aW9uICk7Ci0gICAgaWYoIHcgPT0gd2luZG93X21vdmUgKSAvLyBpdCdzIGJl
aW5nIG1vdmVkLCByZXR1cm4gbW92ZWQgcG9zaXRpb24KLSAgICAgICAgcmV0dXJuIFFSZWN0KCB3
aW5kb3dfbW92ZV9wb3MsIFFTaXplKCB3LT53aWR0aCgpIC8geCwgdy0+aGVpZ2h0KCkgLyB5ICkp
OwotICAgIFFSZWN0IGRlc2t0b3AgPSBkZXNrdG9wUmVjdCggdy0+aXNPbkN1cnJlbnREZXNrdG9w
KCkKLSAgICAgICAgPyBlZmZlY3RzLT5jdXJyZW50RGVza3RvcCgpIDogdy0+ZGVza3RvcCgpLCB0
cnVlICk7Ci0gICAgcmV0dXJuIFFSZWN0KCBkZXNrdG9wLngoKSArIHctPngoKSAvIHgsIGRlc2t0
b3AueSgpICsgdy0+eSgpIC8geSwKLSAgICAgICAgdy0+d2lkdGgoKSAvIHgsIHctPmhlaWdodCgp
IC8geSApOworICAgIGludCBneCA9IGludCgoIHBvcy54KCkgLSBzY3JlZW5SZWN0LngoKSApIC8g
KCBzY3JlZW5SZWN0LndpZHRoKCkgLyB4ICkpOworICAgIGludCBneSA9IGludCgoIHBvcy55KCkg
LSBzY3JlZW5SZWN0LnkoKSApIC8gKCBzY3JlZW5SZWN0LmhlaWdodCgpIC8geSApKTsKKyAgICBp
ZiggZGVza3RvcCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICBpZiggb3JpZW50YXRpb24g
PT0gUXQ6Okhvcml6b250YWwgKQorICAgICAgICAgICAgKmRlc2t0b3AgPSBneSAqIHkgKyBneCAr
IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXNrdG9wID0gZ3ggKiB4ICsgZ3kgKyAx
OworICAgICAgICB9CisKKyAgICBpZiggb25HcmlkICkKKyAgICAgICAgcmV0dXJuIFFQb2ludCgK
KyAgICAgICAgICAgIHBvcy54KCkgKiB4ICsgKCBkaXNwbGF5V2lkdGgoKSAtIHNjcmVlblJlY3Qu
d2lkdGgoKSApICogZ3ggLSBzY3JlZW5SZWN0LngoKSwKKyAgICAgICAgICAgIHBvcy55KCkgKiB5
ICsgKCBkaXNwbGF5SGVpZ2h0KCkgLSBzY3JlZW5SZWN0LmhlaWdodCgpICkgKiBneSAtIHNjcmVl
blJlY3QueSgpICk7CisgICAgcmV0dXJuIFFQb2ludCgKKyAgICAgICAgcG9zLngoKSAqIHggLSBz
Y3JlZW5SZWN0LndpZHRoKCkgKiBneCAtIHNjcmVlblJlY3QueCgpLAorICAgICAgICBwb3MueSgp
ICogeSAtIHNjcmVlblJlY3QuaGVpZ2h0KCkgKiBneSAtIHNjcmVlblJlY3QueSgpICk7CiAgICAg
fQoKLUVmZmVjdFdpbmRvdyogRGVza3RvcEdyaWRFZmZlY3Q6OndpbmRvd0F0KCBjb25zdCBRUG9p
bnQmIHBvcywgUVJlY3QqIHJlY3QgKSBjb25zdAoraW50IERlc2t0b3BHcmlkRWZmZWN0Ojpwb3NU
b0Rlc2t0b3AoIGNvbnN0IFFQb2ludCYgcG9zICkgY29uc3QKKyAgICB7CisgICAgaW50IGRlc2t0
b3A7CisgICAgdW5zY2FsZVBvcyggcG9zLCAmZGVza3RvcCApOworICAgIHJldHVybiBkZXNrdG9w
OworICAgIH0KKworLy8gUmV0dXJucyB0aGUgc2VjdGlvbnMgb2YgdGhlIGRlc2t0b3Agd2hlcmUg
dGhlIHdpbmRvdyBpcyB2aXNpYmxlIHdoZW4gc2NhbGVkCisvLyBJcyBhIHJlZ2lvbiBhcyBpdCdz
IHBvc3NpYmxlIGZvciBwYXJ0cyBvZiBhIHdpbmRvdyB0byBiZSBvbiBzZXBlcmF0ZSBzY3JlZW5z
CitRUmVnaW9uIERlc2t0b3BHcmlkRWZmZWN0Ojp3aW5kb3dSZWdpb24oIEVmZmVjdFdpbmRvdyog
dyApIGNvbnN0CiAgICAgewotICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBOVUxMICYmIHdpbmRvd1Jl
Y3QoIHdpbmRvd19tb3ZlICkuY29udGFpbnMoIHBvcyApKQorICAgIGludCB4LCB5LCBneCwgZ3k7
CisgICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uOworICAgIGVmZmVjdHMtPmNhbGNEZXNr
dG9wTGF5b3V0KCAmeCwgJnksICZvcmllbnRhdGlvbiApOworCisgICAgLy8gVG8gcmV1c2UgY29k
ZSB3ZSBjaGVhdCBhIGJpdCwgaWYgb25seSBvbiBvbmUgZGVza3RvcCBsb29wIGV4ZWN1dGVzIG9u
Y2UKKyAgICBRUmVnaW9uIHJlZ2lvbjsKKyAgICBmb3IoIGludCBkZXNrdG9wID0gdy0+aXNPbkFs
bERlc2t0b3BzKCkgPyAwIDogdy0+ZGVza3RvcCgpIC0gMTsKKyAgICAgICAgIGRlc2t0b3AgPCBl
ZmZlY3RzLT5udW1iZXJPZkRlc2t0b3BzKCk7CisgICAgICAgICBkZXNrdG9wKysgKQogICAgICAg
ICB7Ci0gICAgICAgIGlmKCByZWN0ICE9IE5VTEwgKQotICAgICAgICAgICAgKnJlY3QgPSB3aW5k
b3dSZWN0KCB3aW5kb3dfbW92ZSApOwotICAgICAgICByZXR1cm4gd2luZG93X21vdmU7IC8vIGhh
cyBzcGVjaWFsIHBvc2l0aW9uIGFuZCBpcyBvbiB0b3AKKyAgICAgICAgLy8gR2V0IHdpbmRvdydz
IGRlc2t0b3AgZ3JpZCBsb2NhdGlvbgorICAgICAgICBpZiggb3JpZW50YXRpb24gPT0gUXQ6Okhv
cml6b250YWwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgZ3ggPSBkZXNrdG9wICUgeDsK
KyAgICAgICAgICAgIGd5ID0gZGVza3RvcCAvIHg7CisgICAgICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGd4ID0gZGVza3RvcCAvIHk7CisgICAgICAg
ICAgICBneSA9IGRlc2t0b3AgJSB5OworICAgICAgICAgICAgfQorCisgICAgICAgIGZvciggaW50
IHNjcmVlbiA9IDA7IHNjcmVlbiA8IGVmZmVjdHMtPm51bVNjcmVlbnMoKTsgc2NyZWVuKysgKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgUVJlY3Qgc2NyZWVuR2VvID0gZWZmZWN0cy0+c2Ny
ZWVuR2VvbWV0cnkoIHNjcmVlbiApOworICAgICAgICAgICAgUVJlY3Qgb25TY3JlZW4gPSBzY3Jl
ZW5HZW8gJiBRUmVjdCggdy0+eCgpLCB3LT55KCksIHctPndpZHRoKCksIHctPmhlaWdodCgpICk7
CisgICAgICAgICAgICBpZiggb25TY3JlZW4uaXNOdWxsKCkgKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgcmVnaW9uIHw9IFFSZWN0KAorICAgICAgICAgICAgICAgIHNj
cmVlbkdlby54KCkgKyAoIHNjcmVlbkdlby53aWR0aCgpICogZ3ggKyBvblNjcmVlbi54KCkgLSBz
Y3JlZW5HZW8ueCgpICkgLyB4LAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby55KCkgKyAoIHNj
cmVlbkdlby5oZWlnaHQoKSAqIGd5ICsgb25TY3JlZW4ueSgpIC0gc2NyZWVuR2VvLnkoKSApIC8g
eSwKKyAgICAgICAgICAgICAgICBvblNjcmVlbi53aWR0aCgpIC8geCwgb25TY3JlZW4uaGVpZ2h0
KCkgLyB5ICk7CisgICAgICAgICAgICB9CisgICAgICAgIGlmKCAhdy0+aXNPbkFsbERlc2t0b3Bz
KCkgKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICByZXR1cm4gcmVnaW9uOwor
ICAgIH0KKworRWZmZWN0V2luZG93KiBEZXNrdG9wR3JpZEVmZmVjdDo6d2luZG93QXQoIGNvbnN0
IFFQb2ludCYgcG9zICkgY29uc3QKKyAgICB7CisgICAgLy8gTGV0IHdpbmRvdyBsaXN0CiAgICAg
RWZmZWN0V2luZG93TGlzdCB3aW5kb3dzID0gZWZmZWN0cy0+c3RhY2tpbmdPcmRlcigpOwogICAg
IC8vIHFSZXZlcnNlKCkKICAgICBFZmZlY3RXaW5kb3dMaXN0OjpJdGVyYXRvciBiZWdpbiA9IHdp
bmRvd3MuYmVnaW4oKTsKQEAgLTM0OCwyMyArNDkyLDExIEBAIEVmZmVjdFdpbmRvdyogRGVza3Rv
cEdyaWRFZmZlY3Q6OndpbmRvd0EKICAgICAtLWVuZDsKICAgICB3aGlsZSggYmVnaW4gPCBlbmQg
KQogICAgICAgICBxU3dhcCggKmJlZ2luKyssICplbmQtLSApOwotICAgIGludCB4LCB5OwotICAg
IFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBlZmZlY3RzLT5jYWxjRGVza3RvcExh
eW91dCggJngsICZ5LCAmb3JpZW50YXRpb24gKTsKKworICAgIC8vIFRPRE86IENvdWxkIG9wdGlt
aXplIGJ5IHVzaW5nIHVuc2NhbGVQb3MoKQogICAgIGZvcmVhY2goIEVmZmVjdFdpbmRvdyogdywg
d2luZG93cyApCi0gICAgICAgIHsKLSAgICAgICAgLy8gZG9uJ3QgdXNlIHdpbmRvd1JlY3QoKSwg
dGFrZSBzcGVjaWFsIGNhcmUgb2Ygb24tYWxsLWRlc2t0b3Agd2luZG93cwotICAgICAgICBRUmVj
dCBkZXNrdG9wID0gZGVza3RvcFJlY3QoIHctPmlzT25BbGxEZXNrdG9wcygpCi0gICAgICAgICAg
ICA/IHBvc1RvRGVza3RvcCggcG9zICkgOiB3LT5kZXNrdG9wKCksIHRydWUgKTsKLSAgICAgICAg
UVJlY3QgciggZGVza3RvcC54KCkgKyB3LT54KCkgLyB4LCBkZXNrdG9wLnkoKSArIHctPnkoKSAv
IHksCi0gICAgICAgICAgICB3LT53aWR0aCgpIC8geCwgdy0+aGVpZ2h0KCkgLyB5ICk7Ci0gICAg
ICAgIGlmKCByLmNvbnRhaW5zKCBwb3MgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
KCByZWN0ICE9IE5VTEwgKQotICAgICAgICAgICAgICAgICpyZWN0ID0gcjsKKyAgICAgICAgaWYo
IHdpbmRvd1JlZ2lvbiggdyApLmNvbnRhaW5zKCBwb3MgKSkKICAgICAgICAgICAgIHJldHVybiB3
OwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQoKQEAg
LTQ0OSw3ICs1ODEsNyBAQCB2b2lkIERlc2t0b3BHcmlkRWZmZWN0Ojp0b2dnbGUoKQogICAgIHsK
ICAgICBzZXRBY3RpdmUoICFhY3RpdmF0ZWQgKTsKICAgICB9Ci0KKwogdm9pZCBEZXNrdG9wR3Jp
ZEVmZmVjdDo6c2V0QWN0aXZlKCBib29sIGFjdGl2ZSApCiAgICAgewogICAgIGlmKCBlZmZlY3Rz
LT5hY3RpdmVGdWxsU2NyZWVuRWZmZWN0KCkgJiYgZWZmZWN0cy0+YWN0aXZlRnVsbFNjcmVlbkVm
ZmVjdCgpICE9IHRoaXMgKQpAQCAtNDc2LDkgKzYwOCw2IEBAIHZvaWQgRGVza3RvcEdyaWRFZmZl
Y3Q6OmZpbmlzaCgpCiAgICAgaWYoIGtleWJvYXJkX2dyYWIgKQogICAgICAgICBlZmZlY3RzLT51
bmdyYWJLZXlib2FyZCgpOwogICAgIGtleWJvYXJkX2dyYWIgPSBmYWxzZTsKLSAgICBpZiggd2lu
ZG93X21vdmUgIT0gTlVMTCApCi0gICAgICAgIGVmZmVjdHMtPnNldEVsZXZhdGVkV2luZG93KCB3
aW5kb3dfbW92ZSwgZmFsc2UgKTsKLSAgICB3aW5kb3dfbW92ZSA9IE5VTEw7CiAgICAgZWZmZWN0
cy0+ZGVzdHJveUlucHV0V2luZG93KCBpbnB1dCApOwogICAgIGVmZmVjdHMtPnNldEFjdGl2ZUZ1
bGxTY3JlZW5FZmZlY3QoIDAgKTsKICAgICBlZmZlY3RzLT5hZGRSZXBhaW50RnVsbCgpOyAvLyB0
byBnZXQgcmlkIG9mIGhpZ2hsaWdodApAQCAtNDk1LDI3ICs2MjQsMjcgQEAgdm9pZCBEZXNrdG9w
R3JpZEVmZmVjdDo6d2luZG93SW5wdXRNb3VzZQogICAgICAgICB7CiAgICAgICAgIC8vIGhpZ2hs
aWdodCBkZXNrdG9wIHVuZGVyIG1vdXNlCiAgICAgICAgIGludCBkID0gcG9zVG9EZXNrdG9wKCBt
ZS0+cG9zKCkpOwotICAgICAgICBpZiggZCAhPSBoaWdobGlnaHRlZF9kZXNrdG9wICkKLSAgICAg
ICAgICAgIHNldEhpZ2hsaWdodGVkRGVza3RvcCggZCApOwogICAgICAgICBpZiggd2luZG93X21v
dmUgIT0gTlVMTCApIC8vIGhhbmRsZSB3aW5kb3cgbW92aW5nCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICB3YXNfd2luZG93X21vdmUgPSB0cnVlOwotICAgICAgICAgICAgLy8gd2luZG93UmVj
dCgpIGhhbmRsZXMgd2luZG93X21vdmUgc3BlY2lhbGx5Ci0gICAgICAgICAgICBlZmZlY3RzLT5h
ZGRSZXBhaW50KCB3aW5kb3dSZWN0KCB3aW5kb3dfbW92ZSApKTsKLSAgICAgICAgICAgIHdpbmRv
d19tb3ZlX3BvcyA9IG1lLT5wb3MoKSArIHdpbmRvd19tb3ZlX2RpZmY7Ci0gICAgICAgICAgICBl
ZmZlY3RzLT5hZGRSZXBhaW50KCB3aW5kb3dSZWN0KCB3aW5kb3dfbW92ZSApKTsKKyAgICAgICAg
ICAgIGVmZmVjdHMtPmFkZFJlcGFpbnQoIHdpbmRvd1JlZ2lvbiggd2luZG93X21vdmUgKSk7Cisg
ICAgICAgICAgICBlZmZlY3RzLT5tb3ZlV2luZG93KCB3aW5kb3dfbW92ZSwgdW5zY2FsZVBvcygg
bWUtPnBvcygpLCBOVUxMLCBmYWxzZSApICsgd2luZG93X21vdmVfZGlmZiApOworICAgICAgICAg
ICAgaWYoIGQgIT0gaGlnaGxpZ2h0ZWRfZGVza3RvcCAmJiAhd2luZG93X21vdmUtPmlzT25BbGxE
ZXNrdG9wcygpICkKKyAgICAgICAgICAgICAgICBlZmZlY3RzLT53aW5kb3dUb0Rlc2t0b3AoIHdp
bmRvd19tb3ZlLCBkICk7IC8vIE5vdCB0cnVlIGFsbCBkZXNrdG9wIG1vdmUKKyAgICAgICAgICAg
IGVmZmVjdHMtPmFkZFJlcGFpbnQoIHdpbmRvd1JlZ2lvbiggd2luZG93X21vdmUgKSk7CiAgICAg
ICAgICAgICB9CisgICAgICAgIGlmKCBkICE9IGhpZ2hsaWdodGVkX2Rlc2t0b3AgKQorICAgICAg
ICAgICAgc2V0SGlnaGxpZ2h0ZWREZXNrdG9wKCBkICk7CiAgICAgICAgIH0KICAgICBpZiggZS0+
dHlwZSgpID09IFFFdmVudDo6TW91c2VCdXR0b25QcmVzcyApCiAgICAgICAgIHsKICAgICAgICAg
aWYoIG1lLT5idXR0b25zKCkgPT0gUXQ6OkxlZnRCdXR0b24gKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgUVJlY3QgcmVjdDsKLSAgICAgICAgICAgIEVmZmVjdFdpbmRvdyogdyA9IHdpbmRv
d0F0KCBtZS0+cG9zKCksICZyZWN0ICk7CisgICAgICAgICAgICBFZmZlY3RXaW5kb3cqIHcgPSB3
aW5kb3dBdCggbWUtPnBvcygpKTsKICAgICAgICAgICAgIGlmKCB3ICE9IE5VTEwgJiYgdy0+aXNN
b3ZhYmxlKCkpCiAgICAgICAgICAgICAgICAgeyAvLyBwcmVwYXJlIGl0IGZvciBtb3ZpbmcKLSAg
ICAgICAgICAgICAgICB3aW5kb3dfbW92ZV9wb3MgPSByZWN0LnRvcExlZnQoKTsKLSAgICAgICAg
ICAgICAgICB3aW5kb3dfbW92ZV9kaWZmID0gd2luZG93X21vdmVfcG9zIC0gbWUtPnBvcygpOwor
ICAgICAgICAgICAgICAgIHdpbmRvd19tb3ZlX2RpZmYgPSB3LT5wb3MoKSAtIHVuc2NhbGVQb3Mo
IG1lLT5wb3MoKSwgTlVMTCwgZmFsc2UgKTsKICAgICAgICAgICAgICAgICB3aW5kb3dfbW92ZSA9
IHc7CiAgICAgICAgICAgICAgICAgZWZmZWN0cy0+c2V0RWxldmF0ZWRXaW5kb3coIHdpbmRvd19t
b3ZlLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTMzLDI2ICs2NjIsMTQgQEAgdm9p
ZCBEZXNrdG9wR3JpZEVmZmVjdDo6d2luZG93SW5wdXRNb3VzZQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIGlmKCBlLT50eXBlKCkgPT0gUUV2ZW50OjpN
b3VzZUJ1dHRvblJlbGVhc2UgJiYgbWUtPmJ1dHRvbnMoKSA9PSAwICkKKyAgICBpZiggZS0+dHlw
ZSgpID09IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlICYmIG1lLT5idXR0b24oKSA9PSBRdDo6
TGVmdEJ1dHRvbiApCiAgICAgICAgIHsKLSAgICAgICAgaWYoIHdhc193aW5kb3dfbW92ZSApCisg
ICAgICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBOVUxMICkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBOVUxMICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgUVJlY3QgcmVjdCA9IHdpbmRvd1JlY3QoIHdpbmRvd19tb3ZlICk7Ci0gICAgICAg
ICAgICAgICAgaW50IGRlc2t0b3AgPSBwb3NUb0Rlc2t0b3AoIHJlY3QuY2VudGVyKCkpOwotICAg
ICAgICAgICAgICAgIC8vIHRvIGRlc2t0b3AncyBjb29yZGluYXRlcwotICAgICAgICAgICAgICAg
IHJlY3QudHJhbnNsYXRlKCAtZGVza3RvcFJlY3QoIGRlc2t0b3AsIHRydWUgKS50b3BMZWZ0KCkp
OwotICAgICAgICAgICAgICAgIGludCB4LCB5OwotICAgICAgICAgICAgICAgIFF0OjpPcmllbnRh
dGlvbiBvcmllbnRhdGlvbjsKLSAgICAgICAgICAgICAgICBlZmZlY3RzLT5jYWxjRGVza3RvcExh
eW91dCggJngsICZ5LCAmb3JpZW50YXRpb24gKTsKLSAgICAgICAgICAgICAgICBlZmZlY3RzLT5t
b3ZlV2luZG93KCB3aW5kb3dfbW92ZSwgUVBvaW50KCByZWN0LngoKSAqIHgsIHJlY3QueSgpICog
eSApKTsKLSAgICAgICAgICAgICAgICBlZmZlY3RzLT53aW5kb3dUb0Rlc2t0b3AoIHdpbmRvd19t
b3ZlLCBkZXNrdG9wICk7Ci0gICAgICAgICAgICAgICAgZWZmZWN0cy0+c2V0RWxldmF0ZWRXaW5k
b3coIHdpbmRvd19tb3ZlLCBmYWxzZSApOwotICAgICAgICAgICAgICAgIHdpbmRvd19tb3ZlID0g
TlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlZmZlY3RzLT5zZXRFbGV2YXRl
ZFdpbmRvdyggd2luZG93X21vdmUsIGZhbHNlICk7CisgICAgICAgICAgICB3aW5kb3dfbW92ZSA9
IE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgIGlmKCAhd2FzX3dpbmRvd19tb3ZlICYmIG1l
LT5idXR0b24oKSA9PSBRdDo6TGVmdEJ1dHRvbiApCisgICAgICAgIGlmKCAhd2FzX3dpbmRvd19t
b3ZlICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGVmZmVjdHMtPnNldEN1cnJlbnREZXNr
dG9wKCBwb3NUb0Rlc2t0b3AoIG1lLT5wb3MoKSkpOwogICAgICAgICAgICAgc2V0QWN0aXZlKCBm
YWxzZSApOwpAQCAtNTkzLDIwICs3MTAsMTYgQEAgdm9pZCBEZXNrdG9wR3JpZEVmZmVjdDo6Z3Jh
YmJlZEtleWJvYXJkRQogICAgICAgICBzd2l0Y2goIGUtPmtleSgpKQogICAgICAgICAgICAgeyAv
LyB3cmFwIG9ubHkgb24gYXV0b3JlcGVhdAogICAgICAgICAgICAgY2FzZSBRdDo6S2V5X0xlZnQ6
Ci0gICAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWREZXNrdG9wKCBlZmZlY3RzLT5kZXNrdG9w
VG9MZWZ0KCBoaWdobGlnaHRlZF9kZXNrdG9wLAotICAgICAgICAgICAgICAgICAgICAhZS0+aXNB
dXRvUmVwZWF0KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERlc2t0b3AoIGVm
ZmVjdHMtPmRlc2t0b3BUb0xlZnQoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsICFlLT5pc0F1dG9SZXBl
YXQoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRdDo6S2V5
X1JpZ2h0OgotICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkRGVza3RvcCggZWZmZWN0cy0+
ZGVza3RvcFRvUmlnaHQoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsCi0gICAgICAgICAgICAgICAgICAg
ICFlLT5pc0F1dG9SZXBlYXQoKSkpOworICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkRGVz
a3RvcCggZWZmZWN0cy0+ZGVza3RvcFRvUmlnaHQoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsICFlLT5p
c0F1dG9SZXBlYXQoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBRdDo6S2V5X1VwOgotICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkRGVza3RvcCggZWZm
ZWN0cy0+ZGVza3RvcFVwKCBoaWdobGlnaHRlZF9kZXNrdG9wLAotICAgICAgICAgICAgICAgICAg
ICAhZS0+aXNBdXRvUmVwZWF0KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERl
c2t0b3AoIGVmZmVjdHMtPmRlc2t0b3BVcCggaGlnaGxpZ2h0ZWRfZGVza3RvcCwgIWUtPmlzQXV0
b1JlcGVhdCgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFF0
OjpLZXlfRG93bjoKLSAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERlc2t0b3AoIGVmZmVj
dHMtPmRlc2t0b3BEb3duKCBoaWdobGlnaHRlZF9kZXNrdG9wLAotICAgICAgICAgICAgICAgICAg
ICAhZS0+aXNBdXRvUmVwZWF0KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERl
c2t0b3AoIGVmZmVjdHMtPmRlc2t0b3BEb3duKCBoaWdobGlnaHRlZF9kZXNrdG9wLCAhZS0+aXNB
dXRvUmVwZWF0KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
UXQ6OktleV9Fc2NhcGU6CiAgICAgICAgICAgICAgICAgc2V0QWN0aXZlKCBmYWxzZSApOwpAQCAt
NjI3LDkgKzc0MCwxMSBAQCB2b2lkIERlc2t0b3BHcmlkRWZmZWN0OjpzZXRIaWdobGlnaHRlZERl
CiAgICAgewogICAgIGlmKCBkID09IGhpZ2hsaWdodGVkX2Rlc2t0b3AgfHwgZCA8PSAwIHx8IGQg
PiBlZmZlY3RzLT5udW1iZXJPZkRlc2t0b3BzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlZmZl
Y3RzLT5hZGRSZXBhaW50KCBkZXNrdG9wUmVjdCggaGlnaGxpZ2h0ZWRfZGVza3RvcCwgdHJ1ZSAp
KTsKKyAgICBmb3IoIGludCBzY3JlZW4gPSAwOyBzY3JlZW4gPCBlZmZlY3RzLT5udW1TY3JlZW5z
KCk7IHNjcmVlbisrICkKKyAgICAgICAgZWZmZWN0cy0+YWRkUmVwYWludCggc2NyZWVuUmVjdCgg
aGlnaGxpZ2h0ZWRfZGVza3RvcCwgc2NyZWVuLCB0cnVlICkgKTsKICAgICBoaWdobGlnaHRlZF9k
ZXNrdG9wID0gZDsKLSAgICBlZmZlY3RzLT5hZGRSZXBhaW50KCBkZXNrdG9wUmVjdCggaGlnaGxp
Z2h0ZWRfZGVza3RvcCwgdHJ1ZSApKTsKKyAgICBmb3IoIGludCBzY3JlZW4gPSAwOyBzY3JlZW4g
PCBlZmZlY3RzLT5udW1TY3JlZW5zKCk7IHNjcmVlbisrICkKKyAgICAgICAgZWZmZWN0cy0+YWRk
UmVwYWludCggc2NyZWVuUmVjdCggaGlnaGxpZ2h0ZWRfZGVza3RvcCwgc2NyZWVuLCB0cnVlICkg
KTsKICAgICB9CgogYm9vbCBEZXNrdG9wR3JpZEVmZmVjdDo6Ym9yZGVyQWN0aXZhdGVkKCBFbGVj
dHJpY0JvcmRlciBib3JkZXIgKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25415</attachid>
            <date>2008-06-17 17:47:11 +0000</date>
            <delta_ts>2008-07-14 16:05:44 +0000</delta_ts>
            <desc>Patch file, r2</desc>
            <filename>desktopgrid_multi-monitor_r2.diff</filename>
            <type>text/plain</type>
            <size>22529</size>
            <attacher>lucas</attacher>
            
              <data encoding="base64">SW5kZXg6IGVmZmVjdHMvZGVza3RvcGdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZmZlY3RzL2Rlc2t0
b3BncmlkLmgJKHJldmlzaW9uIDgyMTA4NSkKKysrIGVmZmVjdHMvZGVza3RvcGdyaWQuaAkod29y
a2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QuCgogQ29weXJpZ2h0IChDKSAyMDA3IEx1Ym9zIEx1bmFrIDxsLmx1bmFrQGtkZS5v
cmc+CitDb3B5cmlnaHQgKEMpIDIwMDggTHVjYXMgTXVycmF5IDxhZG1pbkB1bmRlZmluZWRmaXJl
LmNvbT4KCiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ4LDE0ICs0OSwxNiBAQCBjbGFz
cyBEZXNrdG9wR3JpZEVmZmVjdAogICAgICAgICB2b2lkIHRvZ2dsZSgpOwogICAgIHByaXZhdGU6
CiAgICAgICAgIFFSZWN0IGRlc2t0b3BSZWN0KCBpbnQgZGVza3RvcCwgYm9vbCBzY2FsZWQgKSBj
b25zdDsKKyAgICAgICAgUVJlY3Qgc2NyZWVuUmVjdCggaW50IGRlc2t0b3AsIGludCBzY3JlZW4s
IGJvb2wgc2NhbGVkLCBib29sIG1hc2sgPSB0cnVlICkgY29uc3Q7CisgICAgICAgIFFQb2ludCB1
bnNjYWxlUG9zKCBjb25zdCBRUG9pbnQmIHBvcywgaW50KiBkZXNrdG9wID0gTlVMTCwgYm9vbCBv
bkdyaWQgPSB0cnVlICkgY29uc3Q7CiAgICAgICAgIGludCBwb3NUb0Rlc2t0b3AoIGNvbnN0IFFQ
b2ludCYgcG9zICkgY29uc3Q7Ci0gICAgICAgIFFSZWN0IHdpbmRvd1JlY3QoIEVmZmVjdFdpbmRv
dyogdyApIGNvbnN0OyAvLyByZXR1cm5zIGFsd2F5cyBzY2FsZWQKLSAgICAgICAgRWZmZWN0V2lu
ZG93KiB3aW5kb3dBdCggY29uc3QgUVBvaW50JiBwb3MsIFFSZWN0KiByZWN0ID0gTlVMTCApIGNv
bnN0OworICAgICAgICBRUmVnaW9uIHdpbmRvd1JlZ2lvbiggRWZmZWN0V2luZG93KiB3ICkgY29u
c3Q7CisgICAgICAgIEVmZmVjdFdpbmRvdyogd2luZG93QXQoIGNvbnN0IFFQb2ludCYgcG9zICkg
Y29uc3Q7CiAgICAgICAgIHZvaWQgc2V0QWN0aXZlKCBib29sIGFjdGl2ZSApOwogICAgICAgICB2
b2lkIHNldHVwKCk7CiAgICAgICAgIHZvaWQgZmluaXNoKCk7CiAgICAgICAgIHZvaWQgcGFpbnRT
bGlkZSggaW50IG1hc2ssIFFSZWdpb24gcmVnaW9uLCBjb25zdCBTY3JlZW5QYWludERhdGEmIGRh
dGEgKTsKLSAgICAgICAgdm9pZCBwYWludFNjcmVlbkRlc2t0b3AoIGludCBkZXNrdG9wLCBpbnQg
bWFzaywgUVJlZ2lvbiByZWdpb24sIFNjcmVlblBhaW50RGF0YSBkYXRhICk7CisgICAgICAgIHZv
aWQgcGFpbnRTY3JlZW5EZXNrdG9wKCBpbnQgZGVza3RvcCwgaW50IHNjcmVlbiwgaW50IG1hc2ss
IFFSZWdpb24gcmVnaW9uLCBTY3JlZW5QYWludERhdGEgZGF0YSApOwogICAgICAgICB2b2lkIHNs
aWRlRGVza3RvcENoYW5nZWQoIGludCBvbGQgKTsKICAgICAgICAgdm9pZCBzZXRIaWdobGlnaHRl
ZERlc2t0b3AoIGludCBkZXNrdG9wICk7CiAgICAgICAgIGJvb2wgYWN0aXZhdGVkOwpAQCAtNjcs
MTQgKzcwLDEyIEBAIGNsYXNzIERlc2t0b3BHcmlkRWZmZWN0CiAgICAgICAgIGJvb2wgd2FzX3dp
bmRvd19tb3ZlOwogICAgICAgICBFZmZlY3RXaW5kb3cqIHdpbmRvd19tb3ZlOwogICAgICAgICBR
UG9pbnQgd2luZG93X21vdmVfZGlmZjsKLSAgICAgICAgUVBvaW50IHdpbmRvd19tb3ZlX3BvczsK
ICAgICAgICAgYm9vbCBzbGlkZUVuYWJsZWQ7CiAgICAgICAgIGJvb2wgc2xpZGU7CiAgICAgICAg
IFFQb2ludCBzbGlkZV9zdGFydF9wb3M7CiAgICAgICAgIGJvb2wgc2xpZGVfcGFpbnRpbmdfc3Rp
Y2t5OwogICAgICAgICBRUG9pbnQgc2xpZGVfcGFpbnRpbmdfZGlmZjsKICAgICAgICAgRWxlY3Ry
aWNCb3JkZXIgYm9yZGVyQWN0aXZhdGU7Ci0KICAgICB9OwoKIH0gLy8gbmFtZXNwYWNlCkluZGV4
OiBlZmZlY3RzL2Rlc2t0b3BncmlkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZmZlY3RzL2Rlc2t0b3Bn
cmlkLmNwcAkocmV2aXNpb24gODIxMDg1KQorKysgZWZmZWN0cy9kZXNrdG9wZ3JpZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0LgoKIENvcHlyaWdodCAoQykgMjAwNyBMdWJvcyBMdW5hayA8bC5sdW5ha0BrZGUu
b3JnPgorQ29weXJpZ2h0IChDKSAyMDA4IEx1Y2FzIE11cnJheSA8YWRtaW5AdW5kZWZpbmVkZmly
ZS5jb20+CgogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00MCw2ICs0MSw3IEBAIERlc2t0
b3BHcmlkRWZmZWN0OjpEZXNrdG9wR3JpZEVmZmVjdCgpCiAgICAgLCBrZXlib2FyZF9ncmFiKCBm
YWxzZSApCiAgICAgLCB3YXNfd2luZG93X21vdmUoIGZhbHNlICkKICAgICAsIHdpbmRvd19tb3Zl
KCBOVUxMICkKKyAgICAsIHdpbmRvd19tb3ZlX2RpZmYoKQogICAgICwgc2xpZGUoIGZhbHNlICkK
ICAgICB7CiAgICAgS0FjdGlvbkNvbGxlY3Rpb24qIGFjdGlvbkNvbGxlY3Rpb24gPSBuZXcgS0Fj
dGlvbkNvbGxlY3Rpb24oIHRoaXMgKTsKQEAgLTExNCwxMiArMTE2LDYgQEAgdm9pZCBEZXNrdG9w
R3JpZEVmZmVjdDo6cHJlUGFpbnRXaW5kb3coCiAgICAgICAgICAgICB3LT5lbmFibGVQYWludGlu
ZyggRWZmZWN0V2luZG93OjpQQUlOVF9ESVNBQkxFRF9CWV9ERVNLVE9QICk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHctPmRpc2FibGVQYWludGluZyggRWZmZWN0V2luZG93OjpQQUlOVF9E
SVNBQkxFRF9CWV9ERVNLVE9QICk7Ci0gICAgICAgIGlmKCB3ID09IHdpbmRvd19tb3ZlICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIGRhdGEuc2V0VHJhbnNmb3JtZWQoKTsKLSAgICAgICAg
ICAgIGlmKCB3LT5pc09uQWxsRGVza3RvcHMoKSAmJiBwYWludGluZ19kZXNrdG9wICE9IHBvc1Rv
RGVza3RvcCggd2luZG93X21vdmVfcG9zIC0gd2luZG93X21vdmVfZGlmZiApKQotICAgICAgICAg
ICAgICAgIHctPmRpc2FibGVQYWludGluZyggRWZmZWN0V2luZG93OjpQQUlOVF9ESVNBQkxFRF9C
WV9ERVNLVE9QICk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICBlZmZlY3RzLT5wcmVQ
YWludFdpbmRvdyggdywgZGF0YSwgdGltZSApOwogICAgIH0KQEAgLTEzNiwzNCArMTMyLDY0IEBA
IHZvaWQgRGVza3RvcEdyaWRFZmZlY3Q6OnBhaW50U2NyZWVuKCBpbnQKICAgICAgICAgcGFpbnRT
bGlkZSggbWFzaywgcmVnaW9uLCBkYXRhICk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgIGludCBkZXNrdG9wX3dpdGhfbW92ZSA9IC0xOwotICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBO
VUxMICkKLSAgICAgICAgZGVza3RvcF93aXRoX21vdmUgPSB3aW5kb3dfbW92ZS0+aXNPbkFsbERl
c2t0b3BzKCkKLSAgICAgICAgICAgID8gcG9zVG9EZXNrdG9wKCB3aW5kb3dfbW92ZV9wb3MgLSB3
aW5kb3dfbW92ZV9kaWZmICkgOiB3aW5kb3dfbW92ZS0+ZGVza3RvcCgpOwotICAgIGZvciggaW50
IGRlc2t0b3AgPSAxOwotICAgICAgICAgZGVza3RvcCA8PSBlZmZlY3RzLT5udW1iZXJPZkRlc2t0
b3BzKCk7Ci0gICAgICAgICArK2Rlc2t0b3AgKQorICAgIGZvciggaW50IHNjcmVlbiA9IDA7IHNj
cmVlbiA8IGVmZmVjdHMtPm51bVNjcmVlbnMoKTsgc2NyZWVuKysgKQogICAgICAgICB7Ci0gICAg
ICAgIGlmKCBkZXNrdG9wICE9IGRlc2t0b3Bfd2l0aF9tb3ZlICkKKyAgICAgICAgUVJlY3Qgc2Ny
ZWVuR2VvRnVsbCA9IHNjcmVlblJlY3QoIDEsIHNjcmVlbiwgZmFsc2UgKTsgLy8gRWZmZWN0IGFs
d2F5cyBvbiBkZXNrdG9wIDEKKyAgICAgICAgZm9yKCBpbnQgZGVza3RvcCA9IDE7IGRlc2t0b3Ag
PD0gZWZmZWN0cy0+bnVtYmVyT2ZEZXNrdG9wcygpOyBkZXNrdG9wKysgKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgUGFpbnRDbGlwcGVyIHBjKCBkZXNrdG9wUmVjdCggZGVza3RvcCwgdHJ1
ZSApKTsKLSAgICAgICAgICAgIHBhaW50U2NyZWVuRGVza3RvcCggZGVza3RvcCwgbWFzaywgcmVn
aW9uLCBkYXRhICk7CisgICAgICAgICAgICBpZiggIXdpbmRvd19tb3ZlIHx8ICggd2luZG93X21v
dmUgJiYgZGVza3RvcCAhPSB3aW5kb3dfbW92ZS0+ZGVza3RvcCgpICkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFBhaW50Q2xpcHBlciBwYyggc2NyZWVuR2VvRnVsbCAmIHNj
cmVlblJlY3QoIGRlc2t0b3AsIHNjcmVlbiwgdHJ1ZSApKTsKKyAgICAgICAgICAgICAgICBwYWlu
dFNjcmVlbkRlc2t0b3AoIGRlc2t0b3AsIHNjcmVlbiwgbWFzaywgcmVnaW9uLCBkYXRhICk7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgLy8gcGFpbnQg
dGhlIGRlc2t0b3Agd2l0aCB0aGUgd2luZG93IGJlaW5nIG1vdmVkIGFzIHRoZSBsYXN0IG9uZSwg
aS5lLiBvbiB0b3Agb2Ygb3RoZXJzCi0gICAgaWYoIGRlc2t0b3Bfd2l0aF9tb3ZlICE9IC0xICkK
LSAgICAgICAgewotICAgICAgICBRUmVnaW9uIHBhaW50cmVnID0gZGVza3RvcFJlY3QoIGRlc2t0
b3Bfd2l0aF9tb3ZlLCB0cnVlICk7IC8vIHBhaW50IG9ubHkgdGhlIGRlc2t0b3AKLSAgICAgICAg
cGFpbnRyZWcgfD0gd2luZG93UmVjdCggd2luZG93X21vdmUgKTsgLy8gYW5kIHdoZXJldmVyIHRo
ZSBtb3ZlZCB3aW5kb3cgaXMKLSAgICAgICAgUGFpbnRDbGlwcGVyIHBjKCBwYWludHJlZyApOwot
ICAgICAgICBwYWludFNjcmVlbkRlc2t0b3AoIGRlc2t0b3Bfd2l0aF9tb3ZlLCBtYXNrLCByZWdp
b24sIGRhdGEgKTsKKyAgICBpZiggd2luZG93X21vdmUgKQorICAgICAgICB7IC8vIEFsd2F5cyBw
YWludCB0aGUgZGVza3RvcCB3aXRoIHRoZSBtb3Zpbmcgd2luZG93IGxhc3QKKyAgICAgICAgZm9y
KCBpbnQgc2NyZWVuID0gMDsgc2NyZWVuIDwgZWZmZWN0cy0+bnVtU2NyZWVucygpOyBzY3JlZW4r
KyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBRUmVjdCBzY3JlZW5HZW9GdWxsID0gc2Ny
ZWVuUmVjdCggMSwgc2NyZWVuLCBmYWxzZSApOyAvLyBFZmZlY3QgYWx3YXlzIG9uIGRlc2t0b3Ag
MQorICAgICAgICAgICAgUVJlY3Qgc2NyZWVuR2VvID0gZWZmZWN0cy0+Y2xpZW50QXJlYSggU2Ny
ZWVuQXJlYSwgc2NyZWVuLCAwICk7CisgICAgICAgICAgICBpbnQgZGVza3RvcCA9IHdpbmRvd19t
b3ZlLT5kZXNrdG9wKCk7CisKKyAgICAgICAgICAgIC8vIE9ubHkgYWRkIHdpbmRvdyBtYXNrIG9u
IHRoZSBzY3JlZW4gd2l0aCB0aGUgbW91c2UgcG9pbnRlcgorICAgICAgICAgICAgaWYoIHNjcmVl
bkdlby5jb250YWlucyggd2luZG93X21vdmUtPnBvcygpIC0gd2luZG93X21vdmVfZGlmZiApKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgeCwgeSwgZ3gsIGd5OworICAg
ICAgICAgICAgICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKKyAgICAgICAgICAgICAg
ICBlZmZlY3RzLT5jYWxjRGVza3RvcExheW91dCggJngsICZ5LCAmb3JpZW50YXRpb24gKTsKKyAg
ICAgICAgICAgICAgICBpZiggb3JpZW50YXRpb24gPT0gUXQ6Okhvcml6b250YWwgKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGd4ID0gKCBkZXNrdG9wIC0gMSAp
ICUgeDsKKyAgICAgICAgICAgICAgICAgICAgZ3kgPSAoIGRlc2t0b3AgLSAxICkgLyB4OworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGd4ID0gKCBkZXNrdG9wIC0gMSApIC8geTsKKyAg
ICAgICAgICAgICAgICAgICAgZ3kgPSAoIGRlc2t0b3AgLSAxICkgJSB5OworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBRUmVnaW9uIHdpbmRvd1JlZygKKyAgICAgICAg
ICAgICAgICAgICAgc2NyZWVuR2VvLngoKSArICggc2NyZWVuR2VvLndpZHRoKCkgKiBneCArIHdp
bmRvd19tb3ZlLT54KCkgLSBzY3JlZW5HZW8ueCgpICkgLyB4LAorICAgICAgICAgICAgICAgICAg
ICBzY3JlZW5HZW8ueSgpICsgKCBzY3JlZW5HZW8uaGVpZ2h0KCkgKiBneSArIHdpbmRvd19tb3Zl
LT55KCkgLSBzY3JlZW5HZW8ueSgpICkgLyB5LAorICAgICAgICAgICAgICAgICAgICB3aW5kb3df
bW92ZS0+d2lkdGgoKSAvIHgsIHdpbmRvd19tb3ZlLT5oZWlnaHQoKSAvIHkgKTsKKworICAgICAg
ICAgICAgICAgIFBhaW50Q2xpcHBlciBwYyggd2luZG93UmVnIHwgKCBzY3JlZW5HZW9GdWxsICYg
c2NyZWVuUmVjdCggZGVza3RvcCwgc2NyZWVuLCB0cnVlICkpKTsKKyAgICAgICAgICAgICAgICBw
YWludFNjcmVlbkRlc2t0b3AoIGRlc2t0b3AsIHNjcmVlbiwgbWFzaywgcmVnaW9uLCBkYXRhICk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBQYWludENsaXBwZXIgcGMoIHNjcmVlbkdlb0Z1bGwgJiBzY3JlZW5S
ZWN0KCBkZXNrdG9wLCBzY3JlZW4sIHRydWUgKSk7CisgICAgICAgICAgICAgICAgcGFpbnRTY3Jl
ZW5EZXNrdG9wKCBkZXNrdG9wLCBzY3JlZW4sIG1hc2ssIHJlZ2lvbiwgZGF0YSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KCi12b2lkIERlc2t0
b3BHcmlkRWZmZWN0OjpwYWludFNjcmVlbkRlc2t0b3AoIGludCBkZXNrdG9wLCBpbnQgbWFzaywg
UVJlZ2lvbiByZWdpb24sIFNjcmVlblBhaW50RGF0YSBkYXRhICkKK3ZvaWQgRGVza3RvcEdyaWRF
ZmZlY3Q6OnBhaW50U2NyZWVuRGVza3RvcCggaW50IGRlc2t0b3AsIGludCBzY3JlZW4sIGludCBt
YXNrLCBRUmVnaW9uIHJlZ2lvbiwgU2NyZWVuUGFpbnREYXRhIGRhdGEgKQogICAgIHsKLSAgICBR
UmVjdCByZWN0ID0gZGVza3RvcFJlY3QoIGRlc2t0b3AsIHRydWUgKTsKLSAgICBpZiggcmVnaW9u
LmNvbnRhaW5zKCByZWN0ICkpIC8vIHRoaXMgZGVza3RvcCBuZWVkcyBwYWludGluZworICAgIFFS
ZWN0IHJlY3QgPSBzY3JlZW5SZWN0KCBkZXNrdG9wLCBzY3JlZW4sIHRydWUsIGZhbHNlICk7Cisg
ICAgaWYoIHJlZ2lvbi5jb250YWlucyggcmVjdCApKSAvLyB0aGlzIHNjcmVlbiBuZWVkcyBwYWlu
dGluZwogICAgICAgICB7CiAgICAgICAgIHBhaW50aW5nX2Rlc2t0b3AgPSBkZXNrdG9wOwogICAg
ICAgICBTY3JlZW5QYWludERhdGEgZCA9IGRhdGE7CkBAIC0yNTcsMjEgKzI4Myw5IEBAIHZvaWQg
RGVza3RvcEdyaWRFZmZlY3Q6OnBhaW50V2luZG93KCBFZmYKICAgICAgICAgICAgIGRhdGEueVRy
YW5zbGF0ZSAtPSBzbGlkZV9wYWludGluZ19kaWZmLnkoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgIGVsc2UgaWYoIG1UaW1lTGluZS52YWx1ZSgpICE9IDAgKQotICAgICAgICB7Ci0g
ICAgICAgIGlmKCB3ID09IHdpbmRvd19tb3ZlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
IGludCB4LCB5OwotICAgICAgICAgICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAg
ICAgICAgICAgZWZmZWN0cy0+Y2FsY0Rlc2t0b3BMYXlvdXQoICZ4LCAmeSwgJm9yaWVudGF0aW9u
ICk7Ci0gICAgICAgICAgICBRUmVjdCBkZXNrdG9wID0gZGVza3RvcFJlY3QoIHBhaW50aW5nX2Rl
c2t0b3AsIGZhbHNlICk7Ci0gICAgICAgICAgICBkYXRhLnhUcmFuc2xhdGUgKz0gd2luZG93X21v
dmVfcG9zLngoKSAqIHggLSAoIGRlc2t0b3AueCgpICsgdy0+eCgpKTsKLSAgICAgICAgICAgIGRh
dGEueVRyYW5zbGF0ZSArPSB3aW5kb3dfbW92ZV9wb3MueSgpICogeSAtICggZGVza3RvcC55KCkg
KyB3LT55KCkpOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBwYWludGluZ19kZXNr
dG9wICE9IGhpZ2hsaWdodGVkX2Rlc2t0b3AgKQotICAgICAgICAgICAgZGF0YS5icmlnaHRuZXNz
ICo9IDAuNzsKLSAgICAgICAgfQotICAgIGVmZmVjdHMtPnBhaW50V2luZG93KCB3LCBtYXNrLCBy
ZWdpb24sIGRhdGEgKTsKKyAgICBlbHNlIGlmKCBtVGltZUxpbmUudmFsdWUoKSAhPSAwICYmIHBh
aW50aW5nX2Rlc2t0b3AgIT0gaGlnaGxpZ2h0ZWRfZGVza3RvcCApCisgICAgICAgIGRhdGEuYnJp
Z2h0bmVzcyAqPSAwLjc7IC8vIFRPRE86IFdpbmRvd3Mgb24gYWxsIGRlc2t0b3BzIGZsaWNrZXIs
IG1heSBuZWVkIEFQSSBjaGFuZ2UKKyAgICBlZmZlY3RzLT5wYWludFdpbmRvdyggdywgbWFzaywg
cmVnaW9uLCBkYXRhICk7CiAgICAgfQoKIHZvaWQgRGVza3RvcEdyaWRFZmZlY3Q6OnBvc3RQYWlu
dFNjcmVlbigpCkBAIC0zMDgsMzkgKzMyMiwxNjAgQEAgUVJlY3QgRGVza3RvcEdyaWRFZmZlY3Q6
OmRlc2t0b3BSZWN0KCBpbgogICAgIHJldHVybiByZWN0OwogICAgIH0KCi1pbnQgRGVza3RvcEdy
aWRFZmZlY3Q6OnBvc1RvRGVza3RvcCggY29uc3QgUVBvaW50JiBwb3MgKSBjb25zdAorLy8gR2l2
ZXMgYSBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gZGVza3RvcCBzY3JlZW4gd2hlbiBhbGwgZGVza3Rv
cHMgYXJlIGFycmFuZ2VkIGluIGEgZ3JpZAorLy8gVGhpcyBpcyBkaWZmZXJlbnQgdG8gZGVza3Rv
cFJlY3QgYXMgaXQgdGFrZXMgaW50byBhY2NvdW50IGVhY2ggc2NyZWVuIHJlbGF0aXZlIHBvc2l0
aW9uIHNlcGVyYXRlbHkKK1FSZWN0IERlc2t0b3BHcmlkRWZmZWN0OjpzY3JlZW5SZWN0KCBpbnQg
ZGVza3RvcCwgaW50IHNjcmVlbiwgYm9vbCBzY2FsZWQsIGJvb2wgbWFzayApIGNvbnN0CiAgICAg
ewotICAgIGZvciggaW50IGRlc2t0b3AgPSAxOyAvLyBUT0RPIGNvdWxkIGJlIHBlcmhhcHMgb3B0
aW1pemVkCi0gICAgICAgICBkZXNrdG9wIDw9IGVmZmVjdHMtPm51bWJlck9mRGVza3RvcHMoKTsK
LSAgICAgICAgICsrZGVza3RvcCApCisgICAgaW50IHgsIHksIGd4LCBneSwgY2d4LCBjZ3k7Cisg
ICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uOworICAgIGVmZmVjdHMtPmNhbGNEZXNrdG9w
TGF5b3V0KCAmeCwgJnksICZvcmllbnRhdGlvbiApOworCisgICAgLy8gR2V0IGNob3NlbiBkZXNr
dG9wJ3MgZ3JpZCBsb2NhdGlvbgorICAgIC0tZGVza3RvcDsKKyAgICBpZiggb3JpZW50YXRpb24g
PT0gUXQ6Okhvcml6b250YWwgKQorICAgICAgICB7CisgICAgICAgIGd4ID0gZGVza3RvcCAlIHg7
CisgICAgICAgIGd5ID0gZGVza3RvcCAvIHg7CisgICAgICAgIH0KKyAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgZ3ggPSBkZXNrdG9wIC8geTsKKyAgICAgICAgZ3kgPSBkZXNrdG9wICUgeTsK
KyAgICAgICAgfQorCisgICAgUVJlY3Qgc2NyZWVuR2VvID0gZWZmZWN0cy0+Y2xpZW50QXJlYSgg
U2NyZWVuQXJlYSwgc2NyZWVuLCAwICk7CisgICAgUVJlY3QgcmVjdDsKKyAgICBpZiggIXNjYWxl
ZCApCisgICAgICAgIHsKKyAgICAgICAgaWYoIG1hc2sgKQorICAgICAgICAgICAgcmVjdCA9IFFS
ZWN0KCBneCAqIGRpc3BsYXlXaWR0aCgpICsgc2NyZWVuR2VvLngoKSwgZ3kgKiBkaXNwbGF5SGVp
Z2h0KCkgKyBzY3JlZW5HZW8ueSgpLAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby53aWR0aCgp
LCBzY3JlZW5HZW8uaGVpZ2h0KCkgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdCA9
IFFSZWN0KCBneCAqIGRpc3BsYXlXaWR0aCgpLCBneSAqIGRpc3BsYXlIZWlnaHQoKSwKKyAgICAg
ICAgICAgICAgICBkaXNwbGF5V2lkdGgoKSwgZGlzcGxheUhlaWdodCgpICk7CisgICAgICAgIHJl
dHVybiByZWN0OworICAgICAgICB9CisKKyAgICAvLyBHZXQgY3VycmVudCBkZXNrdG9wJ3MgZ3Jp
ZCBsb2NhdGlvbiBhcyB3ZWxsIGFzIHZpcnR1YWwgcG9zaXRpb24KKyAgICBkZXNrdG9wID0gZWZm
ZWN0cy0+Y3VycmVudERlc2t0b3AoKSAtIDE7CisgICAgaWYoIG9yaWVudGF0aW9uID09IFF0OjpI
b3Jpem9udGFsICkKKyAgICAgICAgeworICAgICAgICBjZ3ggPSBkZXNrdG9wICUgeDsKKyAgICAg
ICAgY2d5ID0gZGVza3RvcCAvIHg7CisgICAgICAgIH0KKyAgICBlbHNlCiAgICAgICAgIHsKLSAg
ICAgICAgaWYoIGRlc2t0b3BSZWN0KCBkZXNrdG9wLCB0cnVlICkuY29udGFpbnMoIHBvcyApKQot
ICAgICAgICAgICAgcmV0dXJuIGRlc2t0b3A7CisgICAgICAgIGNneCA9IGRlc2t0b3AgLyB5Owor
ICAgICAgICBjZ3kgPSBkZXNrdG9wICUgeTsKICAgICAgICAgfQotICAgIHJldHVybiAwOworCisg
ICAgZG91YmxlIHByb2dyZXNzID0gbVRpbWVMaW5lLnZhbHVlKCk7CisgICAgaWYoIG1hc2sgKSAv
LyBWaXNpYmxlIHBhcnQgb2YgdGhlIHNjcmVlbiB0aGF0IGlzIHRvIGJlIHBhaW50ZWQKKyAgICAg
ICAgcmVjdCA9IFFSZWN0KAorICAgICAgICAgICAgcVJvdW5kKCBpbnRlcnBvbGF0ZSgKKyAgICAg
ICAgICAgICAgICBzY3JlZW5HZW8ueCgpICsgc2NyZWVuR2VvLndpZHRoKCkgKiBneCAtIHNjcmVl
bkdlby53aWR0aCgpICogY2d4LAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby54KCkgKyBzY3Jl
ZW5HZW8ud2lkdGgoKSAqIGd4IC8geCwKKyAgICAgICAgICAgIHByb2dyZXNzICkpLCBxUm91bmQo
IGludGVycG9sYXRlKAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby55KCkgKyBzY3JlZW5HZW8u
aGVpZ2h0KCkgKiBneSAtIHNjcmVlbkdlby5oZWlnaHQoKSAqIGNneSwKKyAgICAgICAgICAgICAg
ICBzY3JlZW5HZW8ueSgpICsgc2NyZWVuR2VvLmhlaWdodCgpICogZ3kgLyB5LAorICAgICAgICAg
ICAgcHJvZ3Jlc3MgKSksCisgICAgICAgICAgICBxUm91bmQoIGludGVycG9sYXRlKCBzY3JlZW5H
ZW8ud2lkdGgoKSwgIHNjcmVlbkdlby53aWR0aCgpICAvIHgsIHByb2dyZXNzICkpLAorICAgICAg
ICAgICAgcVJvdW5kKCBpbnRlcnBvbGF0ZSggc2NyZWVuR2VvLmhlaWdodCgpLCBzY3JlZW5HZW8u
aGVpZ2h0KCkgLyB5LCBwcm9ncmVzcyApKSk7CisgICAgZWxzZSAvLyBBY3R1YWwgcG9zaXRpb24g
b2Ygd2hlcmUgdGhlIGVudGlyZSBkZXNrdG9wIG5lZWRzIHRvIGJlIHBhaW50ZWQKKyAgICAgICAg
IC8vIFRPRE86IE1heWJlIGFkZCBhbiBBUEkgZnVuY3Rpb24gdGhhdCBvbmx5IHBhaW50cyBhIHNp
bmdsZSBzY3JlZW4gb2YgdGhlIGRlc2t0b3AgdG8gYmVnaW4gd2l0aAorICAgICAgICByZWN0ID0g
UVJlY3QoCisgICAgICAgICAgICBxUm91bmQoIGludGVycG9sYXRlKAorICAgICAgICAgICAgICAg
IHNjcmVlbkdlby53aWR0aCgpICogZ3ggLSBzY3JlZW5HZW8ud2lkdGgoKSAqIGNneCwKKyAgICAg
ICAgICAgICAgICBzY3JlZW5HZW8ueCgpICsgKCBzY3JlZW5HZW8ud2lkdGgoKSAqIGd4IC0gc2Ny
ZWVuR2VvLngoKSApIC8geCwKKyAgICAgICAgICAgIHByb2dyZXNzICkpLCBxUm91bmQoIGludGVy
cG9sYXRlKAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby5oZWlnaHQoKSAqIGd5IC0gc2NyZWVu
R2VvLmhlaWdodCgpICogY2d5LAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby55KCkgKyAoIHNj
cmVlbkdlby5oZWlnaHQoKSAqIGd5IC0gc2NyZWVuR2VvLnkoKSApIC8geSwKKyAgICAgICAgICAg
IHByb2dyZXNzICkpLAorICAgICAgICAgICAgcVJvdW5kKCBpbnRlcnBvbGF0ZSggZGlzcGxheVdp
ZHRoKCksICBkaXNwbGF5V2lkdGgoKSAgLyB4LCBwcm9ncmVzcyApKSwKKyAgICAgICAgICAgIHFS
b3VuZCggaW50ZXJwb2xhdGUoIGRpc3BsYXlIZWlnaHQoKSwgZGlzcGxheUhlaWdodCgpIC8geSwg
cHJvZ3Jlc3MgKSkpOworICAgIHJldHVybiByZWN0OwogICAgIH0KCi1RUmVjdCBEZXNrdG9wR3Jp
ZEVmZmVjdDo6d2luZG93UmVjdCggRWZmZWN0V2luZG93KiB3ICkgY29uc3QKKy8vIERldHJhbnNm
b3JtIGEgcG9pbnQgdG8gaXRzIHBvc2l0aW9uIG9uIHRoZSBmdWxsIGdyaWQKK1FQb2ludCBEZXNr
dG9wR3JpZEVmZmVjdDo6dW5zY2FsZVBvcyggY29uc3QgUVBvaW50JiBwb3MsIGludCogZGVza3Rv
cCwgYm9vbCBvbkdyaWQgKSBjb25zdAogICAgIHsKICAgICBpbnQgeCwgeTsKICAgICBRdDo6T3Jp
ZW50YXRpb24gb3JpZW50YXRpb247CiAgICAgZWZmZWN0cy0+Y2FsY0Rlc2t0b3BMYXlvdXQoICZ4
LCAmeSwgJm9yaWVudGF0aW9uICk7Ci0gICAgaWYoIHcgPT0gd2luZG93X21vdmUgKSAvLyBpdCdz
IGJlaW5nIG1vdmVkLCByZXR1cm4gbW92ZWQgcG9zaXRpb24KLSAgICAgICAgcmV0dXJuIFFSZWN0
KCB3aW5kb3dfbW92ZV9wb3MsIFFTaXplKCB3LT53aWR0aCgpIC8geCwgdy0+aGVpZ2h0KCkgLyB5
ICkpOwotICAgIFFSZWN0IGRlc2t0b3AgPSBkZXNrdG9wUmVjdCggdy0+aXNPbkN1cnJlbnREZXNr
dG9wKCkKLSAgICAgICAgPyBlZmZlY3RzLT5jdXJyZW50RGVza3RvcCgpIDogdy0+ZGVza3RvcCgp
LCB0cnVlICk7Ci0gICAgcmV0dXJuIFFSZWN0KCBkZXNrdG9wLngoKSArIHctPngoKSAvIHgsIGRl
c2t0b3AueSgpICsgdy0+eSgpIC8geSwKLSAgICAgICAgdy0+d2lkdGgoKSAvIHgsIHctPmhlaWdo
dCgpIC8geSApOworCisgICAgUVJlY3Qgc2NyZWVuUmVjdCA9IGVmZmVjdHMtPmNsaWVudEFyZWEo
IFNjcmVlbkFyZWEsIGVmZmVjdHMtPnNjcmVlbk51bWJlciggcG9zICksIDAgKTsKKyAgICBpbnQg
Z3ggPSBpbnQoKCBwb3MueCgpIC0gc2NyZWVuUmVjdC54KCkgKSAvICggc2NyZWVuUmVjdC53aWR0
aCgpIC8geCApKTsKKyAgICBpbnQgZ3kgPSBpbnQoKCBwb3MueSgpIC0gc2NyZWVuUmVjdC55KCkg
KSAvICggc2NyZWVuUmVjdC5oZWlnaHQoKSAvIHkgKSk7CisgICAgaWYoIGRlc2t0b3AgIT0gTlVM
TCApCisgICAgICAgIHsKKyAgICAgICAgaWYoIG9yaWVudGF0aW9uID09IFF0OjpIb3Jpem9udGFs
ICkKKyAgICAgICAgICAgICpkZXNrdG9wID0gZ3kgKiB5ICsgZ3ggKyAxOworICAgICAgICBlbHNl
CisgICAgICAgICAgICAqZGVza3RvcCA9IGd4ICogeCArIGd5ICsgMTsKKyAgICAgICAgfQorCisg
ICAgaWYoIG9uR3JpZCApCisgICAgICAgIHJldHVybiBRUG9pbnQoCisgICAgICAgICAgICBwb3Mu
eCgpICogeCArICggZGlzcGxheVdpZHRoKCkgLSBzY3JlZW5SZWN0LndpZHRoKCkgKSAqIGd4IC0g
c2NyZWVuUmVjdC54KCksCisgICAgICAgICAgICBwb3MueSgpICogeSArICggZGlzcGxheUhlaWdo
dCgpIC0gc2NyZWVuUmVjdC5oZWlnaHQoKSApICogZ3kgLSBzY3JlZW5SZWN0LnkoKSApOworICAg
IHJldHVybiBRUG9pbnQoCisgICAgICAgIHBvcy54KCkgKiB4IC0gc2NyZWVuUmVjdC53aWR0aCgp
ICogZ3ggLSBzY3JlZW5SZWN0LngoKSwKKyAgICAgICAgcG9zLnkoKSAqIHkgLSBzY3JlZW5SZWN0
LmhlaWdodCgpICogZ3kgLSBzY3JlZW5SZWN0LnkoKSApOwogICAgIH0KCi1FZmZlY3RXaW5kb3cq
IERlc2t0b3BHcmlkRWZmZWN0Ojp3aW5kb3dBdCggY29uc3QgUVBvaW50JiBwb3MsIFFSZWN0KiBy
ZWN0ICkgY29uc3QKK2ludCBEZXNrdG9wR3JpZEVmZmVjdDo6cG9zVG9EZXNrdG9wKCBjb25zdCBR
UG9pbnQmIHBvcyApIGNvbnN0CiAgICAgewotICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBOVUxMICYm
IHdpbmRvd1JlY3QoIHdpbmRvd19tb3ZlICkuY29udGFpbnMoIHBvcyApKQorICAgIGludCBkZXNr
dG9wOworICAgIHVuc2NhbGVQb3MoIHBvcywgJmRlc2t0b3AgKTsKKyAgICByZXR1cm4gZGVza3Rv
cDsKKyAgICB9CisKKy8vIFJldHVybnMgdGhlIHNlY3Rpb25zIG9mIHRoZSBkZXNrdG9wIHdoZXJl
IHRoZSB3aW5kb3cgaXMgdmlzaWJsZSB3aGVuIHNjYWxlZAorLy8gSXMgYSByZWdpb24gYXMgaXQn
cyBwb3NzaWJsZSBmb3IgcGFydHMgb2YgYSB3aW5kb3cgdG8gYmUgb24gc2VwZXJhdGUgc2NyZWVu
cworUVJlZ2lvbiBEZXNrdG9wR3JpZEVmZmVjdDo6d2luZG93UmVnaW9uKCBFZmZlY3RXaW5kb3cq
IHcgKSBjb25zdAorICAgIHsKKyAgICBpbnQgeCwgeSwgZ3gsIGd5OworICAgIFF0OjpPcmllbnRh
dGlvbiBvcmllbnRhdGlvbjsKKyAgICBlZmZlY3RzLT5jYWxjRGVza3RvcExheW91dCggJngsICZ5
LCAmb3JpZW50YXRpb24gKTsKKworICAgIC8vIFRvIHJldXNlIGNvZGUgd2UgY2hlYXQgYSBiaXQs
IGlmIG9ubHkgb24gb25lIGRlc2t0b3AgbG9vcCBleGVjdXRlcyBvbmNlCisgICAgUVJlZ2lvbiBy
ZWdpb247CisgICAgZm9yKCBpbnQgZGVza3RvcCA9IHctPmlzT25BbGxEZXNrdG9wcygpID8gMCA6
IHctPmRlc2t0b3AoKSAtIDE7CisgICAgICAgICBkZXNrdG9wIDwgZWZmZWN0cy0+bnVtYmVyT2ZE
ZXNrdG9wcygpOworICAgICAgICAgZGVza3RvcCsrICkKICAgICAgICAgewotICAgICAgICBpZigg
cmVjdCAhPSBOVUxMICkKLSAgICAgICAgICAgICpyZWN0ID0gd2luZG93UmVjdCggd2luZG93X21v
dmUgKTsKLSAgICAgICAgcmV0dXJuIHdpbmRvd19tb3ZlOyAvLyBoYXMgc3BlY2lhbCBwb3NpdGlv
biBhbmQgaXMgb24gdG9wCisgICAgICAgIC8vIEdldCB3aW5kb3cncyBkZXNrdG9wIGdyaWQgbG9j
YXRpb24KKyAgICAgICAgaWYoIG9yaWVudGF0aW9uID09IFF0OjpIb3Jpem9udGFsICkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIGd4ID0gZGVza3RvcCAlIHg7CisgICAgICAgICAgICBneSA9
IGRlc2t0b3AgLyB4OworICAgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICBneCA9IGRlc2t0b3AgLyB5OworICAgICAgICAgICAgZ3kgPSBkZXNrdG9w
ICUgeTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBmb3IoIGludCBzY3JlZW4gPSAwOyBzY3Jl
ZW4gPCBlZmZlY3RzLT5udW1TY3JlZW5zKCk7IHNjcmVlbisrICkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIFFSZWN0IHNjcmVlbkdlbyA9IGVmZmVjdHMtPmNsaWVudEFyZWEoIFNjcmVlbkFy
ZWEsIHNjcmVlbiwgMCApOworICAgICAgICAgICAgUVJlY3Qgb25TY3JlZW4gPSBzY3JlZW5HZW8g
JiBRUmVjdCggdy0+eCgpLCB3LT55KCksIHctPndpZHRoKCksIHctPmhlaWdodCgpICk7CisgICAg
ICAgICAgICBpZiggb25TY3JlZW4uaXNOdWxsKCkgKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgcmVnaW9uIHw9IFFSZWN0KAorICAgICAgICAgICAgICAgIHNjcmVlbkdl
by54KCkgKyAoIHNjcmVlbkdlby53aWR0aCgpICogZ3ggKyBvblNjcmVlbi54KCkgLSBzY3JlZW5H
ZW8ueCgpICkgLyB4LAorICAgICAgICAgICAgICAgIHNjcmVlbkdlby55KCkgKyAoIHNjcmVlbkdl
by5oZWlnaHQoKSAqIGd5ICsgb25TY3JlZW4ueSgpIC0gc2NyZWVuR2VvLnkoKSApIC8geSwKKyAg
ICAgICAgICAgICAgICBvblNjcmVlbi53aWR0aCgpIC8geCwgb25TY3JlZW4uaGVpZ2h0KCkgLyB5
ICk7CisgICAgICAgICAgICB9CisgICAgICAgIGlmKCAhdy0+aXNPbkFsbERlc2t0b3BzKCkgKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICByZXR1cm4gcmVnaW9uOworICAgIH0K
KworRWZmZWN0V2luZG93KiBEZXNrdG9wR3JpZEVmZmVjdDo6d2luZG93QXQoIGNvbnN0IFFQb2lu
dCYgcG9zICkgY29uc3QKKyAgICB7CisgICAgLy8gTGV0IHdpbmRvdyBsaXN0CiAgICAgRWZmZWN0
V2luZG93TGlzdCB3aW5kb3dzID0gZWZmZWN0cy0+c3RhY2tpbmdPcmRlcigpOwogICAgIC8vIHFS
ZXZlcnNlKCkKICAgICBFZmZlY3RXaW5kb3dMaXN0OjpJdGVyYXRvciBiZWdpbiA9IHdpbmRvd3Mu
YmVnaW4oKTsKQEAgLTM0OCwyMyArNDgzLDExIEBAIEVmZmVjdFdpbmRvdyogRGVza3RvcEdyaWRF
ZmZlY3Q6OndpbmRvd0EKICAgICAtLWVuZDsKICAgICB3aGlsZSggYmVnaW4gPCBlbmQgKQogICAg
ICAgICBxU3dhcCggKmJlZ2luKyssICplbmQtLSApOwotICAgIGludCB4LCB5OwotICAgIFF0OjpP
cmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBlZmZlY3RzLT5jYWxjRGVza3RvcExheW91dCgg
JngsICZ5LCAmb3JpZW50YXRpb24gKTsKKworICAgIC8vIFRPRE86IENvdWxkIG9wdGltaXplIGJ5
IHVzaW5nIHVuc2NhbGVQb3MoKQogICAgIGZvcmVhY2goIEVmZmVjdFdpbmRvdyogdywgd2luZG93
cyApCi0gICAgICAgIHsKLSAgICAgICAgLy8gZG9uJ3QgdXNlIHdpbmRvd1JlY3QoKSwgdGFrZSBz
cGVjaWFsIGNhcmUgb2Ygb24tYWxsLWRlc2t0b3Agd2luZG93cwotICAgICAgICBRUmVjdCBkZXNr
dG9wID0gZGVza3RvcFJlY3QoIHctPmlzT25BbGxEZXNrdG9wcygpCi0gICAgICAgICAgICA/IHBv
c1RvRGVza3RvcCggcG9zICkgOiB3LT5kZXNrdG9wKCksIHRydWUgKTsKLSAgICAgICAgUVJlY3Qg
ciggZGVza3RvcC54KCkgKyB3LT54KCkgLyB4LCBkZXNrdG9wLnkoKSArIHctPnkoKSAvIHksCi0g
ICAgICAgICAgICB3LT53aWR0aCgpIC8geCwgdy0+aGVpZ2h0KCkgLyB5ICk7Ci0gICAgICAgIGlm
KCByLmNvbnRhaW5zKCBwb3MgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCByZWN0
ICE9IE5VTEwgKQotICAgICAgICAgICAgICAgICpyZWN0ID0gcjsKKyAgICAgICAgaWYoIHdpbmRv
d1JlZ2lvbiggdyApLmNvbnRhaW5zKCBwb3MgKSkKICAgICAgICAgICAgIHJldHVybiB3OwotICAg
ICAgICAgICAgfQotICAgICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQoKQEAgLTQ0OSw3
ICs1NzIsNyBAQCB2b2lkIERlc2t0b3BHcmlkRWZmZWN0Ojp0b2dnbGUoKQogICAgIHsKICAgICBz
ZXRBY3RpdmUoICFhY3RpdmF0ZWQgKTsKICAgICB9Ci0KKwogdm9pZCBEZXNrdG9wR3JpZEVmZmVj
dDo6c2V0QWN0aXZlKCBib29sIGFjdGl2ZSApCiAgICAgewogICAgIGlmKCBlZmZlY3RzLT5hY3Rp
dmVGdWxsU2NyZWVuRWZmZWN0KCkgJiYgZWZmZWN0cy0+YWN0aXZlRnVsbFNjcmVlbkVmZmVjdCgp
ICE9IHRoaXMgKQpAQCAtNDc2LDkgKzU5OSw2IEBAIHZvaWQgRGVza3RvcEdyaWRFZmZlY3Q6OmZp
bmlzaCgpCiAgICAgaWYoIGtleWJvYXJkX2dyYWIgKQogICAgICAgICBlZmZlY3RzLT51bmdyYWJL
ZXlib2FyZCgpOwogICAgIGtleWJvYXJkX2dyYWIgPSBmYWxzZTsKLSAgICBpZiggd2luZG93X21v
dmUgIT0gTlVMTCApCi0gICAgICAgIGVmZmVjdHMtPnNldEVsZXZhdGVkV2luZG93KCB3aW5kb3df
bW92ZSwgZmFsc2UgKTsKLSAgICB3aW5kb3dfbW92ZSA9IE5VTEw7CiAgICAgZWZmZWN0cy0+ZGVz
dHJveUlucHV0V2luZG93KCBpbnB1dCApOwogICAgIGVmZmVjdHMtPnNldEFjdGl2ZUZ1bGxTY3Jl
ZW5FZmZlY3QoIDAgKTsKICAgICBlZmZlY3RzLT5hZGRSZXBhaW50RnVsbCgpOyAvLyB0byBnZXQg
cmlkIG9mIGhpZ2hsaWdodApAQCAtNDk1LDI3ICs2MTUsMjcgQEAgdm9pZCBEZXNrdG9wR3JpZEVm
ZmVjdDo6d2luZG93SW5wdXRNb3VzZQogICAgICAgICB7CiAgICAgICAgIC8vIGhpZ2hsaWdodCBk
ZXNrdG9wIHVuZGVyIG1vdXNlCiAgICAgICAgIGludCBkID0gcG9zVG9EZXNrdG9wKCBtZS0+cG9z
KCkpOwotICAgICAgICBpZiggZCAhPSBoaWdobGlnaHRlZF9kZXNrdG9wICkKLSAgICAgICAgICAg
IHNldEhpZ2hsaWdodGVkRGVza3RvcCggZCApOwogICAgICAgICBpZiggd2luZG93X21vdmUgIT0g
TlVMTCApIC8vIGhhbmRsZSB3aW5kb3cgbW92aW5nCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICB3YXNfd2luZG93X21vdmUgPSB0cnVlOwotICAgICAgICAgICAgLy8gd2luZG93UmVjdCgpIGhh
bmRsZXMgd2luZG93X21vdmUgc3BlY2lhbGx5Ci0gICAgICAgICAgICBlZmZlY3RzLT5hZGRSZXBh
aW50KCB3aW5kb3dSZWN0KCB3aW5kb3dfbW92ZSApKTsKLSAgICAgICAgICAgIHdpbmRvd19tb3Zl
X3BvcyA9IG1lLT5wb3MoKSArIHdpbmRvd19tb3ZlX2RpZmY7Ci0gICAgICAgICAgICBlZmZlY3Rz
LT5hZGRSZXBhaW50KCB3aW5kb3dSZWN0KCB3aW5kb3dfbW92ZSApKTsKKyAgICAgICAgICAgIGVm
ZmVjdHMtPmFkZFJlcGFpbnQoIHdpbmRvd1JlZ2lvbiggd2luZG93X21vdmUgKSk7CisgICAgICAg
ICAgICBlZmZlY3RzLT5tb3ZlV2luZG93KCB3aW5kb3dfbW92ZSwgdW5zY2FsZVBvcyggbWUtPnBv
cygpLCBOVUxMLCBmYWxzZSApICsgd2luZG93X21vdmVfZGlmZiApOworICAgICAgICAgICAgaWYo
IGQgIT0gaGlnaGxpZ2h0ZWRfZGVza3RvcCAmJiAhd2luZG93X21vdmUtPmlzT25BbGxEZXNrdG9w
cygpICkKKyAgICAgICAgICAgICAgICBlZmZlY3RzLT53aW5kb3dUb0Rlc2t0b3AoIHdpbmRvd19t
b3ZlLCBkICk7IC8vIE5vdCB0cnVlIGFsbCBkZXNrdG9wIG1vdmUKKyAgICAgICAgICAgIGVmZmVj
dHMtPmFkZFJlcGFpbnQoIHdpbmRvd1JlZ2lvbiggd2luZG93X21vdmUgKSk7CiAgICAgICAgICAg
ICB9CisgICAgICAgIGlmKCBkICE9IGhpZ2hsaWdodGVkX2Rlc2t0b3AgKQorICAgICAgICAgICAg
c2V0SGlnaGxpZ2h0ZWREZXNrdG9wKCBkICk7CiAgICAgICAgIH0KICAgICBpZiggZS0+dHlwZSgp
ID09IFFFdmVudDo6TW91c2VCdXR0b25QcmVzcyApCiAgICAgICAgIHsKICAgICAgICAgaWYoIG1l
LT5idXR0b25zKCkgPT0gUXQ6OkxlZnRCdXR0b24gKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgUVJlY3QgcmVjdDsKLSAgICAgICAgICAgIEVmZmVjdFdpbmRvdyogdyA9IHdpbmRvd0F0KCBt
ZS0+cG9zKCksICZyZWN0ICk7CisgICAgICAgICAgICBFZmZlY3RXaW5kb3cqIHcgPSB3aW5kb3dB
dCggbWUtPnBvcygpKTsKICAgICAgICAgICAgIGlmKCB3ICE9IE5VTEwgJiYgdy0+aXNNb3ZhYmxl
KCkpCiAgICAgICAgICAgICAgICAgeyAvLyBwcmVwYXJlIGl0IGZvciBtb3ZpbmcKLSAgICAgICAg
ICAgICAgICB3aW5kb3dfbW92ZV9wb3MgPSByZWN0LnRvcExlZnQoKTsKLSAgICAgICAgICAgICAg
ICB3aW5kb3dfbW92ZV9kaWZmID0gd2luZG93X21vdmVfcG9zIC0gbWUtPnBvcygpOworICAgICAg
ICAgICAgICAgIHdpbmRvd19tb3ZlX2RpZmYgPSB3LT5wb3MoKSAtIHVuc2NhbGVQb3MoIG1lLT5w
b3MoKSwgTlVMTCwgZmFsc2UgKTsKICAgICAgICAgICAgICAgICB3aW5kb3dfbW92ZSA9IHc7CiAg
ICAgICAgICAgICAgICAgZWZmZWN0cy0+c2V0RWxldmF0ZWRXaW5kb3coIHdpbmRvd19tb3ZlLCB0
cnVlICk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTMzLDI2ICs2NTMsMTQgQEAgdm9pZCBEZXNr
dG9wR3JpZEVmZmVjdDo6d2luZG93SW5wdXRNb3VzZQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgIGlmKCBlLT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1
dHRvblJlbGVhc2UgJiYgbWUtPmJ1dHRvbnMoKSA9PSAwICkKKyAgICBpZiggZS0+dHlwZSgpID09
IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlICYmIG1lLT5idXR0b24oKSA9PSBRdDo6TGVmdEJ1
dHRvbiApCiAgICAgICAgIHsKLSAgICAgICAgaWYoIHdhc193aW5kb3dfbW92ZSApCisgICAgICAg
IGlmKCB3aW5kb3dfbW92ZSAhPSBOVUxMICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
KCB3aW5kb3dfbW92ZSAhPSBOVUxMICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgUVJlY3QgcmVjdCA9IHdpbmRvd1JlY3QoIHdpbmRvd19tb3ZlICk7Ci0gICAgICAgICAgICAg
ICAgaW50IGRlc2t0b3AgPSBwb3NUb0Rlc2t0b3AoIHJlY3QuY2VudGVyKCkpOwotICAgICAgICAg
ICAgICAgIC8vIHRvIGRlc2t0b3AncyBjb29yZGluYXRlcwotICAgICAgICAgICAgICAgIHJlY3Qu
dHJhbnNsYXRlKCAtZGVza3RvcFJlY3QoIGRlc2t0b3AsIHRydWUgKS50b3BMZWZ0KCkpOwotICAg
ICAgICAgICAgICAgIGludCB4LCB5OwotICAgICAgICAgICAgICAgIFF0OjpPcmllbnRhdGlvbiBv
cmllbnRhdGlvbjsKLSAgICAgICAgICAgICAgICBlZmZlY3RzLT5jYWxjRGVza3RvcExheW91dCgg
JngsICZ5LCAmb3JpZW50YXRpb24gKTsKLSAgICAgICAgICAgICAgICBlZmZlY3RzLT5tb3ZlV2lu
ZG93KCB3aW5kb3dfbW92ZSwgUVBvaW50KCByZWN0LngoKSAqIHgsIHJlY3QueSgpICogeSApKTsK
LSAgICAgICAgICAgICAgICBlZmZlY3RzLT53aW5kb3dUb0Rlc2t0b3AoIHdpbmRvd19tb3ZlLCBk
ZXNrdG9wICk7Ci0gICAgICAgICAgICAgICAgZWZmZWN0cy0+c2V0RWxldmF0ZWRXaW5kb3coIHdp
bmRvd19tb3ZlLCBmYWxzZSApOwotICAgICAgICAgICAgICAgIHdpbmRvd19tb3ZlID0gTlVMTDsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlZmZlY3RzLT5zZXRFbGV2YXRlZFdpbmRv
dyggd2luZG93X21vdmUsIGZhbHNlICk7CisgICAgICAgICAgICB3aW5kb3dfbW92ZSA9IE5VTEw7
CiAgICAgICAgICAgICB9Ci0gICAgICAgIGlmKCAhd2FzX3dpbmRvd19tb3ZlICYmIG1lLT5idXR0
b24oKSA9PSBRdDo6TGVmdEJ1dHRvbiApCisgICAgICAgIGlmKCAhd2FzX3dpbmRvd19tb3ZlICkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGVmZmVjdHMtPnNldEN1cnJlbnREZXNrdG9wKCBw
b3NUb0Rlc2t0b3AoIG1lLT5wb3MoKSkpOwogICAgICAgICAgICAgc2V0QWN0aXZlKCBmYWxzZSAp
OwpAQCAtNTkzLDIwICs3MDEsMTYgQEAgdm9pZCBEZXNrdG9wR3JpZEVmZmVjdDo6Z3JhYmJlZEtl
eWJvYXJkRQogICAgICAgICBzd2l0Y2goIGUtPmtleSgpKQogICAgICAgICAgICAgeyAvLyB3cmFw
IG9ubHkgb24gYXV0b3JlcGVhdAogICAgICAgICAgICAgY2FzZSBRdDo6S2V5X0xlZnQ6Ci0gICAg
ICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWREZXNrdG9wKCBlZmZlY3RzLT5kZXNrdG9wVG9MZWZ0
KCBoaWdobGlnaHRlZF9kZXNrdG9wLAotICAgICAgICAgICAgICAgICAgICAhZS0+aXNBdXRvUmVw
ZWF0KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERlc2t0b3AoIGVmZmVjdHMt
PmRlc2t0b3BUb0xlZnQoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsICFlLT5pc0F1dG9SZXBlYXQoKSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRdDo6S2V5X1JpZ2h0
OgotICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkRGVza3RvcCggZWZmZWN0cy0+ZGVza3Rv
cFRvUmlnaHQoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsCi0gICAgICAgICAgICAgICAgICAgICFlLT5p
c0F1dG9SZXBlYXQoKSkpOworICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkRGVza3RvcCgg
ZWZmZWN0cy0+ZGVza3RvcFRvUmlnaHQoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsICFlLT5pc0F1dG9S
ZXBlYXQoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRdDo6
S2V5X1VwOgotICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkRGVza3RvcCggZWZmZWN0cy0+
ZGVza3RvcFVwKCBoaWdobGlnaHRlZF9kZXNrdG9wLAotICAgICAgICAgICAgICAgICAgICAhZS0+
aXNBdXRvUmVwZWF0KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERlc2t0b3Ao
IGVmZmVjdHMtPmRlc2t0b3BVcCggaGlnaGxpZ2h0ZWRfZGVza3RvcCwgIWUtPmlzQXV0b1JlcGVh
dCgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFF0OjpLZXlf
RG93bjoKLSAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERlc2t0b3AoIGVmZmVjdHMtPmRl
c2t0b3BEb3duKCBoaWdobGlnaHRlZF9kZXNrdG9wLAotICAgICAgICAgICAgICAgICAgICAhZS0+
aXNBdXRvUmVwZWF0KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERlc2t0b3Ao
IGVmZmVjdHMtPmRlc2t0b3BEb3duKCBoaWdobGlnaHRlZF9kZXNrdG9wLCAhZS0+aXNBdXRvUmVw
ZWF0KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUXQ6Oktl
eV9Fc2NhcGU6CiAgICAgICAgICAgICAgICAgc2V0QWN0aXZlKCBmYWxzZSApOwpAQCAtNjI3LDkg
KzczMSwxMSBAQCB2b2lkIERlc2t0b3BHcmlkRWZmZWN0OjpzZXRIaWdobGlnaHRlZERlCiAgICAg
ewogICAgIGlmKCBkID09IGhpZ2hsaWdodGVkX2Rlc2t0b3AgfHwgZCA8PSAwIHx8IGQgPiBlZmZl
Y3RzLT5udW1iZXJPZkRlc2t0b3BzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlZmZlY3RzLT5h
ZGRSZXBhaW50KCBkZXNrdG9wUmVjdCggaGlnaGxpZ2h0ZWRfZGVza3RvcCwgdHJ1ZSApKTsKKyAg
ICBmb3IoIGludCBzY3JlZW4gPSAwOyBzY3JlZW4gPCBlZmZlY3RzLT5udW1TY3JlZW5zKCk7IHNj
cmVlbisrICkKKyAgICAgICAgZWZmZWN0cy0+YWRkUmVwYWludCggc2NyZWVuUmVjdCggaGlnaGxp
Z2h0ZWRfZGVza3RvcCwgc2NyZWVuLCB0cnVlICkgKTsKICAgICBoaWdobGlnaHRlZF9kZXNrdG9w
ID0gZDsKLSAgICBlZmZlY3RzLT5hZGRSZXBhaW50KCBkZXNrdG9wUmVjdCggaGlnaGxpZ2h0ZWRf
ZGVza3RvcCwgdHJ1ZSApKTsKKyAgICBmb3IoIGludCBzY3JlZW4gPSAwOyBzY3JlZW4gPCBlZmZl
Y3RzLT5udW1TY3JlZW5zKCk7IHNjcmVlbisrICkKKyAgICAgICAgZWZmZWN0cy0+YWRkUmVwYWlu
dCggc2NyZWVuUmVjdCggaGlnaGxpZ2h0ZWRfZGVza3RvcCwgc2NyZWVuLCB0cnVlICkgKTsKICAg
ICB9CgogYm9vbCBEZXNrdG9wR3JpZEVmZmVjdDo6Ym9yZGVyQWN0aXZhdGVkKCBFbGVjdHJpY0Jv
cmRlciBib3JkZXIgKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26111</attachid>
            <date>2008-07-14 16:05:43 +0000</date>
            <delta_ts>2008-07-14 16:05:43 +0000</delta_ts>
            <desc>Patch file, r3</desc>
            <filename>desktopgrid_multi-monitor_r3.diff</filename>
            <type>text/plain</type>
            <size>21142</size>
            <attacher>lucas</attacher>
            
              <data encoding="base64">SW5kZXg6IGVmZmVjdHMvZGVza3RvcGdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZmZlY3RzL2Rlc2t0
b3BncmlkLmgJKHJldmlzaW9uIDgzMTM4NCkKKysrIGVmZmVjdHMvZGVza3RvcGdyaWQuaAkod29y
a2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QuCiAKIENvcHlyaWdodCAoQykgMjAwNyBMdWJvcyBMdW5hayA8bC5sdW5ha0BrZGUu
b3JnPgorQ29weXJpZ2h0IChDKSAyMDA4IEx1Y2FzIE11cnJheSA8YWRtaW5AdW5kZWZpbmVkZmly
ZS5jb20+CiAKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDgsMTQgKzQ5LDE2IEBAIGNs
YXNzIERlc2t0b3BHcmlkRWZmZWN0CiAgICAgICAgIHZvaWQgdG9nZ2xlKCk7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgUVJlY3QgZGVza3RvcFJlY3QoIGludCBkZXNrdG9wLCBib29sIHNjYWxlZCAp
IGNvbnN0OworICAgICAgICBRUmVjdCBzY3JlZW5SZWN0KCBpbnQgZGVza3RvcCwgaW50IHNjcmVl
biwgYm9vbCBzY2FsZWQsIGJvb2wgbWFzayA9IHRydWUgKSBjb25zdDsKKyAgICAgICAgUVBvaW50
IHVuc2NhbGVQb3MoIGNvbnN0IFFQb2ludCYgcG9zLCBpbnQqIGRlc2t0b3AgPSBOVUxMLCBib29s
IG9uR3JpZCA9IHRydWUgKSBjb25zdDsKICAgICAgICAgaW50IHBvc1RvRGVza3RvcCggY29uc3Qg
UVBvaW50JiBwb3MgKSBjb25zdDsKLSAgICAgICAgUVJlY3Qgd2luZG93UmVjdCggRWZmZWN0V2lu
ZG93KiB3ICkgY29uc3Q7IC8vIHJldHVybnMgYWx3YXlzIHNjYWxlZAotICAgICAgICBFZmZlY3RX
aW5kb3cqIHdpbmRvd0F0KCBjb25zdCBRUG9pbnQmIHBvcywgUVJlY3QqIHJlY3QgPSBOVUxMICkg
Y29uc3Q7CisgICAgICAgIFFSZWdpb24gd2luZG93UmVnaW9uKCBFZmZlY3RXaW5kb3cqIHcgKSBj
b25zdDsKKyAgICAgICAgRWZmZWN0V2luZG93KiB3aW5kb3dBdCggY29uc3QgUVBvaW50JiBwb3Mg
KSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRBY3RpdmUoIGJvb2wgYWN0aXZlICk7CiAgICAgICAg
IHZvaWQgc2V0dXAoKTsKICAgICAgICAgdm9pZCBmaW5pc2goKTsKICAgICAgICAgdm9pZCBwYWlu
dFNsaWRlKCBpbnQgbWFzaywgUVJlZ2lvbiByZWdpb24sIGNvbnN0IFNjcmVlblBhaW50RGF0YSYg
ZGF0YSApOwotICAgICAgICB2b2lkIHBhaW50U2NyZWVuRGVza3RvcCggaW50IGRlc2t0b3AsIGlu
dCBtYXNrLCBRUmVnaW9uIHJlZ2lvbiwgU2NyZWVuUGFpbnREYXRhIGRhdGEgKTsKKyAgICAgICAg
dm9pZCBwYWludFNjcmVlbkRlc2t0b3AoIGludCBkZXNrdG9wLCBpbnQgc2NyZWVuLCBpbnQgbWFz
aywgUVJlZ2lvbiByZWdpb24sIFNjcmVlblBhaW50RGF0YSBkYXRhICk7CiAgICAgICAgIHZvaWQg
c2xpZGVEZXNrdG9wQ2hhbmdlZCggaW50IG9sZCApOwogICAgICAgICB2b2lkIHNldEhpZ2hsaWdo
dGVkRGVza3RvcCggaW50IGRlc2t0b3AgKTsKICAgICAgICAgYm9vbCBhY3RpdmF0ZWQ7CkBAIC02
Nyw3ICs3MCw2IEBAIGNsYXNzIERlc2t0b3BHcmlkRWZmZWN0CiAgICAgICAgIGJvb2wgd2FzX3dp
bmRvd19tb3ZlOwogICAgICAgICBFZmZlY3RXaW5kb3cqIHdpbmRvd19tb3ZlOwogICAgICAgICBR
UG9pbnQgd2luZG93X21vdmVfZGlmZjsKLSAgICAgICAgUVBvaW50IHdpbmRvd19tb3ZlX3BvczsK
ICAgICAgICAgYm9vbCBzbGlkZUVuYWJsZWQ7CiAgICAgICAgIGJvb2wgc2xpZGU7CiAgICAgICAg
IFFQb2ludCBzbGlkZV9zdGFydF9wb3M7CkluZGV4OiBlZmZlY3RzL2Rlc2t0b3BncmlkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBlZmZlY3RzL2Rlc2t0b3BncmlkLmNwcAkocmV2aXNpb24gODMxMzg0KQor
KysgZWZmZWN0cy9kZXNrdG9wZ3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBA
CiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0LgogCiBDb3B5cmlnaHQgKEMp
IDIwMDcgTHVib3MgTHVuYWsgPGwubHVuYWtAa2RlLm9yZz4KK0NvcHlyaWdodCAoQykgMjAwOCBM
dWNhcyBNdXJyYXkgPGFkbWluQHVuZGVmaW5lZGZpcmUuY29tPgogCiBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkKQEAgLTQwLDYgKzQxLDcgQEAgRGVza3RvcEdyaWRFZmZlY3Q6OkRlc2t0b3BHcmlk
RWZmZWN0KCkKICAgICAsIGtleWJvYXJkX2dyYWIoIGZhbHNlICkKICAgICAsIHdhc193aW5kb3df
bW92ZSggZmFsc2UgKQogICAgICwgd2luZG93X21vdmUoIE5VTEwgKQorICAgICwgd2luZG93X21v
dmVfZGlmZigpCiAgICAgLCBzbGlkZSggZmFsc2UgKQogICAgIHsKICAgICBLQWN0aW9uQ29sbGVj
dGlvbiogYWN0aW9uQ29sbGVjdGlvbiA9IG5ldyBLQWN0aW9uQ29sbGVjdGlvbiggdGhpcyApOwpA
QCAtMTE0LDEyICsxMTYsNiBAQCB2b2lkIERlc2t0b3BHcmlkRWZmZWN0OjpwcmVQYWludFdpbmRv
dyggCiAgICAgICAgICAgICB3LT5lbmFibGVQYWludGluZyggRWZmZWN0V2luZG93OjpQQUlOVF9E
SVNBQkxFRF9CWV9ERVNLVE9QICk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHctPmRpc2Fi
bGVQYWludGluZyggRWZmZWN0V2luZG93OjpQQUlOVF9ESVNBQkxFRF9CWV9ERVNLVE9QICk7Ci0g
ICAgICAgIGlmKCB3ID09IHdpbmRvd19tb3ZlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
IGRhdGEuc2V0VHJhbnNmb3JtZWQoKTsKLSAgICAgICAgICAgIGlmKCB3LT5pc09uQWxsRGVza3Rv
cHMoKSAmJiBwYWludGluZ19kZXNrdG9wICE9IHBvc1RvRGVza3RvcCggd2luZG93X21vdmVfcG9z
IC0gd2luZG93X21vdmVfZGlmZiApKQotICAgICAgICAgICAgICAgIHctPmRpc2FibGVQYWludGlu
ZyggRWZmZWN0V2luZG93OjpQQUlOVF9ESVNBQkxFRF9CWV9ERVNLVE9QICk7Ci0gICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICBlZmZlY3RzLT5wcmVQYWludFdpbmRvdyggdywgZGF0YSwgdGlt
ZSApOwogICAgIH0KQEAgLTEzNiwzNCArMTMyLDY0IEBAIHZvaWQgRGVza3RvcEdyaWRFZmZlY3Q6
OnBhaW50U2NyZWVuKCBpbnQKICAgICAgICAgcGFpbnRTbGlkZSggbWFzaywgcmVnaW9uLCBkYXRh
ICk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIGludCBkZXNrdG9wX3dpdGhfbW92
ZSA9IC0xOwotICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBOVUxMICkKLSAgICAgICAgZGVza3RvcF93
aXRoX21vdmUgPSB3aW5kb3dfbW92ZS0+aXNPbkFsbERlc2t0b3BzKCkKLSAgICAgICAgICAgID8g
cG9zVG9EZXNrdG9wKCB3aW5kb3dfbW92ZV9wb3MgLSB3aW5kb3dfbW92ZV9kaWZmICkgOiB3aW5k
b3dfbW92ZS0+ZGVza3RvcCgpOwotICAgIGZvciggaW50IGRlc2t0b3AgPSAxOwotICAgICAgICAg
ZGVza3RvcCA8PSBlZmZlY3RzLT5udW1iZXJPZkRlc2t0b3BzKCk7Ci0gICAgICAgICArK2Rlc2t0
b3AgKQorICAgIGZvciggaW50IHNjcmVlbiA9IDA7IHNjcmVlbiA8IGVmZmVjdHMtPm51bVNjcmVl
bnMoKTsgc2NyZWVuKysgKQogICAgICAgICB7Ci0gICAgICAgIGlmKCBkZXNrdG9wICE9IGRlc2t0
b3Bfd2l0aF9tb3ZlICkKKyAgICAgICAgUVJlY3Qgc2NyZWVuR2VvRnVsbCA9IHNjcmVlblJlY3Qo
IDEsIHNjcmVlbiwgZmFsc2UgKTsgLy8gRWZmZWN0IGFsd2F5cyBvbiBkZXNrdG9wIDEKKyAgICAg
ICAgZm9yKCBpbnQgZGVza3RvcCA9IDE7IGRlc2t0b3AgPD0gZWZmZWN0cy0+bnVtYmVyT2ZEZXNr
dG9wcygpOyBkZXNrdG9wKysgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgUGFpbnRDbGlw
cGVyIHBjKCBkZXNrdG9wUmVjdCggZGVza3RvcCwgdHJ1ZSApKTsKLSAgICAgICAgICAgIHBhaW50
U2NyZWVuRGVza3RvcCggZGVza3RvcCwgbWFzaywgcmVnaW9uLCBkYXRhICk7CisgICAgICAgICAg
ICBpZiggIXdpbmRvd19tb3ZlIHx8ICggd2luZG93X21vdmUgJiYgZGVza3RvcCAhPSB3aW5kb3df
bW92ZS0+ZGVza3RvcCgpICkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFBh
aW50Q2xpcHBlciBwYyggc2NyZWVuR2VvRnVsbCAmIHNjcmVlblJlY3QoIGRlc2t0b3AsIHNjcmVl
biwgdHJ1ZSApKTsKKyAgICAgICAgICAgICAgICBwYWludFNjcmVlbkRlc2t0b3AoIGRlc2t0b3As
IHNjcmVlbiwgbWFzaywgcmVnaW9uLCBkYXRhICk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgLy8gcGFpbnQgdGhlIGRlc2t0b3Agd2l0aCB0aGUgd2lu
ZG93IGJlaW5nIG1vdmVkIGFzIHRoZSBsYXN0IG9uZSwgaS5lLiBvbiB0b3Agb2Ygb3RoZXJzCi0g
ICAgaWYoIGRlc2t0b3Bfd2l0aF9tb3ZlICE9IC0xICkKLSAgICAgICAgewotICAgICAgICBRUmVn
aW9uIHBhaW50cmVnID0gZGVza3RvcFJlY3QoIGRlc2t0b3Bfd2l0aF9tb3ZlLCB0cnVlICk7IC8v
IHBhaW50IG9ubHkgdGhlIGRlc2t0b3AKLSAgICAgICAgcGFpbnRyZWcgfD0gd2luZG93UmVjdCgg
d2luZG93X21vdmUgKTsgLy8gYW5kIHdoZXJldmVyIHRoZSBtb3ZlZCB3aW5kb3cgaXMKLSAgICAg
ICAgUGFpbnRDbGlwcGVyIHBjKCBwYWludHJlZyApOwotICAgICAgICBwYWludFNjcmVlbkRlc2t0
b3AoIGRlc2t0b3Bfd2l0aF9tb3ZlLCBtYXNrLCByZWdpb24sIGRhdGEgKTsKKyAgICBpZiggd2lu
ZG93X21vdmUgKQorICAgICAgICB7IC8vIEFsd2F5cyBwYWludCB0aGUgZGVza3RvcCB3aXRoIHRo
ZSBtb3Zpbmcgd2luZG93IGxhc3QKKyAgICAgICAgZm9yKCBpbnQgc2NyZWVuID0gMDsgc2NyZWVu
IDwgZWZmZWN0cy0+bnVtU2NyZWVucygpOyBzY3JlZW4rKyApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICBRUmVjdCBzY3JlZW5HZW9GdWxsID0gc2NyZWVuUmVjdCggMSwgc2NyZWVuLCBmYWxz
ZSApOyAvLyBFZmZlY3QgYWx3YXlzIG9uIGRlc2t0b3AgMQorICAgICAgICAgICAgUVJlY3Qgc2Ny
ZWVuR2VvID0gZWZmZWN0cy0+Y2xpZW50QXJlYSggU2NyZWVuQXJlYSwgc2NyZWVuLCAwICk7Cisg
ICAgICAgICAgICBpbnQgZGVza3RvcCA9IHdpbmRvd19tb3ZlLT5kZXNrdG9wKCk7CisKKyAgICAg
ICAgICAgIC8vIE9ubHkgYWRkIHdpbmRvdyBtYXNrIG9uIHRoZSBzY3JlZW4gd2l0aCB0aGUgbW91
c2UgcG9pbnRlcgorICAgICAgICAgICAgaWYoIHNjcmVlbkdlby5jb250YWlucyggd2luZG93X21v
dmUtPnBvcygpIC0gd2luZG93X21vdmVfZGlmZiApKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpbnQgeCwgeSwgZ3gsIGd5OworICAgICAgICAgICAgICAgIFF0OjpPcmllbnRh
dGlvbiBvcmllbnRhdGlvbjsKKyAgICAgICAgICAgICAgICBlZmZlY3RzLT5jYWxjRGVza3RvcExh
eW91dCggJngsICZ5LCAmb3JpZW50YXRpb24gKTsKKyAgICAgICAgICAgICAgICBpZiggb3JpZW50
YXRpb24gPT0gUXQ6Okhvcml6b250YWwgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGd4ID0gKCBkZXNrdG9wIC0gMSApICUgeDsKKyAgICAgICAgICAgICAgICAg
ICAgZ3kgPSAoIGRlc2t0b3AgLSAxICkgLyB4OworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGd4ID0gKCBkZXNrdG9wIC0gMSApIC8geTsKKyAgICAgICAgICAgICAgICAgICAgZ3kgPSAo
IGRlc2t0b3AgLSAxICkgJSB5OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBRUmVnaW9uIHdpbmRvd1JlZygKKyAgICAgICAgICAgICAgICAgICAgc2NyZWVuR2VvLngo
KSArICggc2NyZWVuR2VvLndpZHRoKCkgKiBneCArIHdpbmRvd19tb3ZlLT54KCkgLSBzY3JlZW5H
ZW8ueCgpICkgLyB4LAorICAgICAgICAgICAgICAgICAgICBzY3JlZW5HZW8ueSgpICsgKCBzY3Jl
ZW5HZW8uaGVpZ2h0KCkgKiBneSArIHdpbmRvd19tb3ZlLT55KCkgLSBzY3JlZW5HZW8ueSgpICkg
LyB5LAorICAgICAgICAgICAgICAgICAgICB3aW5kb3dfbW92ZS0+d2lkdGgoKSAvIHgsIHdpbmRv
d19tb3ZlLT5oZWlnaHQoKSAvIHkgKTsKKworICAgICAgICAgICAgICAgIFBhaW50Q2xpcHBlciBw
Yyggd2luZG93UmVnIHwgKCBzY3JlZW5HZW9GdWxsICYgc2NyZWVuUmVjdCggZGVza3RvcCwgc2Ny
ZWVuLCB0cnVlICkpKTsKKyAgICAgICAgICAgICAgICBwYWludFNjcmVlbkRlc2t0b3AoIGRlc2t0
b3AsIHNjcmVlbiwgbWFzaywgcmVnaW9uLCBkYXRhICk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYWludENs
aXBwZXIgcGMoIHNjcmVlbkdlb0Z1bGwgJiBzY3JlZW5SZWN0KCBkZXNrdG9wLCBzY3JlZW4sIHRy
dWUgKSk7CisgICAgICAgICAgICAgICAgcGFpbnRTY3JlZW5EZXNrdG9wKCBkZXNrdG9wLCBzY3Jl
ZW4sIG1hc2ssIHJlZ2lvbiwgZGF0YSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAotdm9pZCBEZXNrdG9wR3JpZEVmZmVjdDo6cGFpbnRTY3Jl
ZW5EZXNrdG9wKCBpbnQgZGVza3RvcCwgaW50IG1hc2ssIFFSZWdpb24gcmVnaW9uLCBTY3JlZW5Q
YWludERhdGEgZGF0YSApCit2b2lkIERlc2t0b3BHcmlkRWZmZWN0OjpwYWludFNjcmVlbkRlc2t0
b3AoIGludCBkZXNrdG9wLCBpbnQgc2NyZWVuLCBpbnQgbWFzaywgUVJlZ2lvbiByZWdpb24sIFNj
cmVlblBhaW50RGF0YSBkYXRhICkKICAgICB7Ci0gICAgUVJlY3QgcmVjdCA9IGRlc2t0b3BSZWN0
KCBkZXNrdG9wLCB0cnVlICk7Ci0gICAgaWYoIHJlZ2lvbi5jb250YWlucyggcmVjdCApKSAvLyB0
aGlzIGRlc2t0b3AgbmVlZHMgcGFpbnRpbmcKKyAgICBRUmVjdCByZWN0ID0gc2NyZWVuUmVjdCgg
ZGVza3RvcCwgc2NyZWVuLCB0cnVlLCBmYWxzZSApOworICAgIGlmKCByZWdpb24uY29udGFpbnMo
IHJlY3QgKSkgLy8gdGhpcyBzY3JlZW4gbmVlZHMgcGFpbnRpbmcKICAgICAgICAgewogICAgICAg
ICBwYWludGluZ19kZXNrdG9wID0gZGVza3RvcDsKICAgICAgICAgU2NyZWVuUGFpbnREYXRhIGQg
PSBkYXRhOwpAQCAtMjU3LDIxICsyODMsOSBAQCB2b2lkIERlc2t0b3BHcmlkRWZmZWN0OjpwYWlu
dFdpbmRvdyggRWZmCiAgICAgICAgICAgICBkYXRhLnlUcmFuc2xhdGUgLT0gc2xpZGVfcGFpbnRp
bmdfZGlmZi55KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICBlbHNlIGlmKCBtVGlt
ZUxpbmUudmFsdWUoKSAhPSAwICkKLSAgICAgICAgewotICAgICAgICBpZiggdyA9PSB3aW5kb3df
bW92ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCwgeTsKLSAgICAgICAgICAg
IFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdHMtPmNhbGNE
ZXNrdG9wTGF5b3V0KCAmeCwgJnksICZvcmllbnRhdGlvbiApOwotICAgICAgICAgICAgUVJlY3Qg
ZGVza3RvcCA9IGRlc2t0b3BSZWN0KCBwYWludGluZ19kZXNrdG9wLCBmYWxzZSApOwotICAgICAg
ICAgICAgZGF0YS54VHJhbnNsYXRlICs9IHdpbmRvd19tb3ZlX3Bvcy54KCkgKiB4IC0gKCBkZXNr
dG9wLngoKSArIHctPngoKSk7Ci0gICAgICAgICAgICBkYXRhLnlUcmFuc2xhdGUgKz0gd2luZG93
X21vdmVfcG9zLnkoKSAqIHkgLSAoIGRlc2t0b3AueSgpICsgdy0+eSgpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiggcGFpbnRpbmdfZGVza3RvcCAhPSBoaWdobGlnaHRlZF9kZXNr
dG9wICkKLSAgICAgICAgICAgIGRhdGEuYnJpZ2h0bmVzcyAqPSAwLjc7Ci0gICAgICAgIH0KLSAg
ICBlZmZlY3RzLT5wYWludFdpbmRvdyggdywgbWFzaywgcmVnaW9uLCBkYXRhICk7ICAgIAorICAg
IGVsc2UgaWYoIG1UaW1lTGluZS52YWx1ZSgpICE9IDAgJiYgcGFpbnRpbmdfZGVza3RvcCAhPSBo
aWdobGlnaHRlZF9kZXNrdG9wICkKKyAgICAgICAgZGF0YS5icmlnaHRuZXNzICo9IDAuNzsgLy8g
VE9ETzogV2luZG93cyBvbiBhbGwgZGVza3RvcHMgZmxpY2tlcgorICAgIGVmZmVjdHMtPnBhaW50
V2luZG93KCB3LCBtYXNrLCByZWdpb24sIGRhdGEgKTsKICAgICB9CiAKIHZvaWQgRGVza3RvcEdy
aWRFZmZlY3Q6OnBvc3RQYWludFNjcmVlbigpCkBAIC0zMDgsMzkgKzMyMiwxNjAgQEAgUVJlY3Qg
RGVza3RvcEdyaWRFZmZlY3Q6OmRlc2t0b3BSZWN0KCBpbgogICAgIHJldHVybiByZWN0OwogICAg
IH0KIAotaW50IERlc2t0b3BHcmlkRWZmZWN0Ojpwb3NUb0Rlc2t0b3AoIGNvbnN0IFFQb2ludCYg
cG9zICkgY29uc3QKKy8vIEdpdmVzIGEgcG9zaXRpb24gb2YgdGhlIGdpdmVuIGRlc2t0b3Agc2Ny
ZWVuIHdoZW4gYWxsIGRlc2t0b3BzIGFyZSBhcnJhbmdlZCBpbiBhIGdyaWQKKy8vIFRoaXMgaXMg
ZGlmZmVyZW50IHRvIGRlc2t0b3BSZWN0IGFzIGl0IHRha2VzIGludG8gYWNjb3VudCBlYWNoIHNj
cmVlbiByZWxhdGl2ZSBwb3NpdGlvbiBzZXBlcmF0ZWx5CitRUmVjdCBEZXNrdG9wR3JpZEVmZmVj
dDo6c2NyZWVuUmVjdCggaW50IGRlc2t0b3AsIGludCBzY3JlZW4sIGJvb2wgc2NhbGVkLCBib29s
IG1hc2sgKSBjb25zdAogICAgIHsKLSAgICBmb3IoIGludCBkZXNrdG9wID0gMTsgLy8gVE9ETyBj
b3VsZCBiZSBwZXJoYXBzIG9wdGltaXplZAotICAgICAgICAgZGVza3RvcCA8PSBlZmZlY3RzLT5u
dW1iZXJPZkRlc2t0b3BzKCk7Ci0gICAgICAgICArK2Rlc2t0b3AgKQorICAgIGludCB4LCB5LCBn
eCwgZ3ksIGNneCwgY2d5OworICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKKyAgICBl
ZmZlY3RzLT5jYWxjRGVza3RvcExheW91dCggJngsICZ5LCAmb3JpZW50YXRpb24gKTsKKworICAg
IC8vIEdldCBjaG9zZW4gZGVza3RvcCdzIGdyaWQgbG9jYXRpb24KKyAgICAtLWRlc2t0b3A7Cisg
ICAgaWYoIG9yaWVudGF0aW9uID09IFF0OjpIb3Jpem9udGFsICkKKyAgICAgICAgeworICAgICAg
ICBneCA9IGRlc2t0b3AgJSB4OworICAgICAgICBneSA9IGRlc2t0b3AgLyB4OworICAgICAgICB9
CisgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGd4ID0gZGVza3RvcCAvIHk7CisgICAgICAg
IGd5ID0gZGVza3RvcCAlIHk7CisgICAgICAgIH0KKworICAgIFFSZWN0IHNjcmVlbkdlbyA9IGVm
ZmVjdHMtPmNsaWVudEFyZWEoIFNjcmVlbkFyZWEsIHNjcmVlbiwgMCApOworICAgIFFSZWN0IHJl
Y3Q7CisgICAgaWYoICFzY2FsZWQgKQorICAgICAgICB7CisgICAgICAgIGlmKCBtYXNrICkKKyAg
ICAgICAgICAgIHJlY3QgPSBRUmVjdCggZ3ggKiBkaXNwbGF5V2lkdGgoKSArIHNjcmVlbkdlby54
KCksIGd5ICogZGlzcGxheUhlaWdodCgpICsgc2NyZWVuR2VvLnkoKSwKKyAgICAgICAgICAgICAg
ICBzY3JlZW5HZW8ud2lkdGgoKSwgc2NyZWVuR2VvLmhlaWdodCgpICk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlY3QgPSBRUmVjdCggZ3ggKiBkaXNwbGF5V2lkdGgoKSwgZ3kgKiBkaXNw
bGF5SGVpZ2h0KCksCisgICAgICAgICAgICAgICAgZGlzcGxheVdpZHRoKCksIGRpc3BsYXlIZWln
aHQoKSApOworICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgfQorCisgICAgLy8gR2V0IGN1
cnJlbnQgZGVza3RvcCdzIGdyaWQgbG9jYXRpb24gYXMgd2VsbCBhcyB2aXJ0dWFsIHBvc2l0aW9u
CisgICAgZGVza3RvcCA9IGVmZmVjdHMtPmN1cnJlbnREZXNrdG9wKCkgLSAxOworICAgIGlmKCBv
cmllbnRhdGlvbiA9PSBRdDo6SG9yaXpvbnRhbCApCiAgICAgICAgIHsKLSAgICAgICAgaWYoIGRl
c2t0b3BSZWN0KCBkZXNrdG9wLCB0cnVlICkuY29udGFpbnMoIHBvcyApKQotICAgICAgICAgICAg
cmV0dXJuIGRlc2t0b3A7CisgICAgICAgIGNneCA9IGRlc2t0b3AgJSB4OworICAgICAgICBjZ3kg
PSBkZXNrdG9wIC8geDsKICAgICAgICAgfQotICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICBjZ3ggPSBkZXNrdG9wIC8geTsKKyAgICAgICAgY2d5ID0gZGVza3RvcCAl
IHk7CisgICAgICAgIH0KKworICAgIGRvdWJsZSBwcm9ncmVzcyA9IG1UaW1lTGluZS52YWx1ZSgp
OworICAgIGlmKCBtYXNrICkgLy8gVmlzaWJsZSBwYXJ0IG9mIHRoZSBzY3JlZW4gdGhhdCBpcyB0
byBiZSBwYWludGVkCisgICAgICAgIHJlY3QgPSBRUmVjdCgKKyAgICAgICAgICAgIHFSb3VuZCgg
aW50ZXJwb2xhdGUoCisgICAgICAgICAgICAgICAgc2NyZWVuR2VvLngoKSArIHNjcmVlbkdlby53
aWR0aCgpICogZ3ggLSBzY3JlZW5HZW8ud2lkdGgoKSAqIGNneCwKKyAgICAgICAgICAgICAgICBz
Y3JlZW5HZW8ueCgpICsgc2NyZWVuR2VvLndpZHRoKCkgKiBneCAvIHgsCisgICAgICAgICAgICBw
cm9ncmVzcyApKSwgcVJvdW5kKCBpbnRlcnBvbGF0ZSgKKyAgICAgICAgICAgICAgICBzY3JlZW5H
ZW8ueSgpICsgc2NyZWVuR2VvLmhlaWdodCgpICogZ3kgLSBzY3JlZW5HZW8uaGVpZ2h0KCkgKiBj
Z3ksCisgICAgICAgICAgICAgICAgc2NyZWVuR2VvLnkoKSArIHNjcmVlbkdlby5oZWlnaHQoKSAq
IGd5IC8geSwKKyAgICAgICAgICAgIHByb2dyZXNzICkpLAorICAgICAgICAgICAgcVJvdW5kKCBp
bnRlcnBvbGF0ZSggc2NyZWVuR2VvLndpZHRoKCksICBzY3JlZW5HZW8ud2lkdGgoKSAgLyB4LCBw
cm9ncmVzcyApKSwKKyAgICAgICAgICAgIHFSb3VuZCggaW50ZXJwb2xhdGUoIHNjcmVlbkdlby5o
ZWlnaHQoKSwgc2NyZWVuR2VvLmhlaWdodCgpIC8geSwgcHJvZ3Jlc3MgKSkpOworICAgIGVsc2Ug
Ly8gQWN0dWFsIHBvc2l0aW9uIG9mIHdoZXJlIHRoZSBlbnRpcmUgZGVza3RvcCBuZWVkcyB0byBi
ZSBwYWludGVkCisgICAgICAgICAvLyBUT0RPOiBNYXliZSBhZGQgYW4gQVBJIGZ1bmN0aW9uIHRo
YXQgb25seSBwYWludHMgYSBzaW5nbGUgc2NyZWVuIG9mIHRoZSBkZXNrdG9wIHRvIGJlZ2luIHdp
dGgKKyAgICAgICAgcmVjdCA9IFFSZWN0KAorICAgICAgICAgICAgcVJvdW5kKCBpbnRlcnBvbGF0
ZSgKKyAgICAgICAgICAgICAgICBzY3JlZW5HZW8ud2lkdGgoKSAqIGd4IC0gc2NyZWVuR2VvLndp
ZHRoKCkgKiBjZ3gsCisgICAgICAgICAgICAgICAgc2NyZWVuR2VvLngoKSArICggc2NyZWVuR2Vv
LndpZHRoKCkgKiBneCAtIHNjcmVlbkdlby54KCkgKSAvIHgsCisgICAgICAgICAgICBwcm9ncmVz
cyApKSwgcVJvdW5kKCBpbnRlcnBvbGF0ZSgKKyAgICAgICAgICAgICAgICBzY3JlZW5HZW8uaGVp
Z2h0KCkgKiBneSAtIHNjcmVlbkdlby5oZWlnaHQoKSAqIGNneSwKKyAgICAgICAgICAgICAgICBz
Y3JlZW5HZW8ueSgpICsgKCBzY3JlZW5HZW8uaGVpZ2h0KCkgKiBneSAtIHNjcmVlbkdlby55KCkg
KSAvIHksCisgICAgICAgICAgICBwcm9ncmVzcyApKSwKKyAgICAgICAgICAgIHFSb3VuZCggaW50
ZXJwb2xhdGUoIGRpc3BsYXlXaWR0aCgpLCAgZGlzcGxheVdpZHRoKCkgIC8geCwgcHJvZ3Jlc3Mg
KSksCisgICAgICAgICAgICBxUm91bmQoIGludGVycG9sYXRlKCBkaXNwbGF5SGVpZ2h0KCksIGRp
c3BsYXlIZWlnaHQoKSAvIHksIHByb2dyZXNzICkpKTsKKyAgICByZXR1cm4gcmVjdDsKICAgICB9
CiAKLVFSZWN0IERlc2t0b3BHcmlkRWZmZWN0Ojp3aW5kb3dSZWN0KCBFZmZlY3RXaW5kb3cqIHcg
KSBjb25zdAorLy8gRGV0cmFuc2Zvcm0gYSBwb2ludCB0byBpdHMgcG9zaXRpb24gb24gdGhlIGZ1
bGwgZ3JpZAorUVBvaW50IERlc2t0b3BHcmlkRWZmZWN0Ojp1bnNjYWxlUG9zKCBjb25zdCBRUG9p
bnQmIHBvcywgaW50KiBkZXNrdG9wLCBib29sIG9uR3JpZCApIGNvbnN0CiAgICAgewogICAgIGlu
dCB4LCB5OwogICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKICAgICBlZmZlY3RzLT5j
YWxjRGVza3RvcExheW91dCggJngsICZ5LCAmb3JpZW50YXRpb24gKTsKLSAgICBpZiggdyA9PSB3
aW5kb3dfbW92ZSApIC8vIGl0J3MgYmVpbmcgbW92ZWQsIHJldHVybiBtb3ZlZCBwb3NpdGlvbgot
ICAgICAgICByZXR1cm4gUVJlY3QoIHdpbmRvd19tb3ZlX3BvcywgUVNpemUoIHctPndpZHRoKCkg
LyB4LCB3LT5oZWlnaHQoKSAvIHkgKSk7Ci0gICAgUVJlY3QgZGVza3RvcCA9IGRlc2t0b3BSZWN0
KCB3LT5pc09uQ3VycmVudERlc2t0b3AoKQotICAgICAgICA/IGVmZmVjdHMtPmN1cnJlbnREZXNr
dG9wKCkgOiB3LT5kZXNrdG9wKCksIHRydWUgKTsKLSAgICByZXR1cm4gUVJlY3QoIGRlc2t0b3Au
eCgpICsgdy0+eCgpIC8geCwgZGVza3RvcC55KCkgKyB3LT55KCkgLyB5LAotICAgICAgICB3LT53
aWR0aCgpIC8geCwgdy0+aGVpZ2h0KCkgLyB5ICk7CisKKyAgICBRUmVjdCBzY3JlZW5SZWN0ID0g
ZWZmZWN0cy0+Y2xpZW50QXJlYSggU2NyZWVuQXJlYSwgZWZmZWN0cy0+c2NyZWVuTnVtYmVyKCBw
b3MgKSwgMCApOworICAgIGludCBneCA9IGludCgoIHBvcy54KCkgLSBzY3JlZW5SZWN0LngoKSAp
IC8gKCBzY3JlZW5SZWN0LndpZHRoKCkgLyB4ICkpOworICAgIGludCBneSA9IGludCgoIHBvcy55
KCkgLSBzY3JlZW5SZWN0LnkoKSApIC8gKCBzY3JlZW5SZWN0LmhlaWdodCgpIC8geSApKTsKKyAg
ICBpZiggZGVza3RvcCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICBpZiggb3JpZW50YXRp
b24gPT0gUXQ6Okhvcml6b250YWwgKQorICAgICAgICAgICAgKmRlc2t0b3AgPSBneSAqIHggKyBn
eCArIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXNrdG9wID0gZ3ggKiB5ICsgZ3kg
KyAxOworICAgICAgICB9CisKKyAgICBpZiggb25HcmlkICkKKyAgICAgICAgcmV0dXJuIFFQb2lu
dCgKKyAgICAgICAgICAgIHBvcy54KCkgKiB4ICsgKCBkaXNwbGF5V2lkdGgoKSAtIHNjcmVlblJl
Y3Qud2lkdGgoKSApICogZ3ggLSBzY3JlZW5SZWN0LngoKSwKKyAgICAgICAgICAgIHBvcy55KCkg
KiB5ICsgKCBkaXNwbGF5SGVpZ2h0KCkgLSBzY3JlZW5SZWN0LmhlaWdodCgpICkgKiBneSAtIHNj
cmVlblJlY3QueSgpICk7CisgICAgcmV0dXJuIFFQb2ludCgKKyAgICAgICAgcG9zLngoKSAqIHgg
LSBzY3JlZW5SZWN0LndpZHRoKCkgKiBneCAtIHNjcmVlblJlY3QueCgpLAorICAgICAgICBwb3Mu
eSgpICogeSAtIHNjcmVlblJlY3QuaGVpZ2h0KCkgKiBneSAtIHNjcmVlblJlY3QueSgpICk7Cisg
ICAgfQorCitpbnQgRGVza3RvcEdyaWRFZmZlY3Q6OnBvc1RvRGVza3RvcCggY29uc3QgUVBvaW50
JiBwb3MgKSBjb25zdAorICAgIHsKKyAgICBpbnQgZGVza3RvcDsKKyAgICB1bnNjYWxlUG9zKCBw
b3MsICZkZXNrdG9wICk7CisgICAgcmV0dXJuIGRlc2t0b3A7CiAgICAgfQogCi1FZmZlY3RXaW5k
b3cqIERlc2t0b3BHcmlkRWZmZWN0Ojp3aW5kb3dBdCggY29uc3QgUVBvaW50JiBwb3MsIFFSZWN0
KiByZWN0ICkgY29uc3QKKy8vIFJldHVybnMgdGhlIHNlY3Rpb25zIG9mIHRoZSBkZXNrdG9wIHdo
ZXJlIHRoZSB3aW5kb3cgaXMgdmlzaWJsZSB3aGVuIHNjYWxlZAorLy8gSXMgYSByZWdpb24gYXMg
aXQncyBwb3NzaWJsZSBmb3IgcGFydHMgb2YgYSB3aW5kb3cgdG8gYmUgb24gc2VwZXJhdGUgc2Ny
ZWVucworUVJlZ2lvbiBEZXNrdG9wR3JpZEVmZmVjdDo6d2luZG93UmVnaW9uKCBFZmZlY3RXaW5k
b3cqIHcgKSBjb25zdAogICAgIHsKLSAgICBpZiggd2luZG93X21vdmUgIT0gTlVMTCAmJiB3aW5k
b3dSZWN0KCB3aW5kb3dfbW92ZSApLmNvbnRhaW5zKCBwb3MgKSkKKyAgICBpbnQgeCwgeSwgZ3gs
IGd5OworICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKKyAgICBlZmZlY3RzLT5jYWxj
RGVza3RvcExheW91dCggJngsICZ5LCAmb3JpZW50YXRpb24gKTsKKworICAgIC8vIFRvIHJldXNl
IGNvZGUgd2UgY2hlYXQgYSBiaXQsIGlmIG9ubHkgb24gb25lIGRlc2t0b3AgbG9vcCBleGVjdXRl
cyBvbmNlCisgICAgUVJlZ2lvbiByZWdpb247CisgICAgZm9yKCBpbnQgZGVza3RvcCA9IHctPmlz
T25BbGxEZXNrdG9wcygpID8gMCA6IHctPmRlc2t0b3AoKSAtIDE7CisgICAgICAgICBkZXNrdG9w
IDwgZWZmZWN0cy0+bnVtYmVyT2ZEZXNrdG9wcygpOworICAgICAgICAgZGVza3RvcCsrICkKICAg
ICAgICAgewotICAgICAgICBpZiggcmVjdCAhPSBOVUxMICkKLSAgICAgICAgICAgICpyZWN0ID0g
d2luZG93UmVjdCggd2luZG93X21vdmUgKTsKLSAgICAgICAgcmV0dXJuIHdpbmRvd19tb3ZlOyAv
LyBoYXMgc3BlY2lhbCBwb3NpdGlvbiBhbmQgaXMgb24gdG9wCisgICAgICAgIC8vIEdldCB3aW5k
b3cncyBkZXNrdG9wIGdyaWQgbG9jYXRpb24KKyAgICAgICAgaWYoIG9yaWVudGF0aW9uID09IFF0
OjpIb3Jpem9udGFsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGd4ID0gZGVza3RvcCAl
IHg7CisgICAgICAgICAgICBneSA9IGRlc2t0b3AgLyB4OworICAgICAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICBneCA9IGRlc2t0b3AgLyB5OworICAg
ICAgICAgICAgZ3kgPSBkZXNrdG9wICUgeTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBmb3Io
IGludCBzY3JlZW4gPSAwOyBzY3JlZW4gPCBlZmZlY3RzLT5udW1TY3JlZW5zKCk7IHNjcmVlbisr
ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFFSZWN0IHNjcmVlbkdlbyA9IGVmZmVjdHMt
PmNsaWVudEFyZWEoIFNjcmVlbkFyZWEsIHNjcmVlbiwgMCApOworICAgICAgICAgICAgUVJlY3Qg
b25TY3JlZW4gPSBzY3JlZW5HZW8gJiBRUmVjdCggdy0+eCgpLCB3LT55KCksIHctPndpZHRoKCks
IHctPmhlaWdodCgpICk7CisgICAgICAgICAgICBpZiggb25TY3JlZW4uaXNOdWxsKCkgKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmVnaW9uIHw9IFFSZWN0KAorICAg
ICAgICAgICAgICAgIHNjcmVlbkdlby54KCkgKyAoIHNjcmVlbkdlby53aWR0aCgpICogZ3ggKyBv
blNjcmVlbi54KCkgLSBzY3JlZW5HZW8ueCgpICkgLyB4LAorICAgICAgICAgICAgICAgIHNjcmVl
bkdlby55KCkgKyAoIHNjcmVlbkdlby5oZWlnaHQoKSAqIGd5ICsgb25TY3JlZW4ueSgpIC0gc2Ny
ZWVuR2VvLnkoKSApIC8geSwKKyAgICAgICAgICAgICAgICBvblNjcmVlbi53aWR0aCgpIC8geCwg
b25TY3JlZW4uaGVpZ2h0KCkgLyB5ICk7CisgICAgICAgICAgICB9CisgICAgICAgIGlmKCAhdy0+
aXNPbkFsbERlc2t0b3BzKCkgKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICBy
ZXR1cm4gcmVnaW9uOworICAgIH0KKworRWZmZWN0V2luZG93KiBEZXNrdG9wR3JpZEVmZmVjdDo6
d2luZG93QXQoIGNvbnN0IFFQb2ludCYgcG9zICkgY29uc3QKKyAgICB7CisgICAgLy8gTGV0IHdp
bmRvdyBsaXN0CiAgICAgRWZmZWN0V2luZG93TGlzdCB3aW5kb3dzID0gZWZmZWN0cy0+c3RhY2tp
bmdPcmRlcigpOwogICAgIC8vIHFSZXZlcnNlKCkKICAgICBFZmZlY3RXaW5kb3dMaXN0OjpJdGVy
YXRvciBiZWdpbiA9IHdpbmRvd3MuYmVnaW4oKTsKQEAgLTM0OCwyMyArNDgzLDExIEBAIEVmZmVj
dFdpbmRvdyogRGVza3RvcEdyaWRFZmZlY3Q6OndpbmRvd0EKICAgICAtLWVuZDsKICAgICB3aGls
ZSggYmVnaW4gPCBlbmQgKQogICAgICAgICBxU3dhcCggKmJlZ2luKyssICplbmQtLSApOwotICAg
IGludCB4LCB5OwotICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBlZmZlY3Rz
LT5jYWxjRGVza3RvcExheW91dCggJngsICZ5LCAmb3JpZW50YXRpb24gKTsKKworICAgIC8vIFRP
RE86IENvdWxkIG9wdGltaXplIGJ5IHVzaW5nIHVuc2NhbGVQb3MoKQogICAgIGZvcmVhY2goIEVm
ZmVjdFdpbmRvdyogdywgd2luZG93cyApCi0gICAgICAgIHsKLSAgICAgICAgLy8gZG9uJ3QgdXNl
IHdpbmRvd1JlY3QoKSwgdGFrZSBzcGVjaWFsIGNhcmUgb2Ygb24tYWxsLWRlc2t0b3Agd2luZG93
cwotICAgICAgICBRUmVjdCBkZXNrdG9wID0gZGVza3RvcFJlY3QoIHctPmlzT25BbGxEZXNrdG9w
cygpCi0gICAgICAgICAgICA/IHBvc1RvRGVza3RvcCggcG9zICkgOiB3LT5kZXNrdG9wKCksIHRy
dWUgKTsKLSAgICAgICAgUVJlY3QgciggZGVza3RvcC54KCkgKyB3LT54KCkgLyB4LCBkZXNrdG9w
LnkoKSArIHctPnkoKSAvIHksCi0gICAgICAgICAgICB3LT53aWR0aCgpIC8geCwgdy0+aGVpZ2h0
KCkgLyB5ICk7Ci0gICAgICAgIGlmKCByLmNvbnRhaW5zKCBwb3MgKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmKCByZWN0ICE9IE5VTEwgKQotICAgICAgICAgICAgICAgICpyZWN0ID0g
cjsKKyAgICAgICAgaWYoIHdpbmRvd1JlZ2lvbiggdyApLmNvbnRhaW5zKCBwb3MgKSkKICAgICAg
ICAgICAgIHJldHVybiB3OwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgcmV0dXJuIE5V
TEw7CiAgICAgfQogCkBAIC00NDksNyArNTcyLDcgQEAgdm9pZCBEZXNrdG9wR3JpZEVmZmVjdDo6
dG9nZ2xlKCkKICAgICB7CiAgICAgc2V0QWN0aXZlKCAhYWN0aXZhdGVkICk7CiAgICAgfQotICAg
IAorCiB2b2lkIERlc2t0b3BHcmlkRWZmZWN0OjpzZXRBY3RpdmUoIGJvb2wgYWN0aXZlICkKICAg
ICB7CiAgICAgaWYoIGVmZmVjdHMtPmFjdGl2ZUZ1bGxTY3JlZW5FZmZlY3QoKSAmJiBlZmZlY3Rz
LT5hY3RpdmVGdWxsU2NyZWVuRWZmZWN0KCkgIT0gdGhpcyApCkBAIC00NzYsOSArNTk5LDYgQEAg
dm9pZCBEZXNrdG9wR3JpZEVmZmVjdDo6ZmluaXNoKCkKICAgICBpZigga2V5Ym9hcmRfZ3JhYiAp
CiAgICAgICAgIGVmZmVjdHMtPnVuZ3JhYktleWJvYXJkKCk7CiAgICAga2V5Ym9hcmRfZ3JhYiA9
IGZhbHNlOwotICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBOVUxMICkKLSAgICAgICAgZWZmZWN0cy0+
c2V0RWxldmF0ZWRXaW5kb3coIHdpbmRvd19tb3ZlLCBmYWxzZSApOwotICAgIHdpbmRvd19tb3Zl
ID0gTlVMTDsKICAgICBlZmZlY3RzLT5kZXN0cm95SW5wdXRXaW5kb3coIGlucHV0ICk7CiAgICAg
ZWZmZWN0cy0+c2V0QWN0aXZlRnVsbFNjcmVlbkVmZmVjdCggMCApOwogICAgIGVmZmVjdHMtPmFk
ZFJlcGFpbnRGdWxsKCk7IC8vIHRvIGdldCByaWQgb2YgaGlnaGxpZ2h0CkBAIC00OTUsMjcgKzYx
NSwyNyBAQCB2b2lkIERlc2t0b3BHcmlkRWZmZWN0Ojp3aW5kb3dJbnB1dE1vdXNlCiAgICAgICAg
IHsKICAgICAgICAgLy8gaGlnaGxpZ2h0IGRlc2t0b3AgdW5kZXIgbW91c2UKICAgICAgICAgaW50
IGQgPSBwb3NUb0Rlc2t0b3AoIG1lLT5wb3MoKSk7Ci0gICAgICAgIGlmKCBkICE9IGhpZ2hsaWdo
dGVkX2Rlc2t0b3AgKQotICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWREZXNrdG9wKCBkICk7CiAg
ICAgICAgIGlmKCB3aW5kb3dfbW92ZSAhPSBOVUxMICkgLy8gaGFuZGxlIHdpbmRvdyBtb3ZpbmcK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgIHdhc193aW5kb3dfbW92ZSA9IHRydWU7Ci0gICAg
ICAgICAgICAvLyB3aW5kb3dSZWN0KCkgaGFuZGxlcyB3aW5kb3dfbW92ZSBzcGVjaWFsbHkKLSAg
ICAgICAgICAgIGVmZmVjdHMtPmFkZFJlcGFpbnQoIHdpbmRvd1JlY3QoIHdpbmRvd19tb3ZlICkp
OwotICAgICAgICAgICAgd2luZG93X21vdmVfcG9zID0gbWUtPnBvcygpICsgd2luZG93X21vdmVf
ZGlmZjsKLSAgICAgICAgICAgIGVmZmVjdHMtPmFkZFJlcGFpbnQoIHdpbmRvd1JlY3QoIHdpbmRv
d19tb3ZlICkpOworICAgICAgICAgICAgZWZmZWN0cy0+YWRkUmVwYWludCggd2luZG93UmVnaW9u
KCB3aW5kb3dfbW92ZSApKTsKKyAgICAgICAgICAgIGVmZmVjdHMtPm1vdmVXaW5kb3coIHdpbmRv
d19tb3ZlLCB1bnNjYWxlUG9zKCBtZS0+cG9zKCksIE5VTEwsIGZhbHNlICkgKyB3aW5kb3dfbW92
ZV9kaWZmICk7CisgICAgICAgICAgICBpZiggZCAhPSBoaWdobGlnaHRlZF9kZXNrdG9wICYmICF3
aW5kb3dfbW92ZS0+aXNPbkFsbERlc2t0b3BzKCkgKQorICAgICAgICAgICAgICAgIGVmZmVjdHMt
PndpbmRvd1RvRGVza3RvcCggd2luZG93X21vdmUsIGQgKTsgLy8gTm90IHRydWUgYWxsIGRlc2t0
b3AgbW92ZQorICAgICAgICAgICAgZWZmZWN0cy0+YWRkUmVwYWludCggd2luZG93UmVnaW9uKCB3
aW5kb3dfbW92ZSApKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgaWYoIGQgIT0gaGlnaGxpZ2h0
ZWRfZGVza3RvcCApCisgICAgICAgICAgICBzZXRIaWdobGlnaHRlZERlc2t0b3AoIGQgKTsKICAg
ICAgICAgfQogICAgIGlmKCBlLT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzICkK
ICAgICAgICAgewogICAgICAgICBpZiggbWUtPmJ1dHRvbnMoKSA9PSBRdDo6TGVmdEJ1dHRvbiAp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBRUmVjdCByZWN0OwotICAgICAgICAgICAgRWZm
ZWN0V2luZG93KiB3ID0gd2luZG93QXQoIG1lLT5wb3MoKSwgJnJlY3QgKTsKKyAgICAgICAgICAg
IEVmZmVjdFdpbmRvdyogdyA9IHdpbmRvd0F0KCBtZS0+cG9zKCkpOwogICAgICAgICAgICAgaWYo
IHcgIT0gTlVMTCAmJiB3LT5pc01vdmFibGUoKSkKICAgICAgICAgICAgICAgICB7IC8vIHByZXBh
cmUgaXQgZm9yIG1vdmluZwotICAgICAgICAgICAgICAgIHdpbmRvd19tb3ZlX3BvcyA9IHJlY3Qu
dG9wTGVmdCgpOwotICAgICAgICAgICAgICAgIHdpbmRvd19tb3ZlX2RpZmYgPSB3aW5kb3dfbW92
ZV9wb3MgLSBtZS0+cG9zKCk7CisgICAgICAgICAgICAgICAgd2luZG93X21vdmVfZGlmZiA9IHct
PnBvcygpIC0gdW5zY2FsZVBvcyggbWUtPnBvcygpLCBOVUxMLCBmYWxzZSApOwogICAgICAgICAg
ICAgICAgIHdpbmRvd19tb3ZlID0gdzsKICAgICAgICAgICAgICAgICBlZmZlY3RzLT5zZXRFbGV2
YXRlZFdpbmRvdyggd2luZG93X21vdmUsIHRydWUgKTsKICAgICAgICAgICAgICAgICB9CkBAIC01
MzMsMjggKzY1MywxNiBAQCB2b2lkIERlc2t0b3BHcmlkRWZmZWN0Ojp3aW5kb3dJbnB1dE1vdXNl
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgaWYoIGUt
PnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZSAmJiBtZS0+YnV0dG9ucygpID09
IDAgKQorICAgIGlmKCBlLT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2UgJiYg
bWUtPmJ1dHRvbigpID09IFF0OjpMZWZ0QnV0dG9uICkKICAgICAgICAgewotICAgICAgICBpZigg
d2FzX3dpbmRvd19tb3ZlICkKKyAgICAgICAgaWYoIHdpbmRvd19tb3ZlICE9IE5VTEwgKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgaWYoIHdpbmRvd19tb3ZlICE9IE5VTEwgKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRUmVjdCByZWN0ID0gd2luZG93UmVjdCggd2lu
ZG93X21vdmUgKTsKLSAgICAgICAgICAgICAgICBpbnQgZGVza3RvcCA9IHBvc1RvRGVza3RvcCgg
cmVjdC5jZW50ZXIoKSk7Ci0gICAgICAgICAgICAgICAgLy8gdG8gZGVza3RvcCdzIGNvb3JkaW5h
dGVzCi0gICAgICAgICAgICAgICAgcmVjdC50cmFuc2xhdGUoIC1kZXNrdG9wUmVjdCggZGVza3Rv
cCwgdHJ1ZSApLnRvcExlZnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IHgsIHk7Ci0gICAgICAg
ICAgICAgICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgICAgICAgICAgICAgIGVm
ZmVjdHMtPmNhbGNEZXNrdG9wTGF5b3V0KCAmeCwgJnksICZvcmllbnRhdGlvbiApOwotICAgICAg
ICAgICAgICAgIGVmZmVjdHMtPm1vdmVXaW5kb3coIHdpbmRvd19tb3ZlLCBRUG9pbnQoIHJlY3Qu
eCgpICogeCwgcmVjdC55KCkgKiB5ICkpOwotICAgICAgICAgICAgICAgIGVmZmVjdHMtPndpbmRv
d1RvRGVza3RvcCggd2luZG93X21vdmUsIGRlc2t0b3AgKTsKLSAgICAgICAgICAgICAgICBlZmZl
Y3RzLT5zZXRFbGV2YXRlZFdpbmRvdyggd2luZG93X21vdmUsIGZhbHNlICk7Ci0gICAgICAgICAg
ICAgICAgd2luZG93X21vdmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVmZmVjdHMtPnNldEVsZXZhdGVkV2luZG93KCB3aW5kb3dfbW92ZSwgZmFsc2UgKTsKKyAgICAg
ICAgICAgIHdpbmRvd19tb3ZlID0gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgaWYoICF3
YXNfd2luZG93X21vdmUgJiYgbWUtPmJ1dHRvbigpID09IFF0OjpMZWZ0QnV0dG9uICkKKyAgICAg
ICAgaWYoICF3YXNfd2luZG93X21vdmUgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgZWZm
ZWN0cy0+c2V0Q3VycmVudERlc2t0b3AoIHBvc1RvRGVza3RvcCggbWUtPnBvcygpKSk7CisgICAg
ICAgICAgICBlZmZlY3RzLT5zZXRDdXJyZW50RGVza3RvcCggaGlnaGxpZ2h0ZWRfZGVza3RvcCAp
OwogICAgICAgICAgICAgc2V0QWN0aXZlKCBmYWxzZSApOwogICAgICAgICAgICAgfQogICAgICAg
ICB3YXNfd2luZG93X21vdmUgPSBmYWxzZTsKQEAgLTYyNyw5ICs3MzUsMTEgQEAgdm9pZCBEZXNr
dG9wR3JpZEVmZmVjdDo6c2V0SGlnaGxpZ2h0ZWREZQogICAgIHsKICAgICBpZiggZCA9PSBoaWdo
bGlnaHRlZF9kZXNrdG9wIHx8IGQgPD0gMCB8fCBkID4gZWZmZWN0cy0+bnVtYmVyT2ZEZXNrdG9w
cygpKQogICAgICAgICByZXR1cm47Ci0gICAgZWZmZWN0cy0+YWRkUmVwYWludCggZGVza3RvcFJl
Y3QoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsIHRydWUgKSk7CisgICAgZm9yKCBpbnQgc2NyZWVuID0g
MDsgc2NyZWVuIDwgZWZmZWN0cy0+bnVtU2NyZWVucygpOyBzY3JlZW4rKyApCisgICAgICAgIGVm
ZmVjdHMtPmFkZFJlcGFpbnQoIHNjcmVlblJlY3QoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsIHNjcmVl
biwgdHJ1ZSApICk7CiAgICAgaGlnaGxpZ2h0ZWRfZGVza3RvcCA9IGQ7Ci0gICAgZWZmZWN0cy0+
YWRkUmVwYWludCggZGVza3RvcFJlY3QoIGhpZ2hsaWdodGVkX2Rlc2t0b3AsIHRydWUgKSk7Cisg
ICAgZm9yKCBpbnQgc2NyZWVuID0gMDsgc2NyZWVuIDwgZWZmZWN0cy0+bnVtU2NyZWVucygpOyBz
Y3JlZW4rKyApCisgICAgICAgIGVmZmVjdHMtPmFkZFJlcGFpbnQoIHNjcmVlblJlY3QoIGhpZ2hs
aWdodGVkX2Rlc2t0b3AsIHNjcmVlbiwgdHJ1ZSApICk7CiAgICAgfQogCiBib29sIERlc2t0b3BH
cmlkRWZmZWN0Ojpib3JkZXJBY3RpdmF0ZWQoIEVsZWN0cmljQm9yZGVyIGJvcmRlciApCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>