<?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>34289</bug_id>
          
          <creation_ts>2010-01-28 16:11:58 -0800</creation_ts>
          <short_desc>WebSocket ignores HttpOnly cookies, but should use in Handshake.</short_desc>
          <delta_ts>2010-02-12 15:33:10 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Fumitoshi Ukai">ukai</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>185635</commentid>
    <comment_count>0</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-01-28 16:11:58 -0800</bug_when>
    <thetext>Current implementation ignores HttpOnly cookies in WebSocket handshake.
But in practical use case, Web Sockets will be used in an environment where users are authenticated, and that in many cases the Web Socket will be established once the user has logged into a page via HTTP/HTTPS. Assume that a server may track the logged-in-ness of the client using a HttpOnly cookie, and that the server-side logic to check whether a user is already logged in could easily be leveraged for Web Sockets, since it starts as an HTTP connection that includes cookies and is then upgraded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186345</commentid>
    <comment_count>1</comment_count>
      <attachid>47825</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-01 02:54:08 -0800</bug_when>
    <thetext>Created attachment 47825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189400</commentid>
    <comment_count>2</comment_count>
      <attachid>47825</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-10 10:17:54 -0800</bug_when>
    <thetext>Comment on attachment 47825
Patch

+# Copyright (C) 2009 Google Inc. All rights reserved.

2010.

+Should say PASS:
+
+WebSocket open
+WebSocket closed
+PASS cookie is &quot;WK-test=1; WK-test-httponly=1&quot;
+PASS successfullyParsed is true

The &quot;should say pass&quot; phrase is slightly misguiding - it&apos;s a series of PASS messages, followed by &quot;TEST COMPLETE&quot;.

+        &quot;-x&quot;, &quot;/websocket/tests/cookies&quot;,

It&apos;s confusing to have .html files that are processed as CGIs, and it&apos;s confusing to have directories that are magically different from others. The run-webkit-tests script has a built-in list of extensions for tests, which includes .pl and .php, among others.

+    shouldBe(&quot;cookie&quot;, &apos;&quot;WK-test=1; WK-test-httponly=1&quot;&apos;);

I&apos;m always nervous when cookie names are reused. We already have WK-test used by xmlhttprequest/cookies.html test, and I don&apos;t see how this new test can not make it fail (other than if it&apos;s more than a 1000 tests away, and gets a new DRT instance).

Please use unique cookie names, ideally ones that clearly correspond to the test (I should have set a good example of the latter with xmlhttprequest/cookies.html!)

+static String getCookiesForWebSocket(Document *document, KURL&amp; url)

WebSocket code should not attempt to build Cookie headers itself. For example, we should use +[NSHTTPCookie requestHeaderFieldsWithCookies:] on Mac OS X, just like cookies() function in CookieJar does.

This should be trivial to implement by adapting cookie() code, the only minor challenge is coming up with a nice name for the new CookieJar function. I&apos;m thinking of cookieRequestHeaderFieldValue().

+SECURITY WARNING: This uses CGIHTTPServer and CGIHTTPServer is not secure.

I had some difficulty parsing this phrase. And a more detailed explanation of how this is insecure would help - Apache also executes CGIs, but this doesn&apos;t automatically make it insecure. 

+It may execute arbitrary Python code or external programs. It should not be
+used outside a firewall.

I think it&apos;s actually more common that insecure servers run outside of firewall (more precisely, in &quot;DMZ&quot;). That way, one can&apos;t use them as trampoline for bypassing firewall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189402</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-10 10:23:21 -0800</bug_when>
    <thetext>I don&apos;t really buy the explanation that WebSocket &quot;starts as an HTTP connection&quot; - I don&apos;t think that the spec says so. But I agree that HttpOnly cookies should be sent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189884</commentid>
    <comment_count>4</comment_count>
      <attachid>48608</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-11 19:12:05 -0800</bug_when>
    <thetext>Created attachment 48608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189889</commentid>
    <comment_count>5</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-11 19:15:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 47825 [details])
&gt; +# Copyright (C) 2009 Google Inc. All rights reserved.
&gt; 
&gt; 2010.
&gt; 
&gt; +Should say PASS:
&gt; +
&gt; +WebSocket open
&gt; +WebSocket closed
&gt; +PASS cookie is &quot;WK-test=1; WK-test-httponly=1&quot;
&gt; +PASS successfullyParsed is true
&gt; 
&gt; The &quot;should say pass&quot; phrase is slightly misguiding - it&apos;s a series of PASS
&gt; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; 
&gt; +        &quot;-x&quot;, &quot;/websocket/tests/cookies&quot;,
&gt; 
&gt; It&apos;s confusing to have .html files that are processed as CGIs, and it&apos;s
&gt; confusing to have directories that are magically different from others. The
&gt; run-webkit-tests script has a built-in list of extensions for tests, which
&gt; includes .pl and .php, among others.
&gt; 
&gt; +    shouldBe(&quot;cookie&quot;, &apos;&quot;WK-test=1; WK-test-httponly=1&quot;&apos;);
&gt; 
&gt; I&apos;m always nervous when cookie names are reused. We already have WK-test used
&gt; by xmlhttprequest/cookies.html test, and I don&apos;t see how this new test can not
&gt; make it fail (other than if it&apos;s more than a 1000 tests away, and gets a new
&gt; DRT instance).

I think this is because these belong to different port.
Anyway, changed them to WK-websocket-test-* to make it clear.

&gt; 
&gt; Please use unique cookie names, ideally ones that clearly correspond to the
&gt; test (I should have set a good example of the latter with
&gt; xmlhttprequest/cookies.html!)
&gt; 
&gt; +static String getCookiesForWebSocket(Document *document, KURL&amp; url)
&gt; 
&gt; WebSocket code should not attempt to build Cookie headers itself. For example,
&gt; we should use +[NSHTTPCookie requestHeaderFieldsWithCookies:] on Mac OS X, just
&gt; like cookies() function in CookieJar does.
&gt; 
&gt; This should be trivial to implement by adapting cookie() code, the only minor
&gt; challenge is coming up with a nice name for the new CookieJar function. I&apos;m
&gt; thinking of cookieRequestHeaderFieldValue().
&gt; 
&gt; +SECURITY WARNING: This uses CGIHTTPServer and CGIHTTPServer is not secure.
&gt; 
&gt; I had some difficulty parsing this phrase. And a more detailed explanation of
&gt; how this is insecure would help - Apache also executes CGIs, but this doesn&apos;t
&gt; automatically make it insecure. 
&gt; 
&gt; +It may execute arbitrary Python code or external programs. It should not be
&gt; +used outside a firewall.
&gt; 
&gt; I think it&apos;s actually more common that insecure servers run outside of firewall
&gt; (more precisely, in &quot;DMZ&quot;). That way, one can&apos;t use them as trampoline for
&gt; bypassing firewall.

I just copied it from python&apos;s CGIHTTPServer warning phrase.
I think it&apos;s unsecure because original CGIHTTPServer might run any executable outside of document root. 
pywebsocket checks .. should not be used for request path for cgi, so it might be ok.
Do you think we should remove this warning?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189900</commentid>
    <comment_count>6</comment_count>
      <attachid>48608</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-11 19:42:45 -0800</bug_when>
    <thetext>Comment on attachment 48608
Patch

     String cookies(const Document*, const KURL&amp;);
+    String cookieRequestHeaderFieldValue(const Document*, const KURL&amp;);

Looking at this, I think that there should be a comment explaining that cookies() omits HttpOnly cookies.

+        &quot;-x&quot;, &quot;/websocket/tests/cookies&quot;,

Ideally, we should be able to set his to &quot;/websocket/tests&quot;. That way, no one will get surprised by trying to add a .pl test to another subdirectory. Of course, pywebsocket would need to learn how to distinguish .html and .pl files.

&gt;I think this is because these belong to different port.

Indeed, I keep forgetting about this!

&gt; Do you think we should remove this warning?

It seems confusing, as we&apos;re passing a specific directory for CGIs.

This warning is not necessary for WebKit, since it&apos;s fairly clear that a machine running Apache on LayoutTests/http/tests on an external interface is vulnerable to attacks (by default, it only binds to 127.0.0.1 loopback). Websocket tests do not seem to add much to this.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189961</commentid>
    <comment_count>7</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-12 00:01:09 -0800</bug_when>
    <thetext>Committed r54707: &lt;http://trac.webkit.org/changeset/54707&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189964</commentid>
    <comment_count>8</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-12 00:07:20 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 48608 [details])
&gt;      String cookies(const Document*, const KURL&amp;);
&gt; +    String cookieRequestHeaderFieldValue(const Document*, const KURL&amp;);
&gt; 
&gt; Looking at this, I think that there should be a comment explaining that
&gt; cookies() omits HttpOnly cookies.
&gt; 
&gt; +        &quot;-x&quot;, &quot;/websocket/tests/cookies&quot;,
&gt; 
&gt; Ideally, we should be able to set his to &quot;/websocket/tests&quot;. That way, no one
&gt; will get surprised by trying to add a .pl test to another subdirectory. Of
&gt; course, pywebsocket would need to learn how to distinguish .html and .pl files.

I see.  File another bug. https://bugs.webkit.org/show_bug.cgi?id=34879

&gt; 
&gt; &gt;I think this is because these belong to different port.
&gt; 
&gt; Indeed, I keep forgetting about this!
&gt; 
&gt; &gt; Do you think we should remove this warning?
&gt; 
&gt; It seems confusing, as we&apos;re passing a specific directory for CGIs.
&gt; 
&gt; This warning is not necessary for WebKit, since it&apos;s fairly clear that a
&gt; machine running Apache on LayoutTests/http/tests on an external interface is
&gt; vulnerable to attacks (by default, it only binds to 127.0.0.1 loopback).
&gt; Websocket tests do not seem to add much to this.
&gt; 
&gt; r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190148</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-02-12 14:19:26 -0800</bug_when>
    <thetext>We&apos;re going to have a problem supporting cookieRequestHeaderFieldValue in Chromium.  We intentionally deny the WebKit process access to HTTP-only cookies because we can add them in within the browser process later on.

Ukai, maybe we can preserve that isolation by writing a special token into the stream that the WebSocketStreamHandle can replace w/ the real cookie stream?

Also using getRawCookies to implement cookieRequestHeaderFieldValue is not necessarily correct.  getRawCookies fails to mark the cookies as visited, which does not bump their priority in the cookie &quot;cache replacement policy&quot; algorithm.  getRawCookies was only designed to be used by devtools to support its UI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190185</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-02-12 15:33:10 -0800</bug_when>
    <thetext>ukai:  please note http://trac.webkit.org/changeset/54742, which is a Chromium WebKit API change, but as part of that change I made ChromiumBridge::cookieRequestHeaderFieldValue just call cookies() for now.  We can fix that by implementing WebCookieJar on the Chromium side.  Also, note that pfeldman has a patch that will make getRawCookies fail for any non-inspector process.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47825</attachid>
            <date>2010-02-01 02:54:08 -0800</date>
            <delta_ts>2010-02-11 19:11:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34289-20100201195406.patch</filename>
            <type>text/plain</type>
            <size>13302</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlYzA3N2IxLi5mNjU2YjY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDIt
MDEgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGlnbm9yZXMgSHR0cE9u
bHkgY29va2llcywgYnV0IHNob3VsZCB1c2UgaW4gSGFuZHNoYWtlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQyODkKKworICAgICAgICB3ZWJzb2Nr
ZXQvdGVzdHMvY29va2llcyB3b3VsZCBiZSBoYW5kbGVkIGFzIGNnaSBvbiBodHRwLCBzbworICAg
ICAgICB3ZWJzb2NrZXQvdGVzdHMvY29va2llcy9odHRwb25seS1jb29raWUuaHRtbCBtdXN0IGJl
IGV4ZWN1dGFibGUuCisKKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvY29va2llcy9lY2hvLWNv
b2tpZV93c2gucHk6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9jb29raWVzL2h0
dHBvbmx5LWNvb2tpZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90
ZXN0cy9jb29raWVzL2h0dHBvbmx5LWNvb2tpZS5odG1sOiBBZGRlZC4KKwogMjAxMC0wMi0wMSAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
Y2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2Nvb2tpZXMvZWNoby1jb29raWVfd3NoLnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2Nvb2tpZXMvZWNoby1jb29raWVfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjE5OGU2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvY29va2llcy9lY2hvLWNvb2tpZV93c2gucHkKQEAgLTAsMCArMSwzNiBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKKworZGVm
IHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MKKworZGVm
IHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBtc2d1dGlsLnNlbmRfbWVz
c2FnZShyZXF1ZXN0LCAgcmVxdWVzdC5oZWFkZXJzX2luWydDb29raWUnXSkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9jb29raWVzL2h0dHBvbmx5LWNvb2tpZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY29va2llcy9odHRwb25seS1j
b29raWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0
NjE4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY29v
a2llcy9odHRwb25seS1jb29raWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3Qg
V2ViU29ja2V0IHNlbmRzIEh0dHBPbmx5IGNvb2tpZXMuCisKK1Nob3VsZCBzYXkgUEFTUzoKKwor
V2ViU29ja2V0IG9wZW4KK1dlYlNvY2tldCBjbG9zZWQKK1BBU1MgY29va2llIGlzICJXSy10ZXN0
PTE7IFdLLXRlc3QtaHR0cG9ubHk9MSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvY29va2llcy9odHRwb25seS1jb29raWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy9jb29raWVzL2h0dHBvbmx5LWNvb2tpZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAuLmQyODY4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvY29va2llcy9odHRwb25seS1jb29raWUuaHRtbApAQCAtMCwwICsxLDUwIEBA
CisjIS91c3IvYmluL3BlcmwgLXdUCit1c2Ugc3RyaWN0OworCitwcmludCAiU2V0LUNvb2tpZTog
V0stdGVzdD0xXHJcbiI7CitwcmludCAiU2V0LUNvb2tpZTogV0stdGVzdC1odHRwb25seT0xOyBI
dHRwT25seVxyXG4iOworcHJpbnQgIlxyXG4iOworcHJpbnQgPDxIVE1MCis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5UZXN0
IFdlYlNvY2tldCBzZW5kcyBIdHRwT25seSBjb29raWVzLjwvcD4KKzxwPlNob3VsZCBzYXkgUEFT
Uzo8L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFy
IGNvb2tpZTsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgc2hvdWxkQmUoImNvb2tpZSIs
ICciV0stdGVzdD0xOyBXSy10ZXN0LWh0dHBvbmx5PTEiJyk7CisgICAgaXNTdWNjZXNzZnVsbHlQ
YXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwordmFyIHdzID0gbmV3IFdlYlNv
Y2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvY29va2llcy9lY2hvLWNv
b2tpZSIpOword3Mub25vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBv
cGVuIik7Cit9Oword3Mub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgY29va2llID0g
ZXZ0LmRhdGE7CisgICAgd3MuY2xvc2UoKTsKK307Cit3cy5vbmNsb3NlID0gZnVuY3Rpb24oKSB7
CisgICAgZGVidWcoIldlYlNvY2tldCBjbG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7Cit9OworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgorSFRNTApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBjZGQ5YjA5Li5hNDMzZDRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTAyLTAxICBGdW1p
dG9zaGkgVWthaSAgPHVrYWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYlNvY2tldCBpZ25vcmVzIEh0dHBPbmx5IGNvb2tp
ZXMsIGJ1dCBzaG91bGQgdXNlIGluIEhhbmRzaGFrZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0Mjg5CisKKyAgICAgICAgVGVzdDogd2Vic29ja2V0
L3Rlc3RzL2Nvb2tpZXMvaHR0cG9ubHktY29va2llLmh0bWwKKworICAgICAgICAqIHdlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENvb2tpZXNG
b3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpjbGll
bnRIYW5kc2hha2VNZXNzYWdlKToKKwogMjAxMC0wMi0wMSAgQWxleCBNaWxvd3NraSAgPGFsZXhA
bWlsb3dza2kuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgYi9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAppbmRleCA4ODNmODRiLi4xYzQ2ZjU5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAor
KysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcApAQCAtMzYsNiAr
MzYsNyBAQAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgpAQCAtODYsNiArODcsMjUg
QEAgc3RhdGljIFN0cmluZyByZXNvdXJjZU5hbWUoY29uc3QgS1VSTCYgdXJsKQogICAgIHJldHVy
biBuYW1lOwogfQogCitzdGF0aWMgU3RyaW5nIGdldENvb2tpZXNGb3JXZWJTb2NrZXQoRG9jdW1l
bnQgKmRvY3VtZW50LCBLVVJMJiB1cmwpCit7CisgICAgVmVjdG9yPENvb2tpZT4gY29va2llczsK
KyAgICBnZXRSYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIGNvb2tpZXMpOworICAgIFN0cmluZyBj
b29raWVMaW5lOworICAgIC8vIEZJWE1FOiBTZXQgJFZlcnNpb249djsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvb2tpZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgQ29va2llIGNvb2tp
ZSA9IGNvb2tpZXNbaV07CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIGNvb2tpZUxp
bmUgKz0gIjsgIjsKKyAgICAgICAgaWYgKCFjb29raWUubmFtZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBjb29raWVMaW5lICs9IGNvb2tpZS5uYW1lICsgIj0iOworICAgICAgICBjb29raWVMaW5l
ICs9IGNvb2tpZS52YWx1ZTsKKyAgICAgICAgLy8gRklYTUU6IHNldCAkUGF0aCwgJERvbWFpbiwg
Li4uCisgICAgfQorICAgIHJldHVybiBjb29raWVMaW5lOworfQorCisKIFdlYlNvY2tldEhhbmRz
aGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBw
cm90b2NvbCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fdXJsKHVy
bCkKICAgICAsIG1fY2xpZW50UHJvdG9jb2wocHJvdG9jb2wpCkBAIC0xODYsNyArMjA2LDcgQEAg
Q1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKSBjb25z
dAogICAgIC8vIFNldCAiQXV0aG9yaXphdGlvbjogPGNyZWRlbnRpYWxzPiIgaWYgYXV0aGVudGlj
YXRpb24gaW5mb3JtYXRpb24gZXhpc3RzIGZvciB1cmwuCiAgICAgaWYgKG1fY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZXMoZG9j
dW1lbnQsIHVybCk7CisgICAgICAgIFN0cmluZyBjb29raWUgPSBnZXRDb29raWVzRm9yV2ViU29j
a2V0KGRvY3VtZW50LCB1cmwpOwogICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJDb29raWU6ICIpOwogICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoY29va2llKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dl
YktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCAzOGNkNDU5Li40ZDkwOWRlIDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMTAtMDItMDEgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29j
a2V0IGlnbm9yZXMgSHR0cE9ubHkgY29va2llcywgYnV0IHNob3VsZCB1c2UgaW4gSGFuZHNoYWtl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQyODkK
KworICAgICAgICBVcGRhdGUgcHl3ZWJzb2NrZXQgdG8gMC40LjgsIHdoaWNoIHN1cHBvcnRzIGNn
aSBkaXJlY3Rvcmllcy4KKyAgICAgICAgcnVuLXdlYmtpdC10ZXN0cyBhbmQgcnVuLXdlYmtpdC13
ZWJzb2NrZXRzZXJ2ZXIgd2lsbCBydW4KKyAgICAgICAgcHl3ZWJzb2NrZXQsIHNwZWNpZnlpbmcg
L3dlYnNvY2tldC90ZXN0L2Nvb2tpZXMgYXMgY2dpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4t
d2Via2l0LXRlc3RzOgorICAgICAgICAqIFNjcmlwdHMvcnVuLXdlYmtpdC13ZWJzb2NrZXRzZXJ2
ZXI6CisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHk6
CisgICAgICAgICogcHl3ZWJzb2NrZXQvc2V0dXAucHk6CisKIDIwMTAtMDEtMzEgIENocmlzIEpl
cmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2hp
bmljaGlybyBIYW1hamkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJr
aXQtdGVzdHMgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMKaW5kZXggYmI0
ZmIzNC4uYmU1OGQwZSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0
LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cwpAQCAtMTM4
NCw2ICsxMzg0LDcgQEAgc3ViIG9wZW5XZWJTb2NrZXRTZXJ2ZXJJZk5lZWRlZCgpCiAgICAgICAg
ICItZCIsICIkd2ViU29ja2V0SGFuZGxlckRpciIsCiAgICAgICAgICItcyIsICIkd2ViU29ja2V0
SGFuZGxlclNjYW5EaXIiLAogICAgICAgICAiLW0iLCAiJHdlYlNvY2tldEhhbmRsZXJNYXBGaWxl
IiwKKyAgICAgICAgIi14IiwgIi93ZWJzb2NrZXQvdGVzdHMvY29va2llcyIsCiAgICAgICAgICIt
bCIsICIkbG9nRmlsZSIsCiAgICAgICAgICItLXN0cmljdCIsCiAgICAgKTsKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC13ZWJzb2NrZXRzZXJ2ZXIgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3J1bi13ZWJraXQtd2Vic29ja2V0c2VydmVyCmluZGV4IGJiYzVhZjYuLjY0
YTcyNGQgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC13ZWJzb2Nr
ZXRzZXJ2ZXIKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXdlYnNvY2tldHNl
cnZlcgpAQCAtNzUsNiArNzUsNyBAQCBzdWIgb3BlbldlYlNvY2tldFNlcnZlcigpCiAgICAgICAg
ICItZCIsICIkd2ViU29ja2V0SGFuZGxlckRpciIsCiAgICAgICAgICItcyIsICIkd2ViU29ja2V0
SGFuZGxlclNjYW5EaXIiLAogICAgICAgICAiLW0iLCAiJHdlYlNvY2tldEhhbmRsZXJNYXBGaWxl
IiwKKyAgICAgICAgIi14IiwgIi93ZWJzb2NrZXQvdGVzdHMvY29va2llcyIsCiAgICAgKTsKIAog
ICAgICRFTlZ7IlBZVEhPTlBBVEgifSA9ICR3ZWJTb2NrZXRQeXRob25QYXRoOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weQpp
bmRleCAwZTZhMzQ5Li44MmU2MWJjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9weXdlYnNvY2tl
dC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weQorKysgYi9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weQpAQCAtNTUsOSArNTUsMTQgQEAgdW5k
ZXIgc2Nhbl9kaXIgYXJlIHNjYW5uZWQuIFRoaXMgaXMgdXNlZnVsIGluIHNhdmluZyBzY2FuIHRp
bWUuCiBOb3RlOgogVGhpcyBzZXJ2ZXIgaXMgZGVyaXZlZCBmcm9tIFNvY2tldFNlcnZlci5UaHJl
YWRpbmdNaXhJbi4gSGVuY2UgYSB0aHJlYWQgaXMKIHVzZWQgZm9yIGVhY2ggcmVxdWVzdC4KKwor
U0VDVVJJVFkgV0FSTklORzogVGhpcyB1c2VzIENHSUhUVFBTZXJ2ZXIgYW5kIENHSUhUVFBTZXJ2
ZXIgaXMgbm90IHNlY3VyZS4KK0l0IG1heSBleGVjdXRlIGFyYml0cmFyeSBQeXRob24gY29kZSBv
ciBleHRlcm5hbCBwcm9ncmFtcy4gSXQgc2hvdWxkIG5vdCBiZQordXNlZCBvdXRzaWRlIGEgZmly
ZXdhbGwuCiAiIiIKIAogaW1wb3J0IEJhc2VIVFRQU2VydmVyCitpbXBvcnQgQ0dJSFRUUFNlcnZl
cgogaW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKIGltcG9ydCBTb2NrZXRTZXJ2ZXIKIGltcG9ydCBs
b2dnaW5nCkBAIC0yMDIsOCArMjA3LDggQEAgY2xhc3MgV2ViU29ja2V0U2VydmVyKFNvY2tldFNl
cnZlci5UaHJlYWRpbmdNaXhJbiwgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CiAgICAgICAg
ICMgdHJhaWxpbmcgY29tbWEuCiAKIAotY2xhc3MgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIoU2lt
cGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIlNpbXBsZUhU
VFBSZXF1ZXN0SGFuZGxlciBzcGVjaWFsaXplZCBmb3IgV2ViIFNvY2tldC4iIiIKK2NsYXNzIFdl
YlNvY2tldFJlcXVlc3RIYW5kbGVyKENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVy
KToKKyAgICAiIiJDR0lIVFRQUmVxdWVzdEhhbmRsZXIgc3BlY2lhbGl6ZWQgZm9yIFdlYiBTb2Nr
ZXQuIiIiCiAKICAgICBkZWYgc2V0dXAoc2VsZik6CiAgICAgICAgICIiIk92ZXJyaWRlIFNvY2tl
dFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlci5zZXR1cC4iIiIKQEAgLTIyMiw3ICsyMjcsNyBA
QCBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhU
VFBSZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgIHNlbGYuX2hhbmRzaGFrZXIgPSBoYW5kc2hha2Uu
SGFuZHNoYWtlcigKICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LCBzZWxmLl9kaXNwYXRj
aGVyLAogICAgICAgICAgICAgICAgIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLm9wdGlvbnMuc3Ry
aWN0KQotICAgICAgICBTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5f
X2luaXRfXygKKyAgICAgICAgQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIuX19p
bml0X18oCiAgICAgICAgICAgICAgICAgc2VsZiwgKmFyZ3MsICoqa2V5d29yZHMpCiAKICAgICBk
ZWYgX3ByaW50X3dhcm5pbmdzX2lmX2FueShzZWxmKToKQEAgLTIzNiw3ICsyNDEsNyBAQCBjbGFz
cyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1
ZXN0SGFuZGxlcik6CiAKICAgICAgICAgUmV0dXJuIFRydWUgdG8gY29udGludWUgcHJvY2Vzc2lu
ZyBmb3IgSFRUUChTKSwgRmFsc2Ugb3RoZXJ3aXNlLgogICAgICAgICAiIiIKLSAgICAgICAgcmVz
dWx0ID0gU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIucGFyc2VfcmVx
dWVzdChzZWxmKQorICAgICAgICByZXN1bHQgPSBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0
SGFuZGxlci5wYXJzZV9yZXF1ZXN0KHNlbGYpCiAgICAgICAgIGlmIHJlc3VsdDoKICAgICAgICAg
ICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgp
CkBAIC0yNjgsNiArMjczLDE2IEBAIGNsYXNzIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyKFNpbXBs
ZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgICAgICAgIyBGb3IgZXhh
bXBsZSwgSFRUUCBzdGF0dXMgY29kZSBpcyBsb2dnZWQgYnkgdGhpcyBtZXRob2QuCiAgICAgICAg
IGxvZ2dpbmcud2FybignJXMgLSAlcycgJSAoc2VsZi5hZGRyZXNzX3N0cmluZygpLCAoYXJnc1sw
XSAlIGFyZ3NbMTpdKSkpCiAKKyAgICBkZWYgaXNfY2dpKHNlbGYpOgorICAgICAgICAiIiJUZXN0
IHdoZXRoZXIgc2VsZi5wYXRoIGNvcnJlc3BvbmRzIHRvIGEgQ0dJIHNjcmlwdC4KKworICAgICAg
ICBBZGQgZXh0cmEgY2hlY2sgdGhhdCBzZWxmLnBhdGggZG9lc24ndCBjb250YWlucyAuLiIiIgor
ICAgICAgICBpZiBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5pc19jZ2koc2Vs
Zik6CisgICAgICAgICAgICBpZiAnLi4nIGluIHNlbGYucGF0aDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxz
ZQorCiAKIGRlZiBfY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucyk6CiAgICAgbG9nZ2VyID0gbG9n
Z2luZy5nZXRMb2dnZXIoKQpAQCAtMzI5LDYgKzM0NCwxMiBAQCBkZWYgX21haW4oKToKICAgICBw
YXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kb2N1bWVudF9yb290JywgZGVzdD0nZG9jdW1lbnRf
cm9vdCcsCiAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nLicsCiAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0nRG9jdW1lbnQgcm9vdCBkaXJlY3RvcnkuJykKKyAgICBwYXJzZXIuYWRk
X29wdGlvbignLXgnLCAnLS1jZ2lfcGF0aHMnLCBkZXN0PSdjZ2lfcGF0aHMnLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgn
Q0dJIHBhdGhzIHJlbGF0aXZlIHRvIGRvY3VtZW50X3Jvb3QuJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdDb21tYS1zZXBhcmF0ZWQuIChlLmcgLXggL2NnaSwvaHRiaW4pICcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnRmlsZXMgdW5kZXIgZG9jdW1lbnRfcm9vdC9jZ2lfcGF0
aCBhcmUgaGFuZGxlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzIENHSSBwcm9n
cmFtcy4gTXVzdCBiZSBleGVjdXRhYmxlLicpKQogICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcs
ICctLXRscycsIGRlc3Q9J3VzZV90bHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J3VzZSBUTFMgKHdzczovLyknKQogICAg
IHBhcnNlci5hZGRfb3B0aW9uKCctaycsICctLXByaXZhdGVfa2V5JywgZGVzdD0ncHJpdmF0ZV9r
ZXknLApAQCAtMzU5LDYgKzM4MCwxMSBAQCBkZWYgX21haW4oKToKICAgICBfY29uZmlndXJlX2xv
Z2dpbmcob3B0aW9ucykKIAogICAgIFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIucmVxdWVzdF9xdWV1
ZV9zaXplID0gb3B0aW9ucy5yZXF1ZXN0X3F1ZXVlX3NpemUKKyAgICBDR0lIVFRQU2VydmVyLkNH
SUhUVFBSZXF1ZXN0SGFuZGxlci5jZ2lfZGlyZWN0b3JpZXMgPSBbXQorCisgICAgaWYgb3B0aW9u
cy5jZ2lfcGF0aHM6CisgICAgICAgIENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVy
LmNnaV9kaXJlY3RvcmllcyA9IFwKKyAgICAgICAgICAgIG9wdGlvbnMuY2dpX3BhdGhzLnNwbGl0
KCcsJykKIAogICAgIGlmIG9wdGlvbnMudXNlX3RsczoKICAgICAgICAgaWYgbm90IF9IQVNfT1BF
Tl9TU0w6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weSBiL1dl
YktpdFRvb2xzL3B5d2Vic29ja2V0L3NldHVwLnB5CmluZGV4IGE0OWM5NDMuLjk3MjkzMjIgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3NldHVwLnB5CisrKyBiL1dlYktpdFRv
b2xzL3B5d2Vic29ja2V0L3NldHVwLnB5CkBAIC01Niw3ICs1Niw3IEBAIHNldHVwKGF1dGhvcj0n
WXV6byBGdWppc2hpbWEnLAogICAgICAgbmFtZT1fUEFDS0FHRV9OQU1FLAogICAgICAgcGFja2Fn
ZXM9W19QQUNLQUdFX05BTUVdLAogICAgICAgdXJsPSdodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
cHl3ZWJzb2NrZXQvJywKLSAgICAgIHZlcnNpb249JzAuNC43LjEnLAorICAgICAgdmVyc2lvbj0n
MC40LjgnLAogICAgICAgKQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48608</attachid>
            <date>2010-02-11 19:12:05 -0800</date>
            <delta_ts>2010-02-11 19:42:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34289-20100212121203.patch</filename>
            <type>text/plain</type>
            <size>22651</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0NWJkODYzLi5jMmM0MzU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDIt
MTEgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGlnbm9yZXMgSHR0cE9u
bHkgY29va2llcywgYnV0IHNob3VsZCB1c2UgaW4gSGFuZHNoYWtlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQyODkKKworICAgICAgICAqIHdlYnNv
Y2tldC90ZXN0cy9jb29raWVzL2VjaG8tY29va2llX3dzaC5weTogQWRkZWQuCisgICAgICAgICog
d2Vic29ja2V0L3Rlc3RzL2Nvb2tpZXMvaHR0cG9ubHktY29va2llLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL2Nvb2tpZXMvaHR0cG9ubHktY29va2llLnBs
OiBBZGRlZC4KKwogMjAxMC0wMi0xMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy9jb29raWVzL2VjaG8tY29va2llX3dzaC5weSBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy9jb29raWVzL2VjaG8tY29va2llX3dzaC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTRhYzJkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2Nvb2tpZXMvZWNoby1jb29raWVfd3NoLnB5CkBAIC0wLDAg
KzEsMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9y
dCBtc2d1dGlsCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToK
KyAgICBwYXNzCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAg
bXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgIHJlcXVlc3QuaGVhZGVyc19pblsnQ29va2ll
J10pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY29va2llcy9odHRw
b25seS1jb29raWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2Nv
b2tpZXMvaHR0cG9ubHktY29va2llLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zNzkwN2FhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2Nvb2tpZXMvaHR0cG9ubHktY29va2llLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDExIEBACitUZXN0IFdlYlNvY2tldCBzZW5kcyBIdHRwT25seSBjb29raWVzLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1dlYlNvY2tldCBvcGVuCitXZWJTb2NrZXQgY2xvc2Vk
CitQQVNTIGNvb2tpZSBpcyAiV0std2Vic29ja2V0LXRlc3Q9MTsgV0std2Vic29ja2V0LXRlc3Qt
aHR0cG9ubHk9MSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY29va2llcy9o
dHRwb25seS1jb29raWUucGwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY29va2llcy9o
dHRwb25seS1jb29raWUucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDUy
MWUwYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9jb29r
aWVzL2h0dHBvbmx5LWNvb2tpZS5wbApAQCAtMCwwICsxLDUwIEBACisjIS91c3IvYmluL3Blcmwg
LXdUCit1c2Ugc3RyaWN0OworCitwcmludCAiU2V0LUNvb2tpZTogV0std2Vic29ja2V0LXRlc3Q9
MVxyXG4iOworcHJpbnQgIlNldC1Db29raWU6IFdLLXdlYnNvY2tldC10ZXN0LWh0dHBvbmx5PTE7
IEh0dHBPbmx5XHJcbiI7CitwcmludCAiXHJcbiI7CitwcmludCA8PEhUTUwKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRl
c3QgV2ViU29ja2V0IHNlbmRzIEh0dHBPbmx5IGNvb2tpZXMuPC9wPgorPHA+T24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworfQorCit2YXIgY29va2llOworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBzaG91bGRC
ZSgiY29va2llIiwgJyJXSy13ZWJzb2NrZXQtdGVzdD0xOyBXSy13ZWJzb2NrZXQtdGVzdC1odHRw
b25seT0xIicpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Cit9CisKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjg4ODAv
d2Vic29ja2V0L3Rlc3RzL2Nvb2tpZXMvZWNoby1jb29raWUiKTsKK3dzLm9ub3BlbiA9IGZ1bmN0
aW9uKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgb3BlbiIpOworfTsKK3dzLm9ubWVzc2FnZSA9
IGZ1bmN0aW9uKGV2dCkgeworICAgIGNvb2tpZSA9IGV2dC5kYXRhOworICAgIHdzLmNsb3NlKCk7
Cit9Oword3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgY2xv
c2VkIik7CisgICAgZW5kVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KK0hUTUwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjg3YmJjMS4uZWNjMGFkOSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNiBAQAorMjAxMC0wMi0xMSAgRnVtaXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
ZWJTb2NrZXQgaWdub3JlcyBIdHRwT25seSBjb29raWVzLCBidXQgc2hvdWxkIHVzZSBpbiBIYW5k
c2hha2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NDI4OQorCisgICAgICAgIFRlc3Q6IHdlYnNvY2tldC90ZXN0cy9jb29raWVzL2h0dHBvbmx5LWNv
b2tpZS5wbAorCisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6IGFkZCBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSgpCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1CcmlkZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYW5kcm9pZC9Db29raWVKYXJBbmRyb2lkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvd2lu
L0Nvb2tpZUphckNGTmV0V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVK
YXJXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKiB3ZWJzb2Nr
ZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRI
YW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UpOiB1c2UgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoKSBpbnN0ZWFkIG9mIGNvb2tpZXMoKSB0byBpbmNsdWRlIEh0dHBPbmx5IGNv
b2tpZXMuCisKIDIwMTAtMDItMTEgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9Db29raWVKYXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgKaW5kZXgg
OTg3NTQzZS4uYzQ4YWE3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCkBAIC0zNyw2ICszNyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1Y3QgQ29va2llOwogCiAgICAgU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7CisgICAgU3RyaW5nIGNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwogICAgIHZv
aWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKICAg
ICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7CiAgICAgYm9vbCBnZXRSYXdD
b29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKaW5kZXggOTJiNGMxMy4u
ODNmOWM4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJy
aWRnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaApA
QCAtODUsNiArODUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENvb2tpZXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAg
ICAgIHN0YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHlGb3JDb29raWVzKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlG
b3JDb29raWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBWZWN0b3I8Q29va2llPiopOwog
ICAgICAgICBzdGF0aWMgdm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHAKaW5kZXggODMxYjM3OS4uZjYxOWYw
MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHAKQEAgLTUyLDYg
KzUyLDEyIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJs
KQogICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKK1N0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWVzLgorICAgIHJl
dHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7Cit9CisKIGJvb2wgY29va2llc0VuYWJs
ZWQoY29uc3QgRG9jdW1lbnQqKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJs
eSBiZSBhIHNldHRpbmcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUph
ci5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQppbmRleCBlMWQzZTVhLi5k
ZjI0YjAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCkBAIC04Niw2ICs4NiwxOCBAQCBT
dHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKICAgICByZXR1
cm4gU3RyaW5nKCk7CiB9CiAKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisKKyAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOworICAgIE5TQXJyYXkg
KmNvb2tpZXMgPSBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2Vd
IGNvb2tpZXNGb3JVUkw6Y29va2llVVJMXTsKKyAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVx
dWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNdIG9iamVjdEZvcktleTpAIkNvb2tp
ZSJdOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2FuZHJvaWQv
Q29va2llSmFyQW5kcm9pZC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYW5kcm9pZC9D
b29raWVKYXJBbmRyb2lkLmNwcAppbmRleCBiYTRiNWRjLi5kZDMyNGM1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYW5kcm9pZC9Db29raWVKYXJBbmRyb2lkLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYW5kcm9pZC9Db29raWVKYXJBbmRyb2lkLmNwcApA
QCAtNDEsNiArNDEsMTIgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiB1cmwpCiAgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjb29raWVzKHVybCk7CiB9CiAK
K1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUu
CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjb29raWVzKHVybCk7Cit9CisKIGJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQogewogICAgIHJldHVybiBQbGF0Zm9ybUJyaWRn
ZTo6Y29va2llc0VuYWJsZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCmluZGV4IDM1ZjFjM2YuLjQxY2YzMzEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJD
aHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tp
ZUphckNocm9taXVtLmNwcApAQCAtNDcsNiArNDcsMjUgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCiAgICAgcmV0dXJuIENocm9taXVt
QnJpZGdlOjpjb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwog
fQogCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgLy8gRklYTUU6IG1vdmUgaW4gQ2hy
b21pdW1CcmlkZ2U/CisgICAgVmVjdG9yPENvb2tpZT4gY29va2llczsKKyAgICBnZXRSYXdDb29r
aWVzKGRvY3VtZW50LCB1cmwsIGNvb2tpZXMpOworICAgIFN0cmluZyBjb29raWVMaW5lOworICAg
IC8vIEZJWE1FOiBTZXQgJFZlcnNpb249djsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
b2tpZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgQ29va2llIGNvb2tpZSA9IGNvb2tpZXNbaV07
CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIGNvb2tpZUxpbmUgKz0gIjsgIjsKKyAg
ICAgICAgaWYgKCFjb29raWUubmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb29raWVMaW5l
ICs9IGNvb2tpZS5uYW1lICsgIj0iOworICAgICAgICBjb29raWVMaW5lICs9IGNvb2tpZS52YWx1
ZTsKKyAgICAgICAgLy8gRklYTUU6IHNldCAkUGF0aCwgJERvbWFpbiwgLi4uCisgICAgfQorICAg
IHJldHVybiBjb29raWVMaW5lOworfQorCiBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFi
bGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNw
cAppbmRleCAzYmFkNGU0Li43YzkwNmEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Db29raWVKYXJDdXJsLmNwcApAQCAtMzksNiArMzksMTIgQEAgU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQogICAgIHJl
dHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKK1N0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgorICAg
IHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7Cit9CisKIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKIHsKICAgICByZXR1cm4gdHJ1ZTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKaW5k
ZXggMDRiZWNmNS4uZDY0NzliMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ29va2llSmFyU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvQ29va2llSmFyU291cC5jcHAKQEAgLTkzLDYgKzkzLDIyIEBAIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFNvdXBDb29r
aWVKYXIqIGphciA9IGRlZmF1bHRDb29raWVKYXIoKTsKKyAgICBpZiAoIWphcikKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworCisgICAgU291cFVSSSogdXJpID0gc291cF91cmlfbmV3KHVybC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBjaGFyKiBjb29raWVzID0gc291cF9jb29raWVf
amFyX2dldF9jb29raWVzKGphciwgdXJpLCBUUlVFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7
CisKKyAgICBTdHJpbmcgcmVzdWx0KFN0cmluZzo6ZnJvbVVURjgoY29va2llcykpOworICAgIGdf
ZnJlZShjb29raWVzKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKIHsKICAgICByZXR1cm4gZGVmYXVs
dENvb2tpZUphcigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9D
b29raWVKYXJDRk5ldFdpbi5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tp
ZUphckNGTmV0V2luLmNwcAppbmRleCAzM2I3OTVhLi5kNDMxMjg5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphckNGTmV0V2luLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphckNGTmV0V2luLmNwcApAQCAtMTA2LDYg
KzEwNiwyMCBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwpCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKK1N0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0g
Y3VycmVudENvb2tpZVN0b3JhZ2UoKTsKKyAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRD
RiwgdXJsLmNyZWF0ZUNGVVJMKCkpOworCisgICAgYm9vbCBzZWN1cmUgPSB1cmwucHJvdG9jb2xJ
cygiaHR0cHMiKTsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGKEFkb3B0Q0Ys
IENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLCB1cmxD
Ri5nZXQoKSwgc2VjdXJlKSk7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVy
Q0YoQWRvcHRDRiwgQ0ZIVFRQQ29va2llQ29weVJlcXVlc3RIZWFkZXJGaWVsZHMoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgY29va2llc0NGLmdldCgpKSk7CisgICAgcmV0dXJuIChDRlN0cmluZ1JlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7Cit9CisKIGJv
b2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKIHsKICAgICBD
RkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENGSFRUUENvb2tpZVN0b3Jh
Z2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAppbmRleCA2NTc2ZTA3Li4yYmRkNmIz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCkBA
IC01OSw2ICs1OSwxMiBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVu
dCovLCBjb25zdCBLVVJMJiB1cmwpCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsK
IH0KIAorU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIC8vIEZJWE1FOiBpbmNsdWRlIEh0
dHBPbmx5IGNvb2tpZQorICAgIHJldHVybiBjb29raWVzKGRvY3VtZW50LCB1cmwpOworfQorCiBi
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCiB7CiAgICAg
cmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCmluZGV4IGI2MjFlN2Uu
LjAxZDE3NTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCkBAIC0xMDMsNiArMTAz
LDI2IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsKQogICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAi
KSk7CiB9CiAKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKK3sKKyAgICBRVXJsIHUodXJsKTsKKyAg
ICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29va2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAo
IWphcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUUxpc3Q8UU5ldHdvcmtDb29r
aWU+IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodSk7CisgICAgaWYgKGNvb2tpZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBRU3RyaW5nTGlzdCByZXN1
bHRDb29raWVzOworICAgIGZvcmVhY2ggKFFOZXR3b3JrQ29va2llIG5ldHdvcmtDb29raWUsIGNv
b2tpZXMpIHsKKyAgICAgICAgcmVzdWx0Q29va2llcy5hcHBlbmQoUVN0cmluZzo6ZnJvbUFzY2lp
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrQ29va2llLnRvUmF3Rm9ybShR
TmV0d29ya0Nvb2tpZTo6TmFtZUFuZFZhbHVlT25seSkuY29uc3REYXRhKCkpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOworfQor
CiBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBR
TmV0d29ya0Nvb2tpZUphciogamFyID0gY29va2llSmFyKGRvY3VtZW50KTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKaW5kZXggODgzZjg0Yi4uNDQ3MTA5NiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIv
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTM2LDYgKzM2LDcg
QEAKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKQEAgLTE4Niw3ICsxODcsNyBAQCBD
U3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSgpIGNvbnN0
CiAgICAgLy8gU2V0ICJBdXRob3JpemF0aW9uOiA8Y3JlZGVudGlhbHM+IiBpZiBhdXRoZW50aWNh
dGlvbiBpbmZvcm1hdGlvbiBleGlzdHMgZm9yIHVybC4KICAgICBpZiAobV9jb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihtX2NvbnRleHQpOwotICAgICAgICBTdHJpbmcgY29va2llID0gY29va2llcyhkb2N1
bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOwogICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJDb29raWU6ICIpOwogICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoY29va2llKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCAzNzAxYjlmLi4wNDVkNzg1IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDItMTEgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViU29ja2V0IGlnbm9yZXMgSHR0cE9ubHkgY29va2llcywgYnV0IHNob3VsZCB1c2UgaW4gSGFu
ZHNoYWtlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzQyODkKKworICAgICAgICBVcGRhdGUgcHl3ZWJzb2NrZXQgdG8gMC40LjgsIHdoaWNoIHN1cHBv
cnRzIGNnaSBkaXJlY3Rvcmllcy4KKyAgICAgICAgcnVuLXdlYmtpdC10ZXN0cyBhbmQgcnVuLXdl
YmtpdC13ZWJzb2NrZXRzZXJ2ZXIgd2lsbCBydW4KKyAgICAgICAgcHl3ZWJzb2NrZXQsIHNwZWNp
ZnlpbmcgL3dlYnNvY2tldC90ZXN0L2Nvb2tpZXMgYXMgY2dpIGRpcmVjdG9yeS4KKworICAgICAg
ICAqIFNjcmlwdHMvcnVuLXdlYmtpdC10ZXN0czoKKyAgICAgICAgKiBTY3JpcHRzL3J1bi13ZWJr
aXQtd2Vic29ja2V0c2VydmVyOgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tl
dC9zdGFuZGFsb25lLnB5OgorICAgICAgICAqIHB5d2Vic29ja2V0L3NldHVwLnB5OgorCiAyMDEw
LTAyLTExICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Vi
a2l0LXRlc3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzCmluZGV4IDg5
ZDNlY2IuLjgwOWUwNzggMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtp
dC10ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMKQEAgLTEz
OTgsNiArMTM5OCw3IEBAIHN1YiBvcGVuV2ViU29ja2V0U2VydmVySWZOZWVkZWQoKQogICAgICAg
ICAiLWQiLCAiJHdlYlNvY2tldEhhbmRsZXJEaXIiLAogICAgICAgICAiLXMiLCAiJHdlYlNvY2tl
dEhhbmRsZXJTY2FuRGlyIiwKICAgICAgICAgIi1tIiwgIiR3ZWJTb2NrZXRIYW5kbGVyTWFwRmls
ZSIsCisgICAgICAgICIteCIsICIvd2Vic29ja2V0L3Rlc3RzL2Nvb2tpZXMiLAogICAgICAgICAi
LWwiLCAiJGxvZ0ZpbGUiLAogICAgICAgICAiLS1zdHJpY3QiLAogICAgICk7CmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtd2Vic29ja2V0c2VydmVyIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXdlYnNvY2tldHNlcnZlcgppbmRleCBiYmM1YWY2Li42
NGE3MjRkIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtd2Vic29j
a2V0c2VydmVyCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC13ZWJzb2NrZXRz
ZXJ2ZXIKQEAgLTc1LDYgKzc1LDcgQEAgc3ViIG9wZW5XZWJTb2NrZXRTZXJ2ZXIoKQogICAgICAg
ICAiLWQiLCAiJHdlYlNvY2tldEhhbmRsZXJEaXIiLAogICAgICAgICAiLXMiLCAiJHdlYlNvY2tl
dEhhbmRsZXJTY2FuRGlyIiwKICAgICAgICAgIi1tIiwgIiR3ZWJTb2NrZXRIYW5kbGVyTWFwRmls
ZSIsCisgICAgICAgICIteCIsICIvd2Vic29ja2V0L3Rlc3RzL2Nvb2tpZXMiLAogICAgICk7CiAK
ICAgICAkRU5WeyJQWVRIT05QQVRIIn0gPSAkd2ViU29ja2V0UHl0aG9uUGF0aDsKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5
IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkK
aW5kZXggMGU2YTM0OS4uODJlNjFiYyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKQEAgLTU1LDkgKzU1LDE0IEBAIHVu
ZGVyIHNjYW5fZGlyIGFyZSBzY2FubmVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBzYXZpbmcgc2NhbiB0
aW1lLgogTm90ZToKIFRoaXMgc2VydmVyIGlzIGRlcml2ZWQgZnJvbSBTb2NrZXRTZXJ2ZXIuVGhy
ZWFkaW5nTWl4SW4uIEhlbmNlIGEgdGhyZWFkIGlzCiB1c2VkIGZvciBlYWNoIHJlcXVlc3QuCisK
K1NFQ1VSSVRZIFdBUk5JTkc6IFRoaXMgdXNlcyBDR0lIVFRQU2VydmVyIGFuZCBDR0lIVFRQU2Vy
dmVyIGlzIG5vdCBzZWN1cmUuCitJdCBtYXkgZXhlY3V0ZSBhcmJpdHJhcnkgUHl0aG9uIGNvZGUg
b3IgZXh0ZXJuYWwgcHJvZ3JhbXMuIEl0IHNob3VsZCBub3QgYmUKK3VzZWQgb3V0c2lkZSBhIGZp
cmV3YWxsLgogIiIiCiAKIGltcG9ydCBCYXNlSFRUUFNlcnZlcgoraW1wb3J0IENHSUhUVFBTZXJ2
ZXIKIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCiBpbXBvcnQgU29ja2V0U2VydmVyCiBpbXBvcnQg
bG9nZ2luZwpAQCAtMjAyLDggKzIwNyw4IEBAIGNsYXNzIFdlYlNvY2tldFNlcnZlcihTb2NrZXRT
ZXJ2ZXIuVGhyZWFkaW5nTWl4SW4sIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgogICAgICAg
ICAjIHRyYWlsaW5nIGNvbW1hLgogCiAKLWNsYXNzIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyKFNp
bXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKLSAgICAiIiJTaW1wbGVI
VFRQUmVxdWVzdEhhbmRsZXIgc3BlY2lhbGl6ZWQgZm9yIFdlYiBTb2NrZXQuIiIiCitjbGFzcyBX
ZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcihDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxl
cik6CisgICAgIiIiQ0dJSFRUUFJlcXVlc3RIYW5kbGVyIHNwZWNpYWxpemVkIGZvciBXZWIgU29j
a2V0LiIiIgogCiAgICAgZGVmIHNldHVwKHNlbGYpOgogICAgICAgICAiIiJPdmVycmlkZSBTb2Nr
ZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIuc2V0dXAuIiIiCkBAIC0yMjIsNyArMjI3LDcg
QEAgY2xhc3MgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVI
VFRQUmVxdWVzdEhhbmRsZXIpOgogICAgICAgICBzZWxmLl9oYW5kc2hha2VyID0gaGFuZHNoYWtl
LkhhbmRzaGFrZXIoCiAgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdCwgc2VsZi5fZGlzcGF0
Y2hlciwKICAgICAgICAgICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLnN0
cmljdCkKLSAgICAgICAgU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIu
X19pbml0X18oCisgICAgICAgIENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLl9f
aW5pdF9fKAogICAgICAgICAgICAgICAgIHNlbGYsICphcmdzLCAqKmtleXdvcmRzKQogCiAgICAg
ZGVmIF9wcmludF93YXJuaW5nc19pZl9hbnkoc2VsZik6CkBAIC0yMzYsNyArMjQxLDcgQEAgY2xh
c3MgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVx
dWVzdEhhbmRsZXIpOgogCiAgICAgICAgIFJldHVybiBUcnVlIHRvIGNvbnRpbnVlIHByb2Nlc3Np
bmcgZm9yIEhUVFAoUyksIEZhbHNlIG90aGVyd2lzZS4KICAgICAgICAgIiIiCi0gICAgICAgIHJl
c3VsdCA9IFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3Jl
cXVlc3Qoc2VsZikKKyAgICAgICAgcmVzdWx0ID0gQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVz
dEhhbmRsZXIucGFyc2VfcmVxdWVzdChzZWxmKQogICAgICAgICBpZiByZXN1bHQ6CiAgICAgICAg
ICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlci5kb19oYW5kc2hha2Uo
KQpAQCAtMjY4LDYgKzI3MywxNiBAQCBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcihTaW1w
bGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgICMgRm9yIGV4
YW1wbGUsIEhUVFAgc3RhdHVzIGNvZGUgaXMgbG9nZ2VkIGJ5IHRoaXMgbWV0aG9kLgogICAgICAg
ICBsb2dnaW5nLndhcm4oJyVzIC0gJXMnICUgKHNlbGYuYWRkcmVzc19zdHJpbmcoKSwgKGFyZ3Nb
MF0gJSBhcmdzWzE6XSkpKQogCisgICAgZGVmIGlzX2NnaShzZWxmKToKKyAgICAgICAgIiIiVGVz
dCB3aGV0aGVyIHNlbGYucGF0aCBjb3JyZXNwb25kcyB0byBhIENHSSBzY3JpcHQuCisKKyAgICAg
ICAgQWRkIGV4dHJhIGNoZWNrIHRoYXQgc2VsZi5wYXRoIGRvZXNuJ3QgY29udGFpbnMgLi4iIiIK
KyAgICAgICAgaWYgQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIuaXNfY2dpKHNl
bGYpOgorICAgICAgICAgICAgaWYgJy4uJyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFs
c2UKKwogCiBkZWYgX2NvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMpOgogICAgIGxvZ2dlciA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCkKQEAgLTMyOSw2ICszNDQsMTIgQEAgZGVmIF9tYWluKCk6CiAgICAg
cGFyc2VyLmFkZF9vcHRpb24oJy1kJywgJy0tZG9jdW1lbnRfcm9vdCcsIGRlc3Q9J2RvY3VtZW50
X3Jvb3QnLAogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Jy4nLAogICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J0RvY3VtZW50IHJvb3QgZGlyZWN0b3J5LicpCisgICAgcGFyc2VyLmFk
ZF9vcHRpb24oJy14JywgJy0tY2dpX3BhdGhzJywgZGVzdD0nY2dpX3BhdGhzJywKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0o
J0NHSSBwYXRocyByZWxhdGl2ZSB0byBkb2N1bWVudF9yb290LicKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnQ29tbWEtc2VwYXJhdGVkLiAoZS5nIC14IC9jZ2ksL2h0YmluKSAnCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpbGVzIHVuZGVyIGRvY3VtZW50X3Jvb3QvY2dpX3Bh
dGggYXJlIGhhbmRsZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBDR0kgcHJv
Z3JhbXMuIE11c3QgYmUgZXhlY3V0YWJsZS4nKSkKICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQn
LCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExTICh3c3M6Ly8pJykKICAg
ICBwYXJzZXIuYWRkX29wdGlvbignLWsnLCAnLS1wcml2YXRlX2tleScsIGRlc3Q9J3ByaXZhdGVf
a2V5JywKQEAgLTM1OSw2ICszODAsMTEgQEAgZGVmIF9tYWluKCk6CiAgICAgX2NvbmZpZ3VyZV9s
b2dnaW5nKG9wdGlvbnMpCiAKICAgICBTb2NrZXRTZXJ2ZXIuVENQU2VydmVyLnJlcXVlc3RfcXVl
dWVfc2l6ZSA9IG9wdGlvbnMucmVxdWVzdF9xdWV1ZV9zaXplCisgICAgQ0dJSFRUUFNlcnZlci5D
R0lIVFRQUmVxdWVzdEhhbmRsZXIuY2dpX2RpcmVjdG9yaWVzID0gW10KKworICAgIGlmIG9wdGlv
bnMuY2dpX3BhdGhzOgorICAgICAgICBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxl
ci5jZ2lfZGlyZWN0b3JpZXMgPSBcCisgICAgICAgICAgICBvcHRpb25zLmNnaV9wYXRocy5zcGxp
dCgnLCcpCiAKICAgICBpZiBvcHRpb25zLnVzZV90bHM6CiAgICAgICAgIGlmIG5vdCBfSEFTX09Q
RU5fU1NMOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvc2V0dXAucHkgYi9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weQppbmRleCBhNDljOTQzLi45NzI5MzIyIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weQorKysgYi9XZWJLaXRU
b29scy9weXdlYnNvY2tldC9zZXR1cC5weQpAQCAtNTYsNyArNTYsNyBAQCBzZXR1cChhdXRob3I9
J1l1em8gRnVqaXNoaW1hJywKICAgICAgIG5hbWU9X1BBQ0tBR0VfTkFNRSwKICAgICAgIHBhY2th
Z2VzPVtfUEFDS0FHRV9OQU1FXSwKICAgICAgIHVybD0naHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9w
L3B5d2Vic29ja2V0LycsCi0gICAgICB2ZXJzaW9uPScwLjQuNy4xJywKKyAgICAgIHZlcnNpb249
JzAuNC44JywKICAgICAgICkKIAogCg==
</data>
<flag name="review"
          id="31322"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>