<?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>148719</bug_id>
          
          <creation_ts>2015-09-02 12:51:23 -0700</creation_ts>
          <short_desc>Test loading from the network in TestWebKitAPI</short_desc>
          <delta_ts>2015-12-09 11:23:12 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>ap</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1122872</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-09-02 12:51:23 -0700</bug_when>
    <thetext>TestWebKitAPI doesn&apos;t successfully use the network.  I wrote a little socket server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122874</commentid>
    <comment_count>1</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-09-02 12:56:03 -0700</bug_when>
    <thetext>rdar://problem/22543960</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122875</commentid>
    <comment_count>2</comment_count>
      <attachid>260428</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-09-02 12:56:50 -0700</bug_when>
    <thetext>Created attachment 260428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122997</commentid>
    <comment_count>3</comment_count>
      <attachid>260428</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-09-02 18:23:12 -0700</bug_when>
    <thetext>Comment on attachment 260428
Patch

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

&gt; Tools/ChangeLog:3
&gt; +        Test loading from the network in TestWebKitAPI.

You should discuss this with Sam, Alexey, and Brady and make sure we actually want it. But, it seems like it might (eventually) make it possible to test things that we previously couldn&apos;t.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NetworkLoading.mm:55
&gt; +    TCPServer server(&quot;HTTP/1.1 200 OK\r\n\r\n&lt;html&gt;&lt;head&gt;&lt;title&gt;TestTitle&lt;/title&gt;&lt;/head&gt;&lt;body&gt;TestBody&lt;/body&gt;&lt;/html&gt;&quot;);

Please consider factoring the 200 header into something vended by TCPServer because it looks ugly.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NetworkLoading.mm:59
&gt; +    urlBuilder.append(&quot;http://127.0.0.1:&quot;);

I think the operators work

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NetworkLoading.mm:64
&gt; +    RetainPtr&lt;WebView&gt; webView = adoptNS([[WebView alloc] initWithFrame:NSMakeRect(0, 0, 120, 200) frameName:nil groupName:nil]);

Can you/should you use PlatformWebView? Otherwise, do you want to be using WK2?

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NetworkLoading.mm:67
&gt; +    [[webView.get() mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithCString:urlBuilder.toString().utf8().data() encoding:NSUTF8StringEncoding]]]];

There&apos;s got to be a better way to say this.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NetworkLoading.mm:70
&gt; +    EXPECT_STREQ([[webView.get() mainFrameTitle] UTF8String], &quot;TestTitle&quot;);

Stop it with the .get()s

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/TCPServer.cpp:100
&gt; +void TCPServer::replyToRequest()

This is more like waitForAndReplyToRequest (it does more than just reply)

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/TCPServer.cpp:111
&gt; +        String request = readEntireRequest();

So, someday you&apos;ll support verifying the request, and multiple request/response pairs?

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/TCPServer.cpp:114
&gt; +        

extra newline</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123480</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-09-04 10:25:58 -0700</bug_when>
    <thetext>It&apos;s definitely a great idea to allow networking tests in TestWebKitAPI.

However, I&apos;m worried about adding yet another server that has to find a port for itself, to make sure that everything works in concurrent scenarios, and eventually to support https and websockets. Writing C++ code to implement trivial HTTP responses seems undesirable too.

Can&apos;t we just use the same Apache setup as in layout tests? Let&apos;s discuss this before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147836</commentid>
    <comment_count>5</comment_count>
      <attachid>267020</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-12-09 10:28:09 -0800</bug_when>
    <thetext>Created attachment 267020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147870</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-12-09 11:23:12 -0800</bug_when>
    <thetext>&gt; It&apos;s definitely a great idea to allow networking tests in TestWebKitAPI.

Having talked to Alex in person, I now wonder if it would be better to test such things in WebKitTestRunner, because that&apos;s where our end-to-end tests are normally run.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260428</attachid>
            <date>2015-09-02 12:56:50 -0700</date>
            <delta_ts>2015-12-09 10:28:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148719-20150902125647.patch</filename>
            <type>text/plain</type>
            <size>15998</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE4OTI1NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDE1LTA5LTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgVGVzdCBsb2FkaW5nIGZyb20gdGhlIG5ldHdvcmsgaW4gVGVz
dFdlYktpdEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODcxOQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMjU0Mzk2MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvTmV0d29ya0xvYWRpbmcubW06IEFkZGVkLgorICAgICAg
ICAoLVtUZXN0TG9hZERlbGVnYXRlIHdlYlZpZXc6ZGlkRmluaXNoTG9hZEZvckZyYW1lOl0pOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJDb2NvYS9UQ1BTZXJ2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRDUFNl
cnZlcjo6VENQU2VydmVyKToKKyAgICAgICAgKFRDUFNlcnZlcjo6flRDUFNlcnZlcik6CisgICAg
ICAgIChUQ1BTZXJ2ZXI6OnNvY2tldEJpbmRMaXN0ZW4pOgorICAgICAgICAoVENQU2VydmVyOjpy
ZWFkRW50aXJlUmVxdWVzdCk6CisgICAgICAgIChUQ1BTZXJ2ZXI6OnJlcGx5VG9SZXF1ZXN0KToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9UQ1BTZXJ2ZXIuaDog
QWRkZWQuCisgICAgICAgIChUQ1BTZXJ2ZXI6OnBvcnQpOgorCiAyMDE1LTA5LTAyICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9O
KHIxODg1NDgpOiBTb21lIHRlc3RzIGNyYXNoIGFmdGVyIHIxODg1NDggYmVjYXVzZSBpbmplY3Rl
ZCBidW5kbGUgbWVzc2FnZXMgYXJlIHJlY2VpdmVkIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVzCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg5MTU2KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAKIAkJNTJCOENGOTgxNTg2OEQ5MTAwMjgxMDUzIC8q
IFNldERvY3VtZW50VVJJLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJCOENGOTQxNTg2OENGMDAwMjgxMDUzIC8qIFNldERvY3VtZW50
VVJJLmh0bWwgKi87IH07CiAJCTUyRDY3M0VFMUFGQjEyNzMwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5
U2Vzc2lvblN0YXRlV2l0aEZpbHRlcmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ2NzNFQzFBRkIxMjY4MDBGQTE5RkUgLyogV0tQYWdlQ29w
eVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwICovOyB9OwogCQk1MkU1Q0U0OTE0RDIxRUFC
MDAzQjJCRDggLyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTVDRTQ4MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJl
bnRGcmFtZV9CdW5kbGUuY3BwICovOyB9OworCQk1QzAwRTM0MjFCOTc3QkY0MDBBODU4NTAgLyog
TmV0d29ya0xvYWRpbmcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzAwRTM0MTFCOTc3QkY0MDBBODU4NTAgLyogTmV0d29ya0xvYWRpbmcubW0gKi87
IH07CisJCTVDMDBFMzQ1MUI5Nzg2QzQwMEE4NTg1MCAvKiBUQ1BTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMwMEUzNDQxQjk3ODZDNDAw
QTg1ODUwIC8qIFRDUFNlcnZlci5jcHAgKi87IH07CiAJCTc2NDMyMkQ3MUI2MUNDQzMwMDI0Rjgw
MSAvKiBXb3JkQm91bmRhcnlUeXBpbmdBdHRyaWJ1dGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzY0MzIyRDUxQjYxQ0NBNDAwMjRGODAxIC8qIFdv
cmRCb3VuZGFyeVR5cGluZ0F0dHJpYnV0ZXMubW0gKi87IH07CiAJCTc2NzM0OTlEMTkzMEM1QkIw
MEU0NERGOSAvKiBTdG9wTG9hZGluZ0R1cmluZ0RpZEZhaWxQcm92aXNpb25hbExvYWRfYnVuZGxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2NzM0
OTlBMTkzMDE4MkUwMEU0NERGOSAvKiBTdG9wTG9hZGluZ0R1cmluZ0RpZEZhaWxQcm92aXNpb25h
bExvYWRfYnVuZGxlLmNwcCAqLzsgfTsKIAkJNzZFMTgyREQxNTQ3NTY5MTAwRjFGQUREIC8qIFdp
bGxTZW5kU3VibWl0RXZlbnRfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc2RTE4MkRDMTU0NzU2OTEwMEYxRkFERCAvKiBXaWxsU2VuZFN1
Ym1pdEV2ZW50X0J1bmRsZS5jcHAgKi87IH07CkBAIC01NjcsNiArNTY5LDkgQEAKIAkJNTJENjcz
RUMxQUZCMTI2ODAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGVXaXRoRmlsdGVyaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLUGFnZUNvcHlTZXNz
aW9uU3RhdGVXaXRoRmlsdGVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJFNUNFNDUxNEQyMUU5RDAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmVudEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1
bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJlbnRGcmFt
ZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzAwRTM0MTFCOTc3
QkY0MDBBODU4NTAgLyogTmV0d29ya0xvYWRpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrTG9hZGluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUMwMEUzNDMxQjk3ODY5QzAwQTg1ODUwIC8qIFRDUFNlcnZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUQ1BTZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMwMEUz
NDQxQjk3ODZDNDAwQTg1ODUwIC8qIFRDUFNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUQ1BTZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3NTYwOTE3NzE5MjU5QzU5MDA5RUYwNkUgLyogTWVtb3J5Q2FjaGVBZGRJbWFnZVRvQ2Fj
aGVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZW1vcnlD
YWNoZUFkZEltYWdlVG9DYWNoZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzVGMzEzM0YxOEMxNzFCNzAwNDFDQUVDIC8qIEVwaGVtZXJhbFNlc3Npb25QdXNoU3RhdGVOb0hp
c3RvcnlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
cGhlbWVyYWxTZXNzaW9uUHVzaFN0YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3NjQzMjJENTFCNjFDQ0E0MDAyNEY4MDEgLyogV29yZEJvdW5k
YXJ5VHlwaW5nQXR0cmlidXRlcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdvcmRCb3VuZGFyeVR5cGluZ0F0dHJpYnV0ZXMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05MDksNiArOTE0LDkgQEAKIAkJCQkyRDlBNTNBRTFCMzFGQThEMDA3NEQ1
QUEgLyogU2hyaW5rVG9GaXQubW0gKi8sCiAJCQkJN0NDM0UxRkExOTdFMjM0MTAwQkU2MjUyIC8q
IFVzZXJDb250ZW50Q29udHJvbGxlci5tbSAqLywKIAkJCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMy
NzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovLAorCQkJCTVDMDBFMzQxMUI5
NzdCRjQwMEE4NTg1MCAvKiBOZXR3b3JrTG9hZGluZy5tbSAqLywKKwkJCQk1QzAwRTM0MzFCOTc4
NjlDMDBBODU4NTAgLyogVENQU2VydmVyLmggKi8sCisJCQkJNUMwMEUzNDQxQjk3ODZDNDAwQTg1
ODUwIC8qIFRDUFNlcnZlci5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJXZWJLaXQyIENvY29h
IjsKIAkJCXBhdGggPSBXZWJLaXQyQ29jb2E7CkBAIC0xNzE4LDEyICsxNzI2LDE0IEBACiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJMkQ5QTUzQUYx
QjMxRkE4RDAwNzRENUFBIC8qIFNocmlua1RvRml0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUMw
MEUzNDIxQjk3N0JGNDAwQTg1ODUwIC8qIE5ldHdvcmtMb2FkaW5nLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFCNDU0RUMxQjRFMjM2QjAwODVFQUE2IC8qIFdlYlZpZXdDbG9zZUluc2lkZURpZEZp
bmlzaExvYWRGb3JGcmFtZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBQTAyMUJCMUFCMDlFQTcw
MDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDFGRTBCMDFBRDQ2
NUMxMDA2Q0Q5RTYgLyogRml4ZWRMYXlvdXRTaXplLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNC
OUJDMzgxQTY3NDgyMzAwRkU1Njc4IC8qIFdlYWtQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkU3NzY1Q0QxNkM0RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk0MTk3M0I1RDFBRjIyODc1MDA2QzdCMzYgLyogU2hhcmVkQnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDMDBFMzQ1MUI5Nzg2QzQwMEE4NTg1MCAvKiBUQ1BTZXJ2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0FBNkExNTIxQUFDMEIzMTAwMkIyRUQzIC8qIFdvcmtRdWV1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyRTc3NjVDRjE2QzREODExMDBCQTJCQjEgLyogbWFpbk1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTQxOTczQjVCMUFGMjI4NkEwMDZDN0IzNiAvKiBGaWxlU3lz
dGVtLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyQ29jb2EvTmV0d29ya0xvYWRpbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvTmV0d29ya0xvYWRpbmcubW0JKHJldmlzaW9uIDAp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9OZXR3b3JrTG9hZGlu
Zy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJUQ1BTZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5j
bHVkZSA8V2ViS2l0L1dlYktpdC5oPgorCitzdGF0aWMgYm9vbCBkaWRGaW5pc2hMb2FkOworCitA
aW50ZXJmYWNlIFRlc3RMb2FkRGVsZWdhdGUgOiBOU09iamVjdCA8V2ViRnJhbWVMb2FkRGVsZWdh
dGU+IHsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RMb2FkRGVsZWdhdGUKKworLSAo
dm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZpbmlzaExvYWRGb3JGcmFtZTooV2Vi
RnJhbWUgKilmcmFtZQoreworICAgIGRpZEZpbmlzaExvYWQgPSB0cnVlOworfQorCitAZW5kCisK
K2NsYXNzIE5ldHdvcmtMb2FkaW5nIDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1RfRihOZXR3b3JrTG9hZGluZywgQmFzaWMp
Cit7CisgICAgVENQU2VydmVyIHNlcnZlcigiSFRUUC8xLjEgMjAwIE9LXHJcblxyXG48aHRtbD48
aGVhZD48dGl0bGU+VGVzdFRpdGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+VGVzdEJvZHk8L2JvZHk+
PC9odG1sPiIpOworICAgIEVYUEVDVF9ORShzZXJ2ZXIucG9ydCgpLCAwKTsKKyAgICAKKyAgICBT
dHJpbmdCdWlsZGVyIHVybEJ1aWxkZXI7CisgICAgdXJsQnVpbGRlci5hcHBlbmQoImh0dHA6Ly8x
MjcuMC4wLjE6Iik7CisgICAgdXJsQnVpbGRlci5hcHBlbmROdW1iZXIoc2VydmVyLnBvcnQoKSk7
CisgICAgdXJsQnVpbGRlci5hcHBlbmQoJy8nKTsKKyAgICAKKyAgICBkaWRGaW5pc2hMb2FkID0g
ZmFsc2U7CisgICAgUmV0YWluUHRyPFdlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDEyMCwgMjAwKSBmcmFtZU5h
bWU6bmlsIGdyb3VwTmFtZTpuaWxdKTsKKyAgICBSZXRhaW5QdHI8VGVzdExvYWREZWxlZ2F0ZT4g
dGVzdENvbnRyb2xsZXIgPSBhZG9wdE5TKFtUZXN0TG9hZERlbGVnYXRlIG5ld10pOworICAgIHdl
YlZpZXcuZ2V0KCkuZnJhbWVMb2FkRGVsZWdhdGUgPSB0ZXN0Q29udHJvbGxlci5nZXQoKTsKKyAg
ICBbW3dlYlZpZXcuZ2V0KCkgbWFpbkZyYW1lXSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoQ1N0
cmluZzp1cmxCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSBlbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ11dXV07CisgICAgVXRpbDo6cnVuKCZkaWRGaW5pc2hMb2FkKTsKKyAgICAK
KyAgICBFWFBFQ1RfU1RSRVEoW1t3ZWJWaWV3LmdldCgpIG1haW5GcmFtZVRpdGxlXSBVVEY4U3Ry
aW5nXSwgIlRlc3RUaXRsZSIpOworICAgIEVYUEVDVF9TVFJFUShbW1tbd2ViVmlldy5nZXQoKSBt
YWluRnJhbWVEb2N1bWVudF0gYm9keV0gaW5uZXJIVE1MXSBVVEY4U3RyaW5nXSwgIlRlc3RCb2R5
Iik7Cit9CisgICAgCit9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJD
b2NvYS9UQ1BTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0MkNvY29hL1RDUFNlcnZlci5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9UQ1BTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlRDUFNlcnZlci5oIgor
I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK1RDUFNlcnZlcjo6VENQU2VydmVyKFN0cmluZyBy
ZXBseSkKKyAgICA6IG1fcmVwbHkocmVwbHkpCit7CisgICAgc29ja2V0QmluZExpc3RlbigpOwor
ICAgIG1fdGhyZWFkID0gc3RkOjp0aHJlYWQoJlRDUFNlcnZlcjo6cmVwbHlUb1JlcXVlc3QsIHRo
aXMpOworfQorCitUQ1BTZXJ2ZXI6On5UQ1BTZXJ2ZXIoKQoreworICAgIG1fdGhyZWFkLmpvaW4o
KTsKKyAgICBpZiAobV9saXN0ZW5pbmdTb2NrZXQgIT0gSW52YWxpZFNvY2tldCkgeworICAgICAg
ICBjbG9zZShtX2xpc3RlbmluZ1NvY2tldCk7CisgICAgICAgIG1fbGlzdGVuaW5nU29ja2V0ID0g
SW52YWxpZFNvY2tldDsKKyAgICB9CisgICAgaWYgKG1fY29ubmVjdGlvblNvY2tldCAhPSBJbnZh
bGlkU29ja2V0KSB7CisgICAgICAgIGNsb3NlKG1fY29ubmVjdGlvblNvY2tldCk7CisgICAgICAg
IG1fY29ubmVjdGlvblNvY2tldCA9IEludmFsaWRTb2NrZXQ7CisgICAgfQorfQorCit2b2lkIFRD
UFNlcnZlcjo6c29ja2V0QmluZExpc3RlbigpCit7CisgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBz
b2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworICAgIGlmIChtX2xpc3RlbmluZ1NvY2tl
dCA9PSBJbnZhbGlkU29ja2V0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQb3J0cyA0OTE1
Mi02NTUzNSBhcmUgdW5hbGxvY2F0ZWQgcG9ydHMuIFRyeSB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0
J3MgZnJlZS4KKyAgICBmb3IgKFBvcnQgcG9ydCA9IDQ5MTUyOyBwb3J0OyBwb3J0KyspIHsKKyAg
ICAgICAgc3RydWN0IHNvY2thZGRyX2luIG5hbWU7CisgICAgICAgIG1lbXNldCgmbmFtZSwgMCwg
c2l6ZW9mKG5hbWUpKTsKKyAgICAgICAgbmFtZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAg
ICAgbmFtZS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgICAgICBuYW1lLnNpbl9hZGRyLnNf
YWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICAgICAgICBpZiAoYmluZChtX2xpc3RlbmluZ1Nv
Y2tldCwgcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZuYW1lKSwgc2l6ZW9mKG5hbWUpKSA+
PSAwKSB7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhDb25uZWN0aW9ucyA9IDE7Cisg
ICAgICAgICAgICBpZiAobGlzdGVuKG1fbGlzdGVuaW5nU29ja2V0LCBtYXhDb25uZWN0aW9ucykg
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICBjbG9zZShtX2xpc3RlbmluZ1NvY2tldCk7CisgICAg
ICAgICAgICAgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBJbnZhbGlkU29ja2V0OworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcG9ydCA9IHBvcnQ7
CisgICAgICAgICAgICByZXR1cm47IC8vIFN1Y2Nlc3NmdWxseSBzZXQgdXAgbGlzdGVuaW5nIHBv
cnQuCisgICAgICAgIH0KKyAgICAgICAgLy8gVGhpcyBwb3J0IGlzIGJ1c3kuIFRyeSB0aGUgbmV4
dCBwb3J0LgorICAgIH0KKworICAgIC8vIENvdWxkbid0IGZpbmQgYW4gYXZhaWxhYmxlIHBvcnQu
CisgICAgY2xvc2UobV9saXN0ZW5pbmdTb2NrZXQpOworICAgIG1fbGlzdGVuaW5nU29ja2V0ID0g
SW52YWxpZFNvY2tldDsKK30KKworU3RyaW5nIFRDUFNlcnZlcjo6cmVhZEVudGlyZVJlcXVlc3Qo
KQoreworICAgIGlmIChtX2Nvbm5lY3Rpb25Tb2NrZXQgPT0gSW52YWxpZFNvY2tldCkKKyAgICAg
ICAgcmV0dXJuICIoaW52YWxpZCBzb2NrZXQpIjsKKyAgICAKKyAgICBTdHJpbmdCdWlsZGVyIHM7
CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgY2hhciBidWZmZXJbMTAwMF07CisgICAgICAg
IHNpemVfdCBsZW5ndGggPSByZWFkKG1fY29ubmVjdGlvblNvY2tldCwgYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiAiKGVycm9yIHJlYWRpbmcgcmVxdWVzdCki
OworICAgICAgICBzLmFwcGVuZChidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIGlmIChsZW5ndGgg
PCBzaXplb2YoYnVmZmVyKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4g
cy50b1N0cmluZygpOworfQorCit2b2lkIFRDUFNlcnZlcjo6cmVwbHlUb1JlcXVlc3QoKQorewor
ICAgIGlmIChtX2xpc3RlbmluZ1NvY2tldCA9PSBJbnZhbGlkU29ja2V0KQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgY29uc3QgdW5zaWduZWQgZXhwZWN0ZWRSZXF1ZXN0cyA9IDE7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4cGVjdGVkUmVxdWVzdHM7ICsraSkgeworICAgICAg
ICBtX2Nvbm5lY3Rpb25Tb2NrZXQgPSBhY2NlcHQobV9saXN0ZW5pbmdTb2NrZXQsIG51bGxwdHIs
IG51bGxwdHIpOworICAgICAgICBpZiAobV9jb25uZWN0aW9uU29ja2V0ID09IEludmFsaWRTb2Nr
ZXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBTdHJpbmcgcmVxdWVz
dCA9IHJlYWRFbnRpcmVSZXF1ZXN0KCk7CisgICAgICAgIAorICAgICAgICBzZW5kKG1fY29ubmVj
dGlvblNvY2tldCwgbV9yZXBseS51dGY4KCkuZGF0YSgpLCBtX3JlcGx5Lmxlbmd0aCgpLCAwKTsK
KyAgICAgICAgCisgICAgfQorICAgIHNodXRkb3duKG1fY29ubmVjdGlvblNvY2tldCwgU0hVVF9S
RFdSKTsKK30KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1RD
UFNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
MkNvY29hL1RDUFNlcnZlci5oCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyQ29jb2EvVENQU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVENQU2VydmVyX2gKKyNkZWZpbmUgVENQU2VydmVy
X2gKKworI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworY2xhc3MgVENQU2VydmVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIGludCBTb2NrZXQ7Cisg
ICAgY29uc3QgU29ja2V0IEludmFsaWRTb2NrZXQgPSAtMTsKKyAgICB0eXBlZGVmIHVpbnQxNl90
IFBvcnQ7CisgICAgY29uc3QgUG9ydCBJbnZhbGlkUG9ydCA9IDA7CisKKyAgICBUQ1BTZXJ2ZXIo
U3RyaW5nIHJlcGx5KTsKKyAgICB+VENQU2VydmVyKCk7CisKKyAgICBQb3J0IHBvcnQoKSBjb25z
dCB7IHJldHVybiBtX3BvcnQ7IH0KK3ByaXZhdGU6CisgICAgUG9ydCBtX3BvcnQgeyBJbnZhbGlk
UG9ydCB9OworICAgIFNvY2tldCBtX2xpc3RlbmluZ1NvY2tldCB7IEludmFsaWRTb2NrZXQgfTsK
KyAgICBTb2NrZXQgbV9jb25uZWN0aW9uU29ja2V0IHsgSW52YWxpZFNvY2tldCB9OworICAgIHN0
ZDo6dGhyZWFkIG1fdGhyZWFkOworICAgIFN0cmluZyBtX3JlcGx5OworICAgIAorICAgIHZvaWQg
c29ja2V0QmluZExpc3RlbigpOworICAgIFN0cmluZyByZWFkRW50aXJlUmVxdWVzdCgpOworICAg
IHZvaWQgcmVwbHlUb1JlcXVlc3QoKTsKK307CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267020</attachid>
            <date>2015-12-09 10:28:09 -0800</date>
            <delta_ts>2015-12-09 10:28:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148719-20151209102742.patch</filename>
            <type>text/plain</type>
            <size>16550</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE5Mzc1OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDE1LTEyLTA4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgVGVzdCBsb2FkaW5nIGZyb20gdGhlIG5ldHdvcmsgaW4gVGVz
dFdlYktpdEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODcxOQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMjU0Mzk2MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJDb2NvYS9OZXR3b3JrTG9hZGluZy5tbTogQWRkZWQuCisgICAgICAgICgt
W1Rlc3RMb2FkRGVsZWdhdGUgd2ViVmlldzpkaWRGaW5pc2hMb2FkRm9yRnJhbWU6XSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0MkNvY29hL1RDUFNlcnZlci5jcHA6IEFkZGVkLgorICAgICAgICAoVENQU2VydmVy
OjpUQ1BTZXJ2ZXIpOgorICAgICAgICAoVENQU2VydmVyOjp+VENQU2VydmVyKToKKyAgICAgICAg
KFRDUFNlcnZlcjo6c29ja2V0QmluZExpc3Rlbik6CisgICAgICAgIChUQ1BTZXJ2ZXI6OnJlYWRF
bnRpcmVSZXF1ZXN0KToKKyAgICAgICAgKFRDUFNlcnZlcjo6cmVwbHlUb1JlcXVlc3QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1RDUFNlcnZlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFRDUFNlcnZlcjo6cG9ydCk6CisKIDIwMTUtMTItMDggIFJ5dWFuIENob2kg
IDxyeXVhbi5jaG9pQG5hdmVyY29ycC5jb20+CiAKICAgICAgICAgW0VGTF0gQWRkIEFQSSB0byBw
cm92aWRlIHByZWZlcmVuY2VzIGJlZm9yZSBjcmVhdGluZyBld2tfdmlldwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5Mzc1OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw2ICs3Myw4IEBACiAJCTUyQjhDRjk4MTU4NjhEOTEwMDI4MTA1MyAvKiBTZXREb2N1bWVu
dFVSSS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQjhDRjk0MTU4NjhDRjAwMDI4MTA1MyAvKiBTZXREb2N1bWVudFVSSS5odG1sICov
OyB9OwogCQk1MkQ2NzNFRTFBRkIxMjczMDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Npb25TdGF0
ZVdpdGhGaWx0ZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJENjczRUMxQUZCMTI2ODAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9uU3Rh
dGVXaXRoRmlsdGVyaW5nLmNwcCAqLzsgfTsKIAkJNTJFNUNFNDkxNEQyMUVBQjAwM0IyQkQ4IC8q
IFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDggLyogUGFyZW50RnJhbWVfQnVu
ZGxlLmNwcCAqLzsgfTsKKwkJNUMwRjMzNUMxQzE3QTg5OTAwRjcwMERFIC8qIE5ldHdvcmtMb2Fk
aW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMw
RjMzNUIxQzE3QTg5OTAwRjcwMERFIC8qIE5ldHdvcmtMb2FkaW5nLm1tICovOyB9OworCQk1QzBG
MzM1RjFDMTdBOEI2MDBGNzAwREUgLyogVENQU2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMEYzMzVEMUMxN0E4QjYwMEY3MDBERSAvKiBU
Q1BTZXJ2ZXIuY3BwICovOyB9OwogCQk3NjQzMjJENzFCNjFDQ0MzMDAyNEY4MDEgLyogV29yZEJv
dW5kYXJ5VHlwaW5nQXR0cmlidXRlcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc2NDMyMkQ1MUI2MUNDQTQwMDI0RjgwMSAvKiBXb3JkQm91bmRhcnlU
eXBpbmdBdHRyaWJ1dGVzLm1tICovOyB9OwogCQk3NjczNDk5RDE5MzBDNUJCMDBFNDRERjkgLyog
U3RvcExvYWRpbmdEdXJpbmdEaWRGYWlsUHJvdmlzaW9uYWxMb2FkX2J1bmRsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjczNDk5QTE5MzAxODJF
MDBFNDRERjkgLyogU3RvcExvYWRpbmdEdXJpbmdEaWRGYWlsUHJvdmlzaW9uYWxMb2FkX2J1bmRs
ZS5jcHAgKi87IH07CiAJCTc2RTE4MkREMTU0NzU2OTEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1p
dEV2ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJtaXRFdmVudF9C
dW5kbGUuY3BwICovOyB9OwpAQCAtNTkxLDYgKzU5Myw5IEBACiAJCTUyRDY3M0VDMUFGQjEyNjgw
MEZBMTlGRSAvKiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlV2l0aEZpbHRlcmluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlV2l0
aEZpbHRlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRTVDRTQ1MTRE
MjFFOUQwMDNCMkJEOCAvKiBQYXJlbnRGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYXJlbnRGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyRTVDRTQ4MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyZW50RnJhbWVfQnVuZGxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMwRjMzNUIxQzE3QTg5OTAwRjcwMERF
IC8qIE5ldHdvcmtMb2FkaW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gTmV0d29ya0xvYWRpbmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
MEYzMzVEMUMxN0E4QjYwMEY3MDBERSAvKiBUQ1BTZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVENQU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUMwRjMzNUUxQzE3QThCNjAwRjcwMERFIC8qIFRDUFNlcnZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUQ1BTZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzU2MDkxNzcxOTI1OUM1OTAwOUVGMDZFIC8qIE1lbW9yeUNhY2hlQWRkSW1h
Z2VUb0NhY2hlSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
TWVtb3J5Q2FjaGVBZGRJbWFnZVRvQ2FjaGVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc1RjMxMzNGMThDMTcxQjcwMDQxQ0FFQyAvKiBFcGhlbWVyYWxTZXNzaW9uUHVzaFN0
YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXBoZW1lcmFsU2Vzc2lvblB1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzY0MzIyRDUxQjYxQ0NBNDAwMjRGODAxIC8qIFdv
cmRCb3VuZGFyeVR5cGluZ0F0dHJpYnV0ZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXb3JkQm91bmRhcnlUeXBpbmdBdHRyaWJ1dGVzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTI0LDYgKzkyOSw5IEBACiAJCTFBQkMzREVDMTg5OUJFNTUw
MDRGMDYyNiAvKiBXZWJLaXQyIENvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk1QzBGMzM1RDFDMTdBOEI2MDBGNzAwREUgLyogVENQU2VydmVyLmNw
cCAqLywKKwkJCQk1QzBGMzM1RTFDMTdBOEI2MDBGNzAwREUgLyogVENQU2VydmVyLmggKi8sCisJ
CQkJNUMwRjMzNUIxQzE3QTg5OTAwRjcwMERFIC8qIE5ldHdvcmtMb2FkaW5nLm1tICovLAogCQkJ
CTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tICovLAogCQkJCTJERDM1NTM1MUJEMDgzNzgwMDVERjRBNyAvKiBBdXRvTGF5b3V0SW50ZWdy
YXRpb24ubW0gKi8sCiAJCQkJQTEzRUJCQUMxQjg3NDM2RjAwMDk3MTEwIC8qIEJ1bmRsZVBhcmFt
ZXRlcnMubW0gKi8sCkBAIC0xODE2LDYgKzE4MjQsOCBAQAogCQkJCTFDRjBEMzc5MUJCRjJGM0Qw
MEI0RUY1NCAvKiBXS1JldGFpblB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkY2RTFGMDFB
REM3NDlCMDBERTY5NkIgLyogREZBTWluaW1pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2
MEJBNTc5MUIxRDJFN0IwMDRGQTA3QyAvKiBERkFDb21iaW5lci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1QzBGMzM1RjFDMTdBOEI2MDBGNzAwREUgLyogVENQU2VydmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDMEYzMzVDMUMxN0E4OTkwMEY3MDBERSAvKiBOZXR3b3JrTG9hZGluZy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdBOTlEOTk0MUFENEEyOUQwMDM3MzE0MSAvKiBNZW51VHlwZXNG
b3JNb3VzZUV2ZW50cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxOURCOTc5MUIzMjEzN0MwMERC
MzhENCAvKiBOYXZpZ2F0b3JMYW5ndWFnZS5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL05ldHdvcmtMb2FkaW5nLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL05l
dHdvcmtMb2FkaW5nLm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyQ29jb2EvTmV0d29ya0xvYWRpbmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBs
YXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiVENQU2VydmVyLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CisjaW5jbHVk
ZSA8V2ViS2l0L1dlYktpdC5oPgorCitzdGF0aWMgYm9vbCBkaWRGaW5pc2hOYXZpZ2F0aW9uOwor
CitAaW50ZXJmYWNlIFRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0
aW9uRGVsZWdhdGU+IHsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3ROYXZpZ2F0aW9u
RGVsZWdhdGUKKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmlz
aE5hdmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24KK3sKKyAgICBkaWRGaW5pc2hO
YXZpZ2F0aW9uID0gdHJ1ZTsKK30KKworQGVuZAorCitjbGFzcyBOZXR3b3JrTG9hZGluZyA6IHB1
YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKKworV2ViQ29yZTo6VVJMIHVybEZyb21Qb3J0KFRD
UFNlcnZlcjo6UG9ydCBwb3J0KQoreworICAgIFN0cmluZ0J1aWxkZXIgdXJsQnVpbGRlcjsKKyAg
ICB1cmxCdWlsZGVyLmFwcGVuZCgiaHR0cDovLzEyNy4wLjAuMToiKTsKKyAgICB1cmxCdWlsZGVy
LmFwcGVuZE51bWJlcihwb3J0KTsKKyAgICB1cmxCdWlsZGVyLmFwcGVuZCgnLycpOworICAgIHJl
dHVybiBXZWJDb3JlOjpVUkwoV2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCB1cmxCdWlsZGVyLnRv
U3RyaW5nKCkpOworfQorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1RfRihOZXR3
b3JrTG9hZGluZywgQmFzaWMpCit7CisgICAgVENQU2VydmVyIHNlcnZlcih7IkhUVFAvMS4xIDIw
MCBPS1xyXG5cclxuPGh0bWw+PGhlYWQ+PHRpdGxlPlRlc3RUaXRsZTwvdGl0bGU+PC9oZWFkPjwv
aHRtbD4ifSk7CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KV0pOworICAgIFJldGFpblB0cjxUZXN0TmF2aWdhdGlvbkRlbGVnYXRlPiBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2
aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIEVYUEVDVF9FUShbd2ViVmll
dyBlc3RpbWF0ZWRQcm9ncmVzc10sIDAuMCk7CisgICAgRVhQRUNUX0VRKFt3ZWJWaWV3IGlzTG9h
ZGluZ10sIGZhbHNlKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgaGFzT25seVNlY3VyZUNvbnRl
bnRdLCBmYWxzZSk7CisgICAgRVhQRUNUX1NUUkVRKFtbd2ViVmlldyB0aXRsZV0gVVRGOFN0cmlu
Z10sICIiKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgY2FuR29CYWNrXSwgZmFsc2UpOworICAg
IEVYUEVDVF9FUShbd2ViVmlldyBjYW5Hb0ZvcndhcmRdLCBmYWxzZSk7CisgICAgRVhQRUNUX0VR
KFtbd2ViVmlldyBiYWNrRm9yd2FyZExpc3RdIGN1cnJlbnRJdGVtXSA9PSBuaWwsIHRydWUpOwor
CisgICAgZGlkRmluaXNoTmF2aWdhdGlvbiA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OiBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnVybEZyb21Qb3J0KHNlcnZlci5wb3J0
KCkpXV07CisgICAgVXRpbDo6cnVuKCZkaWRGaW5pc2hOYXZpZ2F0aW9uKTsKKworICAgIEVYUEVD
VF9FUShbd2ViVmlldyBlc3RpbWF0ZWRQcm9ncmVzc10sIDEuMCk7CisgICAgRVhQRUNUX0VRKFt3
ZWJWaWV3IGlzTG9hZGluZ10sIGZhbHNlKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgaGFzT25s
eVNlY3VyZUNvbnRlbnRdLCBmYWxzZSk7CisgICAgRVhQRUNUX1NUUkVRKFtbd2ViVmlldyB0aXRs
ZV0gVVRGOFN0cmluZ10sICJUZXN0VGl0bGUiKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgY2Fu
R29CYWNrXSwgZmFsc2UpOworICAgIEVYUEVDVF9FUShbd2ViVmlldyBjYW5Hb0ZvcndhcmRdLCBm
YWxzZSk7CisgICAgRVhQRUNUX1NUUkVRKFtbW1t3ZWJWaWV3IGJhY2tGb3J3YXJkTGlzdF0gY3Vy
cmVudEl0ZW1dIHRpdGxlXSBVVEY4U3RyaW5nXSwgIlRlc3RUaXRsZSIpOworICAgIEVYUEVDVF9F
UShzZXJ2ZXIucmVxdWVzdHMoKS5zaXplKCksIDF1bGwpOworfQorCit9CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9UQ1BTZXJ2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1RDUFNlcnZlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9U
Q1BTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgIlRDUFNlcnZlci5oIgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK1RD
UFNlcnZlcjo6VENQU2VydmVyKFZlY3RvcjxTdHJpbmc+JiYgcmVwbGllcykKKyAgICA6IG1fcmVw
bGllcyhXVEY6Om1vdmUocmVwbGllcykpCit7CisgICAgc29ja2V0QmluZExpc3RlbigpOworICAg
IG1fdGhyZWFkID0gc3RkOjp0aHJlYWQoJlRDUFNlcnZlcjo6d2FpdEZvckFuZFJlcGx5VG9SZXF1
ZXN0cywgdGhpcyk7Cit9CisKK1RDUFNlcnZlcjo6flRDUFNlcnZlcigpCit7CisgICAgbV90aHJl
YWQuam9pbigpOworICAgIGlmIChtX2xpc3RlbmluZ1NvY2tldCAhPSBJbnZhbGlkU29ja2V0KSB7
CisgICAgICAgIGNsb3NlKG1fbGlzdGVuaW5nU29ja2V0KTsKKyAgICAgICAgbV9saXN0ZW5pbmdT
b2NrZXQgPSBJbnZhbGlkU29ja2V0OworICAgIH0KKyAgICBpZiAobV9jb25uZWN0aW9uU29ja2V0
ICE9IEludmFsaWRTb2NrZXQpIHsKKyAgICAgICAgY2xvc2UobV9jb25uZWN0aW9uU29ja2V0KTsK
KyAgICAgICAgbV9jb25uZWN0aW9uU29ja2V0ID0gSW52YWxpZFNvY2tldDsKKyAgICB9Cit9CisK
K3ZvaWQgVENQU2VydmVyOjpzb2NrZXRCaW5kTGlzdGVuKCkKK3sKKyAgICBtX2xpc3RlbmluZ1Nv
Y2tldCA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKG1fbGlzdGVu
aW5nU29ja2V0ID09IEludmFsaWRTb2NrZXQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFBv
cnRzIDQ5MTUyLTY1NTM1IGFyZSB1bmFsbG9jYXRlZCBwb3J0cy4gVHJ5IHVudGlsIHdlIGZpbmQg
b25lIHRoYXQncyBmcmVlLgorICAgIGZvciAoUG9ydCBwb3J0ID0gNDkxNTI7IHBvcnQ7IHBvcnQr
KykgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbmFtZTsKKyAgICAgICAgbWVtc2V0KCZu
YW1lLCAwLCBzaXplb2YobmFtZSkpOworICAgICAgICBuYW1lLnNpbl9mYW1pbHkgPSBBRl9JTkVU
OworICAgICAgICBuYW1lLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICAgIG5hbWUuc2lu
X2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgICAgIGlmIChiaW5kKG1fbGlz
dGVuaW5nU29ja2V0LCByZWludGVycHJldF9jYXN0PHNvY2thZGRyKj4oJm5hbWUpLCBzaXplb2Yo
bmFtZSkpID49IDApIHsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heENvbm5lY3Rpb25z
ID0gMTsKKyAgICAgICAgICAgIGlmIChsaXN0ZW4obV9saXN0ZW5pbmdTb2NrZXQsIG1heENvbm5l
Y3Rpb25zKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8vIExpc3RlbmluZyBmYWlsZWQuCisg
ICAgICAgICAgICAgICAgY2xvc2UobV9saXN0ZW5pbmdTb2NrZXQpOworICAgICAgICAgICAgICAg
IG1fbGlzdGVuaW5nU29ja2V0ID0gSW52YWxpZFNvY2tldDsKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtX3BvcnQgPSBwb3J0OworICAgICAgICAgICAgcmV0dXJuOyAvLyBTdWNj
ZXNzZnVsbHkgc2V0IHVwIGxpc3RlbmluZyBwb3J0LgorICAgICAgICB9CisgICAgICAgIC8vIFRo
aXMgcG9ydCBpcyBidXN5LiBUcnkgdGhlIG5leHQgcG9ydC4KKyAgICB9CisKKyAgICAvLyBDb3Vs
ZG4ndCBmaW5kIGFuIGF2YWlsYWJsZSBwb3J0LgorICAgIGNsb3NlKG1fbGlzdGVuaW5nU29ja2V0
KTsKKyAgICBtX2xpc3RlbmluZ1NvY2tldCA9IEludmFsaWRTb2NrZXQ7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK1N0cmluZyBUQ1BTZXJ2ZXI6OnJlYWRFbnRpcmVSZXF1ZXN0KCkK
K3sKKyAgICBpZiAobV9jb25uZWN0aW9uU29ja2V0ID09IEludmFsaWRTb2NrZXQpCisgICAgICAg
IHJldHVybiAiKGludmFsaWQgc29ja2V0KSI7CisgICAgCisgICAgU3RyaW5nQnVpbGRlciBzOwor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGNoYXIgYnVmZmVyWzEwMDBdOworICAgICAgICBz
aXplX3QgbGVuZ3RoID0gcmVhZChtX2Nvbm5lY3Rpb25Tb2NrZXQsIGJ1ZmZlciwgc2l6ZW9mKGJ1
ZmZlcikpOworICAgICAgICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4gIihlcnJvciByZWFkaW5nIHJlcXVlc3QpIjsK
KyAgICAgICAgcy5hcHBlbmQoYnVmZmVyLCBsZW5ndGgpOworICAgICAgICBpZiAobGVuZ3RoIDwg
c2l6ZW9mKGJ1ZmZlcikpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHMu
dG9TdHJpbmcoKTsKK30KKwordm9pZCBUQ1BTZXJ2ZXI6OndhaXRGb3JBbmRSZXBseVRvUmVxdWVz
dHMoKQoreworICAgIGlmIChtX2xpc3RlbmluZ1NvY2tldCA9PSBJbnZhbGlkU29ja2V0KQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgZm9yIChjb25zdCBTdHJpbmcmIHJlcGx5IDogbV9yZXBs
aWVzKSB7CisgICAgICAgIG1fY29ubmVjdGlvblNvY2tldCA9IGFjY2VwdChtX2xpc3RlbmluZ1Nv
Y2tldCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGlmIChtX2Nvbm5lY3Rpb25Tb2NrZXQg
PT0gSW52YWxpZFNvY2tldCkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fcmVxdWVz
dHMuYXBwZW5kKHJlYWRFbnRpcmVSZXF1ZXN0KCkpOworICAgICAgICBzZW5kKG1fY29ubmVjdGlv
blNvY2tldCwgcmVwbHkudXRmOCgpLmRhdGEoKSwgcmVwbHkubGVuZ3RoKCksIDApOworICAgIH0K
KyAgICBzaHV0ZG93bihtX2Nvbm5lY3Rpb25Tb2NrZXQsIFNIVVRfUkRXUik7Cit9CkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9UQ1BTZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9UQ1BTZXJ2ZXIu
aAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29h
L1RDUFNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRDUFNlcnZlcl9oCisjZGVmaW5lIFRDUFNlcnZlcl9oCisKKyNpbmNsdWRlIDx0
aHJlYWQ+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCitjbGFzcyBUQ1BTZXJ2ZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgaW50IFNv
Y2tldDsKKyAgICBjb25zdCBTb2NrZXQgSW52YWxpZFNvY2tldCA9IC0xOworICAgIHR5cGVkZWYg
dWludDE2X3QgUG9ydDsKKyAgICBjb25zdCBQb3J0IEludmFsaWRQb3J0ID0gMDsKKworICAgIFRD
UFNlcnZlcihWZWN0b3I8U3RyaW5nPiYmIHJlcGxpZXMpOworICAgIH5UQ1BTZXJ2ZXIoKTsKKwor
ICAgIFBvcnQgcG9ydCgpIGNvbnN0IHsgQVNTRVJUKG1fcG9ydCk7IHJldHVybiBtX3BvcnQ7IH0K
KyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0cygpIHsgcmV0dXJuIG1fcmVxdWVzdHM7
IH0KKworcHJpdmF0ZToKKyAgICBQb3J0IG1fcG9ydCB7IEludmFsaWRQb3J0IH07CisgICAgU29j
a2V0IG1fbGlzdGVuaW5nU29ja2V0IHsgSW52YWxpZFNvY2tldCB9OworICAgIFNvY2tldCBtX2Nv
bm5lY3Rpb25Tb2NrZXQgeyBJbnZhbGlkU29ja2V0IH07CisgICAgc3RkOjp0aHJlYWQgbV90aHJl
YWQ7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3JlcGxpZXM7CisgICAgVmVjdG9yPFN0cmluZz4g
bV9yZXF1ZXN0czsKKyAgICAKKyAgICB2b2lkIHNvY2tldEJpbmRMaXN0ZW4oKTsKKyAgICBTdHJp
bmcgcmVhZEVudGlyZVJlcXVlc3QoKTsKKyAgICB2b2lkIHdhaXRGb3JBbmRSZXBseVRvUmVxdWVz
dHMoKTsKK307CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>