<?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>40079</bug_id>
          
          <creation_ts>2010-06-02 12:57:04 -0700</creation_ts>
          <short_desc>[Qt] Support evaluateScriptInIsolatedWorld()</short_desc>
          <delta_ts>2010-09-11 19:23:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robert Hogan">robert</reporter>
          <assigned_to name="Robert Hogan">robert</assigned_to>
          <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>yaohan.chen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>233399</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-02 12:57:04 -0700</bug_when>
    <thetext>This initial implementation passes 25 of the 27 tests in
http/tests/isolatedworld as well as four others that use the
call in LayoutTests.

Further work/investigation is required to support the two
remaining tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233411</commentid>
    <comment_count>1</comment_count>
      <attachid>57690</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-02 13:21:04 -0700</bug_when>
    <thetext>Created attachment 57690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240183</commentid>
    <comment_count>2</comment_count>
      <attachid>57690</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-18 15:32:40 -0700</bug_when>
    <thetext>Comment on attachment 57690
Patch

WebKit/qt/Api/qwebframe.cpp:1380
 +          JSC::JSValue v = d-&gt;frame-&gt;script()-&gt;executeScriptInWorld(scriptWorld-&gt;world(), scriptSource, true).jsValue();
Why not use the |proxy| local variable here?

WebKit/qt/Api/qwebframe.cpp:1381
 +          int distance = 0;
Move this below the if?

WebKit/qt/Api/qwebscriptworld.cpp:35
 +    d = new QWebScriptWorldPrivate(ScriptController::createWorld());
Bad indent

WebKit/qt/Api/qwebscriptworld.h:45
 +  private:
Why the second private declaration?

WebKit/qt/Api/qwebscriptworld_p.h:35
 +      }
Maybe add a blank line after this { } and the next?  Not sure what the style here is supposed to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240311</commentid>
    <comment_count>3</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-19 04:03:35 -0700</bug_when>
    <thetext>Committed r61478: &lt;http://trac.webkit.org/changeset/61478&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240666</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-06-21 05:51:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Committed r61478: &lt;http://trac.webkit.org/changeset/61478&gt;

This commit adds new API to QtWebKit that uses WebCore types. Is that intentional Robert?

Was it meant to be part of DumpRenderTreeSupport?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240680</commentid>
    <comment_count>5</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-06-21 06:24:42 -0700</bug_when>
    <thetext>This patch broke the trunk build on MSVC2008:

qwebframe.cpp
c:\dev\build-qt-47\include\qtcore\../../../qt/src/corelib/tools/qshareddata.h(159) : error C2027: use of undefined type &apos;QWebScriptWorldPrivate&apos;
        c:\dev\webkit\webkit\qt\api\qwebscriptworld.h(32) : see declaration of &apos;QWebScriptWorldPrivate&apos;
        c:\dev\build-qt-47\include\qtcore\../../../qt/src/corelib/tools/qshareddata.h(159) : while compiling class template member function &apos;QExplicitlySharedDataPointer&lt;T&gt;::~QExplicitlySharedDataPointer(void)&apos;
        with
        [
            T=QWebScriptWorldPrivate
        ]
        c:\dev\webkit\webkit\qt\api\qwebscriptworld.h(43) : see reference to class template instantiation &apos;QExplicitlySharedDataPointer&lt;T&gt;&apos; being compiled
        with
        [
            T=QWebScriptWorldPrivate
        ]
c:\dev\build-qt-47\include\qtcore\../../../qt/src/corelib/tools/qshareddata.h(159) : error C2227: left of &apos;-&gt;ref&apos; must point to class/struct/union/generic type
c:\dev\build-qt-47\include\qtcore\../../../qt/src/corelib/tools/qshareddata.h(159) : error C2228: left of &apos;.deref&apos; must have class/struct/union


I&apos;m not sure if it is possible to use a QExplicitlySharedDataPointer without having the full QWebScriptWorldPrivate type included. The fix is not trivial so it would be nice if you can have a look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240771</commentid>
    <comment_count>6</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-21 10:40:10 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Committed r61478: &lt;http://trac.webkit.org/changeset/61478&gt;
&gt; 
&gt; This commit adds new API to QtWebKit that uses WebCore types. Is that intentional Robert?
&gt; 
&gt; Was it meant to be part of DumpRenderTreeSupport?

Ultimately I just wanted to pass the tests, but when I looked at the implementation of other ports I noticed they all supported it through public API. (windows: stringByEvaluatingJavaScriptInScriptWorld(), chromium: executeScriptInIsolatedWorld()) so I did the same.

Seemed a waste to just support through DRTSupport..

On reflection though - should have sought review from Qt people before committing for an API change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240777</commentid>
    <comment_count>7</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-21 10:53:27 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This patch broke the trunk build on MSVC2008:
&gt; 
&gt; qwebframe.cpp
&gt; c:\dev\build-qt-47\include\qtcore\../../../qt/src/corelib/tools/qshareddata.h(159) : error C2027: use of undefined type &apos;QWebScriptWorldPrivate&apos;
&gt;         c:\dev\webkit\webkit\qt\api\qwebscriptworld.h(32) : see declaration of &apos;QWebScriptWorldPrivate&apos;
&gt;         c:\dev\build-qt-47\include\qtcore\../../../qt/src/corelib/tools/qshareddata.h(159) : while compiling class template member function &apos;QExplicitlySharedDataPointer&lt;T&gt;::~QExplicitlySharedDataPointer(void)&apos;
&gt;         with
&gt;         [
&gt;             T=QWebScriptWorldPrivate
&gt;         ]
&gt;         c:\dev\webkit\webkit\qt\api\qwebscriptworld.h(43) : see reference to class template instantiation &apos;QExplicitlySharedDataPointer&lt;T&gt;&apos; being compiled
&gt;         with
&gt;         [
&gt;             T=QWebScriptWorldPrivate
&gt;         ]
&gt; c:\dev\build-qt-47\include\qtcore\../../../qt/src/corelib/tools/qshareddata.h(159) : error C2227: left of &apos;-&gt;ref&apos; must point to class/struct/union/generic type
&gt; c:\dev\build-qt-47\include\qtcore\../../../qt/src/corelib/tools/qshareddata.h(159) : error C2228: left of &apos;.deref&apos; must have class/struct/union
&gt; 
&gt; 
&gt; I&apos;m not sure if it is possible to use a QExplicitlySharedDataPointer without having the full QWebScriptWorldPrivate type included. The fix is not trivial so it would be nice if you can have a look at it.

As far as I can tell, my implementation is the same as QWebSecurityOriginPrivate. 

Does it mean I need to include DOMWrapperWorld.h in qwebscriptworld_p.h ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242051</commentid>
    <comment_count>8</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-06-23 13:22:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; Committed r61478: &lt;http://trac.webkit.org/changeset/61478&gt;
&gt; &gt; 
&gt; &gt; This commit adds new API to QtWebKit that uses WebCore types. Is that intentional Robert?
&gt; &gt; 
&gt; &gt; Was it meant to be part of DumpRenderTreeSupport?
&gt; 
&gt; Ultimately I just wanted to pass the tests, but when I looked at the implementation of other ports I noticed they all supported it through public API. (windows: stringByEvaluatingJavaScriptInScriptWorld(), chromium: executeScriptInIsolatedWorld()) so I did the same.
&gt; 
&gt; Seemed a waste to just support through DRTSupport..
&gt; 
&gt; On reflection though - should have sought review from Qt people before committing for an API change.

Yes, we need a proper API review for this CCing Simon and Kenneth.

One issue I notices is that this exposes WebCore internal structures (WebCore::DOMWrapperWorld) publicly which is a bad idea. 

REOPEN the bug to address the WebCore exposure and to make sure this gets an API discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242110</commentid>
    <comment_count>9</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-23 14:57:08 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; 
&gt; One issue I notices is that this exposes WebCore internal structures (WebCore::DOMWrapperWorld) publicly which is a bad idea. 
&gt; 

Ah, OK. So just have QWebFrame::evaluateScriptInIsolatedWorld(script) and don&apos;t export qwebscriptworld.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242394</commentid>
    <comment_count>10</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-06-24 02:24:45 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Ah, OK. So just have QWebFrame::evaluateScriptInIsolatedWorld(script) and don&apos;t export qwebscriptworld.h?

If I understood correctly, this functionnality in WebCore serves to run user-provided javascripts more securely (as with Chrome extensions).

I think that it would be nice to know real world use cases for apps using QtWebKit for this function, to try solving an actual problem and not just try exposing a mechanism.

This would help prevent cumbersome APIs that we might have to step over if we want to further extend QtWebKit scripting possibilities in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242609</commentid>
    <comment_count>11</comment_count>
      <attachid>59684</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-24 11:55:47 -0700</bug_when>
    <thetext>Created attachment 59684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242614</commentid>
    <comment_count>12</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-24 12:03:57 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Ah, OK. So just have QWebFrame::evaluateScriptInIsolatedWorld(script) and don&apos;t export qwebscriptworld.h?
&gt; 
&gt; If I understood correctly, this functionnality in WebCore serves to run user-provided javascripts more securely (as with Chrome extensions).
&gt; 
&gt; I think that it would be nice to know real world use cases for apps using QtWebKit for this function, to try solving an actual problem and not just try exposing a mechanism.
&gt; 
&gt; This would help prevent cumbersome APIs that we might have to step over if we want to further extend QtWebKit scripting possibilities in the future.

Agreed that this was the discussion that needed to happen before adding API. So this patch moves the functionality back into DRT where it appears to belong for now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243131</commentid>
    <comment_count>13</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-06-25 12:30:03 -0700</bug_when>
    <thetext>Committed r61879: &lt;http://trac.webkit.org/changeset/61879&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277829</commentid>
    <comment_count>14</comment_count>
    <who name="Yaohan Chen">yaohan.chen</who>
    <bug_when>2010-09-11 19:23:49 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; Ah, OK. So just have QWebFrame::evaluateScriptInIsolatedWorld(script) and don&apos;t export qwebscriptworld.h?
&gt; &gt; 
&gt; &gt; If I understood correctly, this functionnality in WebCore serves to run user-provided javascripts more securely (as with Chrome extensions).
&gt; &gt; 
&gt; &gt; I think that it would be nice to know real world use cases for apps using QtWebKit for this function, to try solving an actual problem and not just try exposing a mechanism.
&gt; &gt; 
&gt; &gt; This would help prevent cumbersome APIs that we might have to step over if we want to further extend QtWebKit scripting possibilities in the future.
&gt; 
&gt; Agreed that this was the discussion that needed to happen before adding API. So this patch moves the functionality back into DRT where it appears to belong for now!

Thanks for working to support isolated world in QtWebkit, but I am disappointed that the decision seems to be to not expose the API now. I am still confused about the plans for this feature: obviously without the API applications using QtWebkit would not be using the feature, so what would be needed before the API can be added?

It seems to me a typical use case would be that a browser can provide extra API similar to GreaseMonkey&apos;s GM_XMLHttpRequest or Chrome&apos;s chrome.extension.* to userscripts or javascript extensions, but not to website scripts, using isolated world. addToJavaScriptWindowObject already makes it possible to provide such features, but am I correct that it would also expose them to website scripts, and this is where isolated worlds would be useful? This thread between a Uzbl (a Webkit-GTK browser) developer and Webkit developers &lt;https://lists.webkit.org/pipermail/webkit-dev/2010-January/011122.html&gt; seems to suggest so. If that is correct, could there be an API in QtWebkit to allow the application to expose a Qt Object to an isolated world and evaluate javascript in it?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57690</attachid>
            <date>2010-06-02 13:21:04 -0700</date>
            <delta_ts>2010-06-24 11:55:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40079-20100602212101.patch</filename>
            <type>text/plain</type>
            <size>17529</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNjdjNjVmNmRiN2Q0MTMyMGIwZGZmNTcwYmZjNTExZTAwZTBmNWJhLi44NzJhYjUz
MWY3ZmNiYTdhMjE5ZmU3NzUyZTczYTIxZTE4ODhhNjNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTAtMDYtMDIgIFJvYmVydCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gU3VwcG9ydCBldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgpCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDc5CisKKyAgICAgICAgVGhpcyBpbml0aWFsIGltcGxl
bWVudGF0aW9uIHBhc3NlcyAyNSBvZiB0aGUgMjcgdGVzdHMgaW4KKyAgICAgICAgaHR0cC90ZXN0
cy9pc29sYXRlZHdvcmxkIGFzIHdlbGwgYXMgZm91ciBvdGhlcnMgdGhhdCB1c2UgdGhlCisgICAg
ICAgIGNhbGwgaW4gTGF5b3V0VGVzdHMuCisKKyAgICAgICAgRnVydGhlciB3b3JrL2ludmVzdGln
YXRpb24gaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUgdHdvCisgICAgICAgIHJlbWFpbmluZyB0
ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisKIDIwMTAtMDYtMDIgIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmll
d2VkOiBhZGRlZCBuZXcgaW5zcGVjdG9yIHRlc3QgdG8gU2tpcHBlZCBpbiBUaWdlciBmb3IKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IGE2MDFlNzI2MTMwM2RiNGVhZGJkNGRhZTlkNjM4NGI0
MTdlMTU0OWYuLjJiOTBlN2M3ZGE2NDBjYzI3OTU1MjIzZTBmMjkyMDM4MGVjOWY4NGYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvU2tpcHBlZApAQCAtMjgxLDEzICsyODEsMTAgQEAgaHR0cC90ZXN0cy9taXNj
L3BvbGljeS1kZWxlZ2F0ZS1jYWxsZWQtdHdpY2UuaHRtbAogaHR0cC90ZXN0cy9taXNjL3JlZGly
ZWN0LXRvLWV4dGVybmFsLXVybC5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZlZWQtdXJscy1m
cm9tLXJlbW90ZS5odG1sCiAKLSMgTWlzc2luZyBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgpCi1odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29y
bGQKLXN0b3JhZ2Uvc3RhdGVtZW50LWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwK
LXN0b3JhZ2Uvc3RhdGVtZW50LXN1Y2Nlc3MtY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbAot
c3RvcmFnZS90cmFuc2FjdGlvbi1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCi1zdG9yYWdl
L3RyYW5zYWN0aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKLXN0b3JhZ2Uv
dHJhbnNhY3Rpb24tc3VjY2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCisjIFRoaXMg
cmVxdWlyZXMgZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUluSXNvbGF0ZWRXb3JsZCBmb28g
aW4gRnJhbWVMb2FkZXJDbGllbnQKK2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9k
aWRDbGVhcldpbmRvd09iamVjdC5odG1sCisjIFRoaXMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9u
CitodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvd29ybGQtcmV1c2UuaHRtbAogCiAj
IEV2YWx1YXRlIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGZyYW1lIGxvYWRlciBjYWxsYmFja3MKICMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0ODM5CmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY1MmQ4NTUwYzg1
YmFiMzgwYTA3MjgwMGZjOTEyNTQ0NTk2ZDU5N2IuLjFkNjU3ZWYxYTIwNjMyYTlmNjc2YjNjYjdl
MWUwZmIzMzI4M2VkMmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDYtMDIgIFJvYmVydCBIb2dhbiAg
PHJvYmVydEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtRdF0gU3VwcG9ydCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgp
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDc5
CisKKyAgICAgICAgZ2V0T3duUHJvcGVydHlOYW1lcygpIGNyYXNoZXMgaWYgUHJvcGVydHlOYW1l
QXJyYXkgaXMgc2l6ZSAwLiBUaGlzIGNoYW5nZSBhbGxvd3MKKyAgICAgICAgaHR0cC90ZXN0cy93
b3JsZC1yZXVzZS5odG1sIGFuZCBkaWRDbGVhcldpbmRvd09iamVjdC5odG1sIHRvIGZhaWwgaW5z
dGVhZCBvZiBjcmFzaC4KKworICAgICAgICAqIFdlYkNvcmUucHJvOiBBZGQgcXdlYnNjcmlwdHdv
cmxkLioKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KToKKwogMjAxMC0wNi0wMiAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENh
cmxzc29uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KaW5kZXggMTFhM2RjYmMzYTc0NGQ0YTQ3NTU5NjE4Yjc0NzEzMWQyYTQyNWY1NS4uMWU0
MDExMmU4NDEyNzRhNDI5N2E0NDhhYmVkYWVhYjVjZmFiMTgzZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yMTY5LDYgKzIxNjks
NyBAQCBTT1VSQ0VTICs9IFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFz
ZS5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwIFwKICAg
ICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAgXAorICAgIC4uL1dlYktp
dC9xdC9BcGkvcXdlYnNjcmlwdHdvcmxkLmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vi
ZGF0YWJhc2UuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwIFwK
ICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmNwcApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAgYi9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50
aW1lLmNwcAppbmRleCA0N2Y3ZDRhMWMyODBhMTBkZjNkODI2ZDhkMTllM2E2OTA1NWQ5OGUxLi5m
NmQ0YzdjZGUyZDIxOTRhMjRlYmRlZTQ0NjhlODk0ZmI3MDg3MmU2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAorKysgYi9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcApAQCAtMzM2LDcgKzMzNiw4IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZh
cmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUKICAg
ICAgICAgICAgIGlmICh0eXBlID09IE9iamVjdCB8fCB0eXBlID09IEFycmF5IHx8IHR5cGUgPT0g
UlRBcnJheSkgewogICAgICAgICAgICAgICAgIC8vIEVudW1lcmF0ZSB0aGUgY29udGVudHMgb2Yg
dGhlIG9iamVjdAogICAgICAgICAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMo
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHBy
b3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnNpemUoKSA+IDApCisg
ICAgICAgICAgICAgICAgICAgIG9iamVjdC0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0
aWVzKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7CiAKICAgICAgICAgICAgICAgICBRVmFyaWFudE1hcCBy
ZXN1bHQ7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL2hlYWRlcnMucHJpIGIvV2ViS2l0L3F0
L0FwaS9oZWFkZXJzLnByaQppbmRleCAyOWJiMTI1YjJhMjdmM2FiYzNjM2QxZDI5ZTZlNWRmYmQy
OTlkZTNhLi5lOWZlMjhkMzlhNzU4ZTlmNjYwZTAxOTBmNmYzMmNkYjMwMTk0YjA3IDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL2hlYWRlcnMucHJpCisrKyBiL1dlYktpdC9xdC9BcGkvaGVhZGVy
cy5wcmkKQEAgLTEyLDQgKzEyLDUgQEAgV0VCS0lUX0FQSV9IRUFERVJTID0gJCRQV0QvcXdlYmZy
YW1lLmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0QvcXdlYnBsdWdpbmZhY3RvcnkuaCBc
CiAgICAgICAgICAgICAgICAgICAgICAkJFBXRC9xd2ViaGlzdG9yeS5oIFwKICAgICAgICAgICAg
ICAgICAgICAgICQkUFdEL3F3ZWJpbnNwZWN0b3IuaCBcCi0gICAgICAgICAgICAgICAgICAgICAk
JFBXRC9xd2Via2l0dmVyc2lvbi5oCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC9xd2Via2l0
dmVyc2lvbi5oIFwKKyAgICAgICAgICAgICAgICAgICAgICQkUFdEL3F3ZWJzY3JpcHR3b3JsZC5o
CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKaW5kZXggN2EyOGY4Mzk2YTQ0NWZlNWNiNDExMDA0OGUxYWU1OWZhZDhk
NTRlYS4uNjQxNjY0ZmJjYjliNjQ2Mjc3MjlhMDU0MmM2NzgzZDJlNzFiMGE5NSAxMDA2NDQKLS0t
IGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcApAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKICNpbmNs
dWRlICJxd2Vic2VjdXJpdHlvcmlnaW4uaCIKICNpbmNsdWRlICJxd2Vic2VjdXJpdHlvcmlnaW5f
cC5oIgorI2luY2x1ZGUgInF3ZWJzY3JpcHR3b3JsZC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2Jq
ZWN0LmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVkZSAid3RmL0hhc2hNYXAu
aCIKQEAgLTEzNzAsNiArMTM3MSwyMiBAQCBRVmFyaWFudCBRV2ViRnJhbWU6OmV2YWx1YXRlSmF2
YVNjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHRTb3VyY2UpCiAgICAgcmV0dXJuIHJjOwogfQog
CitRVmFyaWFudCBRV2ViRnJhbWU6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJT
Y3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdFNvdXJjZSkKK3sK
KyAgICBTY3JpcHRDb250cm9sbGVyICpwcm94eSA9IGQtPmZyYW1lLT5zY3JpcHQoKTsKKyAgICBR
VmFyaWFudCByYzsKKworICAgIGlmIChwcm94eSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9
IGQtPmZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdEluV29ybGQoc2NyaXB0V29ybGQtPndv
cmxkKCksIHNjcmlwdFNvdXJjZSwgdHJ1ZSkuanNWYWx1ZSgpOworICAgICAgICBpbnQgZGlzdGFu
Y2UgPSAwOworICAgICAgICBpZiAoIWQtPmZyYW1lKSAvLyBJbiBjYXNlIHRoZSBzY3JpcHQgcmVt
b3ZlZCBvdXIgZnJhbWUgZnJvbSB0aGUgcGFnZS4KKyAgICAgICAgICByZXR1cm4gUVN0cmluZygp
OworICAgICAgICByYyA9IEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQocHJv
eHktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwg
diwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UpOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9
CisKKwogLyohCiAgICAgXHNpbmNlIDQuNQogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZS5oIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCBlY2QzMWRlNmZhYjMw
ODQyNDJkOTg0MjlhY2FhNmZlYmU3YTk2MTgxLi41ZjNkYmQ0YWQ5NjY0YTFlODA4YmFjZTg1M2M0
OGNiNjVhMDg2NjI0IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCisrKyBi
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgUVdlYkhp
c3RvcnlJdGVtOwogY2xhc3MgUVdlYlNlY3VyaXR5T3JpZ2luOwogY2xhc3MgUVdlYkVsZW1lbnQ7
CiBjbGFzcyBRV2ViRWxlbWVudENvbGxlY3Rpb247CitjbGFzcyBRV2ViU2NyaXB0V29ybGQ7CiAK
IGNsYXNzIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OwogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MTk5LDYgKzIwMCw3IEBAIHB1YmxpYzoKIAogcHVibGljIFFfU0xPVFM6CiAgICAgUVZhcmlhbnQg
ZXZhbHVhdGVKYXZhU2NyaXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdFNvdXJjZSk7CisgICAgUVZh
cmlhbnQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoUVdlYlNjcmlwdFdvcmxkKiBzY3Jp
cHRXb3JsZCwgY29uc3QgUVN0cmluZyYgc2NyaXB0U291cmNlKTsKICNpZm5kZWYgUVRfTk9fUFJJ
TlRFUgogICAgIHZvaWQgcHJpbnQoUVByaW50ZXIgKnByaW50ZXIpIGNvbnN0OwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJzY3JpcHR3b3JsZC5jcHAgYi9XZWJLaXQvcXQv
QXBpL3F3ZWJzY3JpcHR3b3JsZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI2ZThjODM0NWRkMTczNzk5ZTJh
NGY4N2JmMjZjMjYyOWQ5MGNjNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9BcGkvcXdl
YnNjcmlwdHdvcmxkLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMCBSb2JlcnQgSG9nYW4gPHJvYmVydEByb2JlcnRob2dhbi5uZXQ+CisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgInF3ZWJzY3JpcHR3b3JsZC5oIgorI2luY2x1ZGUgInF3ZWJz
Y3JpcHR3b3JsZF9wLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworLyohCisgICAgQ29uc3RydWN0cyBhIHNlY3VyaXR5IG9yaWdpbiBmcm9tIFxhIG90
aGVyLgorKi8KK1FXZWJTY3JpcHRXb3JsZDo6UVdlYlNjcmlwdFdvcmxkKCkKK3sKKyAgZCA9IG5l
dyBRV2ViU2NyaXB0V29ybGRQcml2YXRlKFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKCkp
OworfQorCitET01XcmFwcGVyV29ybGQqIFFXZWJTY3JpcHRXb3JsZDo6d29ybGQoKSBjb25zdAor
eworICAgIHJldHVybiBkLT53b3JsZC5nZXQoKTsKK30KKworLyohCisgICAgRGVzdHJveXMgdGhl
IHNlY3VyaXR5IG9yaWdpbi4KKyovCitRV2ViU2NyaXB0V29ybGQ6On5RV2ViU2NyaXB0V29ybGQo
KQoreworfQorCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJzY3JpcHR3b3JsZC5oIGIv
V2ViS2l0L3F0L0FwaS9xd2Vic2NyaXB0d29ybGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDlmMGI5N2Q2OTQz
MTQ4YjMxNjFkMjE3OWY5NzBjZjI2M2Y4OWZlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L3F0
L0FwaS9xd2Vic2NyaXB0d29ybGQuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMCBSb2JlcnQgSG9nYW4gPHJvYmVydEByb2JlcnRob2dhbi5uZXQ+CisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lm
bmRlZiBRV2ViU2NyaXB0V29ybGRfaF8KKyNkZWZpbmUgUVdlYlNjcmlwdFdvcmxkX2hfCisKKyNp
bmNsdWRlIDxRdENvcmUvcXVybC5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgor
CisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
Y2xhc3MgRE9NV3JhcHBlcldvcmxkOworfQorCitjbGFzcyBRV2ViU2NyaXB0V29ybGRQcml2YXRl
OworY2xhc3MgUVdlYkZyYW1lOworCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViU2NyaXB0V29y
bGQgeworcHVibGljOgorICAgIFFXZWJTY3JpcHRXb3JsZCgpOworICAgIH5RV2ViU2NyaXB0V29y
bGQoKTsKKworICAgIFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCogd29ybGQoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUVdlYkZyYW1lOworCitwcml2YXRlOgorICAgIFFF
eHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50ZXI8UVdlYlNjcmlwdFdvcmxkUHJpdmF0ZT4gZDsKK307
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vic2NyaXB0d29ybGRfcC5o
IGIvV2ViS2l0L3F0L0FwaS9xd2Vic2NyaXB0d29ybGRfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjNmRmNDNl
MzhjYTI2NTcxZDU4YmI3MmFmM2RjZWEzYjM3YTc2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvcXQvQXBpL3F3ZWJzY3JpcHR3b3JsZF9wLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTAgUm9iZXJ0IEhvZ2FuIDxyb2JlcnRAcm9iZXJ0aG9nYW4ubmV0Pgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgX1FXRUJTQ1JJUFRXT1JMRF9QX0hfCisjZGVmaW5lIF9RV0VCU0NSSVBUV09S
TERfUF9IXworCisjaW5jbHVkZSAiUmVmUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICBjbGFzcyBET01XcmFwcGVyV29ybGQ7Cit9CisKK2NsYXNzIFFXZWJTY3JpcHRXb3JsZFByaXZh
dGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgeworcHVibGljOgorICAgIFFXZWJTY3JpcHRXb3JsZFBy
aXZhdGUoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZD4gbykKKyAgICB7
CisgICAgICAgIFFfQVNTRVJUKG8pOworICAgICAgICB3b3JsZCA9IG87CisgICAgfQorICAgIH5R
V2ViU2NyaXB0V29ybGRQcml2YXRlKCkKKyAgICB7CisgICAgfQorICAgIFdURjo6UmVmUHRyPFdl
YkNvcmU6OkRPTVdyYXBwZXJXb3JsZD4gd29ybGQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDExYWE3MTZh
ODhjNDJkMzEzZWU4MDMxYzYwNTE5YjE3OGU2M2Q0ZTAuLjQxMmY1MTY3ZDc0Y2VkOTJmMjlhMGFi
NjdlZWM2Mzc0NTQ5NjM1NmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEwLTA2LTAyICBSb2JlcnQg
SG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbUXRdIFN1cHBvcnQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQoKQorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDA3OQorCisgICAgICAgICogQXBpL2hlYWRlcnMucHJpOgorICAgICAgICAqIEFwaS9xd2Vi
ZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZCk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFwaS9xd2Vic2Ny
aXB0d29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJTY3JpcHRXb3JsZDo6UVdlYlNjcmlw
dFdvcmxkKToKKyAgICAgICAgKFFXZWJTY3JpcHRXb3JsZDo6d29ybGQpOgorICAgICAgICAoUVdl
YlNjcmlwdFdvcmxkOjp+UVdlYlNjcmlwdFdvcmxkKToKKyAgICAgICAgKiBBcGkvcXdlYnNjcmlw
dHdvcmxkLmg6IEFkZGVkLgorICAgICAgICAqIEFwaS9xd2Vic2NyaXB0d29ybGRfcC5oOiBBZGRl
ZC4KKyAgICAgICAgKFFXZWJTY3JpcHRXb3JsZFByaXZhdGU6OlFXZWJTY3JpcHRXb3JsZFByaXZh
dGUpOgorICAgICAgICAoUVdlYlNjcmlwdFdvcmxkUHJpdmF0ZTo6flFXZWJTY3JpcHRXb3JsZFBy
aXZhdGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5o
OgorCiAyMDEwLTA2LTAxICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdp
dCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAg
Yi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCmlu
ZGV4IDc0MWIwNmFiNmFmYTMwMzNiNmQxZjJmMTkzNDlhZTJmYmU3ZmU5ZWYuLjM0MDgyYjkyNWJj
MDY0MmQzY2MwYTRmYTE4ZWMzOTE4OWYzZGVhYTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcApAQCAtMzIzLDEzICszMjMs
NiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXN1bWVBY3RpdmVET01PYmplY3Rz
KFFXZWJGcmFtZSogZnJhbWUpCiAgICAgICAgIGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVzdW1l
QWN0aXZlRE9NT2JqZWN0cygpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbnQgd29ybGRJ
ZCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2Vi
RnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKLSAgICBpZiAoY29yZUZyYW1lKQotICAgICAgICBK
U0M6OkpTVmFsdWUgcmVzdWx0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdElu
V29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIHNjcmlwdCwgdHJ1ZSkuanNWYWx1ZSgpOwot
fQotCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3aGl0ZUxpc3RBY2Nlc3NGcm9tT3Jp
Z2luKGNvbnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRp
b25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVz
dGluYXRpb25TdWJkb21haW5zKQogewogICAgIFNlY3VyaXR5T3JpZ2luOjphZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeSgqU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoc291cmNl
T3JpZ2luKSwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Ib3N0LCBhbGxvd0Rlc3Rp
bmF0aW9uU3ViZG9tYWlucyk7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5oCmluZGV4IDk0MGIzZGJkYTdjYTNkNDFmMDA4YzJhZGEwMDA2
YjU2NTc0MjExY2MuLmE2NzhlMjIwZmY0NzdlZTdiM2I3MmYyNWQ3NGI0YmFiNTIyMTdkYWIgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dC5oCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dC5oCkBAIC02OSw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRNZWRpYVR5
cGUoUVdlYkZyYW1lKiBxZnJhbWUsIGNvbnN0IFFTdHJpbmcmIHR5cGUpOwogICAgIHN0YXRpYyB2
b2lkIHNldER1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoYm9vbCBiKTsKIAotICAgIHN0YXRpYyB2
b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJGcmFtZSogZnJhbWUsIGludCB3
b3JsZElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwogICAgIHN0YXRpYyB2b2lkIGdhcmJhZ2VD
b2xsZWN0b3JDb2xsZWN0KCk7CiAgICAgc3RhdGljIHZvaWQgZ2FyYmFnZUNvbGxlY3RvckNvbGxl
Y3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpOwogICAgIHN0YXRpYyB2b2lk
IHNldEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkKFFXZWJGcmFtZSosIGJvb2wgZW5hYmxlZCk7
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKaW5kZXggZTdlODU3MGUwNTMwZTU0MjQ0ODBhZjFkMGVmMTIwNmNkNTJlNDY1YS4uZTJjZjY0
MDNmNTRlOTliZDgwNzhhMjA2NWQ5ZTYxZWI2OWQ1OGQzZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDEwLTA2LTAyICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFN1cHBvcnQgZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoKQorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA3OQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoKKwogMjAxMC0wNi0wMSAgWWFlbCBB
aGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCmluZGV4IDNmMjU4NWQzZmQw
ZTJiNzEwZDUwYTcxNGM2ZWM4ODhkZjkxNjlkNGUuLjRhZjVlZWYzODFiNDZkYWEwY2NjNTJkZWUw
MTM5YTM4OTM1NTVmYzEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiV29ya1F1ZXVlSXRlbVF0LmgiCiAjaW5jbHVkZSA8UURpcj4KICNpbmNsdWRlIDxRTG9j
YWxlPgorI2luY2x1ZGUgPHF3ZWJzY3JpcHR3b3JsZC5oPgogI2luY2x1ZGUgPHF3ZWJzZXR0aW5n
cy5oPgogCiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoV2ViQ29y
ZTo6RHVtcFJlbmRlclRyZWUqIGRydCkKQEAgLTY0NSw1ICs2NDYsMTkgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IFFTdHJpbmcmIGVkaXRpbmdC
ZWhhdmlvcikKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RWRpdGluZ0JlaGF2aW9y
KG1fZHJ0LT53ZWJQYWdlKCksIGVkaXRpbmdCZWhhdmlvcik7CiB9CiAKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBj
b25zdCBRU3RyaW5nJiBzY3JpcHQpCit7CisgICAgUVdlYlNjcmlwdFdvcmxkKiBzY3JpcHRXb3Js
ZDsKKyAgICBpZiAoIXdvcmxkSUQpIHsKKyAgICAgICAgc2NyaXB0V29ybGQgPSBuZXcgUVdlYlNj
cmlwdFdvcmxkKCk7CisgICAgfSBlbHNlIGlmICghbV93b3JsZE1hcC5jb250YWlucyh3b3JsZElE
KSkgeworICAgICAgICBzY3JpcHRXb3JsZCA9IG5ldyBRV2ViU2NyaXB0V29ybGQoKTsKKyAgICAg
ICAgbV93b3JsZE1hcC5pbnNlcnQod29ybGRJRCwgc2NyaXB0V29ybGQpOworICAgIH0gZWxzZQor
ICAgICAgICBzY3JpcHRXb3JsZCA9IG1fd29ybGRNYXAudmFsdWUod29ybGRJRCk7CisKKyAgICBt
X2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQoc2NyaXB0V29ybGQsIHNjcmlwdCk7Cit9CisKIGNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RD
b250cm9sbGVyOjptYXhWaWV3V2lkdGggPSA4MDA7CiBjb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6bWF4Vmlld0hlaWdodCA9IDYwMDsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaCBiL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAppbmRleCBkN2JiODM5
NTU4MzNlYjJlYTE1NWY2NjM2NDA3YmNjM2U3NWEzMWI1Li5hMTJjMzMyODYyNTA3ZGJiMzZkYmE4
MTZkOWMzOWQ5NzQ4OGE0MjYzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCkBAIC0xOTUsNiArMTk1LDggQEAgcHVi
bGljIHNsb3RzOgogCiAgICAgdm9pZCBzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3QgUVN0cmluZyYg
ZWRpdGluZ0JlaGF2aW9yKTsKIAorICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CisKIHByaXZhdGUgc2xvdHM6
CiAgICAgdm9pZCBwcm9jZXNzV29yaygpOwogCkBAIC0yMTMsNiArMjE1LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fbG9hZEZpbmlzaGVkOwogICAgIGJvb2wgbV9nbG9iYWxGbGFnOwogCisgICAg
UU1hcDxpbnQsIFFXZWJTY3JpcHRXb3JsZCo+IG1fd29ybGRNYXA7CiAgICAgUVVybCBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb247CiAgICAgUUJhc2ljVGltZXIgbV90aW1lb3V0VGltZXI7CiAgICAg
UVdlYkZyYW1lKiBtX3RvcExvYWRpbmdGcmFtZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59684</attachid>
            <date>2010-06-24 11:55:47 -0700</date>
            <delta_ts>2010-06-25 02:01:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40079-20100624195545.patch</filename>
            <type>text/plain</type>
            <size>9243</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkgYi9XZWJLaXQvcXQvQXBpL2hl
YWRlcnMucHJpCmluZGV4IGU5ZmUyOGQzOWE3NThlOWY2NjBlMDE5MGY2ZjMyY2RiMzAxOTRiMDcu
LjI5YmIxMjViMmEyN2YzYWJjM2MzZDFkMjllNmU1ZGZiZDI5OWRlM2EgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9BcGkvaGVhZGVycy5wcmkKKysrIGIvV2ViS2l0L3F0L0FwaS9oZWFkZXJzLnByaQpA
QCAtMTIsNSArMTIsNCBAQCBXRUJLSVRfQVBJX0hFQURFUlMgPSAkJFBXRC9xd2ViZnJhbWUuaCBc
CiAgICAgICAgICAgICAgICAgICAgICAkJFBXRC9xd2VicGx1Z2luZmFjdG9yeS5oIFwKICAgICAg
ICAgICAgICAgICAgICAgICQkUFdEL3F3ZWJoaXN0b3J5LmggXAogICAgICAgICAgICAgICAgICAg
ICAgJCRQV0QvcXdlYmluc3BlY3Rvci5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQkUFdEL3F3
ZWJraXR2ZXJzaW9uLmggXAotICAgICAgICAgICAgICAgICAgICAgJCRQV0QvcXdlYnNjcmlwdHdv
cmxkLmgKKyAgICAgICAgICAgICAgICAgICAgICQkUFdEL3F3ZWJraXR2ZXJzaW9uLmgKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcAppbmRleCBjNDJjZmEzY2IyMjQyMTQ3YTg4ZTZjYjgxZjQwMDA0NWQ3Y2M0ODI5Li5j
NGNiNTk3NjU1MzE3NmM2NGVlNzU2NGU2Yzg2YTc4MDkyYmM3MzVhIDEwMDY0NAotLS0gYS9XZWJL
aXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3Bw
CkBAIC0xMzc4LDIyICsxMzc4LDYgQEAgUVZhcmlhbnQgUVdlYkZyYW1lOjpldmFsdWF0ZUphdmFT
Y3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0U291cmNlKQogICAgIHJldHVybiByYzsKIH0KIAot
UVZhcmlhbnQgUVdlYkZyYW1lOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2ViU2Ny
aXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHRTb3VyY2UpCi17Ci0g
ICAgU2NyaXB0Q29udHJvbGxlciAqcHJveHkgPSBkLT5mcmFtZS0+c2NyaXB0KCk7Ci0gICAgUVZh
cmlhbnQgcmM7Ci0KLSAgICBpZiAocHJveHkpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBw
cm94eS0+ZXhlY3V0ZVNjcmlwdEluV29ybGQoc2NyaXB0V29ybGQtPndvcmxkKCksIHNjcmlwdFNv
dXJjZSwgdHJ1ZSkuanNWYWx1ZSgpOwotICAgICAgICBpZiAoIWQtPmZyYW1lKSAvLyBJbiBjYXNl
IHRoZSBzY3JpcHQgcmVtb3ZlZCBvdXIgZnJhbWUgZnJvbSB0aGUgcGFnZS4KLSAgICAgICAgICBy
ZXR1cm4gUVN0cmluZygpOwotICAgICAgICBpbnQgZGlzdGFuY2UgPSAwOwotICAgICAgICByYyA9
IEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQocHJveHktPmdsb2JhbE9iamVj
dChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwgdiwgUU1ldGFUeXBlOjpW
b2lkLCAmZGlzdGFuY2UpOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQogLyohCiAgICAg
XHNpbmNlIDQuNQogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oIGIvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCA1ZjNkYmQ0YWQ5NjY0YTFlODA4YmFjZTg1M2M0
OGNiNjVhMDg2NjI0Li5lNzhmYjA3NjcxN2Q2OTQ0OWE2ODNlZGMwYmI1NzNkMWJkNTFjZTViIDEw
MDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCisrKyBiL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmgKQEAgLTIwMCw3ICsyMDAsNiBAQCBwdWJsaWM6CiAKIHB1YmxpYyBRX1NMT1RT
OgogICAgIFFWYXJpYW50IGV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHRT
b3VyY2UpOwotICAgIFFWYXJpYW50IGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJT
Y3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdFNvdXJjZSk7CiAj
aWZuZGVmIFFUX05PX1BSSU5URVIKICAgICB2b2lkIHByaW50KFFQcmludGVyICpwcmludGVyKSBj
b25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggMmU1NjVhZTE2YzQ0OGEzZWYzYmI3NTBkMDhkODVjZDhkN2ZjYjc5
MS4uYWE3Mjg3N2U4NDg2NGM3ZGI0ZjE0MzZhMDJlZjQxZjg0NjRmZjA0OCAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTAtMDYtMjQgIFJvYmVydCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gU3VwcG9y
dCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgpCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDc5CisKKyAgICAgICAgUmVtb3ZlIGV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKCkgZnJvbSBRdFdlYktpdCBBUEkuCisgICAgICAgIFJl
bW92ZSBRV2ViU2NyaXB0V29ybGQgZnJvbSBleHBvcnRlZCBoZWFkZXJzLgorICAgICAgICBDb25m
aW5lIHN1cHBvcnQgdG8gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQgc28gdGhhdCB0aGUgdGVzdHMg
Y2FuIHBhc3MuCisKKyAgICAgICAgKiBBcGkvaGVhZGVycy5wcmk6CisgICAgICAgICogQXBpL3F3
ZWJmcmFtZS5jcHA6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpjbGVhclNjcmlwdFdvcmxkcyk6CisgICAgICAgIChEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Lmg6CisKIDIwMTAtMDYtMjQg
IFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgU3ltYmlhbiBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAppbmRleCAwYWU1NWQ3Njk1MjMxMDE2
MTAyOGFhOGRkYzE2Y2U4ZTRjYTJhYmMxLi40MWFkZjEwMWM0MDk0NWY3NjUxODdmMTljNjc2YjJk
ZWM1YzZmODhiIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJQcmludENv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlclRy
ZWVBc1RleHQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lmIEVOQUJMRShTVkcpCkBA
IC02NSwxMSArNjYsMTMgQEAKICNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgiCiAjaW5jbHVkZSAi
cXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxd2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXdlYnNjcmlw
dHdvcmxkLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBDaGVja1Blcm1pc3Npb25G
dW5jdGlvblR5cGUqIGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uID0gMDsKIFJlcXVlc3RQZXJtaXNz
aW9uRnVuY3Rpb25UeXBlKiByZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uID0gMDsKK1FNYXA8aW50
LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwogCiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQoKQogewpAQCAtNjE3LDYgKzYyMCwzMCBAQCBib29s
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZShRV2ViRnJhbWUqIGZyYW1lKQog
ICAgIHJldHVybiBjb3JlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRDbG9zZSgpOwogfQogCit2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhclNjcmlwdFdvcmxkcygpCit7CisgICAgbV93
b3JsZE1hcC5jbGVhcigpOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbnQgd29ybGRJRCwg
Y29uc3QgUVN0cmluZyYgc2NyaXB0KQoreworICAgIFFXZWJTY3JpcHRXb3JsZCogc2NyaXB0V29y
bGQ7CisgICAgaWYgKCF3b3JsZElEKSB7CisgICAgICAgIHNjcmlwdFdvcmxkID0gbmV3IFFXZWJT
Y3JpcHRXb3JsZCgpOworICAgIH0gZWxzZSBpZiAoIW1fd29ybGRNYXAuY29udGFpbnMod29ybGRJ
RCkpIHsKKyAgICAgICAgc2NyaXB0V29ybGQgPSBuZXcgUVdlYlNjcmlwdFdvcmxkKCk7CisgICAg
ICAgIG1fd29ybGRNYXAuaW5zZXJ0KHdvcmxkSUQsIHNjcmlwdFdvcmxkKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgc2NyaXB0V29ybGQgPSBtX3dvcmxkTWFwLnZhbHVlKHdvcmxkSUQpOworCisgICAg
V2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUp
OworCisgICAgU2NyaXB0Q29udHJvbGxlciogcHJveHkgPSBjb3JlRnJhbWUtPnNjcmlwdCgpOwor
CisgICAgaWYgKHByb3h5KQorICAgICAgICBwcm94eS0+ZXhlY3V0ZVNjcmlwdEluV29ybGQoc2Ny
aXB0V29ybGQtPndvcmxkKCksIHNjcmlwdCwgdHJ1ZSk7Cit9CisKIC8vIFByb3ZpZGUgYSBiYWNr
d2FyZCBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXNseSBleHBvcnRlZCBwcml2YXRlIHN5bWJv
bHMgYXMgb2YgUXRXZWJLaXQgNC42IHJlbGVhc2UKIAogdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9y
ZXN1bWVBY3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCBiL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCmluZGV4IDBiOTRhMDNj
NzQ0YmE2ZWNmOWZhNjc1NTI4NzNlZDQwOGQyMWQzYjAuLjNhYjc1NDcyNDIyNDExZTFmYTE5ZWI0
NmE2N2U5ODM4MzNlMGY1MmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIFFXZWJFbGVt
ZW50OwogY2xhc3MgUVdlYkZyYW1lOwogY2xhc3MgUVdlYlBhZ2U7CiBjbGFzcyBRV2ViSGlzdG9y
eUl0ZW07CitjbGFzcyBRV2ViU2NyaXB0V29ybGQ7CiAKIGVudW0gTm90aWZpY2F0aW9uUGVybWlz
c2lvbiB7CiAgICAgTm90aWZpY2F0aW9uQWxsb3dlZCwKQEAgLTQyLDYgKzQzLDcgQEAgdHlwZWRl
ZiB2b2lkIChSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFPYmplY3QqIHJlY2VpdmVy
LCBjb25zdCBRU3RyaW5nJikKIAogZXh0ZXJuIENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSog
Y2hlY2tQZXJtaXNzaW9uRnVuY3Rpb247CiBleHRlcm4gUmVxdWVzdFBlcm1pc3Npb25GdW5jdGlv
blR5cGUqIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb247CitleHRlcm4gUU1hcDxpbnQsIFFXZWJT
Y3JpcHRXb3JsZCo+IG1fd29ybGRNYXA7CiAKIGNsYXNzIFFXRUJLSVRfRVhQT1JUIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0IHsKIApAQCAtMTI3LDYgKzEyOSw5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUVN0cmluZyBoaXN0b3J5SXRlbVRhcmdldChjb25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3Rv
cnlJdGVtKTsKIAogICAgIHN0YXRpYyBib29sIHNob3VsZENsb3NlKFFXZWJGcmFtZSogZnJhbWUp
OworCisgICAgc3RhdGljIHZvaWQgY2xlYXJTY3JpcHRXb3JsZHMoKTsKKyAgICBzdGF0aWMgdm9p
ZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbnQgd29y
bGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZkMzFh
M2YzZWY0NmQ3YzYyMGZmNDU3ZjRmZjZkMzM4ZTg4NTEyMDYuLmU5Njk1NGMzNWQwM2U4ODJkY2I3
YmM4ZGY4NzdiOTI2NjgyMzk1MmIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZwor
KysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNi0yNCAg
Um9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBTdXBwb3J0IGV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKCkKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDAwNzkKKworICAgICAgICBSZW1vdmUgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQoKSBmcm9tIFF0V2ViS2l0IEFQSS4KKyAgICAgICAgUmVtb3ZlIFFXZWJTY3JpcHRXb3Js
ZCBmcm9tIGV4cG9ydGVkIGhlYWRlcnMuCisgICAgICAgIENvbmZpbmUgc3VwcG9ydCB0byBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdCBzbyB0aGF0IHRoZSB0ZXN0cyBjYW4gcGFzcy4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oOgorCiAyMDEwLTA2LTI0ICBBZGVs
ZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IENhcmxzb24uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlv
dXRUZXN0Q29udHJvbGxlclF0LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xh
eW91dFRlc3RDb250cm9sbGVyUXQuY3BwCmluZGV4IDNjY2VkN2Q0OTZmYzJiYzE0MWViY2ZkNWFk
NmE3ZGM2YTQ4OTgyNTIuLjkzZDM5YjY2Nzg3NTYxZGFiYmEwMWEzZjhlNTA0M2YwOTI4YTJjM2Ug
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250
cm9sbGVyUXQuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuY3BwCkBAIC03Myw2ICs3Myw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnJlc2V0KCkKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRS
ZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGZhbHNlKTsKICAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoZmFsc2UpOwogICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoUVN0cmlu
Z0xpc3QoKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyU2NyaXB0V29ybGRz
KCk7CiAgICAgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7CiAKICAgICBlbWl0IGhpZGVQ
YWdlKCk7CkBAIC02NjUsMTYgKzY2Niw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvCiAKIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGlu
dCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7Ci0gICAgUVdlYlNjcmlwdFdvcmxk
KiBzY3JpcHRXb3JsZDsKLSAgICBpZiAoIXdvcmxkSUQpIHsKLSAgICAgICAgc2NyaXB0V29ybGQg
PSBuZXcgUVdlYlNjcmlwdFdvcmxkKCk7Ci0gICAgfSBlbHNlIGlmICghbV93b3JsZE1hcC5jb250
YWlucyh3b3JsZElEKSkgewotICAgICAgICBzY3JpcHRXb3JsZCA9IG5ldyBRV2ViU2NyaXB0V29y
bGQoKTsKLSAgICAgICAgbV93b3JsZE1hcC5pbnNlcnQod29ybGRJRCwgc2NyaXB0V29ybGQpOwot
ICAgIH0gZWxzZQotICAgICAgICBzY3JpcHRXb3JsZCA9IG1fd29ybGRNYXAudmFsdWUod29ybGRJ
RCk7Ci0KLSAgICBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQoc2NyaXB0V29ybGQsIHNjcmlwdCk7CisgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKG1fZHJ0LT53ZWJQYWdlKCkt
Pm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3JpcHQpOwogfQogCiBjb25zdCB1bnNpZ25lZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoID0gODAwOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCmluZGV4IGI1
NmYxYzljNTFiMzViN2Q4NWNkMWZkODlhYzk5NDRkOGQ2ZjA2ZDguLjUyMWMwYWU4ZDZmNTY3YWRi
ZDRjNGE5YWVlZTlhZWE3ZjAzMDJlYjIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAorKysgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKQEAgLTIzMCw3ICsyMzAsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsKICAgICBi
b29sIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uOwogCi0gICAgUU1hcDxpbnQsIFFXZWJTY3JpcHRX
b3JsZCo+IG1fd29ybGRNYXA7CiAgICAgUVVybCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247CiAg
ICAgUUJhc2ljVGltZXIgbV90aW1lb3V0VGltZXI7CiAgICAgUVdlYkZyYW1lKiBtX3RvcExvYWRp
bmdGcmFtZTsK
</data>
<flag name="review"
          id="46681"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>