<?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>51550</bug_id>
          
          <creation_ts>2010-12-23 11:57:17 -0800</creation_ts>
          <short_desc>Clean up the selection handling code</short_desc>
          <delta_ts>2010-12-23 15:35:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>326191</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-12-23 11:57:17 -0800</bug_when>
    <thetext>Clean up the selection handling code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326197</commentid>
    <comment_count>1</comment_count>
      <attachid>77355</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-12-23 12:03:28 -0800</bug_when>
    <thetext>Created attachment 77355
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326225</commentid>
    <comment_count>2</comment_count>
      <attachid>77355</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-23 12:40:24 -0800</bug_when>
    <thetext>Comment on attachment 77355
Patch

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

&gt; WebKit2/Shared/SelectionState.h:39
&gt; +        , selectedRangeStart(static_cast&lt;uint64_t&gt;(-1))

Can we have a named constant for this? What does it mean? Is it ever exposed to clients of the WK API?

&gt; WebKit2/UIProcess/WebPageProxy.h:177
&gt; +    // These are only used on Mac currently.

Seems like a silly comment just before #if PLATFORM(MAC). Is there something more substantive to say about these functions?

&gt; WebKit2/UIProcess/WebPageProxy.h:497
&gt; +    // The current selection state.
&gt; +    SelectionState m_selectionState;

Comment adds little. Leave it out?

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:616
&gt; +    location = static_cast&lt;uint64_t&gt;(-1);

Use that constant from above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326287</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-23 14:40:45 -0800</bug_when>
    <thetext>Anders committed r74582: &lt;http://trac.webkit.org/changeset/74582&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326327</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-23 15:31:46 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74583 might have broken Qt Linux Release
The following tests are not passing:
inspector/styles-new-API.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326329</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-23 15:35:48 -0800</bug_when>
    <thetext>I suspect that&apos;s just a flaky test: https://bugs.webkit.org/show_bug.cgi?id=50889</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77355</attachid>
            <date>2010-12-23 12:03:28 -0800</date>
            <delta_ts>2010-12-23 12:40:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51550-20101223120326.patch</filename>
            <type>text/plain</type>
            <size>33150</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDU3MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMTAtMTItMjMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDbGVhbiB1cCB0aGUgc2VsZWN0aW9uIGhhbmRsaW5nIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNTUwCisKKyAgICAgICAgKiBTaGFyZWQv
U2VsZWN0aW9uU3RhdGUuaDogQWRkZWQuCisgICAgICAgIEFkZCBTZWxlY3Rpb25TdGF0ZSBjbGFz
cyB3aGljaCBob2xkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIFJlbW92ZSBzZWxl
Y3Rpb25DaGFuZ2VkIGZ1bmN0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgaW5pdFdpdGhGcmFtZTpjb250ZXh0UmVmOnBhZ2VH
cm91cFJlZjpdKToKKyAgICAgICAgUmVtb3ZlIGFsbCB0aGUgc2VsZWN0aW9uIHJlbGF0ZWQgc3Rh
dGU7IGl0IGxpdmVzIGluIHRoZSBXZWJQYWdlUHJveHkgb2JqZWN0IG5vdy4KKyAgICAgICAgCisg
ICAgICAgICgtW1dLVmlldyBpbnNlcnRUZXh0Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgc2VsZWN0
ZWRSYW5nZV0pOgorICAgICAgICAoLVtXS1ZpZXcgaGFzTWFya2VkVGV4dF0pOgorICAgICAgICBH
ZXQgdGhlIHNlbGVjdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBXZWJQYWdlUHJveHkuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oOgorICAgICAgICBSZW1v
dmUgX3NlbGVjdGlvbkNoYW5nZWQgZGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
UGFnZUNsaWVudC5oOgorICAgICAgICBSZW1vdmUgc2VsZWN0aW9uQ2hhbmdlZCBmdW5jdGlvbnMu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpzZWxlY3Rpb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICBVcGRhdGUg
dGhlIHNlbGVjdGlvbiBzdGF0ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAg
ICAgIFJldHVybiB0aGUgc2VsZWN0aW9uIHN0YXRlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgQWRkIFNlbGVjdGlvblN0YXRlQ2hhbmdl
ZCBtZXNzYWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIFJlbW92ZSBhbGwgdGhlIHNl
bGVjdGlvbiByZWxhdGVkIHN0YXRlOyBpdCBsaXZlcyBpbiB0aGUgV2ViUGFnZVByb3h5IG9iamVj
dCBub3cuCisKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29tcG9zaXRpb25TZWxlY3Rpb25D
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25JTUVDb21wb3NpdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uSU1FRW5kQ29tcG9zaXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpvbklNRVJlcXVlc3QpOgorICAgICAgICBHZXQgdGhlIHNlbGVjdGlvbiBp
bmZvcm1hdGlvbiBmcm9tIHRoZSBXZWJQYWdlUHJveHkuCisgICAgICAgIAorICAgICAgICAqIFdl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIFNlbGVjdGlvblN0
YXRlLmgKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKToKKyAgICAgICAgU2VuZCBhIFNlbGVjdGlvblN0YXRlQ2hhbmdlZCBtZXNz
YWdlIHdpdGggdGhlIHVwZGF0ZWQgc3RhdGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW06CisgICAgICAgIFJlbW92ZSBtYWMg
c3BlY2lmaWMgY29kZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFu
Z2UpOgorICAgICAgICBSZW5hbWUgdGhpcyBmdW5jdGlvbiBmcm9tIGNvbnZlcnRSYW5nZVRvUGxh
dGZvcm1SYW5nZSBhbmQgbW92ZSBpdCBvdXQgb2YgV2ViUGFnZU1hYy5tbQorCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpnZXRNYXJrZWRSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNoYXJh
Y3RlckluZGV4Rm9yUG9pbnQpOgorICAgICAgICBDYWxsIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlLgorCisgICAgICAgICogd2luL1dlYktpdDIudmNwcm9qOgorICAgICAgICBBZGQgU2Vs
ZWN0aW9uU3RhdGUuaAorCiAyMDEwLTEyLTIzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktp
dDIvU2hhcmVkL1NlbGVjdGlvblN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQv
U2VsZWN0aW9uU3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL1NlbGVjdGlv
blN0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNlbGVjdGlvblN0YXRlX2gKKyNkZWZpbmUgU2VsZWN0aW9uU3RhdGVfaAorCisjaW5jbHVk
ZSAiQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBTZWxl
Y3Rpb25TdGF0ZSB7CisgICAgU2VsZWN0aW9uU3RhdGUoKQorICAgICAgICA6IGlzTm9uZSh0cnVl
KQorICAgICAgICAsIGlzQ29udGVudEVkaXRhYmxlKGZhbHNlKQorICAgICAgICAsIGlzSW5QYXNz
d29yZEZpZWxkKGZhbHNlKQorICAgICAgICAsIGhhc0NvbXBvc2l0aW9uKGZhbHNlKQorICAgICAg
ICAsIHNlbGVjdGVkUmFuZ2VTdGFydChzdGF0aWNfY2FzdDx1aW50NjRfdD4oLTEpKQorICAgICAg
ICAsIHNlbGVjdGVkUmFuZ2VMZW5ndGgoMCkKKyAgICB7CisgICAgfQorCisgICAgLy8gV2hldGhl
ciB0aGVyZSBpcyBhIHNlbGVjdGlvbiBhdCBhbGwuIFRoaXMgd2lsbCBiZSBmYWxzZSB3aGVuIHRo
ZXJlIGlzIGEgY2FyZXQgc2VsZWN0aW9uLgorICAgIGJvb2wgaXNOb25lOworCisgICAgLy8gV2hl
dGhlciB0aGUgc2VsZWN0aW9uIGlzIGluIGEgY29udGVudCBlZGl0YWJsZSBhcmVhLgorICAgIGJv
b2wgaXNDb250ZW50RWRpdGFibGU7CisKKyAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMg
aW4gYSBwYXNzd29yZCBmaWVsZC4KKyAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkOworCisgICAg
Ly8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGhhcyBhIGNvbXBvc2l0aW9uLgorICAgIGJvb2wgaGFz
Q29tcG9zaXRpb247CisKKyAgICAvLyBUaGUgc3RhcnQgb2YgdGhlIHNlbGVjdGVkIHJhbmdlLgor
ICAgIHVpbnQ2NF90IHNlbGVjdGVkUmFuZ2VTdGFydDsKKyAgICAKKyAgICAvLyBUaGUgbGVuZ3Ro
IG9mIHRoZSBzZWxlY3RlZCByYW5nZS4KKyAgICB1aW50NjRfdCBzZWxlY3RlZFJhbmdlTGVuZ3Ro
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKK3Rl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpTZWxlY3Rpb25TdGF0ZT4gOiBT
aW1wbGVBcmd1bWVudENvZGVyPFdlYktpdDo6U2VsZWN0aW9uU3RhdGU+IHsgfTsKK307CisKKyNl
bmRpZiAvLyBTZWxlY3Rpb25TdGF0ZV9oCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZp
c2lvbiA3NDU2OSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzAsOSArNzAsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRD
b21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGlu
dCBzdGF0ZSkgPSAwOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJj
ZXB0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXZWJDb3Jl
OjpLZXlwcmVzc0NvbW1hbmQ+JiwgdWludDMyX3QsIHVpbnQzMl90LCBWZWN0b3I8V2ViQ29yZTo6
Q29tcG9zaXRpb25VbmRlcmxpbmU+JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25D
aGFuZ2VkKGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIHVpbnQ2NF90LCB1aW50NjRfdCkgPSAwOwot
I2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChib29sLCBib29sLCBib29s
LCBib29sKSA9IDA7CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgdmlydHVhbCB2b2lk
IGNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlZChib29sKSA9IDA7CkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDc0NTY5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNCwxMyArMTUxNCwxMiBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzCiAgICAgY291bnQgPSBtX2Jh
Y2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpOwogfQogCi0jaWYgUExBVEZPUk0oTUFD
KQotLy8gU2VsZWN0aW9uIGNoYW5nZSBzdXBwb3J0Ci12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU2Vs
ZWN0aW9uQ2hhbmdlKGJvb2wgaXNOb25lLCBib29sIGlzQ29udGVudEVkaXRhYmxlLCBib29sIGlz
UGFzc3dvcmRGaWVsZCwgYm9vbCBoYXNDb21wb3NpdGlvbiwgdWludDY0X3QgbG9jYXRpb24sIHVp
bnQ2NF90IGxlbmd0aCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3Rpb25TdGF0ZUNoYW5nZWQo
Y29uc3QgU2VsZWN0aW9uU3RhdGUmIHNlbGVjdGlvblN0YXRlKQogewotICAgIG1fcGFnZUNsaWVu
dC0+c2VsZWN0aW9uQ2hhbmdlZChpc05vbmUsIGlzQ29udGVudEVkaXRhYmxlLCBpc1Bhc3N3b3Jk
RmllbGQsIGhhc0NvbXBvc2l0aW9uLCBsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICBtX3NlbGVjdGlv
blN0YXRlID0gc2VsZWN0aW9uU3RhdGU7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCiAvLyBDb21w
bGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1Zy1pbnMuCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCiB7CkBAIC0xNTI5LDEyICsx
NTI4LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRDb21wbGV4VGV4dElucHV0VAogICAgIAog
ICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VuZENvbXBsZXhUZXh0SW5w
dXRUb1BsdWdpbihwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgdGV4dElucHV0KSwg
bV9wYWdlSUQpOwogfQotICAgIAotI2Vsc2UgICAgCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hh
bmdlU2VsZWN0aW9uKGJvb2wgaXNOb25lLCBib29sIGlzQ29udGVudEVkaXRhYmxlLCBib29sIGlz
UGFzc3dvcmRGaWVsZCwgYm9vbCBoYXNDb21wb3NpdGlvbikKLXsKLSAgICBtX3BhZ2VDbGllbnQt
PnNlbGVjdGlvbkNoYW5nZWQoaXNOb25lLCBpc0NvbnRlbnRFZGl0YWJsZSwgaXNQYXNzd29yZEZp
ZWxkLCBoYXNDb21wb3NpdGlvbik7Ci19CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA3NDU2OSkKKysrIFdlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5Lmgi
CisjaW5jbHVkZSAiU2VsZWN0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIK
ICNpbmNsdWRlICJXS0Jhc2UuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgi
CkBAIC0xNzEsMTcgKzE3MiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGVjdXRlRWRpdENvbW1h
bmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7CiAgICAgdm9pZCB2YWxpZGF0ZU1lbnVJdGVt
KGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpOwogCi0vLyBUaGVzZSBhcmUgb25seSB1c2VkIG9u
IE1hYyBjdXJyZW50bHkuCisgICAgY29uc3QgU2VsZWN0aW9uU3RhdGUmIHNlbGVjdGlvblN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQorCisgICAgLy8gVGhlc2UgYXJl
IG9ubHkgdXNlZCBvbiBNYWMgY3VycmVudGx5LgogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lk
IHVwZGF0ZVdpbmRvd0lzVmlzaWJsZShib29sIHdpbmRvd0lzVmlzaWJsZSk7CiAgICAgdm9pZCB3
aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dG
cmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFt
ZUluV2luZG93Q29vcmRpbmF0ZXMpOwogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UodWludDY0X3Qm
IGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKICAgICB1aW50NjRfdCBjaGFyYWN0ZXJJbmRl
eEZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50KTsKICAgICBXZWJDb3JlOjpJbnRSZWN0
IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVpbnQ2NF90LCB1aW50NjRfdCk7Ci0gICAgdm9p
ZCBkaWRTZWxlY3Rpb25DaGFuZ2UoYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgdWludDY0X3QsIHVp
bnQ2NF90KTsKICAgICB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4odWludDY0X3Qg
cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdGV4dElucHV0
KTsKLSNlbHNlCi0gICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oYm9vbCwgYm9vbCwgYm9vbCwg
Ym9vbCk7CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBkaWRDaGFuZ2VDb21w
b3NpdGlvblNlbGVjdGlvbihib29sKTsKQEAgLTM4Miw2ICszODIsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAjZW5k
aWYKIAorICAgIC8vIFNlbGVjdGlvbgorICAgIHZvaWQgc2VsZWN0aW9uU3RhdGVDaGFuZ2VkKGNv
bnN0IFNlbGVjdGlvblN0YXRlJik7CisKICAgICAvLyBCYWNrL0ZvcndhcmQgbGlzdCBtYW5hZ2Vt
ZW50CiAgICAgdm9pZCBiYWNrRm9yd2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlEKTsKICAgICB2
b2lkIGJhY2tGb3J3YXJkR29Ub0l0ZW0odWludDY0X3QgaXRlbUlEKTsKQEAgLTQ5MCw2ICs0OTMs
OSBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1fdG9vbFRpcDsKIAorICAgIC8vIFRoZSBjdXJy
ZW50IHNlbGVjdGlvbiBzdGF0ZS4KKyAgICBTZWxlY3Rpb25TdGF0ZSBtX3NlbGVjdGlvblN0YXRl
OworCiAgICAgLy8gUkVNT1ZFOiBGb3IgZGVtbyBwdXJwb3NlcyBvbmx5LgogICAgIFN0cmluZyBt
X3VybEF0UHJvY2Vzc0V4aXQ7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc0NTY5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTIgKzEyOSw4IEBA
IG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgQ2xlYXJBbGxFZGl0Q29tbWFuZHMoKQog
ICAgIAogICAgICMgU2VsZWN0aW9uIG1lc3NhZ2VzLgotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBE
aWRTZWxlY3Rpb25DaGFuZ2UoYm9vbCBpc05vbmUsIGJvb2wgaXNDb250ZW50RWRpdGFibGUsIGJv
b2wgaXNQYXNzd29yZEZpZWxkLCBib29sIGhhc0NvbXBvc2l0aW9uLCB1aW50NjRfdCBsb2NhdGlv
biwgdWludDY0X3QgbGVuZ3RoKQotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKE1BQykKLSAgICBEaWRD
aGFuZ2VTZWxlY3Rpb24oYm9vbCBpc05vbmUsIGJvb2wgaXNDb250ZW50RWRpdGFibGUsIGJvb2wg
aXNQYXNzd29yZEZpZWxkLCBib29sIGhhc0NvbXBvc2l0aW9uKQotI2VuZGlmCisgICAgU2VsZWN0
aW9uU3RhdGVDaGFuZ2VkKFdlYktpdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUpCisK
ICNpZiBQTEFURk9STShXSU4pCiAgICAgRGlkQ2hhbmdlQ29tcG9zaXRpb25TZWxlY3Rpb24oYm9v
bCBoYXNDaGFuZ2VkKQogI2VuZGlmCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1Bh
Z2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA3NDU2OSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFj
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWROb3RI
YW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgdWludDY0X3Qs
IHVpbnQ2NF90KTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4g
Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVBy
b3h5Kik7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
bW0JKHJldmlzaW9uIDc0NTY5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDExICsxNDcsNiBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpzZXRWaWV3cG9ydEFyZ3VtZW50CiAKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2VsZWN0aW9uQ2hhbmdlZChib29sIGlzTm9uZSwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSwg
Ym9vbCBpc1Bhc3N3b3JkRmllbGQsIGJvb2wgaGFzQ29tcG9zaXRpb24sIHVpbnQ2NF90IGxvY2F0
aW9uLCB1aW50NjRfdCBsZW5ndGgpCi17Ci0gICAgW21fd2tWaWV3IF9zZWxlY3Rpb25DaGFuZ2Vk
OmlzTm9uZSBpc0VkaXRhYmxlOmlzQ29udGVudEVkaXRhYmxlIGlzUGFzc3dvcmQ6aXNQYXNzd29y
ZEZpZWxkIGhhc01hcmtlZFRleHQ6aGFzQ29tcG9zaXRpb24gcmFuZ2U6TlNNYWtlUmFuZ2UobG9j
YXRpb24sIGxlbmd0aCldOwotfQotCiBzdGF0aWMgTlNTdHJpbmcqIG5hbWVGb3JFZGl0QWN0aW9u
KEVkaXRBY3Rpb24gZWRpdEFjdGlvbikKIHsKICAgICAvLyBGSVhNRTogVXNlIGxvY2FsaXplZCBz
dHJpbmdzLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDc0
NTY5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSwxNCArMTA5LDkgQEAgQGludGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3Qg
ewogICAgIC8vIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwbHVnLWluIHdlIHdhbnQgdG8gc2VuZCBj
b21wbGV4IHRleHQgaW5wdXQgdG8sIG9yIDAgaWYgdGhlcmUgaXMgbm9uZS4KICAgICB1aW50NjRf
dCBfcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI7CiAKLSAgICBCT09MIF9pc1NlbGVj
dGlvbk5vbmU7Ci0gICAgQk9PTCBfaXNTZWxlY3Rpb25FZGl0YWJsZTsKLSAgICBCT09MIF9pc1Nl
bGVjdGlvbkluUGFzc3dvcmRGaWVsZDsKLSAgICBCT09MIF9oYXNNYXJrZWRUZXh0OwogICAgIFZl
Y3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gX3VuZGVybGluZXM7CiAgICAgdW5zaWduZWQgX3Nl
bGVjdGlvblN0YXJ0OwogICAgIHVuc2lnbmVkIF9zZWxlY3Rpb25FbmQ7Ci0gICAgTlNSYW5nZSBf
c2VsZWN0ZWRSYW5nZTsKIH0KIEBlbmQKIApAQCAtMTY1LDEyICsxNjAsNiBAQCAtIChpZClpbml0
V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgY29udGV4CiAgICAgX2RhdGEtPl9wYWdlLT5pbml0aWFs
aXplV2ViUGFnZShJbnRTaXplKGZyYW1lLnNpemUpKTsKICAgICBfZGF0YS0+X3BhZ2UtPnNldElz
SW5XaW5kb3coW3NlbGYgd2luZG93XSk7CiAKLSAgICBfZGF0YS0+X2lzU2VsZWN0aW9uTm9uZSA9
IFlFUzsKLSAgICBfZGF0YS0+X2lzU2VsZWN0aW9uRWRpdGFibGUgPSBOTzsKLSAgICBfZGF0YS0+
X2lzU2VsZWN0aW9uSW5QYXNzd29yZEZpZWxkID0gTk87Ci0gICAgX2RhdGEtPl9oYXNNYXJrZWRU
ZXh0ID0gTk87Ci0gICAgX2RhdGEtPl9zZWxlY3RlZFJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RG
b3VuZCwgMCk7Ci0KICAgICBXZWJDb250ZXh0OjpzdGF0aXN0aWNzKCkud2tWaWV3Q291bnQrKzsK
IAogICAgIHJldHVybiBzZWxmOwpAQCAtNDc4LDcgKzQ2Nyw3IEBAIC0gKHZvaWQpaW5zZXJ0VGV4
dDooaWQpc3RyaW5nCiAgICAgCiAgICAgTE9HKFRleHRJbnB1dCwgImluc2VydFRleHQ6XCIlQFwi
IiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDogc3RyaW5nKTsKICAgICBO
U1N0cmluZyAqdGV4dDsKLSAgICBib29sIGlzRnJvbUlucHV0TWV0aG9kID0gX2RhdGEtPl9oYXNN
YXJrZWRUZXh0OworICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBfZGF0YS0+X3BhZ2UtPnNl
bGVjdGlvblN0YXRlKCkuaGFzQ29tcG9zaXRpb247CiAKICAgICBpZiAoaXNBdHRyaWJ1dGVkU3Ry
aW5nKSB7CiAgICAgICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107CkBAIC01NTUsMTUgKzU0NCw2
IEBAIC0gKHZvaWQpX3NldEV2ZW50QmVpbmdSZXNlbnQ6KE5TRXZlbnQgKikKICAgICBfZGF0YS0+
X2tleURvd25FdmVudEJlaW5nUmVzZW50ID0gW2V2ZW50IHJldGFpbl07CiB9CiAKLS0gKHZvaWQp
X3NlbGVjdGlvbkNoYW5nZWQ6KEJPT0wpaXNOb25lIGlzRWRpdGFibGU6KEJPT0wpaXNDb250ZW50
RWRpdGFibGUgaXNQYXNzd29yZDooQk9PTClpc1Bhc3N3b3JkRmllbGQgaGFzTWFya2VkVGV4dDoo
Qk9PTCloYXNDb21wb3NpdGlvbiByYW5nZTooTlNSYW5nZSluZXdyYW5nZQotewotICAgIF9kYXRh
LT5faXNTZWxlY3Rpb25Ob25lID0gaXNOb25lOwotICAgIF9kYXRhLT5faXNTZWxlY3Rpb25FZGl0
YWJsZSA9IGlzQ29udGVudEVkaXRhYmxlOwotICAgIF9kYXRhLT5faXNTZWxlY3Rpb25JblBhc3N3
b3JkRmllbGQgPSBpc1Bhc3N3b3JkRmllbGQ7Ci0gICAgX2RhdGEtPl9oYXNNYXJrZWRUZXh0ID0g
aGFzQ29tcG9zaXRpb247Ci0gICAgX2RhdGEtPl9zZWxlY3RlZFJhbmdlID0gbmV3cmFuZ2U7Ci19
Ci0KIC0gKFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+JilfaW50ZXJjZXB0S2V5RXZlbnQ6KE5TRXZl
bnQgKil0aGVFdmVudCAKIHsKICAgICBfZGF0YS0+X2NvbW1hbmRzTGlzdC5jbGVhcigpOwpAQCAt
NjIyLDE3ICs2MDIsMTcgQEAgLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0IHsK
IAogLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCiB7Ci0gICAgaWYgKF9kYXRhLT5faXNTZWxlY3Rp
b25Ob25lIHx8ICFfZGF0YS0+X2lzU2VsZWN0aW9uRWRpdGFibGUpCisgICAgaWYgKF9kYXRhLT5f
cGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc05vbmUgfHwgIV9kYXRhLT5fcGFnZS0+c2VsZWN0aW9u
U3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOwogICAgIAotICAgIExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIC0+
ICgldSwgJXUpIiwgX2RhdGEtPl9zZWxlY3RlZFJhbmdlLmxvY2F0aW9uLCBfZGF0YS0+X3NlbGVj
dGVkUmFuZ2UubGVuZ3RoKTsKLSAgICByZXR1cm4gX2RhdGEtPl9zZWxlY3RlZFJhbmdlOworICAg
IExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIC0+ICgldSwgJXUpIiwgX2RhdGEtPl9wYWdl
LT5zZWxlY3Rpb25TdGF0ZSgpLnNlbGVjdGVkUmFuZ2VTdGFydCwgX2RhdGEtPl9wYWdlLT5zZWxl
Y3Rpb25TdGF0ZSgpLnNlbGVjdGVkUmFuZ2VMZW5ndGgpOworICAgIHJldHVybiBOU01ha2VSYW5n
ZShfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuc2VsZWN0ZWRSYW5nZVN0YXJ0LCBfZGF0
YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuc2VsZWN0ZWRSYW5nZUxlbmd0aCk7CiB9CiAKIC0g
KEJPT0wpaGFzTWFya2VkVGV4dAogewotICAgIExPRyhUZXh0SW5wdXQsICJoYXNNYXJrZWRUZXh0
IC0+ICV1IiwgX2RhdGEtPiBfaGFzTWFya2VkVGV4dCk7Ci0gICAgcmV0dXJuIF9kYXRhLT5faGFz
TWFya2VkVGV4dDsKKyAgICBMT0coVGV4dElucHV0LCAiaGFzTWFya2VkVGV4dCAtPiAldSIsIF9k
YXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5oYXNDb21wb3NpdGlvbik7CisgICAgcmV0dXJu
IF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5oYXNDb21wb3NpdGlvbjsKIH0KIAogLSAo
dm9pZCl1bm1hcmtUZXh0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0lu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJ
bnRlcm5hbC5oCShyZXZpc2lvbiA3NDU2OSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsNiBAQCBAaW50ZXJm
YWNlIFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV9zZXRFdmVudEJlaW5nUmVzZW50OihOU0V2
ZW50ICopZXZlbnQ7CiAtIChOU1JlY3QpX2NvbnZlcnRUb0RldmljZVNwYWNlOihOU1JlY3QpcmVj
dDsKIC0gKE5TUmVjdClfY29udmVydFRvVXNlclNwYWNlOihOU1JlY3QpcmVjdDsKLS0gKHZvaWQp
X3NlbGVjdGlvbkNoYW5nZWQ6KEJPT0wpaXNOb25lIGlzRWRpdGFibGU6KEJPT0wpaXNDb250ZW50
RWRpdGFibGUgaXNQYXNzd29yZDooQk9PTClpc1Bhc3N3b3JkRmllbGQgaGFzTWFya2VkVGV4dDoo
Qk9PTCloYXNDb21wb3NpdGlvbiByYW5nZTooTlNSYW5nZSluZXdyYW5nZTsKLQogLSAodm9pZClf
c2V0RmluZEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OkZpbmRJbmRpY2F0b3I+KWZpbmRJ
bmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNzQ1
NjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyNSwxMCArMjI1LDYgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIFdlYkNvbnRl
eHQqIAogICAgICwgbV9vdmVycmlkZUN1cnNvcigwKQogICAgICwgbV90cmFja2luZ01vdXNlTGVh
dmUoZmFsc2UpCiAgICAgLCBtX2lzQmVpbmdEZXN0cm95ZWQoZmFsc2UpCi0gICAgLCBtX3NlbGVj
dGlvbklzTm9uZSh0cnVlKQotICAgICwgbV9zZWxlY3Rpb25Jc0VkaXRhYmxlKGZhbHNlKQotICAg
ICwgbV9zZWxlY3Rpb25JblBhc3N3b3JkRmllbGQoZmFsc2UpCi0gICAgLCBtX2hhc01hcmtlZFRl
eHQoZmFsc2UpCiAgICAgLCBtX2luSU1FQ29tcG9zaXRpb24oMCkKIHsKICAgICByZWdpc3Rlcldl
YlZpZXdXaW5kb3dDbGFzcygpOwpAQCAtNjkzLDE3ICs2ODksOSBAQCB2b2lkIFdlYlZpZXc6OnNl
dElucHV0TWV0aG9kU3RhdGUoYm9vbCBlCiAgICAgSW1lOjpJbW1Bc3NvY2lhdGVDb250ZXh0RXgo
bV93aW5kb3csIDAsIGVuYWJsZWQgPyBJQUNFX0RFRkFVTFQgOiAwKTsKIH0KIAotdm9pZCBXZWJW
aWV3OjpzZWxlY3Rpb25DaGFuZ2VkKGJvb2wgaXNOb25lLCBib29sIGlzRWRpdGFibGUsIGJvb2wg
aXNQYXNzd29yZEZpZWxkLCBib29sIGhhc0NvbXBvc2l0aW9uKQotewotICAgIG1fc2VsZWN0aW9u
SXNOb25lID0gaXNOb25lOwotICAgIG1fc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGlzRWRpdGFibGU7
Ci0gICAgbV9zZWxlY3Rpb25JblBhc3N3b3JkRmllbGQgPSBpc1Bhc3N3b3JkRmllbGQ7Ci0gICAg
bV9oYXNNYXJrZWRUZXh0ID0gaGFzQ29tcG9zaXRpb247Ci19Ci0KIHZvaWQgV2ViVmlldzo6Y29t
cG9zaXRpb25TZWxlY3Rpb25DaGFuZ2VkKGJvb2wgaGFzQ2hhbmdlZCkKIHsKLSAgICBpZiAobV9o
YXNNYXJrZWRUZXh0ICYmICFoYXNDaGFuZ2VkKQorICAgIGlmIChtX3BhZ2UtPnNlbGVjdGlvblN0
YXRlKCkuaGFzQ29tcG9zaXRpb24gJiYgIWhhc0NoYW5nZWQpCiAgICAgICAgIHJlc2V0SU1FKCk7
CiB9CiAKQEAgLTgxMSw3ICs3OTksNyBAQCBib29sIFdlYlZpZXc6Om9uSU1FQ29tcG9zaXRpb24o
TFBBUkFNIGxwCiAgICAgaWYgKCFoSW5wdXRDb250ZXh0KQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGlmICghbV9zZWxlY3Rpb25Jc0VkaXRhYmxlKQorICAgIGlmICghbV9wYWdlLT5zZWxl
Y3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIHByZXBhcmVDYW5kaWRhdGVXaW5kb3coaElucHV0Q29udGV4dCk7CkBAIC04NTQsNyArODQy
LDcgQEAgYm9vbCBXZWJWaWV3OjpvbklNRUVuZENvbXBvc2l0aW9uKCkKICAgICBMT0coVGV4dElu
cHV0LCAib25JTUVFbmRDb21wb3NpdGlvbiIpOwogICAgIC8vIElmIHRoZSBjb21wb3NpdGlvbiBo
YXNuJ3QgYmVlbiBjb25maXJtZWQgeWV0LCBpdCBuZWVkcyB0byBiZSBjYW5jZWxsZWQuCiAgICAg
Ly8gVGhpcyBoYXBwZW5zIGFmdGVyIGRlbGV0aW5nIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIGlu
bGluZSBpbnB1dCBob2xlLgotICAgIGlmIChtX2hhc01hcmtlZFRleHQpCisgICAgaWYgKG1fcGFn
ZS0+c2VsZWN0aW9uU3RhdGUoKS5oYXNDb21wb3NpdGlvbikKICAgICAgICAgbV9wYWdlLT5jb25m
aXJtQ29tcG9zaXRpb24oU3RyaW5nKCkpOwogCiAgICAgaWYgKG1faW5JTUVDb21wb3NpdGlvbikK
QEAgLTg2NSw3ICs4NTMsNyBAQCBib29sIFdlYlZpZXc6Om9uSU1FRW5kQ29tcG9zaXRpb24oKQog
CiBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihJTUVDSEFSUE9TSVRJ
T04qIGNoYXJQb3MpCiB7Ci0gICAgaWYgKGNoYXJQb3MtPmR3Q2hhclBvcyAmJiAhbV9oYXNNYXJr
ZWRUZXh0KQorICAgIGlmIChjaGFyUG9zLT5kd0NoYXJQb3MgJiYgIW1fcGFnZS0+c2VsZWN0aW9u
U3RhdGUoKS5oYXNDb21wb3NpdGlvbikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSW50UmVjdCBj
YXJldCA9IG1fcGFnZS0+Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVySW5TZWxlY3RlZFJhbmdlKGNoYXJQ
b3MtPmR3Q2hhclBvcyk7CiAgICAgY2hhclBvcy0+cHQueCA9IGNhcmV0LngoKTsKQEAgLTg5Nyw3
ICs4ODUsNyBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdFJlY29udmVydFN0CiBMUkVT
VUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdChXUEFSQU0gcmVxdWVzdCwgTFBBUkFNIGRhdGEpCiB7
CiAgICAgTE9HKFRleHRJbnB1dCwgIm9uSU1FUmVxdWVzdCAlcyIsIGltZVJlcXVlc3ROYW1lKHJl
cXVlc3QpLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgaWYgKCFtX3NlbGVjdGlvbklzRWRpdGFibGUp
CisgICAgaWYgKCFtX3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgc3dpdGNoIChyZXF1ZXN0KSB7CkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDc0NTY5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw2IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29u
dmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwg
dm9pZCBkaWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jik7
Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoYm9vbCwgYm9vbCwgYm9vbCwgYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlZChib29sKTsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVu
dVByb3h5KFdlYlBhZ2VQcm94eSopOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0
TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopOwpAQCAtMTUx
LDExICsxNTAsNiBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV9wYWdl
OwogCi0gICAgLy8gVGV4dCBpbnB1dCBzdGF0ZSB2YWx1ZXMKLSAgICBib29sIG1fc2VsZWN0aW9u
SXNOb25lOwotICAgIGJvb2wgbV9zZWxlY3Rpb25Jc0VkaXRhYmxlOwotICAgIGJvb2wgbV9zZWxl
Y3Rpb25JblBhc3N3b3JkRmllbGQ7Ci0gICAgYm9vbCBtX2hhc01hcmtlZFRleHQ7CiAgICAgdW5z
aWduZWQgbV9pbklNRUNvbXBvc2l0aW9uOwogfTsKIApJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0NTY5KQorKysgV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsx
NTcsNyBAQAogCQkxQUExQ0QwNzEwMEZBMUJBMDA3OERFQkMgLyogQ2FyYm9uLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTFDRDA2
MTAwRkExQkEwMDc4REVCQyAvKiBDYXJib24uZnJhbWV3b3JrICovOyB9OwogCQkxQUE0MTdDQjEy
QzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTQxN0M5MTJDMDBDQ0EwMDJCRTY3QiAvKiBUZXh0Q2hl
Y2tlci5oICovOyB9OwogCQkxQUE0MTdFRjEyQzAwRDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE0
MTdFRDEyQzAwRDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJNYWMubW0gKi87IH07CisJCTFBQTQx
QUI1MTJDMDJFQzQwMDJCRTY3QiAvKiBTZWxlY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNDFBQjQxMkMwMkVDNDAwMkJFNjdCIC8q
IFNlbGVjdGlvblN0YXRlLmggKi87IH07CiAJCTFBQTQ3OTIzMTJBNTlGRDkwMDgyMzZDMyAvKiBQ
bHVnaW5Qcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFBNDc5MjIxMkE1OUZEOTAwODIzNkMzIC8qIFBsdWdpblByb2Nlc3NNYWMubW0g
Ki87IH07CiAJCTFBQTQ3OUIwMTJBNUE0MzYwMDgyMzZDMyAvKiBDYXJib24uZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMUNEMDYx
MDBGQTFCQTAwNzhERUJDIC8qIENhcmJvbi5mcmFtZXdvcmsgKi87IH07CiAJCTFBQTU2RjI5MTFF
OTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE1NkYyODExRTkyQkM4MDA2MUI4ODIgLyogUGx1
Z2luQ29udHJvbGxlci5oICovOyB9OwpAQCAtODEzLDYgKzgxNCw3IEBACiAJCTFBQTFDRDA2MTAw
RkExQkEwMDc4REVCQyAvKiBDYXJib24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDYXJi
b24uZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZy
YW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMUFBNDE3QzkxMkMwMEND
QTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTQxN0VE
MTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRDaGVja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uU3RhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNDc5MjIxMkE1OUZEOTAwODIzNkMzIC8qIFBs
dWdpblByb2Nlc3NNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBQbHVnaW5Qcm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE1
NkYyODExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBQTU4ODkwMTFFRTcwNDAwMDYxQjg4MiAvKiBOZXRzY2FwZVBsdWdpblN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdpblN0
cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYwMyw2ICsxNjA1LDcgQEAK
IAkJCQlCQ0M0M0FCOTEyN0I5NURDMDAzMTdGMTYgLyogUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgg
Ki8sCiAJCQkJQkMyRDAyMTYxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRp
b25UeXBlLmggKi8sCiAJCQkJMUFBQjRBOEMxMjk2RjBBMjAwMjM5NTJGIC8qIFNhbmRib3hFeHRl
bnNpb24uaCAqLywKKwkJCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3Rh
dGUuaCAqLywKIAkJCQlCQ0JEM0MzQTEyNUJGQTdBMDBEMkMyOUYgLyogU3RyaW5nUGFpclZlY3Rv
ci5oICovLAogCQkJCUJDQjBCMERGMTIzMDVBQjEwMEIxMzQxRSAvKiBVc2VyTWVzc2FnZUNvZGVy
cy5oICovLAogCQkJCTFBMEYyOUM5MTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxl
LmNwcCAqLywKQEAgLTI3NzAsNiArMjc3Myw3IEBACiAJCQkJMUE0QTlGMzMxMkI4NDRFMjAwOEZF
OTg0IC8qIFBsdWdpblF1aXJrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4NThBMjAxMkMwMzU3
QjAwRURFQjJFIC8qIFdlYlJlc291cmNlTG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUFBNDE3Q0IxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkxQUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDc0NTY5KQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgRElTQUJMRV9OT1RfSU1QTEVNRU5URURfV0FSTklO
R1MgMQogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpbmNsdWRlICJTZWxlY3Rpb25T
dGF0ZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCkBAIC0xNzgsNyArMTc5
LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRDbwogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLSNpZiAhUExBVEZPUk0oTUFDKQogdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQogewogICAgIHN0YXRpYyBjb25zdCBTdHJp
bmcgV2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbiA9ICJXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uIjsKQEAgLTE4Nyw4ICsxODcsMTggQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZQogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRD
aGFuZ2VTZWxlY3Rpb24oZnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSwgZnJhbWUtPnNlbGVj
dGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNz
d29yZEZpZWxkKCksIGZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSkpOworICAgIFNl
bGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlOworICAgIHNlbGVjdGlvblN0YXRlLmlzTm9uZSA9
IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCk7CisgICAgc2VsZWN0aW9uU3RhdGUuaXNDb250
ZW50RWRpdGFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCk7Cisg
ICAgc2VsZWN0aW9uU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgPSBmcmFtZS0+c2VsZWN0aW9uKCkt
PmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAgc2VsZWN0aW9uU3RhdGUuaGFzQ29tcG9zaXRpb24g
PSBmcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7CisKKyAgICBXZWJQYWdlOjpnZXRM
b2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2VTdGFydCwgc2VsZWN0
aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZUxlbmd0aCk7CisKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uU3RhdGVDaGFuZ2VkKHNlbGVjdGlvblN0YXRlKSk7
CisKICNpZiBQTEFURk9STShXSU4pCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gZ28g
aW50byB0aGUgc2VsZWN0aW9uIHN0YXRlLgogICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5oYXND
b21wb3NpdGlvbigpIHx8IGZyYW1lLT5lZGl0b3IoKS0+aWdub3JlQ29tcG9zaXRpb25TZWxlY3Rp
b25DaGFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTcsNyArMjA3LDYgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZQogICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRDaGFuZ2VDb21wb3NpdGlvblNlbGVjdGlvbihmcmFtZS0+
ZWRpdG9yKCktPmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHN0YXJ0LCBlbmQpKSk7CiAjZW5kaWYK
IH0KLSNlbmRpZgogICAgIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoKQog
ewpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JD
bGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHJldmlzaW9uIDc0NTY5KQorKysgV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIEBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVk
U3RyaW5nIChXZWJOU0F0dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQogLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCopX2RvY3VtZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50OihET01Eb2N1
bWVudCopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0IHN1
YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7CkBAIC02MiwxOSArNjEsNiBAQCAt
IChXZWJDb3JlOjpBcmNoaXZlUmVzb3VyY2UqKV9jb3JlUmVzb3VyCiBAZW5kCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewotCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbigpCi17Ci0gICAgc3RhdGljIGNvbnN0IFN0cmluZyBXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uTm90aWZpY2F0aW9uID0gIldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24i
OwotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5kaWRDaGFuZ2VTZWxl
Y3Rpb24obV9wYWdlLCBXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uLmltcGwo
KSk7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIHVpbnQ2NF90IGxvY2F0aW9uOwotICAgIHVpbnQ2NF90IGxlbmd0aDsKLSAg
ICBXZWJQYWdlOjpjb252ZXJ0UmFuZ2VUb1BsYXRmb3JtUmFuZ2UoZnJhbWUsIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCk7Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNlbGVjdGlvbkNoYW5n
ZShmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29u
dGVudEVkaXRhYmxlKCksIGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmllbGQoKSwg
ZnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpLCBsb2NhdGlvbiwgbGVuZ3RoKSk7Ci19
CiAgICAgCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2Fy
ZEV2ZW50KiBldmVudCkKIHsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCShyZXZpc2lvbiA3NDU2OSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TdWJzdGl0dXRlRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEl0ZXJh
dG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDxydW50aW1lL0pT
VmFsdWUuaD4KIApAQCAtNjEwLDYgKzYxMSwzNSBAQCBXZWJDb250ZXh0TWVudSogV2ViUGFnZTo6
Y29udGV4dE1lbnUoKQogICAgIHJldHVybiBtX2NvbnRleHRNZW51LmdldCgpOwogfQogCit2b2lk
IFdlYlBhZ2U6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKFJhbmdlKiByYW5nZSwgdWlu
dDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQoreworICAgIGxvY2F0aW9uID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KC0xKTsKKyAgICBsZW5ndGggPSAwOworCisgICAgaWYgKCFyYW5n
ZSB8fCAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVs
ZW1lbnQqIHNlbGVjdGlvblJvb3QgPSByYW5nZS0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNjb3BlID0g
c2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiByYW5nZS0+b3duZXJEb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKTsKKyAgICAKKyAgICAvLyBNb3VzZSBldmVudHMgbWF5IGNhdXNlIFRT
TSB0byBhdHRlbXB0IHRvIGNyZWF0ZSBhbiBOU1JhbmdlIGZvciBhIHBvcnRpb24gb2YgdGhlIHZp
ZXcKKyAgICAvLyB0aGF0IGlzIG5vdCBpbnNpZGUgdGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9u
LiAgVGhlc2UgY2hlY2tzIGVuc3VyZSB3ZSBkb24ndCBwcm9kdWNlCisgICAgLy8gcG90ZW50aWFs
bHkgaW52YWxpZCBkYXRhIHdoZW4gcmVzcG9uZGluZyB0byBzdWNoIHJlcXVlc3RzLgorICAgIGlm
IChyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChy
YW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWluZXIoKS0+
aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8UmFu
Z2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAw
LCByYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIEFT
U0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOworICAgIGxvY2F0aW9u
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOworICAgIAorICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRh
aW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIGVjKTsKKyAgICBBU1NFUlQodGVzdFJhbmdlLT5z
dGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKKyAgICBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSkgLSBsb2NhdGlvbjsKK30KKwogLy8gRXZlbnRzIAog
CiBzdGF0aWMgY29uc3QgV2ViRXZlbnQqIGdfY3VycmVudEV2ZW50ID0gMDsKSW5kZXg6IFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDc0NTY5KQorKysgV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTQgKzI0
NCwxNSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFNhbmRib3hFeHRlbnNpb25UcmFja2VyJiBz
YW5kYm94RXh0ZW5zaW9uVHJhY2tlcigpIHsgcmV0dXJuIG1fc2FuZGJveEV4dGVuc2lvblRyYWNr
ZXI7IH0KLSAgICAKKworICAgIHN0YXRpYyB2b2lkIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJh
bmdlKFdlYkNvcmU6OlJhbmdlKiwgdWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3Ro
KTsKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0VG9Q
bHVnaW4odWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgdGV4dElucHV0KTsKIAogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxv
Y2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKICAgICB2b2lkIGNoYXJhY3RlckluZGV4Rm9yUG9p
bnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90JiByZXN1bHQpOwogICAg
IHZvaWQgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2
NF90IGxlbmd0aCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0UmVjdCk7Ci0gICAgc3RhdGljIHZv
aWQgY29udmVydFJhbmdlVG9QbGF0Zm9ybVJhbmdlKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgV2Vi
Q29yZTo6UmFuZ2UgKnJhbmdlLCB1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgp
OwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0
IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcpOwogICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29u
c3QgV1RGOjpTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBjb25zdCBXVEY6OlZlY3RvcjxXZWJD
b3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIHVpbnQ2NF90IGN1cnNvclBv
c2l0aW9uKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCShyZXZpc2lvbiA3NDU2OSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMzQgKzEyMyw2IEBAIGJvb2wg
V2ViUGFnZTo6aW50ZXJjZXB0RWRpdGluZ0tleWJvYXJkRXYKICAgICByZXR1cm4gZXZlbnRXYXNI
YW5kbGVkOwogfQogCi12b2lkIFdlYlBhZ2U6OmNvbnZlcnRSYW5nZVRvUGxhdGZvcm1SYW5nZShX
ZWJDb3JlOjpGcmFtZSogZnJhbWUsIFdlYkNvcmU6OlJhbmdlICpyYW5nZSwgdWludDY0X3QmIGxv
Y2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQotewotICAgIGxvY2F0aW9uID0gTlNOb3RGb3VuZDsK
LSAgICBsZW5ndGggPSAwOwotICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5zdGFydENvbnRhaW5l
cigpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEVsZW1lbnQqIHNlbGVjdGlvblJv
b3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBFbGVt
ZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZnJhbWUtPmRvY3Vt
ZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIAotICAgIC8vIE1vdXNlIGV2ZW50cyBtYXkg
Y2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9yIGEgcG9ydGlvbiBv
ZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3VycmVudCBlZGl0YWJs
ZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKLSAgICAvLyBw
b3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1Y2ggcmVxdWVzdHMu
Ci0gICAgaWYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRh
aW5lcigpLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIAotICAgIFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+
ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3Rh
cnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBz
Y29wZSk7Ci0gICAgbG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5n
ZS5nZXQoKSk7Ci0gICAgICAgICAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIHRlc3RS
YW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBl
Yyk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0g
ICAgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpIC0g
bG9jYXRpb247Ci19Ci0KIHZvaWQgV2ViUGFnZTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdp
bih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiB0ZXh0SW5wdXQpCiB7CiAgICAgZm9yIChIYXNoU2V0PFBsdWdpblZpZXcqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpblZpZXdzLmJlZ2luKCksIGVuZCA9IG1fcGx1Z2luVmlld3MuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTY3LDcgKzEzOSw3IEBAIHZvaWQgV2ViUGFnZTo6
Z2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGwKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgY29udmVydFJhbmdlVG9QbGF0Zm9ybVJhbmdlKGZyYW1lLCBmcmFtZS0+
ZWRpdG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCk7Cisg
ICAgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoZnJhbWUtPmVkaXRvcigpLT5jb21wb3Np
dGlvblJhbmdlKCkuZ2V0KCksIGxvY2F0aW9uLCBsZW5ndGgpOwogfQogCiBzdGF0aWMgUmFuZ2Ug
KmNoYXJhY3RlclJhbmdlQXRQb2ludChGcmFtZSogZnJhbWUsIGNvbnN0IEludFBvaW50IHBvaW50
KQpAQCAtMjA2LDkgKzE3OCwxMSBAQCB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9p
bnQoSW50CiAgICAgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgOiBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICAKICAgICBSYW5nZSAqcmFu
Z2UgPSBjaGFyYWN0ZXJSYW5nZUF0UG9pbnQoZnJhbWUsIHJlc3VsdC5wb2ludCgpKTsKKyAgICBp
ZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisKICAgICB1aW50NjRfdCBsZW5ndGg7Ci0gICAg
aWYgKHJhbmdlKQotICAgICAgICBjb252ZXJ0UmFuZ2VUb1BsYXRmb3JtUmFuZ2UoZnJhbWUsIHJh
bmdlLCBpbmRleCwgbGVuZ3RoKTsKKyAgICBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShy
YW5nZSwgaW5kZXgsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjb252
ZXJ0VG9SYW5nZShGcmFtZSogZnJhbWUsIE5TUmFuZ2UgbnNyYW5nZSkKSW5kZXg6IFdlYktpdDIv
d2luL1dlYktpdDIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2luL1dlYktpdDIudmNw
cm9qCShyZXZpc2lvbiA3NDU2OSkKKysrIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODMsNiArNDgzLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxTZWxlY3Rpb25TdGF0ZS5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcU3RyaW5n
UGFpclZlY3Rvci5oIgogCQkJCT4KIAkJCTwvRmlsZT4K
</data>
<flag name="review"
          id="68454"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>