<?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>81419</bug_id>
          
          <creation_ts>2012-03-16 15:23:05 -0700</creation_ts>
          <short_desc>WebKitTestRunner needs to protect the user&apos;s pasteboard contents while running</short_desc>
          <delta_ts>2013-08-26 16:39:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>120329</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>581025</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-03-16 15:23:05 -0700</bug_when>
    <thetext>WebKitTestRunner needs to protect the user&apos;s pasteboard contents while running

DumpRenderTree has code to do this.  It would be extremely polite if WKTR did it also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581027</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-03-16 15:24:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/11066794&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921148</commentid>
    <comment_count>2</comment_count>
      <attachid>209674</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 13:52:24 -0700</bug_when>
    <thetext>Created attachment 209674
proposed fix

This makes it nearly impossible to run the whole WK2 tests suite locally, and almost certainly introduces a lot of flakiness on bots (as tests interfere with each other). Crazy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921151</commentid>
    <comment_count>3</comment_count>
      <attachid>209674</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-26 14:07:38 -0700</bug_when>
    <thetext>Comment on attachment 209674
proposed fix

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

&gt; Tools/WebKitTestRunner/mac/PoseAsClass.mm:34
&gt; +    unsigned int imposterMethodCount;

s/unsigned int/unsigned/

&gt; Tools/WebKitTestRunner/mac/WebKitTestRunnerPasteboard.h:4
&gt; + * Copyright (C) 2005, 2006, 2007, 2013 Apple, Inc.  All rights reserved.
&gt; + * Copyright (C) 2007 Graham Dennis (graham.dennis@gmail.com)
&gt; + * Copyright (C) 2007 Eric Seidel &lt;eric@webkit.org&gt;

Just Apple, these other people didn’t write this header.

&gt; Tools/WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:4
&gt; + * Copyright (C) 2005, 2006, 2007, 2013 Apple, Inc.  All rights reserved.
&gt; + * Copyright (C) 2007 Graham Dennis (graham.dennis@gmail.com)
&gt; + * Copyright (C) 2007 Eric Seidel &lt;eric@webkit.org&gt;

What did these people write of this file?

&gt; Tools/WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:84
&gt; ++ (id)alloc
&gt; +{
&gt; +    return NSAllocateObject(self, 0, 0);
&gt; +}

Why is this needed?

&gt; Tools/WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:92
&gt; +    typesArray = [[NSMutableArray alloc] init];
&gt; +    typesSet = [[NSMutableSet alloc] init];
&gt; +    dataByType = [[NSMutableDictionary alloc] init];
&gt; +    pasteboardName = [name copy];
&gt; +    return self;

Why no [super init] here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921158</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 14:23:00 -0700</bug_when>
    <thetext>&gt; &gt; Tools/WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:4
&gt; &gt; + * Copyright (C) 2005, 2006, 2007, 2013 Apple, Inc.  All rights reserved.
&gt; &gt; + * Copyright (C) 2007 Graham Dennis (graham.dennis@gmail.com)
&gt; &gt; + * Copyright (C) 2007 Eric Seidel &lt;eric@webkit.org&gt;
&gt; 
&gt; What did these people write of this file?

Graham Dennis wrote code for exposing declareTypes to JavaScript through WebScriptObject. I will remove the code, and his copyright.

Eric extracted DumpRenderTreePasteboard code to a separate file. Comparing the code, it doesn&apos;t seem like any substantial changes were made in the process, I&apos;ll remove his copyright, too.

&gt; &gt; Tools/WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:84
&gt; &gt; ++ (id)alloc
&gt; &gt; +{
&gt; &gt; +    return NSAllocateObject(self, 0, 0);
&gt; &gt; +}
&gt; 
&gt; Why is this needed?

I do not know. In r17480, you wrote &quot;Added, so we don&apos;t have to call NSAllocateObject explicitly elsewhere.&quot;

&gt; Why no [super init] here?

Hmm. I guess I&apos;ll post a separate patch to add it to both DRT and WTR at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921164</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 14:34:02 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r154640&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921168</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 14:45:54 -0700</bug_when>
    <thetext>&gt; &gt; ++ (id)alloc
&gt; &gt; +{
&gt; &gt; +    return NSAllocateObject(self, 0, 0);
&gt; &gt; +}
&gt; 
&gt; Why is this needed?

Turns out that NSPasteboard overrides +alloc and calls doesNotRecognizeSelector: there, essentially raising an exception.

I&apos;m not sure if calling -init on such a class makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921208</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-26 16:03:28 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 120329</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921226</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 16:39:23 -0700</bug_when>
    <thetext>Re-landed with small fixes in &lt;http://trac.webkit.org/r154652&gt;:

- Added [super init] to match DRT code, which was just recently fixed (this doesn&apos;t observably help anything though).
- Added an override for _updateTypeCacheIfNeeded, which crashes during dragging (this doesn&apos;t seem to affect WK1 because dragging if fake, apparently).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209674</attachid>
            <date>2013-08-26 13:52:24 -0700</date>
            <delta_ts>2013-08-26 14:07:38 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>DRTPasteboard.txt</filename>
            <type>text/plain</type>
            <size>20592</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1NDYzNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDEzLTA4LTI2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgorCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgbmVlZHMgdG8gcHJvdGVjdCB0aGUgdXNlcidz
IHBhc3RlYm9hcmQgY29udGVudHMgd2hpbGUgcnVubmluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzExMDY2Nzk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vc3RseSBhIGNvcHkvcGFzdGUgb2YgRFJUIGNvZGUuCisKKyAgICAgICAgVGVzdGVkIG1h
bnVhbGx5IGJ5IG1ha2luZyBzdXJlIHRoYXQgZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktaW1hZ2Ut
d2l0aC1hbHQtdGV4dC5odG1sCisgICAgICAgIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggbXkgY2xp
cGJvYXJkIHdoaWxlIGJlaW5nIHJ1biBpbiBhIGxvb3AuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9Qb3NlQXNDbGFzcy5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL21hYy9Qb3NlQXNDbGFzcy5tbTogQWRkZWQuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L21hYy9XZWJLaXRUZXN0UnVubmVyUGFzdGVib2FyZC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVubmVyUGFzdGVib2FyZC5tbTogQWRkZWQuCisK
IDIwMTMtMDgtMjYgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtHVEtdIEluY2x1ZGUgbW9zdCBvZiB0aGUgV2ViS2l0MiB1bml0IHRlc3RzIGludG8gdGhl
IGJ1aWxkIGFuZCB0ZXN0aW5nCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRl
c3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTU0NjA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0
UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYg
Kzg2LDggQEAKIAkJQkNEQTJCOUExMTkxMDUxRjAwQzNCQzQ3IC8qIEphdmFTY3JpcHRDb3JlLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDREEyQjk5MTE5MTA1MUYwMEMzQkM0NyAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87
IH07CiAJCUMwQ0U3MjBCMTI0N0M5MzMwMEJDMEVDNCAvKiBUZXN0UnVubmVyTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBDRTcyMEExMjQ3Qzkz
MzAwQkMwRUM0IC8qIFRlc3RSdW5uZXJNYWMubW0gKi87IH07CiAJCUUxQkE2NzFFMTc0MkRBNkEw
MEMyMDI1MSAvKiBDYXJib24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCQTY3MUQxNzQyREE1QTAwQzIwMjUxIC8qIENhcmJvbi5m
cmFtZXdvcmsgKi87IH07CisJCUUxQzY0MkMzMTdDQkNDNzMwMEQ2NkEzQyAvKiBQb3NlQXNDbGFz
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzY0
MkMxMTdDQkNDNzMwMEQ2NkEzQyAvKiBQb3NlQXNDbGFzcy5tbSAqLzsgfTsKKwkJRTFDNjQyQzYx
N0NCQ0Q0QzAwRDY2QTNDIC8qIFdlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDNjQyQzQxN0NCQ0Q0QzAw
RDY2QTNDIC8qIFdlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tICovOyB9OwogLyogRW5kIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBz
ZWN0aW9uICovCkBAIC0yMjAsNiArMjIyLDEwIEBACiAJCUJDREEyQjk5MTE5MTA1MUYwMEMzQkM0
NyAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9IEphdmFTY3Jp
cHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
QzBDRTcyMEExMjQ3QzkzMzAwQkMwRUM0IC8qIFRlc3RSdW5uZXJNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUZXN0UnVubmVyTWFjLm1tOyBwYXRoID0gbWFj
L1Rlc3RSdW5uZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQkE2NzFE
MTc0MkRBNUEwMEMyMDI1MSAvKiBDYXJib24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBD
YXJib24uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJib24u
ZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJRTFDNjQyQzExN0NCQ0M3MzAw
RDY2QTNDIC8qIFBvc2VBc0NsYXNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUG9zZUFzQ2xhc3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
QzY0MkMyMTdDQkNDNzMwMEQ2NkEzQyAvKiBQb3NlQXNDbGFzcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQb3NlQXNDbGFzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMUM2NDJDNDE3Q0JDRDRDMDBENjZBM0MgLyogV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9h
cmQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJLaXRUZXN0
UnVubmVyUGFzdGVib2FyZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDNjQy
QzUxN0NCQ0Q0QzAwRDY2QTNDIC8qIFdlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0
aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAg
LTQxNiw3ICs0MjIsMTEgQEAKIAkJCQk1NjcwQjgyNzEzODZGQ0E1MDAyRUIzNTUgLyogRXZlbnRT
ZW5kZXJQcm94eS5tbSAqLywKIAkJCQlCQzc5MzNGRjExOEY3Qzg0MDA1RUE4RTIgLyogbWFpbi5t
bSAqLywKIAkJCQlCQzc5MzRFNzExOTA2ODQ2MDA1RUE4RTIgLyogUGxhdGZvcm1XZWJWaWV3TWFj
Lm1tICovLAorCQkJCUUxQzY0MkMxMTdDQkNDNzMwMEQ2NkEzQyAvKiBQb3NlQXNDbGFzcy5tbSAq
LywKKwkJCQlFMUM2NDJDMjE3Q0JDQzczMDBENjZBM0MgLyogUG9zZUFzQ2xhc3MuaCAqLywKIAkJ
CQlCQzhDNzk1QjExRDI3ODVEMDA0NTM1QTEgLyogVGVzdENvbnRyb2xsZXJNYWMubW0gKi8sCisJ
CQkJRTFDNjQyQzQxN0NCQ0Q0QzAwRDY2QTNDIC8qIFdlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJk
Lm1tICovLAorCQkJCUUxQzY0MkM1MTdDQkNENEMwMEQ2NkEzQyAvKiBXZWJLaXRUZXN0UnVubmVy
UGFzdGVib2FyZC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtNjAyLDEwICs2MTIsMTIgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk1MzIyRkI0MzEzRkRBMENEMDA0MUFCQ0MgLyog
Q3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQzY0MkMzMTdD
QkNDNzMwMEQ2NkEzQyAvKiBQb3NlQXNDbGFzcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU2NzBC
ODI4MTM4NkZDQTUwMDJFQjM1NSAvKiBFdmVudFNlbmRlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjZENzU4RTcxNjBCRUNERDAwMjY4NDcyIC8qIEdlb2xvY2F0aW9uUHJvdmlkZXJNb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzkzNDAwMTE4RjdDODQwMDVFQThFMiAvKiBtYWlu
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMyMkZCNDYxM0ZEQTBFQTAwNDFBQkNDIC8qIFBpeGVs
RHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDNjQyQzYxN0NCQ0Q0QzAwRDY2
QTNDIC8qIFdlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM3OTM0RTgxMTkwNjg0NjAwNUVBOEUyIC8qIFBsYXRmb3JtV2ViVmlld01hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDNzkzNDMxMTE4RjdGMTkwMDVFQThFMiAvKiBUZXN0Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzhDNzk1QzExRDI3ODVEMDA0NTM1QTEgLyogVGVzdENv
bnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL1Bvc2VBc0NsYXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvUG9zZUFzQ2xhc3MuaAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL1Bvc2VBc0NsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUG9zZUFzQ2xhc3NfaAorI2RlZmluZSBQb3NlQXNDbGFzc19oCisK
K3ZvaWQgcG9zZUFzQ2xhc3MoY29uc3QgY2hhciogaW1wb3N0ZXIsIGNvbnN0IGNoYXIqIG9yaWdp
bmFsKTsKKworI2VuZGlmIC8vIFBvc2VBc0NsYXNzX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Bvc2VBc0NsYXNzLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUG9zZUFzQ2xhc3Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUG9zZUFzQ2xhc3Mu
bW0JKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9Qb3NlQXNDbGFz
cy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvc2VBc0NsYXNzLmgiCisKKyNpbXBvcnQgPG9iamMv
cnVudGltZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKworc3RhdGljIHZvaWQgc3dp
enpsZUFsbE1ldGhvZHMoQ2xhc3MgaW1wb3N0ZXIsIENsYXNzIG9yaWdpbmFsKQoreworICAgIHVu
c2lnbmVkIGludCBpbXBvc3Rlck1ldGhvZENvdW50OworICAgIE1ldGhvZCogaW1wb3N0ZXJNZXRo
b2RzID0gY2xhc3NfY29weU1ldGhvZExpc3QoaW1wb3N0ZXIsICZpbXBvc3Rlck1ldGhvZENvdW50
KTsKKworICAgIHVuc2lnbmVkIGludCBvcmlnaW5hbE1ldGhvZENvdW50OworICAgIE1ldGhvZCog
b3JpZ2luYWxNZXRob2RzID0gY2xhc3NfY29weU1ldGhvZExpc3Qob3JpZ2luYWwsICZvcmlnaW5h
bE1ldGhvZENvdW50KTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgaW1wb3N0
ZXJNZXRob2RDb3VudDsgaSsrKSB7CisgICAgICAgIFNFTCBpbXBvc3Rlck1ldGhvZE5hbWUgPSBt
ZXRob2RfZ2V0TmFtZShpbXBvc3Rlck1ldGhvZHNbaV0pOworCisgICAgICAgIC8vIEF0dGVtcHQg
dG8gYWRkIHRoZSBtZXRob2QgdG8gdGhlIG9yaWdpbmFsIGNsYXNzLiAgSWYgaXQgZmFpbHMsIHRo
ZSBtZXRob2QgYWxyZWFkeSBleGlzdHMgYW5kIHdlIHNob3VsZAorICAgICAgICAvLyBpbnN0ZWFk
IGV4Y2hhbmdlIHRoZSBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgIGlmIChjbGFzc19hZGRNZXRo
b2Qob3JpZ2luYWwsIGltcG9zdGVyTWV0aG9kTmFtZSwgbWV0aG9kX2dldEltcGxlbWVudGF0aW9u
KGltcG9zdGVyTWV0aG9kc1tpXSksIG1ldGhvZF9nZXRUeXBlRW5jb2RpbmcoaW1wb3N0ZXJNZXRo
b2RzW2ldKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB1bnNpZ25lZCBpbnQg
aiA9IDA7CisgICAgICAgIGZvciAoOyBqIDwgb3JpZ2luYWxNZXRob2RDb3VudDsgaisrKSB7Cisg
ICAgICAgICAgICBTRUwgb3JpZ2luYWxNZXRob2ROYW1lID0gbWV0aG9kX2dldE5hbWUob3JpZ2lu
YWxNZXRob2RzW2pdKTsKKyAgICAgICAgICAgIGlmIChzZWxfaXNFcXVhbChpbXBvc3Rlck1ldGhv
ZE5hbWUsIG9yaWdpbmFsTWV0aG9kTmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBJZiBjbGFzc19hZGRNZXRob2QgZmFpbGVkIGFib3ZlIHRoZW4g
dGhlIG1ldGhvZCBtdXN0IGV4aXN0IG9uIHRoZSBvcmlnaW5hbCBjbGFzcy4KKyAgICAgICAgQVNT
RVJUKGogPCBvcmlnaW5hbE1ldGhvZENvdW50KTsKKyAgICAgICAgbWV0aG9kX2V4Y2hhbmdlSW1w
bGVtZW50YXRpb25zKGltcG9zdGVyTWV0aG9kc1tpXSwgb3JpZ2luYWxNZXRob2RzW2pdKTsKKyAg
ICB9CisKKyAgICBmcmVlKGltcG9zdGVyTWV0aG9kcyk7CisgICAgZnJlZShvcmlnaW5hbE1ldGhv
ZHMpOworfQorCit2b2lkIHBvc2VBc0NsYXNzKGNvbnN0IGNoYXIqIGltcG9zdGVyLCBjb25zdCBj
aGFyKiBvcmlnaW5hbCkKK3sKKyAgICBDbGFzcyBpbXBvc3RlckNsYXNzID0gb2JqY19nZXRDbGFz
cyhpbXBvc3Rlcik7CisgICAgQ2xhc3Mgb3JpZ2luYWxDbGFzcyA9IG9iamNfZ2V0Q2xhc3Mob3Jp
Z2luYWwpOworCisgICAgLy8gU3dpenpsZSBpbnN0YW5jZSBtZXRob2RzCisgICAgc3dpenpsZUFs
bE1ldGhvZHMoaW1wb3N0ZXJDbGFzcywgb3JpZ2luYWxDbGFzcyk7CisgICAgLy8gYW5kIHRoZW4g
Y2xhc3MgbWV0aG9kcworICAgIHN3aXp6bGVBbGxNZXRob2RzKG9iamVjdF9nZXRDbGFzcyhpbXBv
c3RlckNsYXNzKSwgb2JqZWN0X2dldENsYXNzKG9yaWdpbmFsQ2xhc3MpKTsKK30KClByb3BlcnR5
IGNoYW5nZXMgb246IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Bvc2VBc0NsYXNzLm1tCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworTEYKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMv
VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDE1NDYwOSkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw4IEBACiAjaW1wb3J0ICJUZXN0Q29udHJvbGxlci5oIgogCiAjaW1wb3J0ICJQ
bGF0Zm9ybVdlYlZpZXcuaCIKKyNpbXBvcnQgIlBvc2VBc0NsYXNzLmgiCisjaW1wb3J0ICJXZWJL
aXRUZXN0UnVubmVyUGFzdGVib2FyZC5oIgogI2ltcG9ydCA8V2ViS2l0Mi9XS1N0cmluZ0NGLmg+
CiAjaW1wb3J0IDxtYWNoLW8vZHlsZC5oPiAKIApAQCAtMzgsMTAgKzQwLDEyIEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUluaXRpYWxpemUoKQogeworICAgIHBvc2VBc0NsYXNzKCJXZWJLaXRUZXN0UnVubmVyUGFzdGVi
b2FyZCIsICJOU1Bhc3RlYm9hcmQiKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cm1EZXN0cm95KCkKIHsKKyAgICBbV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9hcmQgcmVsZWFzZUxv
Y2FsUGFzdGVib2FyZHNdOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplSW5q
ZWN0ZWRCdW5kbGVQYXRoKCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktp
dFRlc3RSdW5uZXJQYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9hcmQuaAkocmV2aXNpb24gMCkKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNywgMjAxMyBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkX2gKKyNkZWZpbmUgV2Vi
S2l0VGVzdFJ1bm5lclBhc3RlYm9hcmRfaAorCisjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CisK
K0BpbnRlcmZhY2UgV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9hcmQgOiBOU1Bhc3RlYm9hcmQKKysg
KHZvaWQpcmVsZWFzZUxvY2FsUGFzdGVib2FyZHM7CitAZW5kCisKKyNlbmRpZiAvLyBXZWJLaXRU
ZXN0UnVubmVyUGFzdGVib2FyZF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVubmVyUGFzdGVib2FyZC5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRl
c3RSdW5uZXJQYXN0ZWJvYXJkLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tCShyZXZpc2lvbiAwKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9hcmQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMTMgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20p
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RSdW5uZXJQ
YXN0ZWJvYXJkLmgiCisKK0BpbnRlcmZhY2UgTG9jYWxQYXN0ZWJvYXJkIDogTlNQYXN0ZWJvYXJk
Cit7CisgICAgTlNNdXRhYmxlQXJyYXkgKnR5cGVzQXJyYXk7CisgICAgTlNNdXRhYmxlU2V0ICp0
eXBlc1NldDsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkYXRhQnlUeXBlOworICAgIE5TSW50
ZWdlciBjaGFuZ2VDb3VudDsKKyAgICBOU1N0cmluZyAqcGFzdGVib2FyZE5hbWU7Cit9CisKKy0o
aWQpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CitAZW5kCisKK3N0YXRpYyBOU011dGFi
bGVEaWN0aW9uYXJ5ICpsb2NhbFBhc3RlYm9hcmRzOworCitAaW1wbGVtZW50YXRpb24gV2ViS2l0
VGVzdFJ1bm5lclBhc3RlYm9hcmQKKworLy8gUmV0dXJuIGEgbG9jYWwgcGFzdGVib2FyZCBzbyB3
ZSBkb24ndCBkaXN0dXJiIHRoZSByZWFsIHBhc3RlYm9hcmRzIHdoZW4gcnVubmluZyB0ZXN0cy4K
KysgKE5TUGFzdGVib2FyZCAqKV9wYXN0ZWJvYXJkV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQor
eworICAgIHN0YXRpYyBpbnQgbnVtYmVyID0gMDsKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIG5h
bWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkxvY2FsUGFzdGVib2FyZCVkIiwgKytu
dW1iZXJdOworICAgIGlmICghbG9jYWxQYXN0ZWJvYXJkcykKKyAgICAgICAgbG9jYWxQYXN0ZWJv
YXJkcyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAgTG9jYWxQYXN0
ZWJvYXJkICpwYXN0ZWJvYXJkID0gW2xvY2FsUGFzdGVib2FyZHMgb2JqZWN0Rm9yS2V5Om5hbWVd
OworICAgIGlmIChwYXN0ZWJvYXJkKQorICAgICAgICByZXR1cm4gcGFzdGVib2FyZDsKKyAgICBw
YXN0ZWJvYXJkID0gW1tMb2NhbFBhc3RlYm9hcmQgYWxsb2NdIGluaXRXaXRoTmFtZTpuYW1lXTsK
KyAgICBbbG9jYWxQYXN0ZWJvYXJkcyBzZXRPYmplY3Q6cGFzdGVib2FyZCBmb3JLZXk6bmFtZV07
CisgICAgW3Bhc3RlYm9hcmQgcmVsZWFzZV07CisgICAgcmV0dXJuIHBhc3RlYm9hcmQ7Cit9CisK
KysgKHZvaWQpcmVsZWFzZUxvY2FsUGFzdGVib2FyZHMKK3sKKyAgICBbbG9jYWxQYXN0ZWJvYXJk
cyByZWxlYXNlXTsKKyAgICBsb2NhbFBhc3RlYm9hcmRzID0gbmlsOworfQorCisvLyBDb252ZW5p
ZW5jZSBtZXRob2QgZm9yIEpTIHNvIHRoYXQgaXQgZG9lc24ndCBoYXZlIHRvIHRyeSBhbmQgY3Jl
YXRlIGEgTlNBcnJheSBvbiB0aGUgb2JqYyBzaWRlIGluc3RlYWQKKy8vIG9mIHRoZSB1c3VhbCBX
ZWJTY3JpcHRPYmplY3QgdGhhdCBpcyBwYXNzZWQgYXJvdW5kCistIChOU0ludGVnZXIpZGVjbGFy
ZVR5cGU6KE5TU3RyaW5nICopdHlwZSBvd25lcjooaWQpbmV3T3duZXIKK3sKKyAgICByZXR1cm4g
W3NlbGYgZGVjbGFyZVR5cGVzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDp0eXBlXSBvd25lcjpu
ZXdPd25lcl07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIExvY2FsUGFzdGVib2FyZAor
CisrIChpZClhbGxvYworeworICAgIHJldHVybiBOU0FsbG9jYXRlT2JqZWN0KHNlbGYsIDAsIDAp
OworfQorCistIChpZClpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIHR5cGVz
QXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICB0eXBlc1NldCA9IFtb
TlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0XTsKKyAgICBkYXRhQnlUeXBlID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBwYXN0ZWJvYXJkTmFtZSA9IFtuYW1lIGNvcHld
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbdHlwZXNB
cnJheSByZWxlYXNlXTsKKyAgICBbdHlwZXNTZXQgcmVsZWFzZV07CisgICAgW2RhdGFCeVR5cGUg
cmVsZWFzZV07CisgICAgW3Bhc3RlYm9hcmROYW1lIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworLSAoTlNTdHJpbmcgKiluYW1lCit7CisgICAgcmV0dXJuIHBhc3RlYm9hcmRO
YW1lOworfQorCistICh2b2lkKXJlbGVhc2VHbG9iYWxseQoreworfQorCistIChOU0ludGVnZXIp
ZGVjbGFyZVR5cGVzOihOU0FycmF5ICopbmV3VHlwZXMgb3duZXI6KGlkKW5ld093bmVyCit7Cisg
ICAgW3R5cGVzQXJyYXkgcmVtb3ZlQWxsT2JqZWN0c107CisgICAgW3R5cGVzU2V0IHJlbW92ZUFs
bE9iamVjdHNdOworICAgIFtkYXRhQnlUeXBlIHJlbW92ZUFsbE9iamVjdHNdOworICAgIHJldHVy
biBbc2VsZiBhZGRUeXBlczpuZXdUeXBlcyBvd25lcjpuZXdPd25lcl07Cit9CisKKy0gKE5TSW50
ZWdlcilhZGRUeXBlczooTlNBcnJheSAqKW5ld1R5cGVzIG93bmVyOihpZCluZXdPd25lcgorewor
ICAgIHVuc2lnbmVkIGNvdW50ID0gW25ld1R5cGVzIGNvdW50XTsKKyAgICB1bnNpZ25lZCBpOwor
ICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TU3RyaW5nICp0eXBl
ID0gW25ld1R5cGVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIE5TU3RyaW5nICpzZXRUeXBl
ID0gW3R5cGVzU2V0IG1lbWJlcjp0eXBlXTsKKyAgICAgICAgaWYgKCFzZXRUeXBlKSB7CisgICAg
ICAgICAgICBzZXRUeXBlID0gW3R5cGUgY29weV07CisgICAgICAgICAgICBbdHlwZXNBcnJheSBh
ZGRPYmplY3Q6c2V0VHlwZV07CisgICAgICAgICAgICBbdHlwZXNTZXQgYWRkT2JqZWN0OnNldFR5
cGVdOworICAgICAgICAgICAgW3NldFR5cGUgcmVsZWFzZV07CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG5ld093bmVyICYmIFtuZXdPd25lciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBh
c3RlYm9hcmQ6cHJvdmlkZURhdGFGb3JUeXBlOildKQorICAgICAgICAgICAgW25ld093bmVyIHBh
c3RlYm9hcmQ6c2VsZiBwcm92aWRlRGF0YUZvclR5cGU6c2V0VHlwZV07CisgICAgfQorICAgIHJl
dHVybiArK2NoYW5nZUNvdW50OworfQorCistIChOU0ludGVnZXIpY2hhbmdlQ291bnQKK3sKKyAg
ICByZXR1cm4gY2hhbmdlQ291bnQ7Cit9CisKKy0gKE5TQXJyYXkgKil0eXBlcworeworICAgIHJl
dHVybiB0eXBlc0FycmF5OworfQorCistIChOU1N0cmluZyAqKWF2YWlsYWJsZVR5cGVGcm9tQXJy
YXk6KE5TQXJyYXkgKil0eXBlcworeworICAgIHVuc2lnbmVkIGNvdW50ID0gW3R5cGVzIGNvdW50
XTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgIE5TU3RyaW5nICp0eXBlID0gW3R5cGVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAg
IE5TU3RyaW5nICpzZXRUeXBlID0gW3R5cGVzU2V0IG1lbWJlcjp0eXBlXTsKKyAgICAgICAgaWYg
KHNldFR5cGUpCisgICAgICAgICAgICByZXR1cm4gc2V0VHlwZTsKKyAgICB9CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAoQk9PTClzZXREYXRhOihOU0RhdGEgKilkYXRhIGZvclR5cGU6KE5TU3Ry
aW5nICopZGF0YVR5cGUKK3sKKyAgICBpZiAoZGF0YSA9PSBuaWwpCisgICAgICAgIGRhdGEgPSBb
TlNEYXRhIGRhdGFdOworICAgIGlmICghW3R5cGVzU2V0IGNvbnRhaW5zT2JqZWN0OmRhdGFUeXBl
XSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIFtkYXRhQnlUeXBlIHNldE9iamVjdDpkYXRhIGZv
cktleTpkYXRhVHlwZV07CisgICAgKytjaGFuZ2VDb3VudDsKKyAgICByZXR1cm4gWUVTOworfQor
CistIChOU0RhdGEgKilkYXRhRm9yVHlwZTooTlNTdHJpbmcgKilkYXRhVHlwZQoreworICAgIHJl
dHVybiBbZGF0YUJ5VHlwZSBvYmplY3RGb3JLZXk6ZGF0YVR5cGVdOworfQorCistIChCT09MKXNl
dFByb3BlcnR5TGlzdDooaWQpcHJvcGVydHlMaXN0IGZvclR5cGU6KE5TU3RyaW5nICopZGF0YVR5
cGUKK3sKKyAgICBDRkRhdGFSZWYgZGF0YSA9IDA7CisgICAgaWYgKHByb3BlcnR5TGlzdCkKKyAg
ICAgICAgZGF0YSA9IENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSgwLCBwcm9wZXJ0eUxpc3Qp
OworICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgc2V0RGF0YTooTlNEYXRhICopZGF0YSBmb3JUeXBl
OmRhdGFUeXBlXTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgQ0ZSZWxlYXNlKGRhdGEpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy0gKEJPT0wpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyBmb3JUeXBlOihOU1N0cmluZyAqKWRhdGFUeXBlCit7CisgICAgQ0ZEYXRhUmVmIGRhdGEgPSAw
OworICAgIGlmIChzdHJpbmcpIHsKKyAgICAgICAgaWYgKFtzdHJpbmcgbGVuZ3RoXSA9PSAwKQor
ICAgICAgICAgICAgZGF0YSA9IENGRGF0YUNyZWF0ZSgwLCAwLCAwKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZGF0YSA9IENGU3RyaW5nQ3JlYXRlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbigw
LCAoQ0ZTdHJpbmdSZWYpc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIDApOworICAgIH0K
KyAgICBCT09MIHJlc3VsdCA9IFtzZWxmIHNldERhdGE6KE5TRGF0YSAqKWRhdGEgZm9yVHlwZTpk
YXRhVHlwZV07CisgICAgaWYgKGRhdGEpCisgICAgICAgIENGUmVsZWFzZShkYXRhKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitAZW5kCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVubmVyUGFzdGVib2FyZC5tbQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK0xGClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkK
</data>
<flag name="review"
          id="231723"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>