<?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>98532</bug_id>
          
          <creation_ts>2012-10-05 10:26:44 -0700</creation_ts>
          <short_desc>[Soup] Simplify the way that requests are started</short_desc>
          <delta_ts>2012-10-08 17:03:34 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>98521</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>735739</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-05 10:26:44 -0700</bug_when>
    <thetext>Right now there&apos;s a bit of duplicated code in the Soup backend that could be eliminated through abstraction. This is part of a larger effort to make the soup backend more hackable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736338</commentid>
    <comment_count>1</comment_count>
      <attachid>167472</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-06 23:59:24 -0700</bug_when>
    <thetext>Created attachment 167472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736534</commentid>
    <comment_count>2</comment_count>
      <attachid>167512</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-08 00:01:56 -0700</bug_when>
    <thetext>Created attachment 167512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736910</commentid>
    <comment_count>3</comment_count>
      <attachid>167512</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-10-08 12:09:51 -0700</bug_when>
    <thetext>Comment on attachment 167512
Patch

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

Looks good, just concerned about the change in behaviour for the ref/deref, and wondering about isDestroying, which seems to always be false.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:823
&gt; +        d-&gt;m_timeoutSource = soup_add_timeout(g_main_context_get_thread_default(),
&gt; +            d-&gt;m_firstRequest.timeoutInterval() * 1000, requestTimeoutCallback, this);

This indentation looks correct, but we have some broken-up parameters in this file that align with the first argument (so just after the open paren). The coding style doesn&apos;t seem to say anything explicitly, but the one example it has goes with your way here, something to keep in mind for the future I guess.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:827
&gt; +    // balanced by a deref() in cleanupSoupRequestOperation, which should always run
&gt; +    ref();

This has changed - it will now only ref for requests which are effectively sent, but cleanupSoupRequestOperation calls deref if isDestroying is false, which it seems to always be, from the looks of it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737157</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-08 16:03:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 167512 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167512&amp;action=review
&gt; 
&gt; Looks good, just concerned about the change in behaviour for the ref/deref, and wondering about isDestroying, which seems to always be false.
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:823
&gt; &gt; +        d-&gt;m_timeoutSource = soup_add_timeout(g_main_context_get_thread_default(),
&gt; &gt; +            d-&gt;m_firstRequest.timeoutInterval() * 1000, requestTimeoutCallback, this);
&gt; 
&gt; This indentation looks correct, but we have some broken-up parameters in this file that align with the first argument (so just after the open paren). The coding style doesn&apos;t seem to say anything explicitly, but the one example it has goes with your way here, something to keep in mind for the future I guess.

The style bot recently started complaining about indentation that aligns with the parenthesis. This is because Darin Adler said this style isn&apos;t acceptable. I find the change to be pretty odd, considering there is so much code where we align the argument, but I&apos;m trying to roll with it. :)

&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:827
&gt; &gt; +    // balanced by a deref() in cleanupSoupRequestOperation, which should always run
&gt; &gt; +    ref();
&gt; 
&gt; This has changed - it will now only ref for requests which are effectively sent, but cleanupSoupRequestOperation calls deref if isDestroying is false, which it seems to always be, from the looks of it?

So cleanupSoupRequestOperation is called with isDestroying == true in ~ResourceHandle. It makes sense that it shouldn&apos;t unref the handle when called from the destructor, since the destructor should only be called when the reference count is already zero. From what I can tell, my change shouldn&apos;t cause a problem because cleanupSoupRequestOperation should only called if the request is actually sent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737175</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-08 16:12:22 -0700</bug_when>
    <thetext>Committed r130699: &lt;http://trac.webkit.org/changeset/130699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737226</commentid>
    <comment_count>6</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2012-10-08 16:52:07 -0700</bug_when>
    <thetext>Debug build fails with the following error:

Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp: In function ‘bool WebCore::createSoupMessageForHandleAndRequest(WebCore::ResourceHandle*, const WebCore::ResourceRequest&amp;)’:

Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:690:8: error: ‘d’ was not declared in this scope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737237</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-08 17:03:34 -0700</bug_when>
    <thetext>Landed a fix here: http://trac.webkit.org/changeset/130704</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167472</attachid>
            <date>2012-10-06 23:59:24 -0700</date>
            <delta_ts>2012-10-08 00:01:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98532-20121006235829.patch</filename>
            <type>text/plain</type>
            <size>18963</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTczMDk2YjJlNjgzZmJj
MjJlNjcxNzIwMTFiYWRmNmQ2ZmIzYjg2Ni4uMzFiNDc0OGQ2NDM1ZjllZDE3ZDFjMzdkMjUwNWJh
NWI1MzM3ZTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTEwLTA2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbU29wdV0gU2lt
cGxpZnkgdGhlIHdheSB0aGF0IHJlcXVlc3RzIGFyZSBzdGFydGVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODUzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZ5IHRoZSBjcmVhdGlvbiBvZiB0
aGUgbGlic291cCByZXF1ZXN0IGFuZCBtZXNzYWdlIHdoZW4ga2lja2luZyBvZmYKKyAgICAgICAg
cmVxdWVzdHMsIGJ5IGVsbWluYXRpbmcgYSBiaXQgb2YgZHVwbGljYXRlIGNvZGUuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIGFueSBiZWhhdmlvci4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKFJl
c291cmNlSGFuZGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VI
YW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6c291cFNlc3Npb24pOiBFbnN1cmUgdGhlIHNlc3Npb24KKyAg
ICAgICAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBwYXNzaW5nIGl0IHRvIHRoZSBjYWxsZXIuCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVTb3VwTWVzc2FnZUZvckhhbmRsZUFuZFJlcXVlc3QpOiBBZGRl
ZCB0aGlzIGhlbHBlciB3aGljaAorICAgICAgICB0YWtlcyBjYXJlIG9mIGNyZWF0aW5nIHRoZSBT
b3VwTWVzc2FnZSBmb3IgSFRUUC9IVFRQUyByZXF1ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVNvdXBSZXF1ZXN0QW5kTWVzc2FnZUZvckhhbmRsZSk6IENvbGxhcHNlZCB0aGUgSFRUUCBh
bmQKKyAgICAgICAgbm9uLUhUVFAgcmVxdWVzdCBjcmVhdGlvbiBpbnRvIHRoaXMgaGVscGVyLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KTogQ2FsbCB0aGUgbmV3IGhl
bHBlciBub3cgYW5kIHRoZW4gc2VuZFBlbmRpbmdSZXF1ZXN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OnNlbmRQZW5kaW5nUmVxdWVzdCk6IEluc3RlYWQgb2YgaGF2aW5nIHNw
ZWNpYWwKKyAgICAgICAgaGVscGVycyB0byBjcmVhdGUgYW5kIHNlbmQgdGhlIHJlcXVlc3QsIGR1
cGxpY2F0aW5nIHRoZSBsb2dpYyBmb3Igc2VuZGluZyBpdAorICAgICAgICBhY3Jvc3MgdGhlIGZp
bGUsIGFkZCB0aGlzIG1ldGhvZCB3aGljaCBjYW4gYmUgdXNlZCBpbiBib3RoIGNhc2VzLgorICAg
ICAgICAoV2ViQ29yZTo6d2FpdGluZ1RvU2VuZFJlcXVlc3QpOiBSZXdvcmtlZCB0aGUgaGFzQmVl
blNlbnQgbWV0aG9kIHRvIGFuc3dlcgorICAgICAgICB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBv
ciBub3QgdGhlIHJlcXVlc3QgaXMgcmVhZHkgdG8gYmUgc2VudCwgYnV0IGlzIHVuc2VudC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcp
OiBVc2UgdGhlIG5ldyBoZWxwZXIuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlUmVxdWVzdC5oOgorICAgICAgICAoUmVzb3VyY2VSZXF1ZXN0KTogQWRkZWQgYSBuZXcg
bWV0aG9kIGZvciBnZXR0aW5nIHRoZSBVUkwgc3RyaW5nIGZvciBzb3VwLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXJsU3RyaW5nRm9yU291cCk6IEFkZGVkLgorCiAyMDEy
LTEwLTA1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbU291cF0gQ2xlYW4gdXAgUmVzb3VyY2VFcnJvciBjcmVhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCmluZGV4IDQ3NjFiZWQ2ZjFk
MjY4YWY5M2E0NmQ0NWJlM2YwOTMxMTcwZDAxYmMuLmI5YmYzNGZlYjIyNDYxN2U4YTgwZDY0YTE4
ZmU2ZTQwYjI2OGE0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKQEAgLTE2OCw2ICsxNjgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIFVTRShTT1VQKQorICAgIHZvaWQgc2VuZFBlbmRpbmdSZXF1ZXN0KCk7CiAgICAgc3RhdGlj
IFNvdXBTZXNzaW9uKiBkZWZhdWx0U2Vzc2lvbigpOwogICAgIHN0YXRpYyB1aW50NjRfdCBnZXRT
b3VwUmVxdWVzdEluaXRpYWluZ1BhZ2VJRChTb3VwUmVxdWVzdCopOwogICAgIHN0YXRpYyB2b2lk
IHNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VI
YW5kbGVTb3VwLmNwcAppbmRleCAzNTNkMTkwMjA1OGEyY2EwNTYyYTFlYmI5OGQxMmE5MzZjODBi
NmMyLi5mZmE1ODljY2FiNjVkOTgzNDBhZjUwNGYxOGIwZDAzN2I3OTg4MDdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VI
YW5kbGVTb3VwLmNwcApAQCAtMjAzLDcgKzIwMyw2IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0
Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCosIGdwb2ludGVyKTsKIHN0YXRpYyB2b2lk
IHJlYWRDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIpOwogc3RhdGlj
IHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIpOwog
c3RhdGljIGdib29sZWFuIHJlcXVlc3RUaW1lb3V0Q2FsbGJhY2sodm9pZCopOwotc3RhdGljIGJv
b2wgc3RhcnROb25IVFRQUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIEtVUkwpOwogI2lmIEVOQUJM
RShXRUJfVElNSU5HKQogc3RhdGljIGludCAgbWlsaXNlY29uZHNTaW5jZVJlcXVlc3QoZG91Ymxl
IHJlcXVlc3RUaW1lKTsKICNlbmRpZgpAQCAtMjMyLDExICsyMzEsNiBAQCBzdGF0aWMgU291cFNl
c3Npb24qIHNlc3Npb25Gcm9tQ29udGV4dChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKICAg
ICByZXR1cm4gKGNvbnRleHQgJiYgY29udGV4dC0+aXNWYWxpZCgpKSA/IGNvbnRleHQtPnNvdXBT
ZXNzaW9uKCkgOiBSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKTsKIH0KIAotU291cFNl
c3Npb24qIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnNvdXBTZXNzaW9uKCkKLXsKLSAgICByZXR1
cm4gc2Vzc2lvbkZyb21Db250ZXh0KG1fY29udGV4dC5nZXQoKSk7Ci19Ci0KIHVpbnQ2NF90IFJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmluaXRpYXRpbmdQYWdlSUQoKQogewogICAgIHJldHVybiAo
bV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXNWYWxpZCgpKSA/IG1fY29udGV4dC0+aW5pdGlhdGlu
Z1BhZ2VJRCgpIDogMDsKQEAgLTI3Nyw2ICsyNzEsMTMgQEAgc3RhdGljIHZvaWQgZW5zdXJlU2Vz
c2lvbklzSW5pdGlhbGl6ZWQoU291cFNlc3Npb24qIHNlc3Npb24pCiAgICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KDB4ZGVhZGJlZWYpKTsKIH0KIAorU291cFNlc3Npb24qIFJlc291cmNlSGFuZGxlSW50
ZXJuYWw6OnNvdXBTZXNzaW9uKCkKK3sKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IHNlc3Np
b25Gcm9tQ29udGV4dChtX2NvbnRleHQuZ2V0KCkpOworICAgIGVuc3VyZVNlc3Npb25Jc0luaXRp
YWxpemVkKHNlc3Npb24pOworICAgIHJldHVybiBzZXNzaW9uOworfQorCiBzdGF0aWMgdm9pZCBn
b3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKIHsKICAg
ICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihk
YXRhKTsKQEAgLTY4MywzMCArNjg0LDEyIEBAIHN0YXRpYyB2b2lkIHNldFNvdXBSZXF1ZXN0SW5p
dGlhaW5nUGFnZUlEKFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCB1aW50NjRfdCBpbml0aWF0CiAgICAg
Z19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVChyZXF1ZXN0KSwgZ19pbnRlcm5fc3RhdGlj
X3N0cmluZyhnU291cFJlcXVlc3RJbml0aWFpbmdQYWdlSURLZXkpLCBpbml0aWF0aW5nUGFnZUlE
UHRyLCBmYXN0RnJlZSk7CiB9CiAKLXN0YXRpYyBib29sIHN0YXJ0SFRUUFJlcXVlc3QoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSkKK3N0YXRpYyBib29sIGNyZWF0ZVNvdXBNZXNzYWdlRm9ySGFuZGxl
QW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CisgICAgQVNTRVJUKGQtPm1fc291cFJl
cXVlc3QpOwogCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKTsKLQotICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gZC0+c291cFNlc3Npb24oKTsK
LSAgICBlbnN1cmVTZXNzaW9uSXNJbml0aWFsaXplZChzZXNzaW9uKTsKLSAgICBTb3VwUmVxdWVz
dGVyKiByZXF1ZXN0ZXIgPSBTT1VQX1JFUVVFU1RFUihzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUo
c2Vzc2lvbiwgU09VUF9UWVBFX1JFUVVFU1RFUikpOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QoaGFuZGxlLT5maXJzdFJlcXVlc3QoKSk7Ci0gICAgS1VSTCB1cmwocmVxdWVzdC51cmwo
KSk7Ci0gICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAgIHJlcXVlc3Quc2V0
VVJMKHVybCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgZC0+bV9zb3VwUmVx
dWVzdCA9IGFkb3B0R1JlZihzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KHJlcXVlc3RlciwgdXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmIChlcnJvcikg
ewotICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHNldFNvdXBSZXF1ZXN0SW5pdGlhaW5nUGFnZUlEKGQtPm1fc291cFJlcXVl
c3QuZ2V0KCksIGQtPmluaXRpYXRpbmdQYWdlSUQoKSk7Ci0KICAgICBkLT5tX3NvdXBNZXNzYWdl
ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKFNPVVBfUkVRVUVTVF9I
VFRQKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKSk7CiAgICAgaWYgKCFkLT5tX3NvdXBNZXNzYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MTcsNjQgKzcwMCw2NCBAQCBzdGF0aWMgYm9v
bCBzdGFydEhUVFBSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgaWYgKCFoYW5k
bGUtPnNob3VsZENvbnRlbnRTbmlmZigpKQogICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9m
ZWF0dXJlKHNvdXBNZXNzYWdlLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklGRkVSKTsKIAotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qoc291cE1lc3NhZ2UsICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290
SGVhZGVyc0NhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHNvdXBNZXNz
YWdlLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRsZSk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChzb3VwTWVzc2FnZSwgIndyb3RlLWJvZHktZGF0YSIsIEdf
Q0FMTEJBQ0sod3JvdGVCb2R5RGF0YUNhbGxiYWNrKSwgaGFuZGxlKTsKLQotI2lmIEVOQUJMRShX
RUJfVElNSU5HKQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc291cE1lc3NhZ2UsICJuZXR3b3JrLWV2
ZW50IiwgR19DQUxMQkFDSyhuZXR3b3JrRXZlbnRDYWxsYmFjayksIGhhbmRsZSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChzb3VwTWVzc2FnZSwgIndyb3RlLWJvZHkiLCBHX0NBTExCQUNLKHdyb3Rl
Qm9keUNhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChz
b3VwTWVzc2FnZSksICJoYW5kbGUiLCBoYW5kbGUpOwotI2VuZGlmCi0KICAgICBTdHJpbmcgZmly
c3RQYXJ0eVN0cmluZyA9IHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsK
ICAgICBpZiAoIWZpcnN0UGFydHlTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIEdPd25QdHI8
U291cFVSST4gZmlyc3RQYXJ0eShzb3VwX3VyaV9uZXcoZmlyc3RQYXJ0eVN0cmluZy51dGY4KCku
ZGF0YSgpKSk7CiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1lc3Nh
Z2UsIGZpcnN0UGFydHkuZ2V0KCkpOwogICAgIH0KIAotICAgIEZvcm1EYXRhKiBodHRwQm9keSA9
IGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCk7Ci0gICAgQ1N0cmluZyBjb250ZW50VHlwZSA9
IGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBDb250ZW50VHlwZSgpLnV0ZjgoKS5kYXRhKCk7Ci0gICAg
aWYgKGh0dHBCb2R5ICYmICFodHRwQm9keS0+aXNFbXB0eSgpCi0gICAgICAgICYmICFhZGRGb3Jt
RWxlbWVudHNUb1NvdXBNZXNzYWdlKHNvdXBNZXNzYWdlLCBjb250ZW50VHlwZS5kYXRhKCksIGh0
dHBCb2R5LCBkLT5tX2JvZHlTaXplKSkgeworICAgIEZvcm1EYXRhKiBodHRwQm9keSA9IHJlcXVl
c3QuaHR0cEJvZHkoKTsKKyAgICBDU3RyaW5nIGNvbnRlbnRUeXBlID0gcmVxdWVzdC5odHRwQ29u
dGVudFR5cGUoKS51dGY4KCkuZGF0YSgpOworICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHkt
PmlzRW1wdHkoKSAmJiAhYWRkRm9ybUVsZW1lbnRzVG9Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSwg
Y29udGVudFR5cGUuZGF0YSgpLCBodHRwQm9keSwgZC0+bV9ib2R5U2l6ZSkpIHsKICAgICAgICAg
Ly8gV2UgZmFpbGVkIHRvIHByZXBhcmUgdGhlIGJvZHkgZGF0YSwgc28ganVzdCBmYWlsIHRoaXMg
bG9hZC4KLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHNvdXBN
ZXNzYWdlLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCBoYW5kbGUpOwogICAgICAg
ICBkLT5tX3NvdXBNZXNzYWdlLmNsZWFyKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNvdXBSZXF1ZXN0T3Bl
cmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgotICAgIGhhbmRsZS0+cmVmKCk7Ci0KLSNp
ZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICBkLT5tX3Jlc3BvbnNlLnNldFJlc291cmNlTG9hZFRp
bWluZyhSZXNvdXJjZUxvYWRUaW1pbmc6OmNyZWF0ZSgpKTsKLSNlbmRpZgotCiAgICAgLy8gTWFr
ZSBzdXJlIHdlIGhhdmUgYW4gQWNjZXB0IGhlYWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21lIHNp
dGVzCiAgICAgLy8gd2FudCB0aGlzIHRvIHNlcnZlIHNvbWUgb2YgdGhlaXIgc3VicmVzb3VyY2Vz
CiAgICAgaWYgKCFzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKHNvdXBNZXNzYWdlLT5yZXF1
ZXN0X2hlYWRlcnMsICJBY2NlcHQiKSkKICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7CiAKLSAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBYSFIgLnNlbmQoKSBhbmQgLnNlbmQoIiIpIGV4cGxpY2l0bHkg
dGVsbCBsaWJzb3VwCi0gICAgLy8gdG8gc2VuZCBhIHplcm8gY29udGVudC1sZW5naHQgaGVhZGVy
IGZvciBjb25zaXN0ZW5jeQotICAgIC8vIHdpdGggb3RoZXIgYmFja2VuZHMgKGUuZy4gQ2hyb21p
dW0ncykgYW5kIG90aGVyIFVBIGltcGxlbWVudGF0aW9ucyBsaWtlIEZGLgotICAgIC8vIEl0J3Mg
ZG9uZSBpbiB0aGUgYmFja2VuZCBoZXJlIGluc3RlYWQgb2YgaW4gWEhSIGNvZGUgc2luY2UgaW4g
WEhSIENPUlMgY2hlY2tpbmcKLSAgICAvLyBwcmV2ZW50cyB1cyBmcm9tIHRoaXMga2luZCBvZiBs
YXRlIGhlYWRlciBtYW5pcHVsYXRpb24uCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgWEhSIC5zZW5k
KCkgYW5kIC5zZW5kKCIiKSBleHBsaWNpdGx5IHRlbGwgbGlic291cCB0byBzZW5kIGEgemVybyBj
b250ZW50LWxlbmdodCBoZWFkZXIKKyAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBi
YWNrZW5kcyAoZS5nLiBDaHJvbWl1bSdzKSBhbmQgb3RoZXIgVUEgaW1wbGVtZW50YXRpb25zIGxp
a2UgRkYuIEl0J3MgZG9uZQorICAgIC8vIGluIHRoZSBiYWNrZW5kIGhlcmUgaW5zdGVhZCBvZiBp
biBYSFIgY29kZSBzaW5jZSBpbiBYSFIgQ09SUyBjaGVja2luZyBwcmV2ZW50cyB1cyBmcm9tIHRo
aXMga2luZCBvZgorICAgIC8vIGxhdGUgaGVhZGVyIG1hbmlwdWxhdGlvbi4KICAgICBpZiAoKHJl
cXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIiB8fCByZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAi
UFVUIikKICAgICAgICAgJiYgKCFyZXF1ZXN0Lmh0dHBCb2R5KCkgfHwgcmVxdWVzdC5odHRwQm9k
eSgpLT5pc0VtcHR5KCkpKQogICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVu
dF9sZW5ndGgoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgMCk7CiAKLSAgICAvLyBTZW5k
IHRoZSByZXF1ZXN0IG9ubHkgaWYgaXQncyBub3QgYmVlbiBleHBsaWNpdGx5IGRlZmVycmVkLgot
ICAgIGlmICghZC0+bV9kZWZlcnNMb2FkaW5nKSB7CisgICAgZ19zaWduYWxfY29ubmVjdChkLT5t
X3NvdXBNZXNzYWdlLmdldCgpLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnND
YWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX3NvdXBNZXNzYWdl
LmdldCgpLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRs
ZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX3NvdXBNZXNzYWdlLmdldCgpLCAid3JvdGUt
Ym9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCBoYW5kbGUpOwor
CiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgICAgIGQtPm1fcmVzcG9uc2UucmVzb3VyY2VM
b2FkVGltaW5nKCktPnJlcXVlc3RUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7
CisgICAgZC0+bV9yZXNwb25zZS5zZXRSZXNvdXJjZUxvYWRUaW1pbmcoUmVzb3VyY2VMb2FkVGlt
aW5nOjpjcmVhdGUoKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX3NvdXBNZXNzYWdlLmdl
dCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2spLCBo
YW5kbGUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgIndy
b3RlLWJvZHkiLCBHX0NBTExCQUNLKHdyb3RlQm9keUNhbGxiYWNrKSwgaGFuZGxlKTsKKyAgICBn
X29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBNZXNzYWdlLmdldCgpKSwgImhhbmRs
ZSIsIGhhbmRsZSk7CiAjZW5kaWYKLSAgICAgICAgaWYgKGQtPm1fZmlyc3RSZXF1ZXN0LnRpbWVv
dXRJbnRlcnZhbCgpID4gMCkgewotICAgICAgICAgICAgLy8gc291cF9hZGRfdGltZW91dCByZXR1
cm5zIGEgR1NvdXJjZSogd2hvc2Ugb25seSByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIGNvbnRl
eHQuIFdlIG5lZWQgdG8gaGF2ZSBvdXIgb3duIHJlZmVyZW5jZSB0byBpdCwgaGVuY2Ugbm90IHVz
aW5nIGFkb3B0UmVmLgotICAgICAgICAgICAgZC0+bV90aW1lb3V0U291cmNlID0gc291cF9hZGRf
dGltZW91dChnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSwgZC0+bV9maXJzdFJl
cXVlc3QudGltZW91dEludGVydmFsKCkgKiAxMDAwLCByZXF1ZXN0VGltZW91dENhbGxiYWNrLCBo
YW5kbGUpOwotICAgICAgICB9Ci0gICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYo
Z19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQt
Pm1fc291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0
Q2FsbGJhY2ssIGhhbmRsZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
Y3JlYXRlU291cFJlcXVlc3RBbmRNZXNzYWdlRm9ySGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGJvb2wgaXNIVFRQRmFtaWx5UmVxdWVzdCkKK3sKKyAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIFNvdXBSZXF1ZXN0ZXIqIHJlcXVl
c3RlciA9IFNPVVBfUkVRVUVTVEVSKHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShkLT5zb3VwU2Vz
c2lvbigpLCBTT1VQX1RZUEVfUkVRVUVTVEVSKSk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJl
cXVlc3QoKTsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVy
X3JlcXVlc3QocmVxdWVzdGVyLCByZXF1ZXN0LnVybFN0cmluZ0ZvclNvdXAoKS51dGY4KCkuZGF0
YSgpLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZC0+bV9z
b3VwUmVxdWVzdC5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gTm9uLUhUVFAgZmFtaWx5IHJlcXVlc3RzIGRvIG5vdCBuZWVkIGEgc291cE1lc3NhZ2UsIGFz
IGl0J3MgY2FsbGJhY2tzIHJlYWxseSBvbmx5IGFwcGx5IHRvIEhUVFAuCisgICAgaWYgKGlzSFRU
UEZhbWlseVJlcXVlc3QgJiYgIWNyZWF0ZVNvdXBNZXNzYWdlRm9ySGFuZGxlQW5kUmVxdWVzdCho
YW5kbGUsIHJlcXVlc3QpKSB7CisgICAgICAgIGQtPm1fc291cFJlcXVlc3QuY2xlYXIoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtODAxLDI3
ICs3ODQsNTIgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQpCiAgICAgICAgIGQtPm1fZmlyc3RSZXF1ZXN0LnNldFVSTCh1cmxXaXRoQ3JlZGVu
dGlhbHMpOwogICAgIH0KIAotICAgIEtVUkwgdXJsID0gZmlyc3RSZXF1ZXN0KCkudXJsKCk7Ci0g
ICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKLSAgICBTdHJpbmcgcHJvdG9jb2wg
PSB1cmwucHJvdG9jb2woKTsKLQogICAgIC8vIFVzZWQgdG8gc2V0IHRoZSBhdXRoZW50aWNhdGlv
biBkaWFsb2cgdG9wbGV2ZWw7IG1heSBiZSBOVUxMCiAgICAgZC0+bV9jb250ZXh0ID0gY29udGV4
dDsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShwcm90b2NvbCwgImh0dHAiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShwcm90b2NvbCwgImh0dHBzIikpIHsKLSAgICAgICAgaWYgKHN0YXJ0SFRU
UFJlcXVlc3QodGhpcykpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBPbmx5IGFs
bG93IHRoZSBQT1NUIGFuZCBHRVQgbWV0aG9kcyBmb3Igbm9uLUhUVFAgcmVxdWVzdHMuCisgICAg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0ID0gZmlyc3RSZXF1ZXN0KCk7CisgICAgYm9v
bCBpc0hUVFBGYW1pbHlSZXF1ZXN0ID0gcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCk7CisgICAgaWYgKCFpc0hUVFBGYW1pbHlSZXF1ZXN0ICYmIHJlcXVlc3QuaHR0cE1ldGhv
ZCgpICE9ICJHRVQiICYmIHJlcXVlc3QuaHR0cE1ldGhvZCgpICE9ICJQT1NUIikgeworICAgICAg
ICB0aGlzLT5zY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOyAvLyBFcnJvciBtdXN0
IG5vdCBiZSByZXBvcnRlZCBpbW1lZGlhdGVseQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBpZiAoc3RhcnROb25IVFRQUmVxdWVzdCh0aGlzLCB1cmwpKQorICAgIGlmICghY3Jl
YXRlU291cFJlcXVlc3RBbmRNZXNzYWdlRm9ySGFuZGxlKHRoaXMsIGlzSFRUUEZhbWlseVJlcXVl
c3QpKSB7CisgICAgICAgIHRoaXMtPnNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7
IC8vIEVycm9yIG11c3Qgbm90IGJlIHJlcG9ydGVkIGltbWVkaWF0ZWx5CiAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KIAotICAgIC8vIEVycm9yIG11c3Qgbm90IGJlIHJlcG9ydGVkIGltbWVk
aWF0ZWx5Ci0gICAgdGhpcy0+c2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAg
ICBzZXRTb3VwUmVxdWVzdEluaXRpYWluZ1BhZ2VJRChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBk
LT5pbml0aWF0aW5nUGFnZUlEKCkpOworCisgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCBvbmx5IGlm
IGl0J3Mgbm90IGJlZW4gZXhwbGljaXRseSBkZWZlcnJlZC4KKyAgICBpZiAoIWQtPm1fZGVmZXJz
TG9hZGluZykKKyAgICAgICAgc2VuZFBlbmRpbmdSZXF1ZXN0KCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2VuZFBlbmRpbmdSZXF1ZXN0KCkKK3sKKyNp
ZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBpZiAoZC0+bV9yZXNwb25zZS5yZXNvdXJjZUxvYWRU
aW1pbmcoKSkKKyAgICAgICAgZC0+bV9yZXNwb25zZS5yZXNvdXJjZUxvYWRUaW1pbmcoKS0+cmVx
dWVzdFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyNlbmRpZgorCisgICAg
aWYgKGQtPm1fZmlyc3RSZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpID4gMCkgeworICAgICAgICAv
LyBzb3VwX2FkZF90aW1lb3V0IHJldHVybnMgYSBHU291cmNlKiB3aG9zZSBvbmx5IHJlZmVyZW5j
ZSBpcyBvd25lZCBieQorICAgICAgICAvLyB0aGUgY29udGV4dC4gV2UgbmVlZCB0byBoYXZlIG91
ciBvd24gcmVmZXJlbmNlIHRvIGl0LCBoZW5jZSBub3QgdXNpbmcgYWRvcHRSZWYuCisgICAgICAg
IGQtPm1fdGltZW91dFNvdXJjZSA9IHNvdXBfYWRkX3RpbWVvdXQoZ19tYWluX2NvbnRleHRfZ2V0
X3RocmVhZF9kZWZhdWx0KCksCisgICAgICAgICAgICBkLT5tX2ZpcnN0UmVxdWVzdC50aW1lb3V0
SW50ZXJ2YWwoKSAqIDEwMDAsIHJlcXVlc3RUaW1lb3V0Q2FsbGJhY2ssIHRoaXMpOworICAgIH0K
KworICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwU291cFJlcXVlc3RPcGVy
YXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgcmVmKCk7CisKKyAgICBkLT5tX2Nh
bmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIHNvdXBfcmVx
dWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUu
Z2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIHRoaXMpOworfQorCiB2b2lkIFJlc291cmNlSGFu
ZGxlOjpjYW5jZWwoKQogewogICAgIGQtPm1fY2FuY2VsbGVkID0gdHJ1ZTsKQEAgLTg0NiwxMSAr
ODU0LDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldElnbm9yZVNTTEVycm9ycyhib29sIGln
bm9yZVNTTEVycm9ycykKICAgICBnSWdub3JlU1NMRXJyb3JzID0gaWdub3JlU1NMRXJyb3JzOwog
fQogCi1zdGF0aWMgYm9vbCBoYXNCZWVuU2VudChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQorc3Rh
dGljIGJvb2wgd2FpdGluZ1RvU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsK
LSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwot
Ci0gICAgcmV0dXJuIGQtPm1fY2FuY2VsbGFibGU7CisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBm
b3IgZC0+bV9zb3VwUmVxdWVzdCBiZWNhdXNlIHRoZSByZXF1ZXN0IG1heSBoYXZlIHJhaXNlZCBh
IGZhaWx1cmUKKyAgICAvLyAoZm9yIGV4YW1wbGUgaW52YWxpZCBVUkxzKS4gV2UgY2Fubm90ICBz
aW1wbHkgY2hlY2sgZm9yIGQtPm1fc2NoZWR1bGVkRmFpbHVyZSBiZWNhdXNlCisgICAgLy8gaXQn
cyBjbGVhcmVkIGFzIHNvb24gYXMgdGhlIGZhaWx1cmUgZXZlbnQgaXMgZmlyZWQuCisgICAgcmV0
dXJuIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9zb3VwUmVxdWVzdCAmJiAhaGFuZGxlLT5nZXRJ
bnRlcm5hbCgpLT5tX2NhbmNlbGxhYmxlOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQpAQCAtODY3LDIxICs4NzYs
OCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9vbCBk
ZWZlcnNMb2FkaW5nKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gV2UgbmVlZCB0
byBjaGVjayBmb3IgZC0+bV9zb3VwUmVxdWVzdCBiZWNhdXNlIHRoZSByZXF1ZXN0IG1heQotICAg
IC8vIGhhdmUgcmFpc2VkIGEgZmFpbHVyZSAoZm9yIGV4YW1wbGUgaW52YWxpZCBVUkxzKS4gV2Ug
Y2Fubm90Ci0gICAgLy8gc2ltcGx5IGNoZWNrIGZvciBkLT5tX3NjaGVkdWxlZEZhaWx1cmUgYmVj
YXVzZSBpdCdzIGNsZWFyZWQgYXMKLSAgICAvLyBzb29uIGFzIHRoZSBmYWlsdXJlIGV2ZW50IGlz
IGZpcmVkLgotICAgIGlmICghaGFzQmVlblNlbnQodGhpcykgJiYgZC0+bV9zb3VwUmVxdWVzdCkg
ewotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgICAgICBpZiAoZC0+bV9yZXNwb25zZS5yZXNv
dXJjZUxvYWRUaW1pbmcoKSkKLSAgICAgICAgICAgIGQtPm1fcmVzcG9uc2UucmVzb3VyY2VMb2Fk
VGltaW5nKCktPnJlcXVlc3RUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0j
ZW5kaWYKLSAgICAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxl
X25ldygpKTsKLSAgICAgICAgaWYgKGQtPm1fZmlyc3RSZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgp
ID4gMCkgewotICAgICAgICAgICAgLy8gc291cF9hZGRfdGltZW91dCByZXR1cm5zIGEgR1NvdXJj
ZSogd2hvc2Ugb25seSByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIGNvbnRleHQuIFdlIG5lZWQg
dG8gaGF2ZSBvdXIgb3duIHJlZmVyZW5jZSB0byBpdCwgaGVuY2Ugbm90IHVzaW5nIGFkb3B0UmVm
LgotICAgICAgICAgICAgZC0+bV90aW1lb3V0U291cmNlID0gc291cF9hZGRfdGltZW91dChnX21h
aW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSwgZC0+bV9maXJzdFJlcXVlc3QudGltZW91
dEludGVydmFsKCkgKiAxMDAwLCByZXF1ZXN0VGltZW91dENhbGxiYWNrLCB0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpLCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBzZW5kUmVxdWVzdENhbGxiYWNrLCB0aGlzKTsK
KyAgICBpZiAod2FpdGluZ1RvU2VuZFJlcXVlc3QodGhpcykpIHsKKyAgICAgICAgc2VuZFBlbmRp
bmdSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTEsNDYgKzEwMDcs
NiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcmVxdWVzdFRpbWVvdXRDYWxsYmFjayhncG9pbnRlciBkYXRh
KQogICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIGJvb2wgc3RhcnROb25IVFRQUmVxdWVz
dChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVybCkKLXsKLSAgICBBU1NFUlQoaGFuZGxl
KTsKLQotICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiR0VU
IiAmJiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiUE9TVCIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5k
bGUtPmdldEludGVybmFsKCk7Ci0KLSAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGQtPnNvdXBT
ZXNzaW9uKCk7Ci0gICAgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7Ci0gICAg
U291cFJlcXVlc3RlciogcmVxdWVzdGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9uX2dl
dF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9SRVFVRVNURVIpKTsKLQotICAgIENTdHJpbmcg
dXJsU3RyID0gdXJsLnN0cmluZygpLnV0ZjgoKTsKLQotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKLSAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVyX3JlcXVl
c3QocmVxdWVzdGVyLCB1cmxTdHIuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgZC0+bV9zb3VwUmVxdWVzdCA9IDA7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgotICAgIGhhbmRsZS0+
cmVmKCk7Ci0KLSAgICBzZXRTb3VwUmVxdWVzdEluaXRpYWluZ1BhZ2VJRChkLT5tX3NvdXBSZXF1
ZXN0LmdldCgpLCBkLT5pbml0aWF0aW5nUGFnZUlEKCkpOwotCi0gICAgLy8gU2VuZCB0aGUgcmVx
dWVzdCBvbmx5IGlmIGl0J3Mgbm90IGJlZW4gZXhwbGljaXRseSBkZWZlcnJlZC4KLSAgICBpZiAo
IWQtPm1fZGVmZXJzTG9hZGluZykgewotICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRH
UmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgICAgICBpZiAoZC0+bV9maXJzdFJlcXVlc3Qu
dGltZW91dEludGVydmFsKCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBzb3VwX2FkZF90aW1lb3V0
IHJldHVybnMgYSBHU291cmNlKiB3aG9zZSBvbmx5IHJlZmVyZW5jZSBpcyBvd25lZCBieSB0aGUg
Y29udGV4dC4gV2UgbmVlZCB0byBoYXZlIG91ciBvd24gcmVmZXJlbmNlIHRvIGl0LCBoZW5jZSBu
b3QgdXNpbmcgYWRvcHRSZWYuCi0gICAgICAgICAgICBkLT5tX3RpbWVvdXRTb3VyY2UgPSBzb3Vw
X2FkZF90aW1lb3V0KGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpLCBkLT5tX2Zp
cnN0UmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwoKSAqIDEwMDAsIHJlcXVlc3RUaW1lb3V0Q2FsbGJh
Y2ssIGhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMo
ZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVl
c3RDYWxsYmFjaywgaGFuZGxlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogU291
cFNlc3Npb24qIFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U2Vzc2lvbigpCiB7CiAgICAgc3RhdGlj
IFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaAppbmRleCA4NzlhNDdmZTg5ZTg4
MThmMTIyOGY3ZDk4NzZmNzY4NjYxNTEzY2VlLi44Y2UwMGZiNzM0ODk3NjNlYmIwOTY3ZjNiN2Jm
MGQxNzk0NGZlNGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCkBAIC03NCw2ICs3NCw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgU291cE1lc3NhZ2VGbGFncyBzb3VwTWVzc2FnZUZsYWdzKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VwRmxhZ3M7IH0KICAgICAgICAgdm9pZCBzZXRTb3VwTWVzc2FnZUZs
YWdzKFNvdXBNZXNzYWdlRmxhZ3Mgc291cEZsYWdzKSB7IG1fc291cEZsYWdzID0gc291cEZsYWdz
OyB9CiAKKyAgICAgICAgU3RyaW5nIHVybFN0cmluZ0ZvclNvdXAoKSBjb25zdDsKKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1
ZXN0U291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXF1ZXN0U291cC5jcHAKaW5kZXggZGRmYTFjMzhkZWU0YjNlOTYyOTgzMWQ2YTFiOTQ4N2M2
M2UwOGI2OS4uMzRiYzg0MjQ1MDc4NDE5YjM2ZWVjN2ZjNDJjMzAzNDhmMzBmMWYzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtMTI0LDQgKzEyNCwxMSBAQCB1bnNpZ25lZCBpbml0aWFs
aXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCkKICAgICByZXR1cm4gMTAwMDA7
CiB9CiAKK1N0cmluZyBSZXNvdXJjZVJlcXVlc3Q6OnVybFN0cmluZ0ZvclNvdXAoKSBjb25zdAor
eworICAgIEtVUkwgdXJsID0gbV91cmw7CisgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmll
cigpOworICAgIHJldHVybiB1cmwuc3RyaW5nKCk7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167512</attachid>
            <date>2012-10-08 00:01:56 -0700</date>
            <delta_ts>2012-10-08 12:09:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98532-20121008000100.patch</filename>
            <type>text/plain</type>
            <size>18963</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmYwNGRhMmQ4NzRmMjNh
MTgxMWFkZGMxYzJlZjJjZTBmM2YwMWY2Yi4uYTFlYTFmZDUwODdkMzA3MDZhODJhZTE1YjYyMjNm
YmEyYTVmNDU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTEwLTA2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbU29wdV0gU2lt
cGxpZnkgdGhlIHdheSB0aGF0IHJlcXVlc3RzIGFyZSBzdGFydGVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODUzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZ5IHRoZSBjcmVhdGlvbiBvZiB0
aGUgbGlic291cCByZXF1ZXN0IGFuZCBtZXNzYWdlIHdoZW4ga2lja2luZyBvZmYKKyAgICAgICAg
cmVxdWVzdHMsIGJ5IGVsbWluYXRpbmcgYSBiaXQgb2YgZHVwbGljYXRlIGNvZGUuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIGFueSBiZWhhdmlvci4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKFJl
c291cmNlSGFuZGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VI
YW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6c291cFNlc3Npb24pOiBFbnN1cmUgdGhlIHNlc3Npb24KKyAg
ICAgICAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBwYXNzaW5nIGl0IHRvIHRoZSBjYWxsZXIuCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVTb3VwTWVzc2FnZUZvckhhbmRsZUFuZFJlcXVlc3QpOiBBZGRl
ZCB0aGlzIGhlbHBlciB3aGljaAorICAgICAgICB0YWtlcyBjYXJlIG9mIGNyZWF0aW5nIHRoZSBT
b3VwTWVzc2FnZSBmb3IgSFRUUC9IVFRQUyByZXF1ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVNvdXBSZXF1ZXN0QW5kTWVzc2FnZUZvckhhbmRsZSk6IENvbGxhcHNlZCB0aGUgSFRUUCBh
bmQKKyAgICAgICAgbm9uLUhUVFAgcmVxdWVzdCBjcmVhdGlvbiBpbnRvIHRoaXMgaGVscGVyLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KTogQ2FsbCB0aGUgbmV3IGhl
bHBlciBub3cgYW5kIHRoZW4gc2VuZFBlbmRpbmdSZXF1ZXN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OnNlbmRQZW5kaW5nUmVxdWVzdCk6IEluc3RlYWQgb2YgaGF2aW5nIHNw
ZWNpYWwKKyAgICAgICAgaGVscGVycyB0byBjcmVhdGUgYW5kIHNlbmQgdGhlIHJlcXVlc3QsIGR1
cGxpY2F0aW5nIHRoZSBsb2dpYyBmb3Igc2VuZGluZyBpdAorICAgICAgICBhY3Jvc3MgdGhlIGZp
bGUsIGFkZCB0aGlzIG1ldGhvZCB3aGljaCBjYW4gYmUgdXNlZCBpbiBib3RoIGNhc2VzLgorICAg
ICAgICAoV2ViQ29yZTo6d2FpdGluZ1RvU2VuZFJlcXVlc3QpOiBSZXdvcmtlZCB0aGUgaGFzQmVl
blNlbnQgbWV0aG9kIHRvIGFuc3dlcgorICAgICAgICB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBv
ciBub3QgdGhlIHJlcXVlc3QgaXMgcmVhZHkgdG8gYmUgc2VudCwgYnV0IGlzIHVuc2VudC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcp
OiBVc2UgdGhlIG5ldyBoZWxwZXIuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlUmVxdWVzdC5oOgorICAgICAgICAoUmVzb3VyY2VSZXF1ZXN0KTogQWRkZWQgYSBuZXcg
bWV0aG9kIGZvciBnZXR0aW5nIHRoZSBVUkwgc3RyaW5nIGZvciBzb3VwLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXJsU3RyaW5nRm9yU291cCk6IEFkZGVkLgorCiAyMDEy
LTEwLTA3ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbU291cF0gQ2xlYW4gdXAgUmVzb3VyY2VFcnJvciBjcmVhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCmluZGV4IDQ3NjFiZWQ2ZjFk
MjY4YWY5M2E0NmQ0NWJlM2YwOTMxMTcwZDAxYmMuLmI5YmYzNGZlYjIyNDYxN2U4YTgwZDY0YTE4
ZmU2ZTQwYjI2OGE0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKQEAgLTE2OCw2ICsxNjgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIFVTRShTT1VQKQorICAgIHZvaWQgc2VuZFBlbmRpbmdSZXF1ZXN0KCk7CiAgICAgc3RhdGlj
IFNvdXBTZXNzaW9uKiBkZWZhdWx0U2Vzc2lvbigpOwogICAgIHN0YXRpYyB1aW50NjRfdCBnZXRT
b3VwUmVxdWVzdEluaXRpYWluZ1BhZ2VJRChTb3VwUmVxdWVzdCopOwogICAgIHN0YXRpYyB2b2lk
IHNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VI
YW5kbGVTb3VwLmNwcAppbmRleCBmYmNiZTViNDVjZGUxZTRkODQ3NmUzNzJlYjg1MGRmZmUyMDIz
YTVlLi5jNjg1M2UwYzc3ZDMzMDk3Mjc0OWI2OWU1MTU0M2UzM2Y2NzY4MDFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VI
YW5kbGVTb3VwLmNwcApAQCAtMjAzLDcgKzIwMyw2IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0
Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCosIGdwb2ludGVyKTsKIHN0YXRpYyB2b2lk
IHJlYWRDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIpOwogc3RhdGlj
IHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIpOwog
c3RhdGljIGdib29sZWFuIHJlcXVlc3RUaW1lb3V0Q2FsbGJhY2sodm9pZCopOwotc3RhdGljIGJv
b2wgc3RhcnROb25IVFRQUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIEtVUkwpOwogI2lmIEVOQUJM
RShXRUJfVElNSU5HKQogc3RhdGljIGludCAgbWlsaXNlY29uZHNTaW5jZVJlcXVlc3QoZG91Ymxl
IHJlcXVlc3RUaW1lKTsKICNlbmRpZgpAQCAtMjMyLDExICsyMzEsNiBAQCBzdGF0aWMgU291cFNl
c3Npb24qIHNlc3Npb25Gcm9tQ29udGV4dChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKICAg
ICByZXR1cm4gKGNvbnRleHQgJiYgY29udGV4dC0+aXNWYWxpZCgpKSA/IGNvbnRleHQtPnNvdXBT
ZXNzaW9uKCkgOiBSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKTsKIH0KIAotU291cFNl
c3Npb24qIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnNvdXBTZXNzaW9uKCkKLXsKLSAgICByZXR1
cm4gc2Vzc2lvbkZyb21Db250ZXh0KG1fY29udGV4dC5nZXQoKSk7Ci19Ci0KIHVpbnQ2NF90IFJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmluaXRpYXRpbmdQYWdlSUQoKQogewogICAgIHJldHVybiAo
bV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXNWYWxpZCgpKSA/IG1fY29udGV4dC0+aW5pdGlhdGlu
Z1BhZ2VJRCgpIDogMDsKQEAgLTI3Nyw2ICsyNzEsMTMgQEAgc3RhdGljIHZvaWQgZW5zdXJlU2Vz
c2lvbklzSW5pdGlhbGl6ZWQoU291cFNlc3Npb24qIHNlc3Npb24pCiAgICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KDB4ZGVhZGJlZWYpKTsKIH0KIAorU291cFNlc3Npb24qIFJlc291cmNlSGFuZGxlSW50
ZXJuYWw6OnNvdXBTZXNzaW9uKCkKK3sKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IHNlc3Np
b25Gcm9tQ29udGV4dChtX2NvbnRleHQuZ2V0KCkpOworICAgIGVuc3VyZVNlc3Npb25Jc0luaXRp
YWxpemVkKHNlc3Npb24pOworICAgIHJldHVybiBzZXNzaW9uOworfQorCiBzdGF0aWMgdm9pZCBn
b3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKIHsKICAg
ICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihk
YXRhKTsKQEAgLTY4MywzMCArNjg0LDEyIEBAIHN0YXRpYyB2b2lkIHNldFNvdXBSZXF1ZXN0SW5p
dGlhaW5nUGFnZUlEKFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCB1aW50NjRfdCBpbml0aWF0CiAgICAg
Z19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVChyZXF1ZXN0KSwgZ19pbnRlcm5fc3RhdGlj
X3N0cmluZyhnU291cFJlcXVlc3RJbml0aWFpbmdQYWdlSURLZXkpLCBpbml0aWF0aW5nUGFnZUlE
UHRyLCBmYXN0RnJlZSk7CiB9CiAKLXN0YXRpYyBib29sIHN0YXJ0SFRUUFJlcXVlc3QoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSkKK3N0YXRpYyBib29sIGNyZWF0ZVNvdXBNZXNzYWdlRm9ySGFuZGxl
QW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CisgICAgQVNTRVJUKGQtPm1fc291cFJl
cXVlc3QpOwogCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKTsKLQotICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gZC0+c291cFNlc3Npb24oKTsK
LSAgICBlbnN1cmVTZXNzaW9uSXNJbml0aWFsaXplZChzZXNzaW9uKTsKLSAgICBTb3VwUmVxdWVz
dGVyKiByZXF1ZXN0ZXIgPSBTT1VQX1JFUVVFU1RFUihzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUo
c2Vzc2lvbiwgU09VUF9UWVBFX1JFUVVFU1RFUikpOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QoaGFuZGxlLT5maXJzdFJlcXVlc3QoKSk7Ci0gICAgS1VSTCB1cmwocmVxdWVzdC51cmwo
KSk7Ci0gICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAgIHJlcXVlc3Quc2V0
VVJMKHVybCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgZC0+bV9zb3VwUmVx
dWVzdCA9IGFkb3B0R1JlZihzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KHJlcXVlc3RlciwgdXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmIChlcnJvcikg
ewotICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHNldFNvdXBSZXF1ZXN0SW5pdGlhaW5nUGFnZUlEKGQtPm1fc291cFJlcXVl
c3QuZ2V0KCksIGQtPmluaXRpYXRpbmdQYWdlSUQoKSk7Ci0KICAgICBkLT5tX3NvdXBNZXNzYWdl
ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKFNPVVBfUkVRVUVTVF9I
VFRQKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKSk7CiAgICAgaWYgKCFkLT5tX3NvdXBNZXNzYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MTcsNjQgKzcwMCw2NCBAQCBzdGF0aWMgYm9v
bCBzdGFydEhUVFBSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgaWYgKCFoYW5k
bGUtPnNob3VsZENvbnRlbnRTbmlmZigpKQogICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9m
ZWF0dXJlKHNvdXBNZXNzYWdlLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklGRkVSKTsKIAotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qoc291cE1lc3NhZ2UsICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290
SGVhZGVyc0NhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHNvdXBNZXNz
YWdlLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRsZSk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChzb3VwTWVzc2FnZSwgIndyb3RlLWJvZHktZGF0YSIsIEdf
Q0FMTEJBQ0sod3JvdGVCb2R5RGF0YUNhbGxiYWNrKSwgaGFuZGxlKTsKLQotI2lmIEVOQUJMRShX
RUJfVElNSU5HKQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc291cE1lc3NhZ2UsICJuZXR3b3JrLWV2
ZW50IiwgR19DQUxMQkFDSyhuZXR3b3JrRXZlbnRDYWxsYmFjayksIGhhbmRsZSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChzb3VwTWVzc2FnZSwgIndyb3RlLWJvZHkiLCBHX0NBTExCQUNLKHdyb3Rl
Qm9keUNhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChz
b3VwTWVzc2FnZSksICJoYW5kbGUiLCBoYW5kbGUpOwotI2VuZGlmCi0KICAgICBTdHJpbmcgZmly
c3RQYXJ0eVN0cmluZyA9IHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsK
ICAgICBpZiAoIWZpcnN0UGFydHlTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIEdPd25QdHI8
U291cFVSST4gZmlyc3RQYXJ0eShzb3VwX3VyaV9uZXcoZmlyc3RQYXJ0eVN0cmluZy51dGY4KCku
ZGF0YSgpKSk7CiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1lc3Nh
Z2UsIGZpcnN0UGFydHkuZ2V0KCkpOwogICAgIH0KIAotICAgIEZvcm1EYXRhKiBodHRwQm9keSA9
IGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCk7Ci0gICAgQ1N0cmluZyBjb250ZW50VHlwZSA9
IGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBDb250ZW50VHlwZSgpLnV0ZjgoKS5kYXRhKCk7Ci0gICAg
aWYgKGh0dHBCb2R5ICYmICFodHRwQm9keS0+aXNFbXB0eSgpCi0gICAgICAgICYmICFhZGRGb3Jt
RWxlbWVudHNUb1NvdXBNZXNzYWdlKHNvdXBNZXNzYWdlLCBjb250ZW50VHlwZS5kYXRhKCksIGh0
dHBCb2R5LCBkLT5tX2JvZHlTaXplKSkgeworICAgIEZvcm1EYXRhKiBodHRwQm9keSA9IHJlcXVl
c3QuaHR0cEJvZHkoKTsKKyAgICBDU3RyaW5nIGNvbnRlbnRUeXBlID0gcmVxdWVzdC5odHRwQ29u
dGVudFR5cGUoKS51dGY4KCkuZGF0YSgpOworICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHkt
PmlzRW1wdHkoKSAmJiAhYWRkRm9ybUVsZW1lbnRzVG9Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSwg
Y29udGVudFR5cGUuZGF0YSgpLCBodHRwQm9keSwgZC0+bV9ib2R5U2l6ZSkpIHsKICAgICAgICAg
Ly8gV2UgZmFpbGVkIHRvIHByZXBhcmUgdGhlIGJvZHkgZGF0YSwgc28ganVzdCBmYWlsIHRoaXMg
bG9hZC4KLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHNvdXBN
ZXNzYWdlLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCBoYW5kbGUpOwogICAgICAg
ICBkLT5tX3NvdXBNZXNzYWdlLmNsZWFyKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNvdXBSZXF1ZXN0T3Bl
cmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgotICAgIGhhbmRsZS0+cmVmKCk7Ci0KLSNp
ZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICBkLT5tX3Jlc3BvbnNlLnNldFJlc291cmNlTG9hZFRp
bWluZyhSZXNvdXJjZUxvYWRUaW1pbmc6OmNyZWF0ZSgpKTsKLSNlbmRpZgotCiAgICAgLy8gTWFr
ZSBzdXJlIHdlIGhhdmUgYW4gQWNjZXB0IGhlYWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21lIHNp
dGVzCiAgICAgLy8gd2FudCB0aGlzIHRvIHNlcnZlIHNvbWUgb2YgdGhlaXIgc3VicmVzb3VyY2Vz
CiAgICAgaWYgKCFzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKHNvdXBNZXNzYWdlLT5yZXF1
ZXN0X2hlYWRlcnMsICJBY2NlcHQiKSkKICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7CiAKLSAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBYSFIgLnNlbmQoKSBhbmQgLnNlbmQoIiIpIGV4cGxpY2l0bHkg
dGVsbCBsaWJzb3VwCi0gICAgLy8gdG8gc2VuZCBhIHplcm8gY29udGVudC1sZW5naHQgaGVhZGVy
IGZvciBjb25zaXN0ZW5jeQotICAgIC8vIHdpdGggb3RoZXIgYmFja2VuZHMgKGUuZy4gQ2hyb21p
dW0ncykgYW5kIG90aGVyIFVBIGltcGxlbWVudGF0aW9ucyBsaWtlIEZGLgotICAgIC8vIEl0J3Mg
ZG9uZSBpbiB0aGUgYmFja2VuZCBoZXJlIGluc3RlYWQgb2YgaW4gWEhSIGNvZGUgc2luY2UgaW4g
WEhSIENPUlMgY2hlY2tpbmcKLSAgICAvLyBwcmV2ZW50cyB1cyBmcm9tIHRoaXMga2luZCBvZiBs
YXRlIGhlYWRlciBtYW5pcHVsYXRpb24uCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgWEhSIC5zZW5k
KCkgYW5kIC5zZW5kKCIiKSBleHBsaWNpdGx5IHRlbGwgbGlic291cCB0byBzZW5kIGEgemVybyBj
b250ZW50LWxlbmdodCBoZWFkZXIKKyAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBi
YWNrZW5kcyAoZS5nLiBDaHJvbWl1bSdzKSBhbmQgb3RoZXIgVUEgaW1wbGVtZW50YXRpb25zIGxp
a2UgRkYuIEl0J3MgZG9uZQorICAgIC8vIGluIHRoZSBiYWNrZW5kIGhlcmUgaW5zdGVhZCBvZiBp
biBYSFIgY29kZSBzaW5jZSBpbiBYSFIgQ09SUyBjaGVja2luZyBwcmV2ZW50cyB1cyBmcm9tIHRo
aXMga2luZCBvZgorICAgIC8vIGxhdGUgaGVhZGVyIG1hbmlwdWxhdGlvbi4KICAgICBpZiAoKHJl
cXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIiB8fCByZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAi
UFVUIikKICAgICAgICAgJiYgKCFyZXF1ZXN0Lmh0dHBCb2R5KCkgfHwgcmVxdWVzdC5odHRwQm9k
eSgpLT5pc0VtcHR5KCkpKQogICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVu
dF9sZW5ndGgoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgMCk7CiAKLSAgICAvLyBTZW5k
IHRoZSByZXF1ZXN0IG9ubHkgaWYgaXQncyBub3QgYmVlbiBleHBsaWNpdGx5IGRlZmVycmVkLgot
ICAgIGlmICghZC0+bV9kZWZlcnNMb2FkaW5nKSB7CisgICAgZ19zaWduYWxfY29ubmVjdChkLT5t
X3NvdXBNZXNzYWdlLmdldCgpLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnND
YWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX3NvdXBNZXNzYWdl
LmdldCgpLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRs
ZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX3NvdXBNZXNzYWdlLmdldCgpLCAid3JvdGUt
Ym9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCBoYW5kbGUpOwor
CiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgICAgIGQtPm1fcmVzcG9uc2UucmVzb3VyY2VM
b2FkVGltaW5nKCktPnJlcXVlc3RUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7
CisgICAgZC0+bV9yZXNwb25zZS5zZXRSZXNvdXJjZUxvYWRUaW1pbmcoUmVzb3VyY2VMb2FkVGlt
aW5nOjpjcmVhdGUoKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX3NvdXBNZXNzYWdlLmdl
dCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2spLCBo
YW5kbGUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgIndy
b3RlLWJvZHkiLCBHX0NBTExCQUNLKHdyb3RlQm9keUNhbGxiYWNrKSwgaGFuZGxlKTsKKyAgICBn
X29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBNZXNzYWdlLmdldCgpKSwgImhhbmRs
ZSIsIGhhbmRsZSk7CiAjZW5kaWYKLSAgICAgICAgaWYgKGQtPm1fZmlyc3RSZXF1ZXN0LnRpbWVv
dXRJbnRlcnZhbCgpID4gMCkgewotICAgICAgICAgICAgLy8gc291cF9hZGRfdGltZW91dCByZXR1
cm5zIGEgR1NvdXJjZSogd2hvc2Ugb25seSByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIGNvbnRl
eHQuIFdlIG5lZWQgdG8gaGF2ZSBvdXIgb3duIHJlZmVyZW5jZSB0byBpdCwgaGVuY2Ugbm90IHVz
aW5nIGFkb3B0UmVmLgotICAgICAgICAgICAgZC0+bV90aW1lb3V0U291cmNlID0gc291cF9hZGRf
dGltZW91dChnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSwgZC0+bV9maXJzdFJl
cXVlc3QudGltZW91dEludGVydmFsKCkgKiAxMDAwLCByZXF1ZXN0VGltZW91dENhbGxiYWNrLCBo
YW5kbGUpOwotICAgICAgICB9Ci0gICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYo
Z19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQt
Pm1fc291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0
Q2FsbGJhY2ssIGhhbmRsZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
Y3JlYXRlU291cFJlcXVlc3RBbmRNZXNzYWdlRm9ySGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGJvb2wgaXNIVFRQRmFtaWx5UmVxdWVzdCkKK3sKKyAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIFNvdXBSZXF1ZXN0ZXIqIHJlcXVl
c3RlciA9IFNPVVBfUkVRVUVTVEVSKHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShkLT5zb3VwU2Vz
c2lvbigpLCBTT1VQX1RZUEVfUkVRVUVTVEVSKSk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJl
cXVlc3QoKTsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVy
X3JlcXVlc3QocmVxdWVzdGVyLCByZXF1ZXN0LnVybFN0cmluZ0ZvclNvdXAoKS51dGY4KCkuZGF0
YSgpLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZC0+bV9z
b3VwUmVxdWVzdC5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gTm9uLUhUVFAgZmFtaWx5IHJlcXVlc3RzIGRvIG5vdCBuZWVkIGEgc291cE1lc3NhZ2UsIGFz
IGl0J3MgY2FsbGJhY2tzIHJlYWxseSBvbmx5IGFwcGx5IHRvIEhUVFAuCisgICAgaWYgKGlzSFRU
UEZhbWlseVJlcXVlc3QgJiYgIWNyZWF0ZVNvdXBNZXNzYWdlRm9ySGFuZGxlQW5kUmVxdWVzdCho
YW5kbGUsIHJlcXVlc3QpKSB7CisgICAgICAgIGQtPm1fc291cFJlcXVlc3QuY2xlYXIoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtODAxLDI3
ICs3ODQsNTIgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQpCiAgICAgICAgIGQtPm1fZmlyc3RSZXF1ZXN0LnNldFVSTCh1cmxXaXRoQ3JlZGVu
dGlhbHMpOwogICAgIH0KIAotICAgIEtVUkwgdXJsID0gZmlyc3RSZXF1ZXN0KCkudXJsKCk7Ci0g
ICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKLSAgICBTdHJpbmcgcHJvdG9jb2wg
PSB1cmwucHJvdG9jb2woKTsKLQogICAgIC8vIFVzZWQgdG8gc2V0IHRoZSBhdXRoZW50aWNhdGlv
biBkaWFsb2cgdG9wbGV2ZWw7IG1heSBiZSBOVUxMCiAgICAgZC0+bV9jb250ZXh0ID0gY29udGV4
dDsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShwcm90b2NvbCwgImh0dHAiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShwcm90b2NvbCwgImh0dHBzIikpIHsKLSAgICAgICAgaWYgKHN0YXJ0SFRU
UFJlcXVlc3QodGhpcykpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBPbmx5IGFs
bG93IHRoZSBQT1NUIGFuZCBHRVQgbWV0aG9kcyBmb3Igbm9uLUhUVFAgcmVxdWVzdHMuCisgICAg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0ID0gZmlyc3RSZXF1ZXN0KCk7CisgICAgYm9v
bCBpc0hUVFBGYW1pbHlSZXF1ZXN0ID0gcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCk7CisgICAgaWYgKCFpc0hUVFBGYW1pbHlSZXF1ZXN0ICYmIHJlcXVlc3QuaHR0cE1ldGhv
ZCgpICE9ICJHRVQiICYmIHJlcXVlc3QuaHR0cE1ldGhvZCgpICE9ICJQT1NUIikgeworICAgICAg
ICB0aGlzLT5zY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOyAvLyBFcnJvciBtdXN0
IG5vdCBiZSByZXBvcnRlZCBpbW1lZGlhdGVseQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBpZiAoc3RhcnROb25IVFRQUmVxdWVzdCh0aGlzLCB1cmwpKQorICAgIGlmICghY3Jl
YXRlU291cFJlcXVlc3RBbmRNZXNzYWdlRm9ySGFuZGxlKHRoaXMsIGlzSFRUUEZhbWlseVJlcXVl
c3QpKSB7CisgICAgICAgIHRoaXMtPnNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7
IC8vIEVycm9yIG11c3Qgbm90IGJlIHJlcG9ydGVkIGltbWVkaWF0ZWx5CiAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KIAotICAgIC8vIEVycm9yIG11c3Qgbm90IGJlIHJlcG9ydGVkIGltbWVk
aWF0ZWx5Ci0gICAgdGhpcy0+c2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAg
ICBzZXRTb3VwUmVxdWVzdEluaXRpYWluZ1BhZ2VJRChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBk
LT5pbml0aWF0aW5nUGFnZUlEKCkpOworCisgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCBvbmx5IGlm
IGl0J3Mgbm90IGJlZW4gZXhwbGljaXRseSBkZWZlcnJlZC4KKyAgICBpZiAoIWQtPm1fZGVmZXJz
TG9hZGluZykKKyAgICAgICAgc2VuZFBlbmRpbmdSZXF1ZXN0KCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2VuZFBlbmRpbmdSZXF1ZXN0KCkKK3sKKyNp
ZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBpZiAoZC0+bV9yZXNwb25zZS5yZXNvdXJjZUxvYWRU
aW1pbmcoKSkKKyAgICAgICAgZC0+bV9yZXNwb25zZS5yZXNvdXJjZUxvYWRUaW1pbmcoKS0+cmVx
dWVzdFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyNlbmRpZgorCisgICAg
aWYgKGQtPm1fZmlyc3RSZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpID4gMCkgeworICAgICAgICAv
LyBzb3VwX2FkZF90aW1lb3V0IHJldHVybnMgYSBHU291cmNlKiB3aG9zZSBvbmx5IHJlZmVyZW5j
ZSBpcyBvd25lZCBieQorICAgICAgICAvLyB0aGUgY29udGV4dC4gV2UgbmVlZCB0byBoYXZlIG91
ciBvd24gcmVmZXJlbmNlIHRvIGl0LCBoZW5jZSBub3QgdXNpbmcgYWRvcHRSZWYuCisgICAgICAg
IGQtPm1fdGltZW91dFNvdXJjZSA9IHNvdXBfYWRkX3RpbWVvdXQoZ19tYWluX2NvbnRleHRfZ2V0
X3RocmVhZF9kZWZhdWx0KCksCisgICAgICAgICAgICBkLT5tX2ZpcnN0UmVxdWVzdC50aW1lb3V0
SW50ZXJ2YWwoKSAqIDEwMDAsIHJlcXVlc3RUaW1lb3V0Q2FsbGJhY2ssIHRoaXMpOworICAgIH0K
KworICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwU291cFJlcXVlc3RPcGVy
YXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgcmVmKCk7CisKKyAgICBkLT5tX2Nh
bmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIHNvdXBfcmVx
dWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUu
Z2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIHRoaXMpOworfQorCiB2b2lkIFJlc291cmNlSGFu
ZGxlOjpjYW5jZWwoKQogewogICAgIGQtPm1fY2FuY2VsbGVkID0gdHJ1ZTsKQEAgLTg0NiwxMSAr
ODU0LDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldElnbm9yZVNTTEVycm9ycyhib29sIGln
bm9yZVNTTEVycm9ycykKICAgICBnSWdub3JlU1NMRXJyb3JzID0gaWdub3JlU1NMRXJyb3JzOwog
fQogCi1zdGF0aWMgYm9vbCBoYXNCZWVuU2VudChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQorc3Rh
dGljIGJvb2wgd2FpdGluZ1RvU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsK
LSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwot
Ci0gICAgcmV0dXJuIGQtPm1fY2FuY2VsbGFibGU7CisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBm
b3IgZC0+bV9zb3VwUmVxdWVzdCBiZWNhdXNlIHRoZSByZXF1ZXN0IG1heSBoYXZlIHJhaXNlZCBh
IGZhaWx1cmUKKyAgICAvLyAoZm9yIGV4YW1wbGUgaW52YWxpZCBVUkxzKS4gV2UgY2Fubm90ICBz
aW1wbHkgY2hlY2sgZm9yIGQtPm1fc2NoZWR1bGVkRmFpbHVyZSBiZWNhdXNlCisgICAgLy8gaXQn
cyBjbGVhcmVkIGFzIHNvb24gYXMgdGhlIGZhaWx1cmUgZXZlbnQgaXMgZmlyZWQuCisgICAgcmV0
dXJuIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9zb3VwUmVxdWVzdCAmJiAhaGFuZGxlLT5nZXRJ
bnRlcm5hbCgpLT5tX2NhbmNlbGxhYmxlOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQpAQCAtODY3LDIxICs4NzYs
OCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9vbCBk
ZWZlcnNMb2FkaW5nKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gV2UgbmVlZCB0
byBjaGVjayBmb3IgZC0+bV9zb3VwUmVxdWVzdCBiZWNhdXNlIHRoZSByZXF1ZXN0IG1heQotICAg
IC8vIGhhdmUgcmFpc2VkIGEgZmFpbHVyZSAoZm9yIGV4YW1wbGUgaW52YWxpZCBVUkxzKS4gV2Ug
Y2Fubm90Ci0gICAgLy8gc2ltcGx5IGNoZWNrIGZvciBkLT5tX3NjaGVkdWxlZEZhaWx1cmUgYmVj
YXVzZSBpdCdzIGNsZWFyZWQgYXMKLSAgICAvLyBzb29uIGFzIHRoZSBmYWlsdXJlIGV2ZW50IGlz
IGZpcmVkLgotICAgIGlmICghaGFzQmVlblNlbnQodGhpcykgJiYgZC0+bV9zb3VwUmVxdWVzdCkg
ewotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgICAgICBpZiAoZC0+bV9yZXNwb25zZS5yZXNv
dXJjZUxvYWRUaW1pbmcoKSkKLSAgICAgICAgICAgIGQtPm1fcmVzcG9uc2UucmVzb3VyY2VMb2Fk
VGltaW5nKCktPnJlcXVlc3RUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0j
ZW5kaWYKLSAgICAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxl
X25ldygpKTsKLSAgICAgICAgaWYgKGQtPm1fZmlyc3RSZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgp
ID4gMCkgewotICAgICAgICAgICAgLy8gc291cF9hZGRfdGltZW91dCByZXR1cm5zIGEgR1NvdXJj
ZSogd2hvc2Ugb25seSByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIGNvbnRleHQuIFdlIG5lZWQg
dG8gaGF2ZSBvdXIgb3duIHJlZmVyZW5jZSB0byBpdCwgaGVuY2Ugbm90IHVzaW5nIGFkb3B0UmVm
LgotICAgICAgICAgICAgZC0+bV90aW1lb3V0U291cmNlID0gc291cF9hZGRfdGltZW91dChnX21h
aW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSwgZC0+bV9maXJzdFJlcXVlc3QudGltZW91
dEludGVydmFsKCkgKiAxMDAwLCByZXF1ZXN0VGltZW91dENhbGxiYWNrLCB0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpLCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBzZW5kUmVxdWVzdENhbGxiYWNrLCB0aGlzKTsK
KyAgICBpZiAod2FpdGluZ1RvU2VuZFJlcXVlc3QodGhpcykpIHsKKyAgICAgICAgc2VuZFBlbmRp
bmdSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTEsNDYgKzEwMDcs
NiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcmVxdWVzdFRpbWVvdXRDYWxsYmFjayhncG9pbnRlciBkYXRh
KQogICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIGJvb2wgc3RhcnROb25IVFRQUmVxdWVz
dChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVybCkKLXsKLSAgICBBU1NFUlQoaGFuZGxl
KTsKLQotICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiR0VU
IiAmJiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiUE9TVCIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5k
bGUtPmdldEludGVybmFsKCk7Ci0KLSAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGQtPnNvdXBT
ZXNzaW9uKCk7Ci0gICAgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7Ci0gICAg
U291cFJlcXVlc3RlciogcmVxdWVzdGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9uX2dl
dF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9SRVFVRVNURVIpKTsKLQotICAgIENTdHJpbmcg
dXJsU3RyID0gdXJsLnN0cmluZygpLnV0ZjgoKTsKLQotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKLSAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVyX3JlcXVl
c3QocmVxdWVzdGVyLCB1cmxTdHIuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgZC0+bV9zb3VwUmVxdWVzdCA9IDA7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgotICAgIGhhbmRsZS0+
cmVmKCk7Ci0KLSAgICBzZXRTb3VwUmVxdWVzdEluaXRpYWluZ1BhZ2VJRChkLT5tX3NvdXBSZXF1
ZXN0LmdldCgpLCBkLT5pbml0aWF0aW5nUGFnZUlEKCkpOwotCi0gICAgLy8gU2VuZCB0aGUgcmVx
dWVzdCBvbmx5IGlmIGl0J3Mgbm90IGJlZW4gZXhwbGljaXRseSBkZWZlcnJlZC4KLSAgICBpZiAo
IWQtPm1fZGVmZXJzTG9hZGluZykgewotICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRH
UmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgICAgICBpZiAoZC0+bV9maXJzdFJlcXVlc3Qu
dGltZW91dEludGVydmFsKCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBzb3VwX2FkZF90aW1lb3V0
IHJldHVybnMgYSBHU291cmNlKiB3aG9zZSBvbmx5IHJlZmVyZW5jZSBpcyBvd25lZCBieSB0aGUg
Y29udGV4dC4gV2UgbmVlZCB0byBoYXZlIG91ciBvd24gcmVmZXJlbmNlIHRvIGl0LCBoZW5jZSBu
b3QgdXNpbmcgYWRvcHRSZWYuCi0gICAgICAgICAgICBkLT5tX3RpbWVvdXRTb3VyY2UgPSBzb3Vw
X2FkZF90aW1lb3V0KGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpLCBkLT5tX2Zp
cnN0UmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwoKSAqIDEwMDAsIHJlcXVlc3RUaW1lb3V0Q2FsbGJh
Y2ssIGhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMo
ZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVl
c3RDYWxsYmFjaywgaGFuZGxlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogU291
cFNlc3Npb24qIFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U2Vzc2lvbigpCiB7CiAgICAgc3RhdGlj
IFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaAppbmRleCA4NzlhNDdmZTg5ZTg4
MThmMTIyOGY3ZDk4NzZmNzY4NjYxNTEzY2VlLi44Y2UwMGZiNzM0ODk3NjNlYmIwOTY3ZjNiN2Jm
MGQxNzk0NGZlNGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCkBAIC03NCw2ICs3NCw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgU291cE1lc3NhZ2VGbGFncyBzb3VwTWVzc2FnZUZsYWdzKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VwRmxhZ3M7IH0KICAgICAgICAgdm9pZCBzZXRTb3VwTWVzc2FnZUZs
YWdzKFNvdXBNZXNzYWdlRmxhZ3Mgc291cEZsYWdzKSB7IG1fc291cEZsYWdzID0gc291cEZsYWdz
OyB9CiAKKyAgICAgICAgU3RyaW5nIHVybFN0cmluZ0ZvclNvdXAoKSBjb25zdDsKKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1
ZXN0U291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXF1ZXN0U291cC5jcHAKaW5kZXggMjhhMTk1OTU3OWNiODg3M2Y5M2ZlOTJiN2Y4MTdlMWFh
Y2RlNGQxZi4uOTZlMjNhOThhOTg2YWU1MjU1NTM2OGQxYzcwOGNmOGE4MGQ3ZTM2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtMTI0LDQgKzEyNCwxMSBAQCB1bnNpZ25lZCBpbml0aWFs
aXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCkKICAgICByZXR1cm4gMTAwMDA7
CiB9CiAKK1N0cmluZyBSZXNvdXJjZVJlcXVlc3Q6OnVybFN0cmluZ0ZvclNvdXAoKSBjb25zdAor
eworICAgIEtVUkwgdXJsID0gbV91cmw7CisgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmll
cigpOworICAgIHJldHVybiB1cmwuc3RyaW5nKCk7Cit9CisKIH0K
</data>
<flag name="review"
          id="180210"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>