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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>21191</bug_id>
          
          <creation_ts>2008-09-28 00:38:55 -0700</creation_ts>
          <short_desc>Rework mouse wheeling and make ScrollView::wheelEvent cross-platform</short_desc>
          <delta_ts>2008-09-28 02:22:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21083</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93125</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-09-28 00:38:55 -0700</bug_when>
    <thetext>Rework mouse wheeling and make ScrollView::wheelEvent cross-platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93126</commentid>
    <comment_count>1</comment_count>
      <attachid>23889</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-09-28 00:43:00 -0700</bug_when>
    <thetext>Created attachment 23889
Patch

This patch has been tested on Mac and on Windows Vista (changing all of the wheel settings from the control panel).  It has been tested on both Mac and Windows with both ScrollViews and with overflow auto sections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93128</commentid>
    <comment_count>2</comment_count>
      <attachid>23891</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-09-28 00:59:55 -0700</bug_when>
    <thetext>Created attachment 23891
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93130</commentid>
    <comment_count>3</comment_count>
      <attachid>23891</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-28 01:13:02 -0700</bug_when>
    <thetext>Comment on attachment 23891
Patch 2

r=me with the comment change we discussed in irc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93136</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-09-28 02:22:58 -0700</bug_when>
    <thetext>Fixed.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23889</attachid>
            <date>2008-09-28 00:43:00 -0700</date>
            <delta_ts>2008-09-28 00:59:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>35236</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3MDMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMDgtMDkt
MjggIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE5MQorCisgICAgICAgIFJld29yayBtb3Vz
ZSB3aGVlbGluZyBzaWduaWZpY2FudGx5IHRvIG1ha2UgdGhlIHBsYXRmb3JtIGV2ZW50IGxlc3Mg
bWVzc3kgYW5kIHRvIGVuYWJsZSB3aGVlbEV2ZW50CisgICAgICAgIG9uIFNjcm9sbFZpZXcgdG8g
YmUgY3Jvc3MtcGxhdGZvcm0uCisKKyAgICAgICAgR2l2ZSB0aGUgd2hlZWwgZXZlbnQgYSBjb25j
ZXB0IG9mIGdyYW51bGFyaXR5IChwaXhlbCwgbGluZSBvciBwYWdlKS4gIFdoYXQgdXNlZCB0byBi
ZSBjYWxsZWQgY29udGludW91cworICAgICAgICBldmVudHMgYXJlIG5vdyBwaXhlbCB3aGVlbCBl
dmVudHMuICBQYWdlIHNjcm9sbGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gYmUgcHJvcGVybHkg
ZGV0ZWN0ZWQgKG9uIFdpbmRvd3MKKyAgICAgICAgcGFnZSB3aGVlbGluZyBpcyBvbmx5IGRvbmUg
aW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbiBhbmQgaXQgaXMga2V5ZWQgb2ZmIGEgc3BlY2lhbCBy
ZXR1cm4gdmFsdWUgb2YgLTEpLgorICAgICAgIAorICAgICAgICBJbmNvcnBvcmF0ZSBXZWJDb3Jl
J3MgbGluZSBtdWx0aXBsaWVyIHJpZ2h0IGludG8gdGhlIGRlbHRhcyBvZiB0aGUgZXZlbnQuICBU
aGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQKKyAgICAgICAgZm9yIHNlcGFyYXRlIG11bHRpcGxpZXIg
ZmllbGRzIChvciBmb3IgdGhlIG5lZWQgdG8gYXNrIGlmIHlvdSdyZSBsb29raW5nIGZvciBsaW5l
IHNlbnNpdGl2aXR5KS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2
ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxBbmRBY2NlcHRFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6cG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtV2hlZWxFdmVudDo6Z2xvYmFsUG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hl
ZWxFdmVudDo6ZGVsdGFYKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6
ZGVsdGFZKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6Z3JhbnVsYXJp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Ojp4KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6Z2xvYmFsWCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6Omlnbm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bVdoZWVsRXZlbnQ6Omhvcml6b250YWxMaW5lTXVsdGlwbGllcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OnZlcnRpY2FsTGluZU11bHRpcGxpZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1doZWVsRXZl
bnRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9y
bVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XaGVlbEV2ZW50TWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9XaGVlbEV2ZW50UXQu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hl
ZWxFdmVudDo6aG9yaXpvbnRhbExpbmVNdWx0aXBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtV2hlZWxFdmVudDo6dmVydGljYWxMaW5lTXVsdGlwbGllcik6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6CisgICAgICAgICog
cGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpPblNjcm9sbFdpbkV2ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dCk6CisKIDIwMDgtMDktMjcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IGVk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAkocmV2aXNpb24gMzcwMTIpCisrKyBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIGludCB2ZXJ0aWNhbFNjcm9s
bERpc3RhbmNlKEZyYW1lKgogICAgIGlmICghKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xM
IHx8IHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPQVVUTyB8fCByZW5kZXJlci0+aXNUZXh0QXJlYSgp
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50IGhlaWdodCA9IHJlbmRlcmVyLT5jbGllbnRI
ZWlnaHQoKTsKLSAgICByZXR1cm4gbWF4KChoZWlnaHQgKyAxKSAvIDIsIGhlaWdodCAtIFBBR0Vf
S0VFUCk7CisgICAgcmV0dXJuIG1heCgoaGVpZ2h0ICsgMSkgLyAyLCBoZWlnaHQgLSBjQW1vdW50
VG9LZWVwV2hlblBhZ2luZyk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFu
Z2VzKFJhbmdlKiBhLCBSYW5nZSogYikKSW5kZXg6IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBwYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDM3MDEyKQorKysgcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwyMSArOTYsMTcgQEAgY29u
c3QgZG91YmxlIGF1dG9zY3JvbGxJbnRlcnZhbCA9IDAuMDU7CiBzdGF0aWMgRnJhbWUqIHN1YmZy
YW1lRm9yVGFyZ2V0Tm9kZShOb2RlKik7CiBzdGF0aWMgRnJhbWUqIHN1YmZyYW1lRm9ySGl0VGVz
dFJlc3VsdChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBzY3JvbGxBbmRBY2NlcHRFdmVudChmbG9hdCBkZWx0YSwgU2Nyb2xsRGlyZWN0
aW9uIHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24s
IGJvb2wgcGFnZVNjcm9sbEVuYWJsZWQsIFBsYXRmb3JtV2hlZWxFdmVudCYgZSwgTm9kZSogbm9k
ZSwgZmxvYXQgd2luZG93SGVpZ2h0T3JXaWR0aCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3JvbGxB
bmRBY2NlcHRFdmVudChmbG9hdCBkZWx0YSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0
aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIFBsYXRmb3JtV2hlZWxFdmVu
dCYgZSwgTm9kZSogbm9kZSwgaW50IHdpbmRvd0hlaWdodE9yV2lkdGgpCiB7Ci0gICAgaWYgKCFk
ZWx0YSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZmxvYXQgcGl4ZWxzVG9TY3JvbGwgPSBkZWx0
YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKLSAgICBpZiAoIWUuaXNDb250aW51b3VzKCkgJiYgIXBh
Z2VTY3JvbGxFbmFibGVkKSB7Ci0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5zY3JvbGwo
ZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xs
QnlMaW5lLCBwaXhlbHNUb1Njcm9sbCkpCi0gICAgICAgICAgICBlLmFjY2VwdCgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChwYWdlU2Nyb2xsRW5hYmxlZCkKLSAgICAgICAgICAgIHBpeGVs
c1RvU2Nyb2xsID0gd2luZG93SGVpZ2h0T3JXaWR0aDsgCi0gICAgICAgIGlmIChub2RlLT5yZW5k
ZXJlcigpLT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURp
cmVjdGlvbiwgU2Nyb2xsQnlQaXhlbCwgcGl4ZWxzVG9TY3JvbGwpKQotICAgICAgICAgICAgZS5h
Y2NlcHQoKTsKLSAgICB9CisgICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeUxpbmVX
aGVlbEV2ZW50KQorICAgICAgICBwaXhlbHNUb1Njcm9sbCAqPSBjTW91c2VXaGVlbFBpeGVsc1Bl
ckxpbmVTdGVwOworICAgIGVsc2UgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VX
aGVlbEV2ZW50KQorICAgICAgICBwaXhlbHNUb1Njcm9sbCA9IG1heCgwLCB3aW5kb3dIZWlnaHRP
cldpZHRoIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOworICAgIGlmICghcGl4ZWxzVG9TY3Jv
bGwpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsKGRl
bHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5
UGl4ZWwsIHBpeGVsc1RvU2Nyb2xsKSkKKyAgICAgICAgZS5hY2NlcHQoKTsKIH0KIAogRXZlbnRI
YW5kbGVyOjpFdmVudEhhbmRsZXIoRnJhbWUqIGZyYW1lKQpAQCAtMTU0MiwxMSArMTUzOCw4IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KFBsYXQKICAgICAgICAgaWYgKG5v
ZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIC8vIEp1c3QgYnJlYWsgdXAgaW50byB0d28g
c2Nyb2xscyBpZiB3ZSBuZWVkIHRvLiAgRGlhZ29uYWwgbW92ZW1lbnQgb24gCiAgICAgICAgICAg
ICAvLyBhIE1hY0Jvb2sgcHJvIGlzIGFuIGV4YW1wbGUgb2YgYSAyLWRpbWVuc2lvbmFsIG1vdXNl
IHdoZWVsIGV2ZW50ICh3aGVyZSBib3RoIGRlbHRhWCBhbmQgZGVsdGFZIGNhbiBiZSBzZXQpLgot
ICAgICAgICAgICAgZmxvYXQgZGVsdGFYID0gZS5pc0NvbnRpbnVvdXMoKSA/IGUuY29udGludW91
c0RlbHRhWCgpIDogZS5kZWx0YVgoKTsKLSAgICAgICAgICAgIGZsb2F0IGRlbHRhWSA9IGUuaXND
b250aW51b3VzKCkgPyBlLmNvbnRpbnVvdXNEZWx0YVkoKSA6IGUuZGVsdGFZKCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHNjcm9sbEFuZEFjY2VwdEV2ZW50KGRlbHRhWCwgU2Nyb2xsTGVm
dCwgU2Nyb2xsUmlnaHQsIGUuaXNQYWdlWFNjcm9sbE1vZGVFbmFibGVkKCksIGUsIG5vZGUsIG1f
ZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKS53aWR0aCgpKTsKLSAgICAgICAg
ICAgIHNjcm9sbEFuZEFjY2VwdEV2ZW50KGRlbHRhWSwgU2Nyb2xsVXAsIFNjcm9sbERvd24sIGUu
aXNQYWdlWVNjcm9sbE1vZGVFbmFibGVkKCksIGUsIG5vZGUsIG1fZnJhbWUtPnBhZ2UoKS0+Y2hy
b21lKCktPndpbmRvd1JlY3QoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICBzY3JvbGxBbmRBY2Nl
cHRFdmVudChlLmRlbHRhWCgpLCBTY3JvbGxMZWZ0LCBTY3JvbGxSaWdodCwgZSwgbm9kZSwgbV9m
cmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpLndpZHRoKCkpOworICAgICAgICAg
ICAgc2Nyb2xsQW5kQWNjZXB0RXZlbnQoZS5kZWx0YVkoKSwgU2Nyb2xsVXAsIFNjcm9sbERvd24s
IGUsIG5vZGUsIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKS5oZWlnaHQo
KSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCShyZXZpc2lv
biAzNzAyOCkKKysrIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSwzMyArNTksNDkgQEAgY2xhc3Mgd3hQb2ludDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisgICAgLy8gV2hlZWwgZXZlbnRzIGNvbWUgaW4gdGhyZWUgZmxhdm9yczoKKyAgICAvLyBU
aGUgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQgaXMgYSBmaW5lLWdyYWluZWQgZXZlbnQgdGhhdCBz
cGVjaWZpZXMgdGhlIHByZWNpc2UgbnVtYmVyIG9mIHBpeGVscyB0byBzY3JvbGwuICBJdCBpcyBz
ZW50IGJ5IE1hY0Jvb2sgdG91Y2hwYWRzIG9uIE9TIFguCisgICAgLy8gRm9yIFNjcm9sbEJ5UGl4
ZWxXaGVlbEV2ZW50cywgdGhlIGRlbHRhIHZhbHVlcyBjb250YWluIHRoZSBwcmVjaXNlIG51bWJl
ciBvZiBwaXhlbHMgdG8gc2Nyb2xsLgorICAgIC8vIFRoZSBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50
ICh0aGUgbm9ybWFsIHdoZWVsIGV2ZW50KSBzZW5kcyBhIGRlbHRhIHRoYXQgY2FuIGJlIGNvcnJl
Y3RlZCBieSBhIGxpbmUgbXVsdGlwbGllciB0byBkZXRlcm1pbmUgaG93IG1hbnkgbGluZXMgdG8g
c2Nyb2xsLgorICAgIC8vICAgICAgSWYgdGhlIHBsYXRmb3JtIGhhcyBjb25maWd1cmFibGUgbGlu
ZSBzZW5zaXRpdml0eSAoV2luZG93cyksIHRoZW4gdGhlIG51bWJlciBvZiBsaW5lcyB0byBzY3Jv
bGwgaXMgdXNlZCBpbiBvcmRlciB0byBiZWhhdmUgbGlrZSB0aGUgcGxhdGZvcm0uCisgICAgLy8g
ICAgICBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSBjb25maWd1cmFibGUgbGluZSBzZW5z
aXRpdml0eSwgdGhlbiBXZWJDb3JlJ3MgZGVmYXVsdCBiZWhhdmlvciBpcyB1c2VkICh3aGljaCBz
Y3JvbGxzIGFib3V0IDMgbGluZXMgcGVyIHdoZWVsKS4KKyAgICAvLyAgICAgICAgICBPbiBPUyBY
IHdoZW4gbmF0aXZlIE5TU2Nyb2xsVmlld3MgYXJlIHVzZWQsIHRoZSBhbW91bnQgdG8gd2hlZWwg
aXMgaGFuZGxlZCBieSB0aGUgTlNTY3JvbGxWaWV3IGl0c2VsZiAod2hpY2ggaGFzIGFuIGFjY2Vs
ZXJhdGlvbiBjb21wb25lbnQgYnVpbHQgaW50bworICAgIC8vICAgICAgICAgIHRoZSB3aGVlbGlu
ZywgYnV0IHdlIGFsc28gdXNlIGEgbXVsdGlwbGllciB0byBtYWtlIGl0IGF2ZXJhZ2Ugb3V0IHRv
IGFib3V0IDMgbGluZXMgcGVyIHdoZWVsIGZvciB0eXBpY2FsIHdoZWVsaW5nIHVzZXMpLiAgVGhp
cyBldmVudCBpcworICAgIC8vICAgICAgICAgIG5vdCByZWxldmFudCBmb3IgTlNTY3JvbGxWaWV3
IHdoZWVsaW5nICh0aGUgb3JpZ2luYWwgT2JqLUMgd2hlZWwgZXZlbnQgaXMgdXNlZCkuCisgICAg
Ly8gRm9yIFNjcm9sbEJ5TGluZVdoZWVsRXZlbnRzLCB0aGUgZGVsdGEgdmFsdWVzIHJlcHJlc2Vu
dCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbC4KKyAgICAvLyBUaGUgU2Nyb2xsQnlQYWdl
V2hlZWxFdmVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgd2hlZWwgZXZlbnQgc2hvdWxkIHNjcm9sbCBh
biBlbnRpcmUgcGFnZSBpbnN0ZWFkLiAgSW4gdGhpcyBjYXNlIFdlYkNvcmUncyBidWlsdCBpbiBw
YWdpbmcgYmVoYXZpb3IgaXMgdXNlZCB0byBwYWdlCisgICAgLy8gdXAgYW5kIGRvd24gKHlvdSBn
ZXQgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaWYgdGhlIHVzZXIgd2FzIGNsaWNraW5nIGluIGEgc2Ny
b2xsYmFyIHRyYWNrIHRvIHBhZ2UgdXAgb3IgcGFnZSBkb3duKS4gIFBhZ2Ugc2Nyb2xsaW5nIG9u
bHkgd29ya3MgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLgorICAgIGVudW0gUGxhdGZvcm1X
aGVlbEV2ZW50R3JhbnVsYXJpdHkgeyBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50LCBTY3JvbGxCeVBh
Z2VXaGVlbEV2ZW50LCBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCB9OworICAgIAorICAgIC8vIFdl
YkNvcmUgdXNlcyBhIGxpbmUgbXVsdGlwbGUgb2YgfjMgKDQwcHggcGVyIGxpbmUgc3RlcCkgd2hl
biBkb2luZyBhcnJvd2luZyB3aXRoIGEgc2Nyb2xsYmFyIG9yIGxpbmUgc3RlcHBpbmcgdmlhIHRo
ZSBhcnJvdyBrZXlzLiAgVGhlIGRlbHRhIGZvciB3aGVlbGluZyBpcyBleHByZXNzZWQKKyAgICAv
LyBhcyBhICMgb2YgYWN0dWFsIGxpbmVzICg0MCAvIDMgPSAxIHdoZWVsIGxpbmUpLiAgV2UgdXNl
IHRoZSBob3Jpem9udGFsTGluZU11bHRpcGxpZXIgYW5kIHZlcnRpY2FsTGluZU11bHRpcGxpZXIg
bWV0aG9kcyB0byBpbmNvcnBvcmF0ZSB0aGUgbGluZSBtdWx0aXBsaWVyIGludG8gdGhlIGRlbHRh
cy4gIE9uCisgICAgLy8gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgd2hlZWwgc2Vuc2l0
aXZpdHksIHdlIHVzZSB0aGlzIGhhcmRjb2RlZCBjb25zdGFudCB2YWx1ZSBvZiAzIHRvIGVuc3Vy
ZSB0aGF0IHdoZWVsaW5nIGJ5IGRlZmF1bHQgbWF0Y2hlcyB0aGUgV2ViQ29yZSBiZWhhdmlvciB5
b3UKKyAgICAvLyBnZXQgd2hlbiBkb2luZyBvdGhlciBraW5kcyBvZiBsaW5lIHN0ZXBwaW5nLgor
ICAgIGNvbnN0IGludCBjTGluZU11bHRpcGxpZXIgPSAzOworCiAgICAgY2xhc3MgUGxhdGZvcm1X
aGVlbEV2ZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBj
b25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgICAgIGNvbnN0IEludFBvaW50JiBnbG9i
YWxQb3MoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9uOyB9CisgICAgICAgIGNvbnN0
IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9IC8vIFBsYXRmb3Jt
V2luZG93IGNvb3JkaW5hdGVzLgorICAgICAgICBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zKCkg
Y29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbjsgfSAvLyBTY3JlZW4gY29vcmRpbmF0ZXMu
CisKKyAgICAgICAgZmxvYXQgZGVsdGFYKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YVg7IH0KKyAg
ICAgICAgZmxvYXQgZGVsdGFZKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YVk7IH0KIAotICAgICAg
ICBmbG9hdCBkZWx0YVgoYm9vbCB3aXRoU2Nyb2xsU2Vuc2l0aXZpdHlGYWN0b3IgPSB0cnVlKSBj
b25zdCB7IHJldHVybiAod2l0aFNjcm9sbFNlbnNpdGl2aXR5RmFjdG9yID8gbV9kZWx0YVggKiBt
X2NoYXJzVG9TY3JvbGxQZXJEZWx0YSA6IG1fZGVsdGFYKTsgfQotICAgICAgICBmbG9hdCBkZWx0
YVkoYm9vbCB3aXRoU2Nyb2xsU2Vuc2l0aXZpdHlGYWN0b3IgPSB0cnVlKSBjb25zdCB7IHJldHVy
biAod2l0aFNjcm9sbFNlbnNpdGl2aXR5RmFjdG9yID8gbV9kZWx0YVkgKiBtX2xpbmVzVG9TY3Jv
bGxQZXJEZWx0YSA6IG1fZGVsdGFZKTsgfQorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFu
dWxhcml0eSBncmFudWxhcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhbnVsYXJpdHk7IH0KIAot
ICAgICAgICBib29sIGlzUGFnZVhTY3JvbGxNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFnZVhTY3JvbGxNb2RlOyB9Ci0gICAgICAgIGJvb2wgaXNQYWdlWVNjcm9sbE1vZGVFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlWVNjcm9sbE1vZGU7IH0KICAgICAgICAgYm9vbCBpc0Fj
Y2VwdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FjY2VwdGVkOyB9CiAgICAgICAgIGJvb2wgc2hp
ZnRLZXkoKSBjb25zdCB7IHJldHVybiBtX3NoaWZ0S2V5OyB9CiAgICAgICAgIGJvb2wgY3RybEtl
eSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RybEtleTsgfQogICAgICAgICBib29sIGFsdEtleSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9CiAgICAgICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YUtleTsgfQogCi0gICAgICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4gbV9w
b3NpdGlvbi54KCk7IH0KKyAgICAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
LngoKTsgfSAvLyBQbGF0Zm9ybVdpbmRvdyBjb29yZGluYXRlcy4KICAgICAgICAgaW50IHkoKSBj
b25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLnkoKTsgfQotICAgICAgICBpbnQgZ2xvYmFsWCgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFsUG9zaXRpb24ueCgpOyB9CisgICAgICAgIGludCBnbG9iYWxY
KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbi54KCk7IH0gLy8gU2NyZWVuIGNvb3Jk
aW5hdGVzLgogICAgICAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsUG9z
aXRpb24ueSgpOyB9CiAKICAgICAgICAgdm9pZCBhY2NlcHQoKSB7IG1faXNBY2NlcHRlZCA9IHRy
dWU7IH0KICAgICAgICAgdm9pZCBpZ25vcmUoKSB7IG1faXNBY2NlcHRlZCA9IGZhbHNlOyB9Ci0g
ICAgICAgIAotICAgICAgICBib29sIGlzQ29udGludW91cygpIGNvbnN0IHsgcmV0dXJuIG1faXND
b250aW51b3VzOyB9Ci0gICAgICAgIGZsb2F0IGNvbnRpbnVvdXNEZWx0YVgoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRpbnVvdXNEZWx0YVg7IH0KLSAgICAgICAgZmxvYXQgY29udGludW91c0RlbHRh
WSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludW91c0RlbHRhWTsgfQogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoTlNFdmVudCopOwpAQCAtMTA0LDIyICsx
MjAsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICAgICBwcml2YXRlOgorI2lm
ICFQTEFURk9STShXSU4pCisgICAgICAgIGludCBob3Jpem9udGFsTGluZU11bHRpcGxpZXIoKSBj
b25zdCB7IHJldHVybiBjTGluZU11bHRpcGxpZXI7IH0KKyAgICAgICAgaW50IHZlcnRpY2FsTGlu
ZU11bHRpcGxpZXIoKSBjb25zdCB7IHJldHVybiBjTGluZU11bHRpcGxpZXI7IH0KKyNlbHNlCisg
ICAgICAgIGludCBob3Jpem9udGFsTGluZU11bHRpcGxpZXIoKSBjb25zdDsKKyAgICAgICAgaW50
IHZlcnRpY2FsTGluZU11bHRpcGxpZXIoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgICAgIEludFBv
aW50IG1fcG9zaXRpb247CiAgICAgICAgIEludFBvaW50IG1fZ2xvYmFsUG9zaXRpb247CiAgICAg
ICAgIGZsb2F0IG1fZGVsdGFYOwogICAgICAgICBmbG9hdCBtX2RlbHRhWTsKLSAgICAgICAgaW50
IG1fY2hhcnNUb1Njcm9sbFBlckRlbHRhOwotICAgICAgICBpbnQgbV9saW5lc1RvU2Nyb2xsUGVy
RGVsdGE7Ci0gICAgICAgIGJvb2wgbV9wYWdlWFNjcm9sbE1vZGU7Ci0gICAgICAgIGJvb2wgbV9w
YWdlWVNjcm9sbE1vZGU7CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudEdyYW51bGFyaXR5IG1f
Z3JhbnVsYXJpdHk7CiAgICAgICAgIGJvb2wgbV9pc0FjY2VwdGVkOwogICAgICAgICBib29sIG1f
c2hpZnRLZXk7CiAgICAgICAgIGJvb2wgbV9jdHJsS2V5OwogICAgICAgICBib29sIG1fYWx0S2V5
OwogICAgICAgICBib29sIG1fbWV0YUtleTsKLSAgICAgICAgYm9vbCBtX2lzQ29udGludW91czsK
LSAgICAgICAgZmxvYXQgbV9jb250aW51b3VzRGVsdGFYOwotICAgICAgICBmbG9hdCBtX2NvbnRp
bnVvdXNEZWx0YVk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vU2Nyb2xsVmlldy5j
cHAJKHJldmlzaW9uIDM3MDI0KQorKysgcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAKICNpbmNs
dWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogdXNpbmcgc3RkOjptYXg7CkBAIC0yNjgsNiAr
MjY5LDM0IEBAIFNjcm9sbGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJNb3UKICAgICBy
ZXR1cm4gMDsKIH0KIAordm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxF
dmVudCYgZSkKK3sKKyAgICBpZiAoIWFsbG93c1Njcm9sbGluZygpIHx8IHBsYXRmb3JtV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERldGVybWluZSBob3cgbXVjaCB3ZSB3YW50
IHRvIHNjcm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2Ugd2lsbCBhY2NlcHQgdGhlIGV2
ZW50LgorICAgIEludFNpemUgbWF4U2Nyb2xsRGVsdGEgPSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KSAtIHNjcm9sbFBvc2l0aW9uKCk7CisgICAgaWYgKChlLmRlbHRhWCgpIDwgMCAmJiBtYXhTY3Jv
bGxEZWx0YS53aWR0aCgpID4gMCkgfHwKKyAgICAgICAgKGUuZGVsdGFYKCkgPiAwICYmIHNjcm9s
bE9mZnNldCgpLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVkoKSA8IDAgJiYgbWF4
U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVkoKSA+IDAgJiYg
c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkgPiAwKSkgeworICAgICAgICBlLmFjY2VwdCgpOworICAg
ICAgICBmbG9hdCBkZWx0YVggPSBlLmRlbHRhWCgpOworICAgICAgICBmbG9hdCBkZWx0YVkgPSBl
LmRlbHRhWSgpOworICAgICAgICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5TGluZVdo
ZWVsRXZlbnQpIHsKKyAgICAgICAgICAgIGRlbHRhWCAqPSBjTW91c2VXaGVlbFBpeGVsc1Blckxp
bmVTdGVwOworICAgICAgICAgICAgZGVsdGFZICo9IGNNb3VzZVdoZWVsUGl4ZWxzUGVyTGluZVN0
ZXA7CisgICAgICAgIH0gZWxzZSBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdo
ZWVsRXZlbnQpIHsKKyAgICAgICAgICAgIEFTU0VSVChkZWx0YVggPT0gMCk7CisgICAgICAgICAg
ICBib29sIG5lZ2F0aXZlID0gZGVsdGFZIDwgMDsKKyAgICAgICAgICAgIGRlbHRhWSA9IG1heCgw
LCB2aXNpYmxlSGVpZ2h0KCkgLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CisgICAgICAgICAg
ICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgZGVsdGFZID0gLWRlbHRhWTsKKyAgICAg
ICAgfQorICAgICAgICBzY3JvbGxCeShJbnRTaXplKC1kZWx0YVgsIC1kZWx0YVkpKTsKKyAgICB9
Cit9CisKICNpZiAhUExBVEZPUk0oTUFDKQogdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENh
bkJsaXRPblNjcm9sbCgpCiB7CkluZGV4OiBwbGF0Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gMzcwMTIpCisrKyBwbGF0Zm9ybS9T
Y3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOSBAQCBjbGFzcyBTY3JvbGxi
YXJUaGVtZTsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIAogLy8gVGhlc2UgbWF0Y2ggdGhl
IG51bWJlcnMgd2UgdXNlIG92ZXIgaW4gV2ViS2l0IChXZWJGcmFtZVZpZXcubSkuCi0jZGVmaW5l
IExJTkVfU1RFUCAgIDQwCi0jZGVmaW5lIFBBR0VfS0VFUCAgIDQwCitjb25zdCBpbnQgY1Njcm9s
bGJhclBpeGVsc1BlckxpbmVTdGVwID0gIDQwOworY29uc3QgZmxvYXQgY01vdXNlV2hlZWxQaXhl
bHNQZXJMaW5lU3RlcCA9IDQwLjBmIC8gMy4wZjsKK2NvbnN0IGludCBjQW1vdW50VG9LZWVwV2hl
blBhZ2luZyA9IDQwOwogCiBjbGFzcyBTY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0LCBwdWJsaWMg
UmVmQ291bnRlZDxTY3JvbGxiYXI+IHsKIHByb3RlY3RlZDoKSW5kZXg6IHBsYXRmb3JtL2d0ay9T
Y3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0
ay5jcHAJKHJldmlzaW9uIDM3MDI0KQorKysgcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsMTkgKzM2Miw2IEBAIGJvb2wgU2Nyb2xsVmlldzo6aXNP
ZmZzY3JlZW4oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3
Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKLXsKLSAgICAvLyBEZXRlcm1pbmUg
aG93IG11Y2ggd2Ugd2FudCB0byBzY3JvbGwuICBJZiB3ZSBjYW4gbW92ZSBhdCBhbGwsIHdlIHdp
bGwgYWNjZXB0IHRoZSBldmVudC4KLSAgICBJbnRTaXplIG1heFNjcm9sbERlbHRhID0gbWF4aW11
bVNjcm9sbFBvc2l0aW9uKCkgLSBzY3JvbGxQb3NpdGlvbigpOwotICAgIGlmICgoZS5kZWx0YVgo
KSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEud2lkdGgoKSA+IDApIHx8Ci0gICAgICAgIChlLmRlbHRh
WCgpID4gMCAmJiBzY3JvbGxPZmZzZXQoKS53aWR0aCgpID4gMCkgfHwKLSAgICAgICAgKGUuZGVs
dGFZKCkgPCAwICYmIG1heFNjcm9sbERlbHRhLmhlaWdodCgpID4gMCkgfHwKLSAgICAgICAgKGUu
ZGVsdGFZKCkgPiAwICYmIHNjcm9sbE9mZnNldCgpLmhlaWdodCgpID4gMCkpCi0gICAgICAgIGUu
YWNjZXB0KCk7Ci0KLSAgICBzY3JvbGxCeShJbnRTaXplKC1lLmRlbHRhWCgpICogTElORV9TVEVQ
LCAtZS5kZWx0YVkoKSAqIExJTkVfU1RFUCkpOwotfQotCiB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKIHsKICAgICAvLyBEb24n
dCBhbGxvdyByZS1lbnRyYW5jeSBpbnRvIHRoaXMgZnVuY3Rpb24uCkBAIC00NTEsNyArNDM4LDcg
QEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAgIH0gZWxzZSBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZp
c2libGVXaWR0aCgpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEVuYWJsZWQo
Y29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSAo
Y2xpZW50V2lkdGggLSBQQUdFX0tFRVApOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50
V2lkdGggLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CiAgICAgICAgIGlmIChwYWdlU3RlcCA8
IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7CiAgICAgICAgIEludFJlY3Qgb2xkUmVjdChtX2hv
cml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAgSW50UmVjdCBoQmFyUmVj
dCA9IEludFJlY3QoMCwKQEAgLTQ2NCw3ICs0NTEsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQp
CiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0
aW9uKHRydWUpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKExJTkVf
U1RFUCwgcGFnZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBz
KGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0ZXApOwogICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgo
KSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRo
KCkpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKQEAgLTQ4Niw3ICs0NzMs
NyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgfSBlbHNl
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSB2
aXNpYmxlSGVpZ2h0KCk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEVuYWJsZWQo
Y29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdodCk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9
IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xp
ZW50SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOwogICAgICAgICBpZiAocGFnZVN0
ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKICAgICAgICAgSW50UmVjdCBvbGRSZWN0
KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAgSW50UmVjdCB2QmFy
UmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCkBA
IC00OTksNyArNDg2LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0
IAogCiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7Ci0gICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKExJTkVfU1RFUCwgcGFnZVN0ZXApOworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGlu
ZVN0ZXAsIHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9y
dGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwogICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOwogICAgICAgICBpZiAobV9zY3Jv
bGxiYXJzU3VwcHJlc3NlZCkKSW5kZXg6IHBsYXRmb3JtL2d0ay9XaGVlbEV2ZW50R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ndGsvV2hlZWxFdmVudEd0ay5jcHAJKHJldmlzaW9uIDM3
MDEyKQorKysgcGxhdGZvcm0vZ3RrL1doZWVsRXZlbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSw3IEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEcK
IAogICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAoaW50KWV2ZW50LT55
KTsKICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eF9yb290LCAo
aW50KWV2ZW50LT55X3Jvb3QpOworICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmVXaGVl
bEV2ZW50OwogICAgIG1faXNBY2NlcHRlZCA9IGZhbHNlOwogICAgIG1fc2hpZnRLZXkgPSBldmVu
dC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKICAgICBtX2N0cmxLZXkgPSBldmVudC0+c3RhdGUg
JiBHREtfQ09OVFJPTF9NQVNLOwpAQCAtNjksMTMgKzcwLDEwIEBAIFBsYXRmb3JtV2hlZWxFdmVu
dDo6UGxhdGZvcm1XaGVlbEV2ZW50KEcKICAgICAvLyBHREtfTU9EMl9NQVNLIGRvZXNuJ3QgYWx3
YXlzIG1lYW4gbWV0YSBzbyB3ZSBjYW4ndCB1c2UgaXQKICAgICBtX21ldGFLZXkgPSBmYWxzZTsK
ICNlbmRpZgotICAgIG1faXNDb250aW51b3VzID0gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogcmV0
cmlldmUgdGhlIHVzZXIgc2V0dGluZyBmb3IgdGhlIG51bWJlciBvZiBsaW5lcyB0byBzY3JvbGwg
b24gZWFjaCB3aGVlbCBldmVudAotICAgIG1fY2hhcnNUb1Njcm9sbFBlckRlbHRhID0gMTsKLSAg
ICBtX2xpbmVzVG9TY3JvbGxQZXJEZWx0YSA9IDE7Ci0gICAgbV9wYWdlWFNjcm9sbE1vZGUgPSBm
YWxzZTsKLSAgICBtX3BhZ2VZU2Nyb2xsTW9kZSA9IGZhbHNlOworICAgIG1fZGVsdGFYICo9IGhv
cml6b250YWxMaW5lTXVsdGlwbGllcigpOworICAgIG1fZGVsdGFZICo9IHZlcnRpY2FsTGluZU11
bHRpcGxpZXIoKTsKIH0KIAogfQpJbmRleDogcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHJldmlzaW9uIDM3
MDI0KQorKysgcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTIyMCw5ICsyMjAsNCBAQCBib29sIFNjcm9sbFZpZXc6OmlzT2Zmc2NyZWVuKCkgY29uc3QKICAg
ICByZXR1cm4gIVtwbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10gfHwgIVtbcGxhdGZvcm1XaWRnZXQo
KSB3aW5kb3ddIGlzVmlzaWJsZV07CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQ
bGF0Zm9ybVdoZWVsRXZlbnQmKQotewotICAgIC8vIERvIG5vdGhpbmcuIE5TU2Nyb2xsVmlldyBo
YW5kbGVzIGRvaW5nIHRoZSBzY3JvbGwgZm9yIHVzLgotfQotCiB9CkluZGV4OiBwbGF0Zm9ybS9t
YWMvV2hlZWxFdmVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvV2hlZWxFdmVu
dE1hYy5tbQkocmV2aXNpb24gMzcwMjkpCisrKyBwbGF0Zm9ybS9tYWMvV2hlZWxFdmVudE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoTlNFdmVudCogZXZlbnQpCiAg
ICAgOiBtX3Bvc2l0aW9uKHBvaW50Rm9yRXZlbnQoZXZlbnQpKQogICAgICwgbV9nbG9iYWxQb3Np
dGlvbihnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KSkKLSAgICAsIG1fZGVsdGFYKFtldmVudCBk
ZWx0YVhdKQotICAgICwgbV9kZWx0YVkoW2V2ZW50IGRlbHRhWV0pCi0gICAgLCBtX2NoYXJzVG9T
Y3JvbGxQZXJEZWx0YSgxKQotICAgICwgbV9saW5lc1RvU2Nyb2xsUGVyRGVsdGEoMSkKLSAgICAs
IG1fcGFnZVhTY3JvbGxNb2RlKGZhbHNlKQotICAgICwgbV9wYWdlWVNjcm9sbE1vZGUoZmFsc2Up
CiAgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCiAgICAgLCBtX3NoaWZ0S2V5KFtldmVudCBtb2Rp
ZmllckZsYWdzXSAmIE5TU2hpZnRLZXlNYXNrKQogICAgICwgbV9jdHJsS2V5KFtldmVudCBtb2Rp
ZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spCkBAIC00Nyw4ICs0MSwxMiBAQCBQbGF0Zm9y
bVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChOCiAgICAgLCBtX21ldGFLZXkoW2V2ZW50
IG1vZGlmaWVyRmxhZ3NdICYgTlNDb21tYW5kS2V5TWFzaykKIHsKICAgICBCT09MIGNvbnRpbnVv
dXM7Ci0gICAgd2tHZXRXaGVlbEV2ZW50RGVsdGFzKGV2ZW50LCAmbV9jb250aW51b3VzRGVsdGFY
LCAmbV9jb250aW51b3VzRGVsdGFZLCAmY29udGludW91cyk7Ci0gICAgbV9pc0NvbnRpbnVvdXMg
PSBjb250aW51b3VzOworICAgIHdrR2V0V2hlZWxFdmVudERlbHRhcyhldmVudCwgJm1fZGVsdGFY
LCAmbV9kZWx0YVksICZjb250aW51b3VzKTsKKyAgICBtX2dyYW51bGFyaXR5ID0gY29udGludW91
cyA/IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50IDogU2Nyb2xsQnlMaW5lV2hlZWxFdmVudDsKKyAg
ICBpZiAobV9ncmFudWxhcml0eSA9PSBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50KSB7CisgICAgICAg
IG1fZGVsdGFYICo9IGhvcml6b250YWxMaW5lTXVsdGlwbGllcigpOworICAgICAgICBtX2RlbHRh
WSAqPSB2ZXJ0aWNhbExpbmVNdWx0aXBsaWVyKCk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJKHJldmlzaW9uIDM3MDI0KQorKysgcGxh
dGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3
IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICBpZiAobV9o
b3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVX
aWR0aCgpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEVuYWJsZWQoY29udGVu
dHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50
V2lkdGggLSBQQUdFX0tFRVApOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGgg
LSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CiAgICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBh
Z2VTdGVwID0gY2xpZW50V2lkdGg7CiAgICAgICAgIEludFJlY3Qgb2xkUmVjdChtX2hvcml6b250
YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAgSW50UmVjdCBoQmFyUmVjdCA9IElu
dFJlY3QoMCwKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9s
bGJhcnMoY29uc3QgCiAKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAg
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRy
dWUpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKExJTkVfU1RFUCwg
cGFnZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKGNTY3Jv
bGxiYXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0ZXApOwogICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7CiAg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkpOwog
ICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKQEAgLTM1Niw3ICszNTYsNyBAQCB2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgaWYgKG1fdmVydGlj
YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHZpc2libGVIZWlnaHQo
KTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RW5hYmxlZChjb250ZW50c0hlaWdo
dCgpID4gY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdo
dCAtIFBBR0VfS0VFUCk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBj
QW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CiAgICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VT
dGVwID0gY2xpZW50SGVpZ2h0OwogICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogICAgICAgICBJbnRSZWN0IHZCYXJSZWN0ID0gSW50UmVj
dCh3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgCkBAIC0zNjksNyArMzY5
LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogCiAgICAgICAg
IGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7Ci0gICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFN0ZXBzKExJTkVfU1RFUCwgcGFnZVN0ZXApOworICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIHBhZ2VT
dGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRI
ZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJl
c3NlZCkKQEAgLTQ3OCwzNSArNDc4LDYgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGlj
c0NvbnRleHQqIAogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRm
b3JtV2hlZWxFdmVudCYgZSkKLXsKLSAgICBmbG9hdCBkZWx0YVggPSBlLmRlbHRhWCgpOwotICAg
IGZsb2F0IGRlbHRhWSA9IGUuZGVsdGFZKCk7Ci0KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91
c2VFdmVudChlLnBvcygpLCBlLmdsb2JhbFBvcygpLCBOb0J1dHRvbiwgTW91c2VFdmVudFNjcm9s
bCwKLSAgICAgICAgICAgIDAsIGUuc2hpZnRLZXkoKSwgZS5jdHJsS2V5KCksIGUuYWx0S2V5KCks
IGUubWV0YUtleSgpLCAwKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbEJhciA9IHNjcm9sbGJhclVu
ZGVyTW91c2UobW91c2VFdmVudCk7Ci0KLSAgICBpZiAoc2Nyb2xsQmFyICYmIHNjcm9sbEJhciA9
PSB2ZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIGRlbHRhWSA9IChkZWx0YVkgPT0gMCA/
IGRlbHRhWCA6IGRlbHRhWSk7Ci0gICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgfSBlbHNlIGlmIChz
Y3JvbGxCYXIgJiYgc2Nyb2xsQmFyID09IGhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAg
ICBkZWx0YVggPSAoZGVsdGFYID09IDAgPyBkZWx0YVkgOiBkZWx0YVgpOwotICAgICAgICBkZWx0
YVkgPSAwOwotICAgIH0KLQotICAgIC8vIERldGVybWluZSBob3cgbXVjaCB3ZSB3YW50IHRvIHNj
cm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2Ugd2lsbCBhY2NlcHQgdGhlIGV2ZW50Lgot
ICAgIEludFNpemUgbWF4U2Nyb2xsRGVsdGEgPSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIHNj
cm9sbFBvc2l0aW9uKCk7Ci0gICAgaWYgKChkZWx0YVggPCAwICYmIG1heFNjcm9sbERlbHRhLndp
ZHRoKCkgPiAwKSB8fAotICAgICAgICAoZGVsdGFYID4gMCAmJiBzY3JvbGxPZmZzZXQoKS53aWR0
aCgpID4gMCkgfHwKLSAgICAgICAgKGRlbHRhWSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEuaGVpZ2h0
KCkgPiAwKSB8fAotICAgICAgICAoZGVsdGFZID4gMCAmJiBzY3JvbGxPZmZzZXQoKS5oZWlnaHQo
KSA+IDApKSB7Ci0KLSAgICAgICAgZS5hY2NlcHQoKTsKLSAgICAgICAgc2Nyb2xsQnkoSW50U2l6
ZShpbnQoLWRlbHRhWCAqIExJTkVfU1RFUCksIGludCgtZGVsdGFZICogTElORV9TVEVQKSkpOwot
ICAgIH0KLX0KLQogYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYgKGRpcmVjdGlv
biA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgewpJbmRleDogcGxhdGZv
cm0vcXQvV2hlZWxFdmVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9xdC9XaGVlbEV2
ZW50UXQuY3BwCShyZXZpc2lvbiAzNzAxMikKKysrIHBsYXRmb3JtL3F0L1doZWVsRXZlbnRRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6
OlBsYXRmb3JtV2hlZWxFdmVudChRCiAjZWxzZQogICAgIDogbV9wb3NpdGlvbihlLT5wb3MoKSkK
ICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZS0+Z2xvYmFsUG9zKCkpCisgICAgLCBtX2dyYW51bGFy
aXR5KFNjcm9sbEJ5TGluZVdoZWVsRXZlbnQpCiAgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCiAg
ICAgLCBtX3NoaWZ0S2V5KGUtPm1vZGlmaWVycygpICYgUXQ6OlNoaWZ0TW9kaWZpZXIpCiAgICAg
LCBtX2N0cmxLZXkoZS0+bW9kaWZpZXJzKCkgJiBRdDo6Q29udHJvbE1vZGlmaWVyKQogICAgICwg
bV9hbHRLZXkoZS0+bW9kaWZpZXJzKCkgJiBRdDo6QWx0TW9kaWZpZXIpCiAgICAgLCBtX21ldGFL
ZXkoZS0+bW9kaWZpZXJzKCkgJiBRdDo6TWV0YU1vZGlmaWVyKQotICAgICwgbV9pc0NvbnRpbnVv
dXMoZmFsc2UpCiB7CiAgICAgaWYgKGUtPm9yaWVudGF0aW9uKCkgPT0gUXQ6Okhvcml6b250YWwp
IHsKICAgICAgICAgbV9kZWx0YVggPSAoZS0+ZGVsdGEoKSAvIDEyMCk7CkBAIC01MSwxMCArNTEs
OCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChRCiAgICAgfQogCiAg
ICAgLy8gRklYTUU6IHJldHJpZXZlIHRoZSB1c2VyIHNldHRpbmcgZm9yIHRoZSBudW1iZXIgb2Yg
bGluZXMgdG8gc2Nyb2xsIG9uIGVhY2ggd2hlZWwgZXZlbnQKLSAgICBtX2NoYXJzVG9TY3JvbGxQ
ZXJEZWx0YSA9IDE7Ci0gICAgbV9saW5lc1RvU2Nyb2xsUGVyRGVsdGEgPSAxOwotICAgIG1fcGFn
ZVhTY3JvbGxNb2RlID0gZmFsc2U7Ci0gICAgbV9wYWdlWVNjcm9sbE1vZGUgPSBmYWxzZTsKKyAg
ICBtX2RlbHRhWCAqPSBob3Jpem9udGFsTGluZU11bHRpcGxpZXIoKTsKKyAgICBtX2RlbHRhWSAq
PSB2ZXJ0aWNhbExpbmVNdWx0aXBsaWVyKCk7CiB9CiAjZW5kaWYgLy8gUVRfTk9fV0hFRUxFVkVO
VAogCkluZGV4OiBwbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCShyZXZpc2lvbiAzNzAyNSkKKysrIHBsYXRm
b3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTQgKzU0LDYg
QEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jZGVmaW5l
IFdIRUVMX1NURVAgMTUgLy8gVG8ga2VlcCB0aGUgYmVoYXZpb3Igd2UgaGFkIGJlZm9yZSBhZGRp
bmcgdGhlIHNjcm9sbCB3aGVlbCBzZW5zaXRpdml0eSA6IDxyZGFyOi8vcHJvYmxlbS81NzcwODkz
PgotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVsdGFGb3JQYWdlU2Nyb2xsTW9kZShmbG9h
dCYgZGVsdGEsIGJvb2wgcGFnZVNjcm9sbEVuYWJsZWQsIGludCB2aXNpYmxlV2lkdGhPckhlaWdo
dCkKLXsKLSAgICBpZiAocGFnZVNjcm9sbEVuYWJsZWQpCi0gICAgICAgIGRlbHRhID0gKGRlbHRh
ID4gMCA/IHZpc2libGVXaWR0aE9ySGVpZ2h0IDogLXZpc2libGVXaWR0aE9ySGVpZ2h0KSAvIFdI
RUVMX1NURVA7Ci19Ci0KIGNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlIDogcHVi
bGljIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6CiAgICAgU2Nyb2xsVmlld1ByaXZhdGUoU2Ny
b2xsVmlldyogdmlldykKQEAgLTMzMSw3ICszMjMsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAg
ICAgICBpbnQgY2xpZW50V2lkdGggPSB2aXNpYmxlV2lkdGgoKTsKICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zZXRFbmFibGVkKGNvbnRlbnRzV2lkdGgoKSA+IGNsaWVudFdpZHRoKTsK
LSAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoIC0gUEFHRV9LRUVQKTsKKyAgICAg
ICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcp
OwogICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRoOwogICAg
ICAgICBJbnRSZWN0IG9sZFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7
CiAgICAgICAgIEludFJlY3QgaEJhclJlY3QgPSBJbnRSZWN0KDAsCkBAIC0zNDQsNyArMzM2LDcg
QEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogCiAgICAgICAgIGlm
IChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIHBh
Z2VTdGVwKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNs
aWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1
cHByZXNzZWQpCkBAIC0zNTQsNyArMzQ2LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3Jv
bGxiYXJzKGNvbnN0IAogICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGlu
dCBjbGllbnRIZWlnaHQgPSB2aXNpYmxlSGVpZ2h0KCk7CiAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdodCk7Ci0gICAg
ICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOworICAgICAgICBp
bnQgcGFnZVN0ZXAgPSAoY2xpZW50SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOwog
ICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKICAgICAg
ICAgSW50UmVjdCBvbGRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAg
ICAgICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3Jv
bGxiYXItPndpZHRoKCksIApAQCAtMzY3LDcgKzM1OSw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBk
YXRlU2Nyb2xsYmFycyhjb25zdCAKIAogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3Nl
ZCkKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0
aW9uKHRydWUpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhMSU5FX1NU
RVAsIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Nj
cm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsK
ICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsK
ICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCkBAIC00OTMsMjYgKzQ4NSw2IEBA
IHZvaWQgU2Nyb2xsVmlldzo6dGhlbWVDaGFuZ2VkKCkKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAK
LXZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCi17Ci0g
ICAgaWYgKCFhbGxvd3NTY3JvbGxpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRGV0
ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUgYXQgYWxs
LCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCi0gICAgSW50U2l6ZSBtYXhTY3JvbGxEZWx0YSA9
IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIC0gc2Nyb2xsUG9zaXRpb24oKTsKLSAgICBpZiAoKGUu
ZGVsdGFYKCkgPCAwICYmIG1heFNjcm9sbERlbHRhLndpZHRoKCkgPiAwKSB8fAotICAgICAgICAo
ZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xsT2Zmc2V0KCkud2lkdGgoKSA+IDApIHx8Ci0gICAgICAg
IChlLmRlbHRhWSgpIDwgMCAmJiBtYXhTY3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApIHx8Ci0gICAg
ICAgIChlLmRlbHRhWSgpID4gMCAmJiBzY3JvbGxPZmZzZXQoKS5oZWlnaHQoKSA+IDApKSB7Ci0g
ICAgICAgIGUuYWNjZXB0KCk7Ci0gICAgICAgIGZsb2F0IGRlbHRhWCA9IGUuZGVsdGFYKCksIGRl
bHRhWSA9IGUuZGVsdGFZKCk7Ci0gICAgICAgIGFkanVzdERlbHRhRm9yUGFnZVNjcm9sbE1vZGUo
ZGVsdGFYLCBlLmlzUGFnZVhTY3JvbGxNb2RlRW5hYmxlZCgpLCB2aXNpYmxlV2lkdGgoKSk7Ci0g
ICAgICAgIGFkanVzdERlbHRhRm9yUGFnZVNjcm9sbE1vZGUoZGVsdGFZLCBlLmlzUGFnZVlTY3Jv
bGxNb2RlRW5hYmxlZCgpLCB2aXNpYmxlSGVpZ2h0KCkpOwotCi0gICAgICAgIHNjcm9sbEJ5KElu
dFNpemUoLWRlbHRhWCAqIFdIRUVMX1NURVAsIC1kZWx0YVkgKiBXSEVFTF9TVEVQKSk7Ci0gICAg
fQotfQotCiB2b2lkIFNjcm9sbFZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkgY29uc3QKIHsKICAg
ICBIYXNoU2V0PFdpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgp
OwpJbmRleDogcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBs
YXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAkocmV2aXNpb24gMzcwMTIpCisrKyBwbGF0Zm9y
bS93aW4vV2hlZWxFdmVudFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwzMCBA
QCBzdGF0aWMgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb25Gb3JFdmVudChICiAgICAgcmV0dXJuIHBv
aW50OwogfQogCitpbnQgUGxhdGZvcm1XaGVlbEV2ZW50Ojpob3Jpem9udGFsTGluZU11bHRpcGxp
ZXIoKSBjb25zdAoreworICAgIHN0YXRpYyBVTE9ORyBzY3JvbGxDaGFyczsKKyAgICBpZiAoIXNj
cm9sbENoYXJzICYmICFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUV0hFRUxTQ1JPTExDSEFS
UywgMCwgJnNjcm9sbENoYXJzLCAwKSkKKyAgICAgICAgc2Nyb2xsQ2hhcnMgPSBjTGluZU11bHRp
cGxpZXI7CisgICAgcmV0dXJuIHNjcm9sbENoYXJzOworfQorCitpbnQgUGxhdGZvcm1XaGVlbEV2
ZW50Ojp2ZXJ0aWNhbExpbmVNdWx0aXBsaWVyKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgVUxPTkcg
c2Nyb2xsTGluZXM7CisgICAgaWYgKCFzY3JvbGxMaW5lcyAmJiAhU3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVFdIRUVMU0NST0xMTElORVMsIDAsICZzY3JvbGxMaW5lcywgMCkpCisgICAgICAg
IHNjcm9sbExpbmVzID0gY0xpbmVNdWx0aXBsaWVyOworICAgIHJldHVybiBzY3JvbGxMaW5lczsK
K30KKyAgICAgICAgCiBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChIV05E
IGhXbmQsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wgaXNIb3Jpem9udGFsKQog
ICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbkZvckV2ZW50KGhXbmQsIGxQYXJhbSkpCiAgICAgLCBt
X2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoaFduZCwgbFBhcmFtKSkKLSAg
ICAsIG1fcGFnZVhTY3JvbGxNb2RlKGZhbHNlKQotICAgICwgbV9wYWdlWVNjcm9sbE1vZGUoZmFs
c2UpCiAgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCiAgICAgLCBtX3NoaWZ0S2V5KHdQYXJhbSAm
IE1LX1NISUZUKQogICAgICwgbV9jdHJsS2V5KHdQYXJhbSAmIE1LX0NPTlRST0wpCiAgICAgLCBt
X2FsdEtleShHZXRLZXlTdGF0ZShWS19NRU5VKSAmIEhJR0hfQklUX01BU0tfU0hPUlQpCiAgICAg
LCBtX21ldGFLZXkobV9hbHRLZXkpIC8vIEZJWE1FOiBXZSdsbCBoYXZlIHRvIHRlc3Qgb3RoZXIg
YnJvd3NlcnMKLSAgICAsIG1faXNDb250aW51b3VzKGZhbHNlKQogewogICAgIHN0YXRpYyBVTE9O
RyBzY3JvbGxMaW5lcywgc2Nyb2xsQ2hhcnM7CiAgICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxf
REVMVEFfV1BBUkFNKHdQYXJhbSkgLyAoZmxvYXQpV0hFRUxfREVMVEE7CkBAIC02NCwzNyArNzcs
MTggQEAgUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSAogICAgICAgICAv
LyBXaW5kb3dzIHNlbmRzIGEgcG9zaXRpdmUgZGVsdGEgZm9yIHNjcm9sbGluZyByaWdodCwgd2hp
bGUgQXBwS2l0CiAgICAgICAgIC8vIHNlbmRzIGEgbmVnYXRpdmUgZGVsdGEuIEV2ZW50SGFuZGxl
ciBleHBlY3RzIHRoZSBBcHBLaXQgdmFsdWVzLAogICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIG5l
Z2F0ZSBvdXIgaG9yaXpvbnRhbCBkZWx0YSB0byBtYXRjaC4KLSAgICAgICAgbV9kZWx0YVggPSAt
ZGVsdGE7CisgICAgICAgIG1fZGVsdGFYID0gLWRlbHRhICogaG9yaXpvbnRhbExpbmVNdWx0aXBs
aWVyKCk7CiAgICAgICAgIG1fZGVsdGFZID0gMDsKLQotICAgICAgICBpZiAoIVN5c3RlbVBhcmFt
ZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFNDUk9MTENIQVJTLCAwLCAmc2Nyb2xsQ2hhcnMsIDApKQot
ICAgICAgICAgICAgc2Nyb2xsQ2hhcnMgPSAxOwotCi0gICAgICAgIC8vIElmIHdlIGFyZSBpbiBh
IHBhZ2Ugc2Nyb2xsIG1vZGUgZm9yIHRoZSBjaGFycyB3ZSBzZXQgdGhlIGJvb2xlYW4KLSAgICAg
ICAgaWYgKHNjcm9sbENoYXJzID4gV0hFRUxfREVMVEEpIHsKLSAgICAgICAgICAgIG1fcGFnZVhT
Y3JvbGxNb2RlID0gdHJ1ZTsKLSAgICAgICAgICAgIHNjcm9sbENoYXJzID0gMTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1fY2hhcnNUb1Njcm9sbFBlckRlbHRhID0gIHN0YXRpY19jYXN0PGludD4o
c2Nyb2xsQ2hhcnMpOwotICAgICAgICBtX2xpbmVzVG9TY3JvbGxQZXJEZWx0YSA9IDE7CisgICAg
ICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50OwogICAgIH0gZWxzZSB7
CiAgICAgICAgIG1fZGVsdGFYID0gMDsKICAgICAgICAgbV9kZWx0YVkgPSBkZWx0YTsKLQotICAg
ICAgICBpZiAoIVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFNDUk9MTExJTkVTLCAw
LCAmc2Nyb2xsTGluZXMsIDApKQotICAgICAgICAgICAgc2Nyb2xsTGluZXMgPSAzOyAvLyAzIGlz
IHRoZSBkZWZhdWx0IHdpbmRvd3MgdmFsdWUgZm9yIHRoZSBudW1iZXIgb2YgbGluZXMgdG8gc2Ny
b2xsIGZvciBlYWNoIHdoZWVsIGV2ZW50Ci0KLSAgICAgICAgLy8gSWYgd2UgYXJlIGluIGEgcGFn
ZSBzY3JvbGwgbW9kZSBmb3IgdGhlIGxpbmVzIHdlIHNldCB0aGUgYm9vbGVhbgotICAgICAgICBp
ZiAoc2Nyb2xsTGluZXMgPiBXSEVFTF9ERUxUQSkgewotICAgICAgICAgICAgbV9wYWdlWVNjcm9s
bE1vZGUgPSB0cnVlOwotICAgICAgICAgICAgc2Nyb2xsTGluZXMgPSAxOwotICAgICAgICB9Ci0K
LSAgICAgICAgbV9saW5lc1RvU2Nyb2xsUGVyRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KHNjcm9s
bExpbmVzKTsKLSAgICAgICAgbV9jaGFyc1RvU2Nyb2xsUGVyRGVsdGEgPSAxOworICAgICAgICBp
bnQgdmVydGljYWxNdWx0aXBsaWVyID0gdmVydGljYWxMaW5lTXVsdGlwbGllcigpOworICAgICAg
ICAvLyBBIG11bHRpcGxpZXIgb2YgLTEgaXMgdXNlZCB0byBtZWFuIHRoYXQgdmVydGljYWwgd2hl
ZWwgc2Nyb2xsaW5nIHNob3VsZCBiZSBkb25lIGJ5IHBhZ2UuCisgICAgICAgIG1fZ3JhbnVsYXJp
dHkgPSAodmVydGljYWxNdWx0aXBsaWVyID09IC0xKSA/IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQg
OiBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50OworICAgICAgICBpZiAobV9ncmFudWxhcml0eSA9PSBT
Y3JvbGxCeUxpbmVXaGVlbEV2ZW50KQorICAgICAgICAgICAgbV9kZWx0YVkgKj0gdmVydGljYWxN
dWx0aXBsaWVyOwogICAgIH0KLSAgICAKIH0KIAogfQpJbmRleDogcGxhdGZvcm0vd3gvU2Nyb2xs
Vmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCShy
ZXZpc2lvbiAzNzAyNCkKKysrIHBsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg0LDI3ICs4NCwyNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAoc2Nyb2xsVHlwZSA9PSB3eEVWVF9TQ1JPTExXSU5fTElORURPV04pIHsKICAgICAgICAg
ICAgIGlmIChob3JpeikgCi0gICAgICAgICAgICAgICAgcG9zLnggKz0gTElORV9TVEVQOworICAg
ICAgICAgICAgICAgIHBvcy54ICs9IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcDsKICAgICAg
ICAgICAgIGVsc2UgICAgICAgCi0gICAgICAgICAgICAgICAgcG9zLnkgKz0gTElORV9TVEVQOwor
ICAgICAgICAgICAgICAgIHBvcy55ICs9IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcDsKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmIChzY3JvbGxUeXBlID09IHd4RVZUX1NDUk9MTFdJTl9M
SU5FVVApIHsKICAgICAgICAgICAgIGlmIChob3JpeikgCi0gICAgICAgICAgICAgICAgcG9zLngg
LT0gTElORV9TVEVQOworICAgICAgICAgICAgICAgIHBvcy54IC09IGNTY3JvbGxiYXJQaXhlbHNQ
ZXJMaW5lU3RlcDsKICAgICAgICAgICAgIGVsc2UgICAgICAgCi0gICAgICAgICAgICAgICAgcG9z
LnkgLT0gTElORV9TVEVQOworICAgICAgICAgICAgICAgIHBvcy55IC09IGNTY3JvbGxiYXJQaXhl
bHNQZXJMaW5lU3RlcDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzY3JvbGxUeXBlID09
IHd4RVZUX1NDUk9MTFdJTl9QQUdFVVApIHsKICAgICAgICAgICAgIGlmIChob3JpeikgCi0gICAg
ICAgICAgICAgICAgcG9zLnggLT0gbV9zY3JvbGxWaWV3LT52aXNpYmxlV2lkdGgoKSAtIFBBR0Vf
S0VFUDsKKyAgICAgICAgICAgICAgICBwb3MueCAtPSBtX3Njcm9sbFZpZXctPnZpc2libGVXaWR0
aCgpIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmc7CiAgICAgICAgICAgICBlbHNlICAgICAgIAot
ICAgICAgICAgICAgICAgIHBvcy55IC09IG1fc2Nyb2xsVmlldy0+dmlzaWJsZUhlaWdodCgpIC0g
UEFHRV9LRUVQOworICAgICAgICAgICAgICAgIHBvcy55IC09IG1fc2Nyb2xsVmlldy0+dmlzaWJs
ZUhlaWdodCgpIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmc7CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZSBpZiAoc2Nyb2xsVHlwZSA9PSB3eEVWVF9TQ1JPTExXSU5fUEFHRURPV04pIHsKICAgICAg
ICAgICAgIGlmIChob3JpeikgCi0gICAgICAgICAgICAgICAgcG9zLnggKz0gbV9zY3JvbGxWaWV3
LT52aXNpYmxlV2lkdGgoKSAtIFBBR0VfS0VFUDsKKyAgICAgICAgICAgICAgICBwb3MueCArPSBt
X3Njcm9sbFZpZXctPnZpc2libGVXaWR0aCgpIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmc7CiAg
ICAgICAgICAgICBlbHNlICAgICAgIAotICAgICAgICAgICAgICAgIHBvcy55ICs9IG1fc2Nyb2xs
Vmlldy0+dmlzaWJsZUhlaWdodCgpIC0gUEFHRV9LRUVQOworICAgICAgICAgICAgICAgIHBvcy55
ICs9IG1fc2Nyb2xsVmlldy0+dmlzaWJsZUhlaWdodCgpIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdp
bmc7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGUuU2tpcCgp
OwpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9y
bVdoZWUKICAgICAgICAgKGUuZGVsdGFZKCkgPCAwICYmIG1heFNjcm9sbERlbHRhLmhlaWdodCgp
ID4gMCkgfHwKICAgICAgICAgKGUuZGVsdGFZKCkgPiAwICYmIHNjcm9sbE9mZnNldCgpLmhlaWdo
dCgpID4gMCkpIHsKICAgICAgICAgZS5hY2NlcHQoKTsKLSAgICAgICAgc2Nyb2xsQnkoSW50U2l6
ZSgtZS5kZWx0YVgoKSAqIExJTkVfU1RFUCwgLWUuZGVsdGFZKCkgKiBMSU5FX1NURVApKTsKKyAg
ICAgICAgc2Nyb2xsQnkoSW50U2l6ZSgtZS5kZWx0YVgoKSAqIGNTY3JvbGxiYXJQaXhlbHNQZXJM
aW5lU3RlcCwgLWUuZGVsdGFZKCkgKiBjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXApKTsKICAg
ICB9CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMzcwMTIpCisrKyByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY0LDE3ICsxMzY0LDE3IEBAIFJl
bmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAgICAvLyBTZXQgdXAgdGhl
IHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCiAgICAgaWYgKG1faEJhcikgewogICAg
ICAgICBpbnQgY2xpZW50V2lkdGggPSBtX29iamVjdC0+Y2xpZW50V2lkdGgoKTsKLSAgICAgICAg
aW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoLVBBR0VfS0VFUCk7CisgICAgICAgIGludCBwYWdl
U3RlcCA9IChjbGllbnRXaWR0aCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKTsKICAgICAgICAg
aWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRXaWR0aDsKLSAgICAgICAgbV9oQmFy
LT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVw
cyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKICAgICAgICAgbV9oQmFy
LT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKICAgICAgICAgbV9o
QmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOwogICAgIH0KICAgICBpZiAobV92QmFyKSB7
CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBtX29iamVjdC0+Y2xpZW50SGVpZ2h0KCk7Ci0g
ICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQtUEFHRV9LRUVQKTsKKyAgICAgICAg
aW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdodCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKTsK
ICAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRIZWlnaHQ7Ci0gICAg
ICAgIG1fdkJhci0+c2V0U3RlcHMoTElORV9TVEVQLCBwYWdlU3RlcCk7CisgICAgICAgIG1fdkJh
ci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAg
ICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsSGVpZ2h0KTsK
ICAgICB9CiAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23891</attachid>
            <date>2008-09-28 00:59:55 -0700</date>
            <delta_ts>2008-09-28 01:13:02 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>35644</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3MDMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMDgtMDkt
MjggIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE5MQorCisgICAgICAgIFJld29yayBtb3Vz
ZSB3aGVlbGluZyBzaWduaWZpY2FudGx5IHRvIG1ha2UgdGhlIHBsYXRmb3JtIGV2ZW50IGxlc3Mg
bWVzc3kgYW5kIHRvIGVuYWJsZSB3aGVlbEV2ZW50CisgICAgICAgIG9uIFNjcm9sbFZpZXcgdG8g
YmUgY3Jvc3MtcGxhdGZvcm0uCisKKyAgICAgICAgR2l2ZSB0aGUgd2hlZWwgZXZlbnQgYSBjb25j
ZXB0IG9mIGdyYW51bGFyaXR5IChwaXhlbCwgbGluZSBvciBwYWdlKS4gIFdoYXQgdXNlZCB0byBi
ZSBjYWxsZWQgY29udGludW91cworICAgICAgICBldmVudHMgYXJlIG5vdyBwaXhlbCB3aGVlbCBl
dmVudHMuCisKKyAgICAgICAgUGFnZSBzY3JvbGxpbmcgYXMgaW1wbGVtZW50ZWQgd2FzIGNvbXBs
ZXRlbHkgYnJva2VuLiAgSXQgaGFkIHRoZSBmb2xsb3dpbmcgcHJvYmxlbXM6CisgICAgICAgICgx
KSBQYWdlIHNjcm9sbGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gYmUgcHJvcGVybHkgZGV0ZWN0
ZWQgKG9uIFdpbmRvd3MKKyAgICAgICAgcGFnZSB3aGVlbGluZyBpcyBvbmx5IGRvbmUgaW4gdGhl
IHZlcnRpY2FsIGRpcmVjdGlvbiBhbmQgaXQgaXMga2V5ZWQgb2ZmIGEgc3BlY2lhbCByZXR1cm4g
dmFsdWUgb2YgLTEpLiAgVGhlCisgICAgICAgIG9sZCBjb2RlIGhhZCBzb21lIGJpemFycmUgaW5j
b3JyZWN0IGhldXJpc3RpYyBmb3IgImd1ZXNzaW5nIiB0aGF0IHlvdSBzaG91bGQgcGFnZSBzY3Jv
bGwgYW5kIGFsc28gdGhvdWdodAorICAgICAgICB5b3UgY291bGQgcGFnZSBzY3JvbGwgaG9yaXpv
bnRhbGx5LgorICAgICAgICAoMikgUGFnZSBzY3JvbGxpbmcgYSBsYXllciB1c2VkIHRoZSBlbmNs
b3NpbmcgU2Nyb2xsVmlldydzIHdpZHRoL2hlaWdodCBpbnN0ZWFkIG9mIHRoZSBsYXllcidzIHdp
ZHRoL2hlaWdodC4KKyAgICAgICAgVGhpcyBjYXVzZWQgdGhlIHNjcm9sbCBhbW91bnQgZm9yIHBh
Z2Ugc2Nyb2xsaW5nIHRvIGJlIHdheSB0b28gbGFyZ2Ugb24gbGF5ZXJzLgorCisgICAgICAgIElu
Y29ycG9yYXRlIFdlYkNvcmUncyBsaW5lIG11bHRpcGxpZXIgcmlnaHQgaW50byB0aGUgZGVsdGFz
IG9mIHRoZSBldmVudC4gIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZAorICAgICAgICBmb3Igc2Vw
YXJhdGUgbXVsdGlwbGllciBmaWVsZHMgKG9yIGZvciB0aGUgbmVlZCB0byBhc2sgaWYgeW91J3Jl
IGxvb2tpbmcgZm9yIGxpbmUgc2Vuc2l0aXZpdHkpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UpOgorICAgICAgICAqIHBhZ2Uv
RXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEFuZEFjY2VwdEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjopOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Ojpwb3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpnbG9iYWxQb3MpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpkZWx0YVgpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1XaGVlbEV2ZW50OjpkZWx0YVkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVl
bEV2ZW50OjpncmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnQ6OngpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpnbG9iYWxYKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6aWdub3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6aG9yaXpvbnRhbExpbmVNdWx0aXBsaWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6dmVydGljYWxMaW5lTXVsdGlw
bGllcik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxi
YXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvV2hlZWxFdmVudEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Nj
cm9sbFZpZXdNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1doZWVsRXZlbnRNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1doZWVsRXZlbnRRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6
CisgICAgICAgICogcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Ojpob3Jpem9udGFsTGluZU11bHRpcGxpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Ojp2ZXJ0aWNhbExpbmVNdWx0aXBsaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2
ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6Ok9uU2Nyb2xsV2luRXZlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKwogMjAwOC0wOS0yNyAgRXJpYyBDYXJs
c29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0g
V2VpbmlnLgpJbmRleDogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBl
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiAzNzAxMikKKysrIGVkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQCBzdGF0aWMg
aW50IHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUqCiAgICAgaWYgKCEoc3R5bGUtPm92ZXJm
bG93WSgpID09IE9TQ1JPTEwgfHwgc3R5bGUtPm92ZXJmbG93WSgpID09IE9BVVRPIHx8IHJlbmRl
cmVyLT5pc1RleHRBcmVhKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgaGVpZ2h0ID0g
cmVuZGVyZXItPmNsaWVudEhlaWdodCgpOwotICAgIHJldHVybiBtYXgoKGhlaWdodCArIDEpIC8g
MiwgaGVpZ2h0IC0gUEFHRV9LRUVQKTsKKyAgICByZXR1cm4gbWF4KChoZWlnaHQgKyAxKSAvIDIs
IGhlaWdodCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKTsKIH0KIAogc3RhdGljIFJlZlB0cjxS
YW5nZT4gdW5pb25ET01SYW5nZXMoUmFuZ2UqIGEsIFJhbmdlKiBiKQpJbmRleDogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNp
b24gMzcwMTIpCisrKyBwYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDIxICs5NiwyMCBAQCBjb25zdCBkb3VibGUgYXV0b3Njcm9sbEludGVydmFsID0gMC4wNTsKIHN0
YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqKTsKIHN0YXRpYyBGcmFtZSog
c3ViZnJhbWVGb3JIaXRUZXN0UmVzdWx0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHNjcm9sbEFuZEFjY2VwdEV2ZW50KGZsb2F0IGRl
bHRhLCBTY3JvbGxEaXJlY3Rpb24gcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiBu
ZWdhdGl2ZURpcmVjdGlvbiwgYm9vbCBwYWdlU2Nyb2xsRW5hYmxlZCwgUGxhdGZvcm1XaGVlbEV2
ZW50JiBlLCBOb2RlKiBub2RlLCBmbG9hdCB3aW5kb3dIZWlnaHRPcldpZHRoKQorc3RhdGljIGlu
bGluZSB2b2lkIHNjcm9sbEFuZEFjY2VwdEV2ZW50KGZsb2F0IGRlbHRhLCBTY3JvbGxEaXJlY3Rp
b24gcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiBuZWdhdGl2ZURpcmVjdGlvbiwg
UGxhdGZvcm1XaGVlbEV2ZW50JiBlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghZGVsdGEpCiAg
ICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHBpeGVsc1RvU2Nyb2xsID0gZGVsdGEgPiAwID8g
ZGVsdGEgOiAtZGVsdGE7Ci0gICAgaWYgKCFlLmlzQ29udGludW91cygpICYmICFwYWdlU2Nyb2xs
RW5hYmxlZCkgewotICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsKGRlbHRhIDwg
MCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwg
cGl4ZWxzVG9TY3JvbGwpKQorICAgIGlmIChlLmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdl
V2hlZWxFdmVudCkgeworICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsKGRlbHRh
IDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFn
ZSwgMSkpCiAgICAgICAgICAgICBlLmFjY2VwdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChwYWdlU2Nyb2xsRW5hYmxlZCkKLSAgICAgICAgICAgIHBpeGVsc1RvU2Nyb2xsID0gd2luZG93
SGVpZ2h0T3JXaWR0aDsgCi0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5zY3JvbGwoZGVs
dGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQ
aXhlbCwgcGl4ZWxzVG9TY3JvbGwpKQotICAgICAgICAgICAgZS5hY2NlcHQoKTsKLSAgICB9Cisg
ICAgICAgIHJldHVybjsKKyAgICB9IAorICAgIGZsb2F0IHBpeGVsc1RvU2Nyb2xsID0gZGVsdGEg
PiAwID8gZGVsdGEgOiAtZGVsdGE7CisgICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxC
eUxpbmVXaGVlbEV2ZW50KQorICAgICAgICBwaXhlbHNUb1Njcm9sbCAqPSBjTW91c2VXaGVlbFBp
eGVsc1BlckxpbmVTdGVwOworICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5zY3JvbGwoZGVsdGEg
PCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQaXhl
bCwgcGl4ZWxzVG9TY3JvbGwpKQorICAgICAgICBlLmFjY2VwdCgpOwogfQogCiBFdmVudEhhbmRs
ZXI6OkV2ZW50SGFuZGxlcihGcmFtZSogZnJhbWUpCkBAIC0xNTQyLDExICsxNTQxLDggQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdAogICAgICAgICBpZiAobm9kZS0+
cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgLy8gSnVzdCBicmVhayB1cCBpbnRvIHR3byBzY3Jv
bGxzIGlmIHdlIG5lZWQgdG8uICBEaWFnb25hbCBtb3ZlbWVudCBvbiAKICAgICAgICAgICAgIC8v
IGEgTWFjQm9vayBwcm8gaXMgYW4gZXhhbXBsZSBvZiBhIDItZGltZW5zaW9uYWwgbW91c2Ugd2hl
ZWwgZXZlbnQgKHdoZXJlIGJvdGggZGVsdGFYIGFuZCBkZWx0YVkgY2FuIGJlIHNldCkuCi0gICAg
ICAgICAgICBmbG9hdCBkZWx0YVggPSBlLmlzQ29udGludW91cygpID8gZS5jb250aW51b3VzRGVs
dGFYKCkgOiBlLmRlbHRhWCgpOwotICAgICAgICAgICAgZmxvYXQgZGVsdGFZID0gZS5pc0NvbnRp
bnVvdXMoKSA/IGUuY29udGludW91c0RlbHRhWSgpIDogZS5kZWx0YVkoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc2Nyb2xsQW5kQWNjZXB0RXZlbnQoZGVsdGFYLCBTY3JvbGxMZWZ0LCBT
Y3JvbGxSaWdodCwgZS5pc1BhZ2VYU2Nyb2xsTW9kZUVuYWJsZWQoKSwgZSwgbm9kZSwgbV9mcmFt
ZS0+cGFnZSgpLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpLndpZHRoKCkpOwotICAgICAgICAgICAg
c2Nyb2xsQW5kQWNjZXB0RXZlbnQoZGVsdGFZLCBTY3JvbGxVcCwgU2Nyb2xsRG93biwgZS5pc1Bh
Z2VZU2Nyb2xsTW9kZUVuYWJsZWQoKSwgZSwgbm9kZSwgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUo
KS0+d2luZG93UmVjdCgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHNjcm9sbEFuZEFjY2VwdEV2
ZW50KGUuZGVsdGFYKCksIFNjcm9sbExlZnQsIFNjcm9sbFJpZ2h0LCBlLCBub2RlKTsKKyAgICAg
ICAgICAgIHNjcm9sbEFuZEFjY2VwdEV2ZW50KGUuZGVsdGFZKCksIFNjcm9sbFVwLCBTY3JvbGxE
b3duLCBlLCBub2RlKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogcGxhdGZvcm0vUGxhdGZv
cm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50
LmgJKHJldmlzaW9uIDM3MDI4KQorKysgcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDMzICs1OSw0OSBAQCBjbGFzcyB3eFBvaW50OwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyAgICAvLyBXaGVlbCBldmVudHMgY29tZSBpbiB0aHJlZSBmbGF2b3Jz
OgorICAgIC8vIFRoZSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCBpcyBhIGZpbmUtZ3JhaW5lZCBl
dmVudCB0aGF0IHNwZWNpZmllcyB0aGUgcHJlY2lzZSBudW1iZXIgb2YgcGl4ZWxzIHRvIHNjcm9s
bC4gIEl0IGlzIHNlbnQgYnkgTWFjQm9vayB0b3VjaHBhZHMgb24gT1MgWC4KKyAgICAvLyBGb3Ig
U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnRzLCB0aGUgZGVsdGEgdmFsdWVzIGNvbnRhaW4gdGhlIHBy
ZWNpc2UgbnVtYmVyIG9mIHBpeGVscyB0byBzY3JvbGwuCisgICAgLy8gVGhlIFNjcm9sbEJ5TGlu
ZVdoZWVsRXZlbnQgKHRoZSBub3JtYWwgd2hlZWwgZXZlbnQpIHNlbmRzIGEgZGVsdGEgdGhhdCBj
YW4gYmUgY29ycmVjdGVkIGJ5IGEgbGluZSBtdWx0aXBsaWVyIHRvIGRldGVybWluZSBob3cgbWFu
eSBsaW5lcyB0byBzY3JvbGwuCisgICAgLy8gICAgICBJZiB0aGUgcGxhdGZvcm0gaGFzIGNvbmZp
Z3VyYWJsZSBsaW5lIHNlbnNpdGl2aXR5IChXaW5kb3dzKSwgdGhlbiB0aGUgbnVtYmVyIG9mIGxp
bmVzIHRvIHNjcm9sbCBpcyB1c2VkIGluIG9yZGVyIHRvIGJlaGF2ZSBsaWtlIHRoZSBwbGF0Zm9y
bS4KKyAgICAvLyAgICAgIElmIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIGNvbmZpZ3VyYWJs
ZSBsaW5lIHNlbnNpdGl2aXR5LCB0aGVuIFdlYkNvcmUncyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVz
ZWQgKHdoaWNoIHNjcm9sbHMgYWJvdXQgMyBsaW5lcyBwZXIgd2hlZWwpLgorICAgIC8vICAgICAg
ICAgIE9uIE9TIFggd2hlbiBuYXRpdmUgTlNTY3JvbGxWaWV3cyBhcmUgdXNlZCwgdGhlIGFtb3Vu
dCB0byB3aGVlbCBpcyBoYW5kbGVkIGJ5IHRoZSBOU1Njcm9sbFZpZXcgaXRzZWxmICh3aGljaCBo
YXMgYW4gYWNjZWxlcmF0aW9uIGNvbXBvbmVudCBidWlsdCBpbnRvCisgICAgLy8gICAgICAgICAg
dGhlIHdoZWVsaW5nLCBidXQgd2UgYWxzbyB1c2UgYSBtdWx0aXBsaWVyIHRvIG1ha2UgaXQgYXZl
cmFnZSBvdXQgdG8gYWJvdXQgMyBsaW5lcyBwZXIgd2hlZWwgZm9yIHR5cGljYWwgd2hlZWxpbmcg
dXNlcykuICBUaGlzIGV2ZW50IGlzCisgICAgLy8gICAgICAgICAgbm90IHJlbGV2YW50IGZvciBO
U1Njcm9sbFZpZXcgd2hlZWxpbmcgKHRoZSBvcmlnaW5hbCBPYmotQyB3aGVlbCBldmVudCBpcyB1
c2VkKS4KKyAgICAvLyBGb3IgU2Nyb2xsQnlMaW5lV2hlZWxFdmVudHMsIHRoZSBkZWx0YSB2YWx1
ZXMgcmVwcmVzZW50IHRoZSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsLgorICAgIC8vIFRoZSBT
Y3JvbGxCeVBhZ2VXaGVlbEV2ZW50IGluZGljYXRlcyB0aGF0IHRoZSB3aGVlbCBldmVudCBzaG91
bGQgc2Nyb2xsIGFuIGVudGlyZSBwYWdlIGluc3RlYWQuICBJbiB0aGlzIGNhc2UgV2ViQ29yZSdz
IGJ1aWx0IGluIHBhZ2luZyBiZWhhdmlvciBpcyB1c2VkIHRvIHBhZ2UKKyAgICAvLyB1cCBhbmQg
ZG93biAoeW91IGdldCB0aGUgc2FtZSBiZWhhdmlvciBhcyBpZiB0aGUgdXNlciB3YXMgY2xpY2tp
bmcgaW4gYSBzY3JvbGxiYXIgdHJhY2sgdG8gcGFnZSB1cCBvciBwYWdlIGRvd24pLiAgUGFnZSBz
Y3JvbGxpbmcgb25seSB3b3JrcyBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uLgorICAgIGVudW0g
UGxhdGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHkgeyBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50LCBT
Y3JvbGxCeVBhZ2VXaGVlbEV2ZW50LCBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCB9OworICAgIAor
ICAgIC8vIFdlYkNvcmUgdXNlcyBhIGxpbmUgbXVsdGlwbGUgb2YgfjMgKDQwcHggcGVyIGxpbmUg
c3RlcCkgd2hlbiBkb2luZyBhcnJvd2luZyB3aXRoIGEgc2Nyb2xsYmFyIG9yIGxpbmUgc3RlcHBp
bmcgdmlhIHRoZSBhcnJvdyBrZXlzLiAgVGhlIGRlbHRhIGZvciB3aGVlbGluZyBpcyBleHByZXNz
ZWQKKyAgICAvLyBhcyBhICMgb2YgYWN0dWFsIGxpbmVzICg0MCAvIDMgPSAxIHdoZWVsIGxpbmUp
LiAgV2UgdXNlIHRoZSBob3Jpem9udGFsTGluZU11bHRpcGxpZXIgYW5kIHZlcnRpY2FsTGluZU11
bHRpcGxpZXIgbWV0aG9kcyB0byBpbmNvcnBvcmF0ZSB0aGUgbGluZSBtdWx0aXBsaWVyIGludG8g
dGhlIGRlbHRhcy4gIE9uCisgICAgLy8gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgd2hl
ZWwgc2Vuc2l0aXZpdHksIHdlIHVzZSB0aGlzIGhhcmRjb2RlZCBjb25zdGFudCB2YWx1ZSBvZiAz
IHRvIGVuc3VyZSB0aGF0IHdoZWVsaW5nIGJ5IGRlZmF1bHQgbWF0Y2hlcyB0aGUgV2ViQ29yZSBi
ZWhhdmlvciB5b3UKKyAgICAvLyBnZXQgd2hlbiBkb2luZyBvdGhlciBraW5kcyBvZiBsaW5lIHN0
ZXBwaW5nLgorICAgIGNvbnN0IGludCBjTGluZU11bHRpcGxpZXIgPSAzOworCiAgICAgY2xhc3Mg
UGxhdGZvcm1XaGVlbEV2ZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGNvbnN0IEludFBvaW50
JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgICAgIGNvbnN0IEludFBv
aW50JiBnbG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9uOyB9CisgICAg
ICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9IC8v
IFBsYXRmb3JtV2luZG93IGNvb3JkaW5hdGVzLgorICAgICAgICBjb25zdCBJbnRQb2ludCYgZ2xv
YmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbjsgfSAvLyBTY3JlZW4gY29v
cmRpbmF0ZXMuCisKKyAgICAgICAgZmxvYXQgZGVsdGFYKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0
YVg7IH0KKyAgICAgICAgZmxvYXQgZGVsdGFZKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YVk7IH0K
IAotICAgICAgICBmbG9hdCBkZWx0YVgoYm9vbCB3aXRoU2Nyb2xsU2Vuc2l0aXZpdHlGYWN0b3Ig
PSB0cnVlKSBjb25zdCB7IHJldHVybiAod2l0aFNjcm9sbFNlbnNpdGl2aXR5RmFjdG9yID8gbV9k
ZWx0YVggKiBtX2NoYXJzVG9TY3JvbGxQZXJEZWx0YSA6IG1fZGVsdGFYKTsgfQotICAgICAgICBm
bG9hdCBkZWx0YVkoYm9vbCB3aXRoU2Nyb2xsU2Vuc2l0aXZpdHlGYWN0b3IgPSB0cnVlKSBjb25z
dCB7IHJldHVybiAod2l0aFNjcm9sbFNlbnNpdGl2aXR5RmFjdG9yID8gbV9kZWx0YVkgKiBtX2xp
bmVzVG9TY3JvbGxQZXJEZWx0YSA6IG1fZGVsdGFZKTsgfQorICAgICAgICBQbGF0Zm9ybVdoZWVs
RXZlbnRHcmFudWxhcml0eSBncmFudWxhcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhbnVsYXJp
dHk7IH0KIAotICAgICAgICBib29sIGlzUGFnZVhTY3JvbGxNb2RlRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFnZVhTY3JvbGxNb2RlOyB9Ci0gICAgICAgIGJvb2wgaXNQYWdlWVNjcm9sbE1v
ZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlWVNjcm9sbE1vZGU7IH0KICAgICAgICAg
Ym9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FjY2VwdGVkOyB9CiAgICAgICAg
IGJvb2wgc2hpZnRLZXkoKSBjb25zdCB7IHJldHVybiBtX3NoaWZ0S2V5OyB9CiAgICAgICAgIGJv
b2wgY3RybEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RybEtleTsgfQogICAgICAgICBib29sIGFs
dEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9CiAgICAgICAgIGJvb2wgbWV0YUtleSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWV0YUtleTsgfQogCi0gICAgICAgIGludCB4KCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbi54KCk7IH0KKyAgICAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBt
X3Bvc2l0aW9uLngoKTsgfSAvLyBQbGF0Zm9ybVdpbmRvdyBjb29yZGluYXRlcy4KICAgICAgICAg
aW50IHkoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLnkoKTsgfQotICAgICAgICBpbnQgZ2xv
YmFsWCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsUG9zaXRpb24ueCgpOyB9CisgICAgICAgIGlu
dCBnbG9iYWxYKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbi54KCk7IH0gLy8gU2Ny
ZWVuIGNvb3JkaW5hdGVzLgogICAgICAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsUG9zaXRpb24ueSgpOyB9CiAKICAgICAgICAgdm9pZCBhY2NlcHQoKSB7IG1faXNBY2Nl
cHRlZCA9IHRydWU7IH0KICAgICAgICAgdm9pZCBpZ25vcmUoKSB7IG1faXNBY2NlcHRlZCA9IGZh
bHNlOyB9Ci0gICAgICAgIAotICAgICAgICBib29sIGlzQ29udGludW91cygpIGNvbnN0IHsgcmV0
dXJuIG1faXNDb250aW51b3VzOyB9Ci0gICAgICAgIGZsb2F0IGNvbnRpbnVvdXNEZWx0YVgoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRpbnVvdXNEZWx0YVg7IH0KLSAgICAgICAgZmxvYXQgY29udGlu
dW91c0RlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludW91c0RlbHRhWTsgfQogCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoTlNFdmVudCopOwpAQCAt
MTA0LDIyICsxMjAsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICAgICBwcml2
YXRlOgorI2lmICFQTEFURk9STShXSU4pCisgICAgICAgIGludCBob3Jpem9udGFsTGluZU11bHRp
cGxpZXIoKSBjb25zdCB7IHJldHVybiBjTGluZU11bHRpcGxpZXI7IH0KKyAgICAgICAgaW50IHZl
cnRpY2FsTGluZU11bHRpcGxpZXIoKSBjb25zdCB7IHJldHVybiBjTGluZU11bHRpcGxpZXI7IH0K
KyNlbHNlCisgICAgICAgIGludCBob3Jpem9udGFsTGluZU11bHRpcGxpZXIoKSBjb25zdDsKKyAg
ICAgICAgaW50IHZlcnRpY2FsTGluZU11bHRpcGxpZXIoKSBjb25zdDsKKyNlbmRpZgorCiAgICAg
ICAgIEludFBvaW50IG1fcG9zaXRpb247CiAgICAgICAgIEludFBvaW50IG1fZ2xvYmFsUG9zaXRp
b247CiAgICAgICAgIGZsb2F0IG1fZGVsdGFYOwogICAgICAgICBmbG9hdCBtX2RlbHRhWTsKLSAg
ICAgICAgaW50IG1fY2hhcnNUb1Njcm9sbFBlckRlbHRhOwotICAgICAgICBpbnQgbV9saW5lc1Rv
U2Nyb2xsUGVyRGVsdGE7Ci0gICAgICAgIGJvb2wgbV9wYWdlWFNjcm9sbE1vZGU7Ci0gICAgICAg
IGJvb2wgbV9wYWdlWVNjcm9sbE1vZGU7CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudEdyYW51
bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAgICAgICAgIGJvb2wgbV9pc0FjY2VwdGVkOwogICAgICAg
ICBib29sIG1fc2hpZnRLZXk7CiAgICAgICAgIGJvb2wgbV9jdHJsS2V5OwogICAgICAgICBib29s
IG1fYWx0S2V5OwogICAgICAgICBib29sIG1fbWV0YUtleTsKLSAgICAgICAgYm9vbCBtX2lzQ29u
dGludW91czsKLSAgICAgICAgZmxvYXQgbV9jb250aW51b3VzRGVsdGFYOwotICAgICAgICBmbG9h
dCBtX2NvbnRpbnVvdXNEZWx0YVk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vU2Ny
b2xsVmlldy5jcHAJKHJldmlzaW9uIDM3MDI0KQorKysgcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTY3JvbGxWaWV3Lmgi
CiAKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogdXNpbmcgc3RkOjptYXg7CkBA
IC0yNjgsNiArMjY5LDM0IEBAIFNjcm9sbGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJN
b3UKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRm
b3JtV2hlZWxFdmVudCYgZSkKK3sKKyAgICBpZiAoIWFsbG93c1Njcm9sbGluZygpIHx8IHBsYXRm
b3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERldGVybWluZSBob3cgbXVj
aCB3ZSB3YW50IHRvIHNjcm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2Ugd2lsbCBhY2Nl
cHQgdGhlIGV2ZW50LgorICAgIEludFNpemUgbWF4U2Nyb2xsRGVsdGEgPSBtYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7CisgICAgaWYgKChlLmRlbHRhWCgpIDwgMCAm
JiBtYXhTY3JvbGxEZWx0YS53aWR0aCgpID4gMCkgfHwKKyAgICAgICAgKGUuZGVsdGFYKCkgPiAw
ICYmIHNjcm9sbE9mZnNldCgpLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVkoKSA8
IDAgJiYgbWF4U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVko
KSA+IDAgJiYgc2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkgPiAwKSkgeworICAgICAgICBlLmFjY2Vw
dCgpOworICAgICAgICBmbG9hdCBkZWx0YVggPSBlLmRlbHRhWCgpOworICAgICAgICBmbG9hdCBk
ZWx0YVkgPSBlLmRlbHRhWSgpOworICAgICAgICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9s
bEJ5TGluZVdoZWVsRXZlbnQpIHsKKyAgICAgICAgICAgIGRlbHRhWCAqPSBjTW91c2VXaGVlbFBp
eGVsc1BlckxpbmVTdGVwOworICAgICAgICAgICAgZGVsdGFZICo9IGNNb3VzZVdoZWVsUGl4ZWxz
UGVyTGluZVN0ZXA7CisgICAgICAgIH0gZWxzZSBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9s
bEJ5UGFnZVdoZWVsRXZlbnQpIHsKKyAgICAgICAgICAgIEFTU0VSVChkZWx0YVggPT0gMCk7Cisg
ICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFZIDwgMDsKKyAgICAgICAgICAgIGRlbHRh
WSA9IG1heCgwLCB2aXNpYmxlSGVpZ2h0KCkgLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7Cisg
ICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgZGVsdGFZID0gLWRlbHRh
WTsKKyAgICAgICAgfQorICAgICAgICBzY3JvbGxCeShJbnRTaXplKC1kZWx0YVgsIC1kZWx0YVkp
KTsKKyAgICB9Cit9CisKICNpZiAhUExBVEZPUk0oTUFDKQogdm9pZCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybVNldENhbkJsaXRPblNjcm9sbCgpCiB7CkluZGV4OiBwbGF0Zm9ybS9TY3JvbGxiYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gMzcwMTIpCisrKyBw
bGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOSBAQCBjbGFz
cyBTY3JvbGxiYXJUaGVtZTsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIAogLy8gVGhlc2Ug
bWF0Y2ggdGhlIG51bWJlcnMgd2UgdXNlIG92ZXIgaW4gV2ViS2l0IChXZWJGcmFtZVZpZXcubSku
Ci0jZGVmaW5lIExJTkVfU1RFUCAgIDQwCi0jZGVmaW5lIFBBR0VfS0VFUCAgIDQwCitjb25zdCBp
bnQgY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwID0gIDQwOworY29uc3QgZmxvYXQgY01vdXNl
V2hlZWxQaXhlbHNQZXJMaW5lU3RlcCA9IDQwLjBmIC8gMy4wZjsKK2NvbnN0IGludCBjQW1vdW50
VG9LZWVwV2hlblBhZ2luZyA9IDQwOwogCiBjbGFzcyBTY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0
LCBwdWJsaWMgUmVmQ291bnRlZDxTY3JvbGxiYXI+IHsKIHByb3RlY3RlZDoKSW5kZXg6IHBsYXRm
b3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ndGsvU2Ny
b2xsVmlld0d0ay5jcHAJKHJldmlzaW9uIDM3MDI0KQorKysgcGxhdGZvcm0vZ3RrL1Njcm9sbFZp
ZXdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsMTkgKzM2Miw2IEBAIGJvb2wgU2Nyb2xs
Vmlldzo6aXNPZmZzY3JlZW4oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBT
Y3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKLXsKLSAgICAvLyBE
ZXRlcm1pbmUgaG93IG11Y2ggd2Ugd2FudCB0byBzY3JvbGwuICBJZiB3ZSBjYW4gbW92ZSBhdCBh
bGwsIHdlIHdpbGwgYWNjZXB0IHRoZSBldmVudC4KLSAgICBJbnRTaXplIG1heFNjcm9sbERlbHRh
ID0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBzY3JvbGxQb3NpdGlvbigpOwotICAgIGlmICgo
ZS5kZWx0YVgoKSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEud2lkdGgoKSA+IDApIHx8Ci0gICAgICAg
IChlLmRlbHRhWCgpID4gMCAmJiBzY3JvbGxPZmZzZXQoKS53aWR0aCgpID4gMCkgfHwKLSAgICAg
ICAgKGUuZGVsdGFZKCkgPCAwICYmIG1heFNjcm9sbERlbHRhLmhlaWdodCgpID4gMCkgfHwKLSAg
ICAgICAgKGUuZGVsdGFZKCkgPiAwICYmIHNjcm9sbE9mZnNldCgpLmhlaWdodCgpID4gMCkpCi0g
ICAgICAgIGUuYWNjZXB0KCk7Ci0KLSAgICBzY3JvbGxCeShJbnRTaXplKC1lLmRlbHRhWCgpICog
TElORV9TVEVQLCAtZS5kZWx0YVkoKSAqIExJTkVfU1RFUCkpOwotfQotCiB2b2lkIFNjcm9sbFZp
ZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKIHsKICAg
ICAvLyBEb24ndCBhbGxvdyByZS1lbnRyYW5jeSBpbnRvIHRoaXMgZnVuY3Rpb24uCkBAIC00NTEs
NyArNDM4LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAg
IH0gZWxzZSBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRX
aWR0aCA9IHZpc2libGVXaWR0aCgpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOwotICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBQQUdFX0tFRVApOworICAgICAgICBpbnQgcGFnZVN0ZXAg
PSAoY2xpZW50V2lkdGggLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CiAgICAgICAgIGlmIChw
YWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7CiAgICAgICAgIEludFJlY3Qgb2xk
UmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAgSW50UmVj
dCBoQmFyUmVjdCA9IEludFJlY3QoMCwKQEAgLTQ2NCw3ICs0NTEsNyBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1
cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNz
SW52YWxpZGF0aW9uKHRydWUpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0
ZXBzKExJTkVfU1RFUCwgcGFnZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIt
PnNldFN0ZXBzKGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0ZXApOwogICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRl
bnRzV2lkdGgoKSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Ny
b2xsLndpZHRoKCkpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKQEAgLTQ4
Niw3ICs0NzMsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAg
ICAgfSBlbHNlIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRI
ZWlnaHQgPSB2aXNpYmxlSGVpZ2h0KCk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNl
dEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdodCk7Ci0gICAgICAgIGludCBw
YWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOworICAgICAgICBpbnQgcGFnZVN0
ZXAgPSAoY2xpZW50SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOwogICAgICAgICBp
ZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKICAgICAgICAgSW50UmVj
dCBvbGRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAgSW50
UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksCkBAIC00OTksNyArNDg2LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxi
YXJzKGNvbnN0IAogCiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7
Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKExJTkVfU1RFUCwgcGFnZVN0
ZXApOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4
ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwogICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOwogICAgICAgICBp
ZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKSW5kZXg6IHBsYXRmb3JtL2d0ay9XaGVlbEV2ZW50
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ndGsvV2hlZWxFdmVudEd0ay5jcHAJKHJl
dmlzaW9uIDM3MDEyKQorKysgcGxhdGZvcm0vZ3RrL1doZWVsRXZlbnRHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVl
bEV2ZW50KEcKIAogICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAoaW50
KWV2ZW50LT55KTsKICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+
eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOworICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxC
eUxpbmVXaGVlbEV2ZW50OwogICAgIG1faXNBY2NlcHRlZCA9IGZhbHNlOwogICAgIG1fc2hpZnRL
ZXkgPSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKICAgICBtX2N0cmxLZXkgPSBldmVu
dC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOwpAQCAtNjksMTMgKzcwLDEwIEBAIFBsYXRmb3Jt
V2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEcKICAgICAvLyBHREtfTU9EMl9NQVNLIGRv
ZXNuJ3QgYWx3YXlzIG1lYW4gbWV0YSBzbyB3ZSBjYW4ndCB1c2UgaXQKICAgICBtX21ldGFLZXkg
PSBmYWxzZTsKICNlbmRpZgotICAgIG1faXNDb250aW51b3VzID0gZmFsc2U7CiAKICAgICAvLyBG
SVhNRTogcmV0cmlldmUgdGhlIHVzZXIgc2V0dGluZyBmb3IgdGhlIG51bWJlciBvZiBsaW5lcyB0
byBzY3JvbGwgb24gZWFjaCB3aGVlbCBldmVudAotICAgIG1fY2hhcnNUb1Njcm9sbFBlckRlbHRh
ID0gMTsKLSAgICBtX2xpbmVzVG9TY3JvbGxQZXJEZWx0YSA9IDE7Ci0gICAgbV9wYWdlWFNjcm9s
bE1vZGUgPSBmYWxzZTsKLSAgICBtX3BhZ2VZU2Nyb2xsTW9kZSA9IGZhbHNlOworICAgIG1fZGVs
dGFYICo9IGhvcml6b250YWxMaW5lTXVsdGlwbGllcigpOworICAgIG1fZGVsdGFZICo9IHZlcnRp
Y2FsTGluZU11bHRpcGxpZXIoKTsKIH0KIAogfQpJbmRleDogcGxhdGZvcm0vbWFjL1Njcm9sbFZp
ZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHJl
dmlzaW9uIDM3MDI0KQorKysgcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIyMCw5ICsyMjAsNCBAQCBib29sIFNjcm9sbFZpZXc6OmlzT2Zmc2NyZWVuKCkg
Y29uc3QKICAgICByZXR1cm4gIVtwbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10gfHwgIVtbcGxhdGZv
cm1XaWRnZXQoKSB3aW5kb3ddIGlzVmlzaWJsZV07CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6d2hl
ZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmKQotewotICAgIC8vIERvIG5vdGhpbmcuIE5TU2Ny
b2xsVmlldyBoYW5kbGVzIGRvaW5nIHRoZSBzY3JvbGwgZm9yIHVzLgotfQotCiB9CkluZGV4OiBw
bGF0Zm9ybS9tYWMvV2hlZWxFdmVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMv
V2hlZWxFdmVudE1hYy5tbQkocmV2aXNpb24gMzcwMjkpCisrKyBwbGF0Zm9ybS9tYWMvV2hlZWxF
dmVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoTlNFdmVudCog
ZXZlbnQpCiAgICAgOiBtX3Bvc2l0aW9uKHBvaW50Rm9yRXZlbnQoZXZlbnQpKQogICAgICwgbV9n
bG9iYWxQb3NpdGlvbihnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KSkKLSAgICAsIG1fZGVsdGFY
KFtldmVudCBkZWx0YVhdKQotICAgICwgbV9kZWx0YVkoW2V2ZW50IGRlbHRhWV0pCi0gICAgLCBt
X2NoYXJzVG9TY3JvbGxQZXJEZWx0YSgxKQotICAgICwgbV9saW5lc1RvU2Nyb2xsUGVyRGVsdGEo
MSkKLSAgICAsIG1fcGFnZVhTY3JvbGxNb2RlKGZhbHNlKQotICAgICwgbV9wYWdlWVNjcm9sbE1v
ZGUoZmFsc2UpCiAgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCiAgICAgLCBtX3NoaWZ0S2V5KFtl
dmVudCBtb2RpZmllckZsYWdzXSAmIE5TU2hpZnRLZXlNYXNrKQogICAgICwgbV9jdHJsS2V5KFtl
dmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spCkBAIC00Nyw4ICs0MSwxMiBA
QCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChOCiAgICAgLCBtX21ldGFL
ZXkoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb21tYW5kS2V5TWFzaykKIHsKICAgICBCT09M
IGNvbnRpbnVvdXM7Ci0gICAgd2tHZXRXaGVlbEV2ZW50RGVsdGFzKGV2ZW50LCAmbV9jb250aW51
b3VzRGVsdGFYLCAmbV9jb250aW51b3VzRGVsdGFZLCAmY29udGludW91cyk7Ci0gICAgbV9pc0Nv
bnRpbnVvdXMgPSBjb250aW51b3VzOworICAgIHdrR2V0V2hlZWxFdmVudERlbHRhcyhldmVudCwg
Jm1fZGVsdGFYLCAmbV9kZWx0YVksICZjb250aW51b3VzKTsKKyAgICBtX2dyYW51bGFyaXR5ID0g
Y29udGludW91cyA/IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50IDogU2Nyb2xsQnlMaW5lV2hlZWxF
dmVudDsKKyAgICBpZiAobV9ncmFudWxhcml0eSA9PSBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50KSB7
CisgICAgICAgIG1fZGVsdGFYICo9IGhvcml6b250YWxMaW5lTXVsdGlwbGllcigpOworICAgICAg
ICBtX2RlbHRhWSAqPSB2ZXJ0aWNhbExpbmVNdWx0aXBsaWVyKCk7CisgICAgfQogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJKHJldmlzaW9uIDM3MDI0
KQorKysgcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMz
LDcgKzMzMyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAg
ICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRXaWR0aCA9
IHZpc2libGVXaWR0aCgpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEVuYWJs
ZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOwotICAgICAgICBpbnQgcGFnZVN0ZXAg
PSAoY2xpZW50V2lkdGggLSBQQUdFX0tFRVApOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xp
ZW50V2lkdGggLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CiAgICAgICAgIGlmIChwYWdlU3Rl
cCA8IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7CiAgICAgICAgIEludFJlY3Qgb2xkUmVjdCht
X2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAgSW50UmVjdCBoQmFy
UmVjdCA9IEludFJlY3QoMCwKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVw
ZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNz
ZWQpCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxp
ZGF0aW9uKHRydWUpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKExJ
TkVfU1RFUCwgcGFnZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0
ZXBzKGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0ZXApOwogICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lk
dGgoKSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndp
ZHRoKCkpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKQEAgLTM1Niw3ICsz
NTYsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgaWYg
KG1fdmVydGljYWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHZpc2li
bGVIZWlnaHQoKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RW5hYmxlZChjb250
ZW50c0hlaWdodCgpID4gY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNs
aWVudEhlaWdodCAtIFBBR0VfS0VFUCk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRI
ZWlnaHQgLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CiAgICAgICAgIGlmIChwYWdlU3RlcCA8
IDApIHBhZ2VTdGVwID0gY2xpZW50SGVpZ2h0OwogICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV92
ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogICAgICAgICBJbnRSZWN0IHZCYXJSZWN0
ID0gSW50UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgCkBAIC0z
NjksNyArMzY5LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAog
CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7Ci0gICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKExJTkVfU1RFUCwgcGFnZVN0ZXApOworICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0
ZXAsIHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlv
bihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwogICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOwogICAgICAgICBpZiAobV9zY3JvbGxi
YXJzU3VwcHJlc3NlZCkKQEAgLTQ3OCwzNSArNDc4LDYgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIAogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2
ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKLXsKLSAgICBmbG9hdCBkZWx0YVggPSBlLmRlbHRh
WCgpOwotICAgIGZsb2F0IGRlbHRhWSA9IGUuZGVsdGFZKCk7Ci0KLSAgICBQbGF0Zm9ybU1vdXNl
RXZlbnQgbW91c2VFdmVudChlLnBvcygpLCBlLmdsb2JhbFBvcygpLCBOb0J1dHRvbiwgTW91c2VF
dmVudFNjcm9sbCwKLSAgICAgICAgICAgIDAsIGUuc2hpZnRLZXkoKSwgZS5jdHJsS2V5KCksIGUu
YWx0S2V5KCksIGUubWV0YUtleSgpLCAwKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbEJhciA9IHNj
cm9sbGJhclVuZGVyTW91c2UobW91c2VFdmVudCk7Ci0KLSAgICBpZiAoc2Nyb2xsQmFyICYmIHNj
cm9sbEJhciA9PSB2ZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIGRlbHRhWSA9IChkZWx0
YVkgPT0gMCA/IGRlbHRhWCA6IGRlbHRhWSk7Ci0gICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgfSBl
bHNlIGlmIChzY3JvbGxCYXIgJiYgc2Nyb2xsQmFyID09IGhvcml6b250YWxTY3JvbGxiYXIoKSkg
ewotICAgICAgICBkZWx0YVggPSAoZGVsdGFYID09IDAgPyBkZWx0YVkgOiBkZWx0YVgpOwotICAg
ICAgICBkZWx0YVkgPSAwOwotICAgIH0KLQotICAgIC8vIERldGVybWluZSBob3cgbXVjaCB3ZSB3
YW50IHRvIHNjcm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2Ugd2lsbCBhY2NlcHQgdGhl
IGV2ZW50LgotICAgIEludFNpemUgbWF4U2Nyb2xsRGVsdGEgPSBtYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgaWYgKChkZWx0YVggPCAwICYmIG1heFNjcm9s
bERlbHRhLndpZHRoKCkgPiAwKSB8fAotICAgICAgICAoZGVsdGFYID4gMCAmJiBzY3JvbGxPZmZz
ZXQoKS53aWR0aCgpID4gMCkgfHwKLSAgICAgICAgKGRlbHRhWSA8IDAgJiYgbWF4U2Nyb2xsRGVs
dGEuaGVpZ2h0KCkgPiAwKSB8fAotICAgICAgICAoZGVsdGFZID4gMCAmJiBzY3JvbGxPZmZzZXQo
KS5oZWlnaHQoKSA+IDApKSB7Ci0KLSAgICAgICAgZS5hY2NlcHQoKTsKLSAgICAgICAgc2Nyb2xs
QnkoSW50U2l6ZShpbnQoLWRlbHRhWCAqIExJTkVfU1RFUCksIGludCgtZGVsdGFZICogTElORV9T
VEVQKSkpOwotICAgIH0KLX0KLQogYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYg
KGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgewpJbmRl
eDogcGxhdGZvcm0vcXQvV2hlZWxFdmVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9x
dC9XaGVlbEV2ZW50UXQuY3BwCShyZXZpc2lvbiAzNzAxMikKKysrIHBsYXRmb3JtL3F0L1doZWVs
RXZlbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQCBQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChRCiAjZWxzZQogICAgIDogbV9wb3NpdGlvbihl
LT5wb3MoKSkKICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZS0+Z2xvYmFsUG9zKCkpCisgICAgLCBt
X2dyYW51bGFyaXR5KFNjcm9sbEJ5TGluZVdoZWVsRXZlbnQpCiAgICAgLCBtX2lzQWNjZXB0ZWQo
ZmFsc2UpCiAgICAgLCBtX3NoaWZ0S2V5KGUtPm1vZGlmaWVycygpICYgUXQ6OlNoaWZ0TW9kaWZp
ZXIpCiAgICAgLCBtX2N0cmxLZXkoZS0+bW9kaWZpZXJzKCkgJiBRdDo6Q29udHJvbE1vZGlmaWVy
KQogICAgICwgbV9hbHRLZXkoZS0+bW9kaWZpZXJzKCkgJiBRdDo6QWx0TW9kaWZpZXIpCiAgICAg
LCBtX21ldGFLZXkoZS0+bW9kaWZpZXJzKCkgJiBRdDo6TWV0YU1vZGlmaWVyKQotICAgICwgbV9p
c0NvbnRpbnVvdXMoZmFsc2UpCiB7CiAgICAgaWYgKGUtPm9yaWVudGF0aW9uKCkgPT0gUXQ6Okhv
cml6b250YWwpIHsKICAgICAgICAgbV9kZWx0YVggPSAoZS0+ZGVsdGEoKSAvIDEyMCk7CkBAIC01
MSwxMCArNTEsOCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChRCiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IHJldHJpZXZlIHRoZSB1c2VyIHNldHRpbmcgZm9yIHRoZSBu
dW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIG9uIGVhY2ggd2hlZWwgZXZlbnQKLSAgICBtX2NoYXJz
VG9TY3JvbGxQZXJEZWx0YSA9IDE7Ci0gICAgbV9saW5lc1RvU2Nyb2xsUGVyRGVsdGEgPSAxOwot
ICAgIG1fcGFnZVhTY3JvbGxNb2RlID0gZmFsc2U7Ci0gICAgbV9wYWdlWVNjcm9sbE1vZGUgPSBm
YWxzZTsKKyAgICBtX2RlbHRhWCAqPSBob3Jpem9udGFsTGluZU11bHRpcGxpZXIoKTsKKyAgICBt
X2RlbHRhWSAqPSB2ZXJ0aWNhbExpbmVNdWx0aXBsaWVyKCk7CiB9CiAjZW5kaWYgLy8gUVRfTk9f
V0hFRUxFVkVOVAogCkluZGV4OiBwbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCShyZXZpc2lvbiAzNzAyNSkK
KysrIHBsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MTQgKzU0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jZGVmaW5lIFdIRUVMX1NURVAgMTUgLy8gVG8ga2VlcCB0aGUgYmVoYXZpb3Igd2UgaGFkIGJl
Zm9yZSBhZGRpbmcgdGhlIHNjcm9sbCB3aGVlbCBzZW5zaXRpdml0eSA6IDxyZGFyOi8vcHJvYmxl
bS81NzcwODkzPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVsdGFGb3JQYWdlU2Nyb2xs
TW9kZShmbG9hdCYgZGVsdGEsIGJvb2wgcGFnZVNjcm9sbEVuYWJsZWQsIGludCB2aXNpYmxlV2lk
dGhPckhlaWdodCkKLXsKLSAgICBpZiAocGFnZVNjcm9sbEVuYWJsZWQpCi0gICAgICAgIGRlbHRh
ID0gKGRlbHRhID4gMCA/IHZpc2libGVXaWR0aE9ySGVpZ2h0IDogLXZpc2libGVXaWR0aE9ySGVp
Z2h0KSAvIFdIRUVMX1NURVA7Ci19Ci0KIGNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2
YXRlIDogcHVibGljIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6CiAgICAgU2Nyb2xsVmlld1By
aXZhdGUoU2Nyb2xsVmlldyogdmlldykKQEAgLTMzMSw3ICszMjMsNyBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJh
cikgewogICAgICAgICBpbnQgY2xpZW50V2lkdGggPSB2aXNpYmxlV2lkdGgoKTsKICAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRFbmFibGVkKGNvbnRlbnRzV2lkdGgoKSA+IGNsaWVu
dFdpZHRoKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoIC0gUEFHRV9LRUVQ
KTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoIC0gY0Ftb3VudFRvS2VlcFdo
ZW5QYWdpbmcpOwogICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdp
ZHRoOwogICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKSk7CiAgICAgICAgIEludFJlY3QgaEJhclJlY3QgPSBJbnRSZWN0KDAsCkBAIC0zNDQs
NyArMzM2LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogCiAg
ICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVwKTsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGlu
ZVN0ZXAsIHBhZ2VTdGVwKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwogICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKICAgICAgICAgaWYgKG1fc2Ny
b2xsYmFyc1N1cHByZXNzZWQpCkBAIC0zNTQsNyArMzQ2LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1
cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CiAg
ICAgICAgIGludCBjbGllbnRIZWlnaHQgPSB2aXNpYmxlSGVpZ2h0KCk7CiAgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdo
dCk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOwor
ICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5Q
YWdpbmcpOwogICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdo
dDsKICAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVj
dCgpKTsKICAgICAgICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVy
dGljYWxTY3JvbGxiYXItPndpZHRoKCksIApAQCAtMzY3LDcgKzM1OSw3IEBAIHZvaWQgU2Nyb2xs
Vmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKIAogICAgICAgICBpZiAobV9zY3JvbGxiYXJz
U3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNz
SW52YWxpZGF0aW9uKHRydWUpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVw
cyhMSU5FX1NURVAsIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0
U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hl
aWdodCgpKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhl
aWdodCgpKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCkBAIC00OTMsMjYg
KzQ4NSw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6dGhlbWVDaGFuZ2VkKCkKICAgICBpbnZhbGlkYXRl
KCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQm
IGUpCi17Ci0gICAgaWYgKCFhbGxvd3NTY3JvbGxpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gRGV0ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1v
dmUgYXQgYWxsLCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCi0gICAgSW50U2l6ZSBtYXhTY3Jv
bGxEZWx0YSA9IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIC0gc2Nyb2xsUG9zaXRpb24oKTsKLSAg
ICBpZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNjcm9sbERlbHRhLndpZHRoKCkgPiAwKSB8fAot
ICAgICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xsT2Zmc2V0KCkud2lkdGgoKSA+IDApIHx8
Ci0gICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBtYXhTY3JvbGxEZWx0YS5oZWlnaHQoKSA+IDAp
IHx8Ci0gICAgICAgIChlLmRlbHRhWSgpID4gMCAmJiBzY3JvbGxPZmZzZXQoKS5oZWlnaHQoKSA+
IDApKSB7Ci0gICAgICAgIGUuYWNjZXB0KCk7Ci0gICAgICAgIGZsb2F0IGRlbHRhWCA9IGUuZGVs
dGFYKCksIGRlbHRhWSA9IGUuZGVsdGFZKCk7Ci0gICAgICAgIGFkanVzdERlbHRhRm9yUGFnZVNj
cm9sbE1vZGUoZGVsdGFYLCBlLmlzUGFnZVhTY3JvbGxNb2RlRW5hYmxlZCgpLCB2aXNpYmxlV2lk
dGgoKSk7Ci0gICAgICAgIGFkanVzdERlbHRhRm9yUGFnZVNjcm9sbE1vZGUoZGVsdGFZLCBlLmlz
UGFnZVlTY3JvbGxNb2RlRW5hYmxlZCgpLCB2aXNpYmxlSGVpZ2h0KCkpOwotCi0gICAgICAgIHNj
cm9sbEJ5KEludFNpemUoLWRlbHRhWCAqIFdIRUVMX1NURVAsIC1kZWx0YVkgKiBXSEVFTF9TVEVQ
KSk7Ci0gICAgfQotfQotCiB2b2lkIFNjcm9sbFZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkgY29u
c3QKIHsKICAgICBIYXNoU2V0PFdpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NoaWxk
cmVuLmVuZCgpOwpJbmRleDogcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAkocmV2aXNpb24gMzcwMTIpCisr
KyBwbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3
ICs0NiwzMCBAQCBzdGF0aWMgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb25Gb3JFdmVudChICiAgICAg
cmV0dXJuIHBvaW50OwogfQogCitpbnQgUGxhdGZvcm1XaGVlbEV2ZW50Ojpob3Jpem9udGFsTGlu
ZU11bHRpcGxpZXIoKSBjb25zdAoreworICAgIHN0YXRpYyBVTE9ORyBzY3JvbGxDaGFyczsKKyAg
ICBpZiAoIXNjcm9sbENoYXJzICYmICFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUV0hFRUxT
Q1JPTExDSEFSUywgMCwgJnNjcm9sbENoYXJzLCAwKSkKKyAgICAgICAgc2Nyb2xsQ2hhcnMgPSBj
TGluZU11bHRpcGxpZXI7CisgICAgcmV0dXJuIHNjcm9sbENoYXJzOworfQorCitpbnQgUGxhdGZv
cm1XaGVlbEV2ZW50Ojp2ZXJ0aWNhbExpbmVNdWx0aXBsaWVyKCkgY29uc3QKK3sKKyAgICBzdGF0
aWMgVUxPTkcgc2Nyb2xsTGluZXM7CisgICAgaWYgKCFzY3JvbGxMaW5lcyAmJiAhU3lzdGVtUGFy
YW1ldGVyc0luZm8oU1BJX0dFVFdIRUVMU0NST0xMTElORVMsIDAsICZzY3JvbGxMaW5lcywgMCkp
CisgICAgICAgIHNjcm9sbExpbmVzID0gY0xpbmVNdWx0aXBsaWVyOworICAgIHJldHVybiBzY3Jv
bGxMaW5lczsKK30KKyAgICAgICAgCiBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxF
dmVudChIV05EIGhXbmQsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wgaXNIb3Jp
em9udGFsKQogICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbkZvckV2ZW50KGhXbmQsIGxQYXJhbSkp
CiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoaFduZCwgbFBh
cmFtKSkKLSAgICAsIG1fcGFnZVhTY3JvbGxNb2RlKGZhbHNlKQotICAgICwgbV9wYWdlWVNjcm9s
bE1vZGUoZmFsc2UpCiAgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCiAgICAgLCBtX3NoaWZ0S2V5
KHdQYXJhbSAmIE1LX1NISUZUKQogICAgICwgbV9jdHJsS2V5KHdQYXJhbSAmIE1LX0NPTlRST0wp
CiAgICAgLCBtX2FsdEtleShHZXRLZXlTdGF0ZShWS19NRU5VKSAmIEhJR0hfQklUX01BU0tfU0hP
UlQpCiAgICAgLCBtX21ldGFLZXkobV9hbHRLZXkpIC8vIEZJWE1FOiBXZSdsbCBoYXZlIHRvIHRl
c3Qgb3RoZXIgYnJvd3NlcnMKLSAgICAsIG1faXNDb250aW51b3VzKGZhbHNlKQogewogICAgIHN0
YXRpYyBVTE9ORyBzY3JvbGxMaW5lcywgc2Nyb2xsQ2hhcnM7CiAgICAgZmxvYXQgZGVsdGEgPSBH
RVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQYXJhbSkgLyAoZmxvYXQpV0hFRUxfREVMVEE7CkBAIC02
NCwzNyArNzcsMTggQEAgUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSAog
ICAgICAgICAvLyBXaW5kb3dzIHNlbmRzIGEgcG9zaXRpdmUgZGVsdGEgZm9yIHNjcm9sbGluZyBy
aWdodCwgd2hpbGUgQXBwS2l0CiAgICAgICAgIC8vIHNlbmRzIGEgbmVnYXRpdmUgZGVsdGEuIEV2
ZW50SGFuZGxlciBleHBlY3RzIHRoZSBBcHBLaXQgdmFsdWVzLAogICAgICAgICAvLyBzbyB3ZSBo
YXZlIHRvIG5lZ2F0ZSBvdXIgaG9yaXpvbnRhbCBkZWx0YSB0byBtYXRjaC4KLSAgICAgICAgbV9k
ZWx0YVggPSAtZGVsdGE7CisgICAgICAgIG1fZGVsdGFYID0gLWRlbHRhICogaG9yaXpvbnRhbExp
bmVNdWx0aXBsaWVyKCk7CiAgICAgICAgIG1fZGVsdGFZID0gMDsKLQotICAgICAgICBpZiAoIVN5
c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFNDUk9MTENIQVJTLCAwLCAmc2Nyb2xsQ2hh
cnMsIDApKQotICAgICAgICAgICAgc2Nyb2xsQ2hhcnMgPSAxOwotCi0gICAgICAgIC8vIElmIHdl
IGFyZSBpbiBhIHBhZ2Ugc2Nyb2xsIG1vZGUgZm9yIHRoZSBjaGFycyB3ZSBzZXQgdGhlIGJvb2xl
YW4KLSAgICAgICAgaWYgKHNjcm9sbENoYXJzID4gV0hFRUxfREVMVEEpIHsKLSAgICAgICAgICAg
IG1fcGFnZVhTY3JvbGxNb2RlID0gdHJ1ZTsKLSAgICAgICAgICAgIHNjcm9sbENoYXJzID0gMTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1fY2hhcnNUb1Njcm9sbFBlckRlbHRhID0gIHN0YXRpY19j
YXN0PGludD4oc2Nyb2xsQ2hhcnMpOwotICAgICAgICBtX2xpbmVzVG9TY3JvbGxQZXJEZWx0YSA9
IDE7CisgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50OwogICAg
IH0gZWxzZSB7CiAgICAgICAgIG1fZGVsdGFYID0gMDsKICAgICAgICAgbV9kZWx0YVkgPSBkZWx0
YTsKLQotICAgICAgICBpZiAoIVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFNDUk9M
TExJTkVTLCAwLCAmc2Nyb2xsTGluZXMsIDApKQotICAgICAgICAgICAgc2Nyb2xsTGluZXMgPSAz
OyAvLyAzIGlzIHRoZSBkZWZhdWx0IHdpbmRvd3MgdmFsdWUgZm9yIHRoZSBudW1iZXIgb2YgbGlu
ZXMgdG8gc2Nyb2xsIGZvciBlYWNoIHdoZWVsIGV2ZW50Ci0KLSAgICAgICAgLy8gSWYgd2UgYXJl
IGluIGEgcGFnZSBzY3JvbGwgbW9kZSBmb3IgdGhlIGxpbmVzIHdlIHNldCB0aGUgYm9vbGVhbgot
ICAgICAgICBpZiAoc2Nyb2xsTGluZXMgPiBXSEVFTF9ERUxUQSkgewotICAgICAgICAgICAgbV9w
YWdlWVNjcm9sbE1vZGUgPSB0cnVlOwotICAgICAgICAgICAgc2Nyb2xsTGluZXMgPSAxOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbV9saW5lc1RvU2Nyb2xsUGVyRGVsdGEgPSBzdGF0aWNfY2FzdDxp
bnQ+KHNjcm9sbExpbmVzKTsKLSAgICAgICAgbV9jaGFyc1RvU2Nyb2xsUGVyRGVsdGEgPSAxOwor
ICAgICAgICBpbnQgdmVydGljYWxNdWx0aXBsaWVyID0gdmVydGljYWxMaW5lTXVsdGlwbGllcigp
OworICAgICAgICAvLyBBIG11bHRpcGxpZXIgb2YgLTEgaXMgdXNlZCB0byBtZWFuIHRoYXQgdmVy
dGljYWwgd2hlZWwgc2Nyb2xsaW5nIHNob3VsZCBiZSBkb25lIGJ5IHBhZ2UuCisgICAgICAgIG1f
Z3JhbnVsYXJpdHkgPSAodmVydGljYWxNdWx0aXBsaWVyID09IC0xKSA/IFNjcm9sbEJ5UGFnZVdo
ZWVsRXZlbnQgOiBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50OworICAgICAgICBpZiAobV9ncmFudWxh
cml0eSA9PSBTY3JvbGxCeUxpbmVXaGVlbEV2ZW50KQorICAgICAgICAgICAgbV9kZWx0YVkgKj0g
dmVydGljYWxNdWx0aXBsaWVyOwogICAgIH0KLSAgICAKIH0KIAogfQpJbmRleDogcGxhdGZvcm0v
d3gvU2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS93eC9TY3JvbGxWaWV3
V3guY3BwCShyZXZpc2lvbiAzNzAyNCkKKysrIHBsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDI3ICs4NCwyNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICAgICAgZWxzZSBpZiAoc2Nyb2xsVHlwZSA9PSB3eEVWVF9TQ1JPTExXSU5fTElORURPV04pIHsK
ICAgICAgICAgICAgIGlmIChob3JpeikgCi0gICAgICAgICAgICAgICAgcG9zLnggKz0gTElORV9T
VEVQOworICAgICAgICAgICAgICAgIHBvcy54ICs9IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3Rl
cDsKICAgICAgICAgICAgIGVsc2UgICAgICAgCi0gICAgICAgICAgICAgICAgcG9zLnkgKz0gTElO
RV9TVEVQOworICAgICAgICAgICAgICAgIHBvcy55ICs9IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5l
U3RlcDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzY3JvbGxUeXBlID09IHd4RVZUX1ND
Uk9MTFdJTl9MSU5FVVApIHsKICAgICAgICAgICAgIGlmIChob3JpeikgCi0gICAgICAgICAgICAg
ICAgcG9zLnggLT0gTElORV9TVEVQOworICAgICAgICAgICAgICAgIHBvcy54IC09IGNTY3JvbGxi
YXJQaXhlbHNQZXJMaW5lU3RlcDsKICAgICAgICAgICAgIGVsc2UgICAgICAgCi0gICAgICAgICAg
ICAgICAgcG9zLnkgLT0gTElORV9TVEVQOworICAgICAgICAgICAgICAgIHBvcy55IC09IGNTY3Jv
bGxiYXJQaXhlbHNQZXJMaW5lU3RlcDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzY3Jv
bGxUeXBlID09IHd4RVZUX1NDUk9MTFdJTl9QQUdFVVApIHsKICAgICAgICAgICAgIGlmIChob3Jp
eikgCi0gICAgICAgICAgICAgICAgcG9zLnggLT0gbV9zY3JvbGxWaWV3LT52aXNpYmxlV2lkdGgo
KSAtIFBBR0VfS0VFUDsKKyAgICAgICAgICAgICAgICBwb3MueCAtPSBtX3Njcm9sbFZpZXctPnZp
c2libGVXaWR0aCgpIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmc7CiAgICAgICAgICAgICBlbHNl
ICAgICAgIAotICAgICAgICAgICAgICAgIHBvcy55IC09IG1fc2Nyb2xsVmlldy0+dmlzaWJsZUhl
aWdodCgpIC0gUEFHRV9LRUVQOworICAgICAgICAgICAgICAgIHBvcy55IC09IG1fc2Nyb2xsVmll
dy0+dmlzaWJsZUhlaWdodCgpIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmc7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSBpZiAoc2Nyb2xsVHlwZSA9PSB3eEVWVF9TQ1JPTExXSU5fUEFHRURPV04p
IHsKICAgICAgICAgICAgIGlmIChob3JpeikgCi0gICAgICAgICAgICAgICAgcG9zLnggKz0gbV9z
Y3JvbGxWaWV3LT52aXNpYmxlV2lkdGgoKSAtIFBBR0VfS0VFUDsKKyAgICAgICAgICAgICAgICBw
b3MueCArPSBtX3Njcm9sbFZpZXctPnZpc2libGVXaWR0aCgpIC0gY0Ftb3VudFRvS2VlcFdoZW5Q
YWdpbmc7CiAgICAgICAgICAgICBlbHNlICAgICAgIAotICAgICAgICAgICAgICAgIHBvcy55ICs9
IG1fc2Nyb2xsVmlldy0+dmlzaWJsZUhlaWdodCgpIC0gUEFHRV9LRUVQOworICAgICAgICAgICAg
ICAgIHBvcy55ICs9IG1fc2Nyb2xsVmlldy0+dmlzaWJsZUhlaWdodCgpIC0gY0Ftb3VudFRvS2Vl
cFdoZW5QYWdpbmc7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJu
IGUuU2tpcCgpOwpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVu
dChQbGF0Zm9ybVdoZWUKICAgICAgICAgKGUuZGVsdGFZKCkgPCAwICYmIG1heFNjcm9sbERlbHRh
LmhlaWdodCgpID4gMCkgfHwKICAgICAgICAgKGUuZGVsdGFZKCkgPiAwICYmIHNjcm9sbE9mZnNl
dCgpLmhlaWdodCgpID4gMCkpIHsKICAgICAgICAgZS5hY2NlcHQoKTsKLSAgICAgICAgc2Nyb2xs
QnkoSW50U2l6ZSgtZS5kZWx0YVgoKSAqIExJTkVfU1RFUCwgLWUuZGVsdGFZKCkgKiBMSU5FX1NU
RVApKTsKKyAgICAgICAgc2Nyb2xsQnkoSW50U2l6ZSgtZS5kZWx0YVgoKSAqIGNTY3JvbGxiYXJQ
aXhlbHNQZXJMaW5lU3RlcCwgLWUuZGVsdGFZKCkgKiBjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0
ZXApKTsKICAgICB9CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMzcwMTIpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY0LDE3ICsxMzY0
LDE3IEBAIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAgICAvLyBT
ZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCiAgICAgaWYgKG1faEJh
cikgewogICAgICAgICBpbnQgY2xpZW50V2lkdGggPSBtX29iamVjdC0+Y2xpZW50V2lkdGgoKTsK
LSAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoLVBBR0VfS0VFUCk7CisgICAgICAg
IGludCBwYWdlU3RlcCA9IChjbGllbnRXaWR0aCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKTsK
ICAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRXaWR0aDsKLSAgICAg
ICAgbV9oQmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFy
LT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKICAgICAg
ICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKICAg
ICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOwogICAgIH0KICAgICBpZiAo
bV92QmFyKSB7CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBtX29iamVjdC0+Y2xpZW50SGVp
Z2h0KCk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQtUEFHRV9LRUVQKTsK
KyAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdodCAtIGNBbW91bnRUb0tlZXBXaGVu
UGFnaW5nKTsKICAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRIZWln
aHQ7Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoTElORV9TVEVQLCBwYWdlU3RlcCk7CisgICAg
ICAgIG1fdkJhci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3Rl
cCk7CiAgICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xs
SGVpZ2h0KTsKICAgICB9CiAgCg==
</data>
<flag name="review"
          id="10772"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>