<?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>82082</bug_id>
          
          <creation_ts>2012-03-23 13:03:17 -0700</creation_ts>
          <short_desc>[SOUP] Implement missing methods in CookieJarSoup</short_desc>
          <delta_ts>2012-03-27 02:43:27 -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>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>82081</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>586650</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-23 13:03:17 -0700</bug_when>
    <thetext>getRawCookies() and deleteCookie() are currently unimplemented. They are used by the web inspector to show the list of cookies and allow to delete them. This is nice to have but it&apos;s also important for WebKit2, since there&apos;s no API to get the list of cookies in the UI nor to remove a given cookie.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586659</commentid>
    <comment_count>1</comment_count>
      <attachid>133546</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-23 13:13:14 -0700</bug_when>
    <thetext>Created attachment 133546
Patch

I&apos;ve also cleaned up the code a bit using DEFINE_STATIC_LOCAL for the global jar and GOwnPtr/GRefPtr everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586730</commentid>
    <comment_count>2</comment_count>
      <attachid>133546</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-23 14:13:46 -0700</bug_when>
    <thetext>Comment on attachment 133546
Patch

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

Nice! Consider reverting the changes to deleteCookiesForHostname and deleteAllCookies. The old style seemed a more explicit about what was happening.

&gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:128
&gt; +        // FIXME we are currently passing false always for seesion because there&apos;s no API to know

Missing a &apos;:&apos; after FIXME.

&gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:149
&gt; +    CString cookieName = name.utf8();
&gt; +

Extra newline here.

&gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:165
&gt; +        GOwnPtr&lt;SoupCookie&gt; cookie(static_cast&lt;SoupCookie*&gt;(item-&gt;data));

It&apos;s was actually a bit tricky for me to see how this worked now, with a GOwnPtr assigned the cookie late in its life. I&apos;m not sure if I prefer this approach versus the old one.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:164
&gt; -            setDefaultCookieJar(jar);
&gt; +            setSoupCookieJar(jar);

I think your new name is far more appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586748</commentid>
    <comment_count>3</comment_count>
      <attachid>133546</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-23 14:24:41 -0700</bug_when>
    <thetext>Comment on attachment 133546
Patch

Attachment 133546 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12117813</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586752</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-23 14:25:38 -0700</bug_when>
    <thetext>Please fix the EFL port before landing. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587477</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-25 23:27:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 133546 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133546&amp;action=review
&gt; 
&gt; Nice! Consider reverting the changes to deleteCookiesForHostname and deleteAllCookies. The old style seemed a more explicit about what was happening.

well, not using smart pointers is always more explicit, yes.

&gt; &gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:128
&gt; &gt; +        // FIXME we are currently passing false always for seesion because there&apos;s no API to know
&gt; 
&gt; Missing a &apos;:&apos; after FIXME.

Ok.

&gt; &gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:149
&gt; &gt; +    CString cookieName = name.utf8();
&gt; &gt; +
&gt; 
&gt; Extra newline here.

I&apos;ll remove this one.

&gt; &gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:165
&gt; &gt; +        GOwnPtr&lt;SoupCookie&gt; cookie(static_cast&lt;SoupCookie*&gt;(item-&gt;data));
&gt; 
&gt; It&apos;s was actually a bit tricky for me to see how this worked now, with a GOwnPtr assigned the cookie late in its life. I&apos;m not sure if I prefer this approach versus the old one.

what&apos;s is tricky exactly? soup_cookie_jar_all_cookies() returns a transfer full GSList, so we need a GOwnPtr for the container and another one for every item.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587478</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-25 23:28:39 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Please fix the EFL port before landing. :)

Sure! It seems I missed a couple of s/Default/Soup/. Sorry :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587783</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-26 08:41:18 -0700</bug_when>
    <thetext>(In reply to comment #5)

&gt; what&apos;s is tricky exactly? soup_cookie_jar_all_cookies() returns a transfer full GSList, so we need a GOwnPtr for the container and another one for every item.

GOwnPtr is typically used for the entire lifetime of an object. In this case you are assigning a pre-existing objects to GOwnPtrs and they are freed almost as a side-effect of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587798</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-26 09:00:03 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; 
&gt; &gt; what&apos;s is tricky exactly? soup_cookie_jar_all_cookies() returns a transfer full GSList, so we need a GOwnPtr for the container and another one for every item.
&gt; 
&gt; GOwnPtr is typically used for the entire lifetime of an object. In this case you are assigning a pre-existing objects to GOwnPtrs and they are freed almost as a side-effect of that.

I don&apos;t get what you mean, GOwnPtr always frees the pointer as a side-effect for me. We usually do something like

GOwnPtr&lt;char&gt; foo(g_strdup(&quot;Foo&quot;));
use_foo (bar, foo.get());

and that&apos;s supposed to be fine. 

This is the same, we have a method that returns a new allocated list, which transfers the full list, container and contents, so you are expected to free it, the same way g_strdup() returns a new allocated string that you should free it when done. 

soup_cookies_free() is convenient method to free both the container and the contents. It iterates the list calling soup_cookie_free() for every item (like our GOwnPtr is doing) and then calls g_slist_free() (like our GOwnPtr does). 

When an object returns a transfer full list, you typically use g_list_free_full() or g_list_foreach() + g_list_free() when you are not iterating the list, but when you need to iterate the list, you can free every item when iterating and then free the list to avoid iterating the list twice. This second case is what the patch does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587827</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-26 09:32:08 -0700</bug_when>
    <thetext>(In reply to comment #8)

&gt; I don&apos;t get what you mean, GOwnPtr always frees the pointer as a side-effect for me. We usually do something like
&gt; 
&gt; GOwnPtr&lt;char&gt; foo(g_strdup(&quot;Foo&quot;));
&gt; use_foo (bar, foo.get());
&gt; 
&gt; and that&apos;s supposed to be fine. 
&gt; 
&gt; This is the same, we have a method that returns a new allocated list, which transfers the full list, container and contents, so you are expected to free it, the same way g_strdup() returns a new allocated string that you should free it when done. 

Note the &quot;Own&quot; in GOwnPtr. The way it&apos;s typically designed to work is that OwnPtr immediately contains a raw pointer after allocation. It owns it. The WTF version even has PassOwnPtr, which tries to enforce this more strongly. 

In this case GOwnPtr doesn&apos;t &quot;own&quot; the pointers in the GSList. Conceptually speaking, they are owned by the GSList itself. soup_cookies_free frees both the list and the individual cookies, because in a sense they are one complete unit of data. In your patch GOwnPtr is simply used as a mechanism to free the cookies that are owned by the list.

This is why it was confusing to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587842</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-26 09:47:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; 
&gt; &gt; I don&apos;t get what you mean, GOwnPtr always frees the pointer as a side-effect for me. We usually do something like
&gt; &gt; 
&gt; &gt; GOwnPtr&lt;char&gt; foo(g_strdup(&quot;Foo&quot;));
&gt; &gt; use_foo (bar, foo.get());
&gt; &gt; 
&gt; &gt; and that&apos;s supposed to be fine. 
&gt; &gt; 
&gt; &gt; This is the same, we have a method that returns a new allocated list, which transfers the full list, container and contents, so you are expected to free it, the same way g_strdup() returns a new allocated string that you should free it when done. 
&gt; 
&gt; Note the &quot;Own&quot; in GOwnPtr. The way it&apos;s typically designed to work is that OwnPtr immediately contains a raw pointer after allocation. It owns it. The WTF version even has PassOwnPtr, which tries to enforce this more strongly. 

transfer container means you owns the container, transfer full means you own both the container and the items contained. 

&gt; In this case GOwnPtr doesn&apos;t &quot;own&quot; the pointers in the GSList. Conceptually speaking, they are owned by the GSList itself. soup_cookies_free frees both the list and the individual cookies, because in a sense they are one complete unit of data. In your patch GOwnPtr is simply used as a mechanism to free the cookies that are owned by the list.

soup_cookies_free is just a convenient function to free both the list and the items with a single call.

&gt; This is why it was confusing to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588694</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-27 02:43:27 -0700</bug_when>
    <thetext>Committed r112234: &lt;http://trac.webkit.org/changeset/112234&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133546</attachid>
            <date>2012-03-23 13:13:14 -0700</date>
            <delta_ts>2012-03-23 14:24:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-cookies.diff</filename>
            <type>text/plain</type>
            <size>17961</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNTg1MTcxLi4xN2JhNzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTItMDMtMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBJbXBsZW1lbnQgbWlzc2luZyBtZXRob2RzIGluIENvb2tpZUph
clNvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
MDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWZhdWx0Q29va2llSmFyKTogUmV0dXJuIGEgZ2xvYmFsIEdSZWZQdHIgdG8gc3RvcmUgdGhl
CisgICAgICAgIGRlZmF1bHQgY29va2llIGphci4KKyAgICAgICAgKFdlYkNvcmU6OnNvdXBDb29r
aWVKYXIpOiBSZXR1cm4gdGhlIGN1cnJlbnQgY29va2llIGphciBvciBjcmVhdGUKKyAgICAgICAg
YSBuZXcgb25lLgorICAgICAgICAoV2ViQ29yZTo6c2V0U291cENvb2tpZUphcik6IFNldCB0aGUg
Y3VycmVudCBjb29raWUgamFyLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6IEZpeCBj
b2Rpbmcgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yRG9jdW1lbnQpOiBIZWxw
ZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsaXN0IG9mCisgICAgICAgIGNvb2tpZXMgYXMgYSBzdHJp
bmcuCisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKTogVXNlIGNvb2tpZXNGb3JEb2N1bWVudCgp
LgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOiBHZXQgdGhlIGxpc3Qgb2YgY29v
a2llcyBmb3IgdGhlIGdpdmVuCisgICAgICAgIGRvY3VtZW50IGFuZCB1cmwuCisgICAgICAgIChX
ZWJDb3JlOjpkZWxldGVDb29raWUpOiBEZWxldGUgdGhlIGdpdmVuIGNvb2tpZS4KKyAgICAgICAg
KFdlYkNvcmU6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKTogVXNlIEdPd25QdHIuCisgICAgICAg
IChXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOiBVc2UgR093blB0ciBhbmQKKyAg
ICAgICAgc291cF9jb29raWVfZG9tYWluX21hdGNoZXMoKSBpbnN0ZWFkIG9mIGNvbXBhcmluZyB0
aGUgZG9tYWluCisgICAgICAgIGRpcmVjdGx5IHdpdGggdGhlIGdpdmVuIGhvc3RuYW1lLgorICAg
ICAgICAoV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyk6IFVzZSBHT3duUHRyLgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmg6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL0dPd25QdHJTb3VwLmNwcDoKKyAgICAgICAgKFdURjo6U291cENvb2tp
ZSk6IEFkZCBHT3duUHRyIHRlbXBsYXRlIGZvciBTb3VwQ29va2llLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9HT3duUHRyU291cC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJl
U2Vzc2lvbklzSW5pdGlhbGl6ZWQpOiBVc2Ugc291cENvb2tpZUphcigpIGluc3RlYWQKKyAgICAg
ICAgb2YgZGVmYXVsdENvb2tpZUphcigpLgorCiAyMDEyLTAzLTIzICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIGNzc1RleHQgc2hvdWxkIHVzZSBTdHJpbmdCdWls
ZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggYTZhN2RjNy4uOTczNTJmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAzLTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gSW1wbGVtZW50IG1pc3NpbmcgbWV0
aG9kcyBpbiBDb29raWVKYXJTb3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjA4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZXdrL2V3a19jb29raWVzLmNwcDoKKyAgICAgICAgKGV3a19jb29raWVz
X2NsZWFyKTogVXNlIHNvdXBDb29raWVKYXIoKSBpbnN0ZWFkIG9mCisgICAgICAgIGRlZmF1bHRD
b29raWVKYXIoKS4KKyAgICAgICAgKGV3a19jb29raWVzX2dldF9hbGwpOiBEaXR0by4KKyAgICAg
ICAgKGV3a19jb29raWVzX2Nvb2tpZV9kZWwpOiBEaXR0by4KKyAgICAgICAgKGV3a19jb29raWVz
X3BvbGljeV9zZXQpOiBEaXR0by4KKyAgICAgICAgKGV3a19jb29raWVzX3BvbGljeV9nZXQpOiBE
aXR0by4KKwogMjAxMi0wMy0yMyAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtEUlRdIEltcGxlbWVudCBMYXlvdXRUZXN0Q29u
dHJvbGxlcidzIG1ldGhvZHMgcmVsYXRlZCB3aXRoIGVkaXRpbmcuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTYy
ODA0My4uYjA4NTY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTIzICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09V
UF0gSW1wbGVtZW50IG1pc3NpbmcgbWV0aG9kcyBpbiBDb29raWVKYXJTb3VwCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjA4MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Db29raWVz
L3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBVc2UKKyAgICAg
ICAgc291cENvb2tpZUphcigpIGluc3RlYWQgb2YgZGVmYXVsdENvb2tpZUphcigpLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybUdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpOiBEaXR0by4KKwogMjAxMi0wMy0yMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxMTE3NTQpOiBwbHVnaW5zL3JlbG9hZHBsdWdp
bnMtYW5kLXBhZ2VzLmh0bWwgZmFpbHMgb24gYWxsIHBsYXRmb3JtcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCmluZGV4
IDNiOGE1NDQuLjQ0ZDMzN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKQEAgLTI5LDEzICsyOSwxMSBAQAogI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgYm9vbCBjb29raWVzSW5pdGlhbGl6ZWQ7Ci1zdGF0aWMgU291cENvb2tpZUphciogY29va2ll
SmFyOwotCiBzdGF0aWMgU291cENvb2tpZUphciogY29va2llSmFyRm9yRG9jdW1lbnQoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIGlmICghZG9jdW1lbnQpCkBAIC01MiwyOSArNTAs
MjYgQEAgc3RhdGljIFNvdXBDb29raWVKYXIqIGNvb2tpZUphckZvckRvY3VtZW50KGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gU09VUF9DT09LSUVfSkFSKHNvdXBfc2Vzc2lv
bl9nZXRfZmVhdHVyZShjb250ZXh0LT5zb3VwU2Vzc2lvbigpLCBTT1VQX1RZUEVfQ09PS0lFX0pB
UikpOwogfQogCi1Tb3VwQ29va2llSmFyKiBkZWZhdWx0Q29va2llSmFyKCkKK3N0YXRpYyBHUmVm
UHRyPFNvdXBDb29raWVKYXI+JiBkZWZhdWx0Q29va2llSmFyKCkKIHsKLSAgICBpZiAoIWNvb2tp
ZXNJbml0aWFsaXplZCkgewotICAgICAgICBjb29raWVzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0g
ICAgICAgIGNvb2tpZUphciA9IHNvdXBfY29va2llX2phcl9uZXcoKTsKLSAgICAgICAgc291cF9j
b29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGNvb2tpZUphciwgU09VUF9DT09LSUVfSkFSX0FD
Q0VQVF9OT19USElSRF9QQVJUWSk7Ci0gICAgfQotCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChH
UmVmUHRyPFNvdXBDb29raWVKYXI+LCBjb29raWVKYXIsICgpKTsKICAgICByZXR1cm4gY29va2ll
SmFyOwogfQogCi12b2lkIHNldERlZmF1bHRDb29raWVKYXIoU291cENvb2tpZUphciogamFyKQor
U291cENvb2tpZUphciogc291cENvb2tpZUphcigpCiB7Ci0gICAgY29va2llc0luaXRpYWxpemVk
ID0gdHJ1ZTsKLQotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKGNv
b2tpZUphcik7CisgICAgaWYgKEdSZWZQdHI8U291cENvb2tpZUphcj4mIGphciA9IGRlZmF1bHRD
b29raWVKYXIoKSkKKyAgICAgICAgcmV0dXJuIGphci5nZXQoKTsKIAotICAgIGNvb2tpZUphciA9
IGphcjsKKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBzb3VwX2Nvb2tpZV9qYXJfbmV3KCk7Cisg
ICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphciwgU09VUF9DT09LSUVfSkFS
X0FDQ0VQVF9OT19USElSRF9QQVJUWSk7CisgICAgc2V0U291cENvb2tpZUphcihqYXIpOworICAg
IHJldHVybiBqYXI7Cit9CiAKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBnX29iamVjdF9y
ZWYoY29va2llSmFyKTsKK3ZvaWQgc2V0U291cENvb2tpZUphcihTb3VwQ29va2llSmFyKiBqYXIp
Cit7CisgICAgZGVmYXVsdENvb2tpZUphcigpID0gamFyOwogfQogCiB2b2lkIHNldENvb2tpZXMo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CkBAIC04NCw0NSArNzksMjkgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICByZXR1cm47CiAK
ICAgICBHT3duUHRyPFNvdXBVUkk+IG9yaWdpbihzb3VwX3VyaV9uZXcodXJsLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpKTsKLQogICAgIEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0eShzb3VwX3Vy
aV9uZXcoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSkpOwotCi0gICAgc291cF9jb29raWVfamFyX3NldF9jb29raWVfd2l0aF9maXJzdF9wYXJ0
eShqYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cmlnaW4uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdFBhcnR5LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgc291cF9jb29raWVfamFy
X3NldF9jb29raWVfd2l0aF9maXJzdF9wYXJ0eShqYXIsIG9yaWdpbi5nZXQoKSwgZmlyc3RQYXJ0
eS5nZXQoKSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorc3RhdGljIFN0cmluZyBjb29r
aWVzRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGJvb2wgZm9ySFRUUEhlYWRlcikKIHsKICAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVK
YXJGb3JEb2N1bWVudChkb2N1bWVudCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfdXJpX25ldyh1cmwuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgY2hhciogY29va2llcyA9IHNvdXBfY29va2llX2phcl9nZXRf
Y29va2llcyhqYXIsIHVyaSwgRkFMU0UpOwotICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKLQotICAg
IFN0cmluZyByZXN1bHQoU3RyaW5nOjpmcm9tVVRGOChjb29raWVzKSk7Ci0gICAgZ19mcmVlKGNv
b2tpZXMpOworICAgIEdPd25QdHI8U291cFVSST4gdXJpKHNvdXBfdXJpX25ldyh1cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gY29va2llcyhzb3VwX2Nvb2tp
ZV9qYXJfZ2V0X2Nvb2tpZXMoamFyLCB1cmkuZ2V0KCksIGZvckhUVFBIZWFkZXIpKTsKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChjb29raWVzLmdldCgpKTsKK30KIAotICAgIHJldHVybiBy
ZXN1bHQ7CitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCkKK3sKKyAgICByZXR1cm4gY29va2llc0ZvckRvY3VtZW50KGRvY3VtZW50LCB1cmws
IGZhbHNlKTsKIH0KIAogU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIFNvdXBDb29raWVK
YXIqIGphciA9IGNvb2tpZUphckZvckRvY3VtZW50KGRvY3VtZW50KTsKLSAgICBpZiAoIWphcikK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU291cFVSSSogdXJpID0gc291cF91cmlf
bmV3KHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBjaGFyKiBjb29raWVzID0gc291
cF9jb29raWVfamFyX2dldF9jb29raWVzKGphciwgdXJpLCBUUlVFKTsKLSAgICBzb3VwX3VyaV9m
cmVlKHVyaSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0KFN0cmluZzo6ZnJvbVVURjgoY29va2llcykp
OwotICAgIGdfZnJlZShjb29raWVzKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IGNvb2tpZXNGb3JEb2N1bWVudChkb2N1bWVudCwgdXJsLCB0cnVlKTsKIH0KIAogYm9vbCBjb29r
aWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0xMzAsNTQgKzEwOSw4NyBA
QCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1
cm4gISFjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CiB9CiAKLWJvb2wgZ2V0UmF3Q29v
a2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29v
a2llcykKK2Jvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7Ci0gICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCisgICAgU291cENvb2tpZUph
ciogamFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIGlmICghamFyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHT3duUHRyPEdTTGlzdD4gY29va2llcyhzb3Vw
X2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoamFyKSk7CisgICAgaWYgKCFjb29raWVzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHT3duUHRyPFNvdXBVUkk+IHVyaShzb3VwX3VyaV9uZXco
dXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlciA9IGNv
b2tpZXMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0X25leHQoaXRlcikpIHsKKyAgICAgICAg
R093blB0cjxTb3VwQ29va2llPiBjb29raWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZXIt
PmRhdGEpKTsKKyAgICAgICAgaWYgKCFzb3VwX2Nvb2tpZV9hcHBsaWVzX3RvX3VyaShjb29raWUu
Z2V0KCksIHVyaS5nZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gRklY
TUUgd2UgYXJlIGN1cnJlbnRseSBwYXNzaW5nIGZhbHNlIGFsd2F5cyBmb3Igc2Vlc2lvbiBiZWNh
dXNlIHRoZXJlJ3Mgbm8gQVBJIHRvIGtub3cKKyAgICAgICAgLy8gd2hldGhlciBTb3VwQ29va2ll
SmFyIGlzIHBlcnNpc3RlbnQgb3Igbm90LiBXZSBjb3VsZCBwcm9iYWJseSBhZGQgc291cF9jb29r
aWVfamFyX2lzX3BlcnNpc3RlbnQoKS4KKyAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoQ29va2ll
KFN0cmluZzo6ZnJvbVVURjgoY29va2llLT5uYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChjb29raWUt
PnZhbHVlKSwgU3RyaW5nOjpmcm9tVVRGOChjb29raWUtPmRvbWFpbiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+cGF0aCksIHN0YXRp
Y19jYXN0PGRvdWJsZT4oc291cF9kYXRlX3RvX3RpbWVfdChjb29raWUtPmV4cGlyZXMpKSAqIDEw
MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUtPmh0dHBfb25seSwg
Y29va2llLT5zZWN1cmUsIGZhbHNlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpCit2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIC8vIEZJWE1FOiBOb3QgeWV0
IGltcGxlbWVudGVkCisgICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yRG9jdW1l
bnQoZG9jdW1lbnQpOworICAgIGlmICghamFyKQorICAgICAgICByZXR1cm47CisKKyAgICBHT3du
UHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoamFyKSk7Cisg
ICAgaWYgKCFjb29raWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBDU3RyaW5nIGNvb2tpZU5h
bWUgPSBuYW1lLnV0ZjgoKTsKKworICAgIEdPd25QdHI8U291cFVSST4gdXJpKHNvdXBfdXJpX25l
dyh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOworICAgIGZvciAoR1NMaXN0KiBpdGVyID0g
Y29va2llcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkgeworICAgICAg
ICBHT3duUHRyPFNvdXBDb29raWU+IGNvb2tpZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRl
ci0+ZGF0YSkpOworICAgICAgICBpZiAoIXNvdXBfY29va2llX2FwcGxpZXNfdG9fdXJpKGNvb2tp
ZS5nZXQoKSwgdXJpLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
Y29va2llTmFtZSA9PSBjb29raWUtPm5hbWUpCisgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJf
ZGVsZXRlX2Nvb2tpZShqYXIsIGNvb2tpZS5nZXQoKSk7CisgICAgfQogfQogCiB2b2lkIGdldEhv
c3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIFNv
dXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKLSAg
ICBHU0xpc3QqIGNvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFy
KTsKLSAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXM7IGl0ZW07IGl0ZW0gPSBpdGVtLT5u
ZXh0KSB7Ci0gICAgICAgIFNvdXBDb29raWUqIHNvdXBDb29raWUgPSBzdGF0aWNfY2FzdDxTb3Vw
Q29va2llKj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIGlmIChjaGFyKiBkb21haW4gPSBjb25zdF9j
YXN0PGNoYXIqPihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKHNvdXBDb29raWUpKSkKLSAgICAgICAg
ICAgIGhvc3RuYW1lcy5hZGQoU3RyaW5nOjpmcm9tVVRGOChkb21haW4pKTsKKyAgICBTb3VwQ29v
a2llSmFyKiBjb29raWVKYXIgPSBzb3VwQ29va2llSmFyKCk7CisgICAgR093blB0cjxHU0xpc3Q+
IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOworICAgIGZv
ciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4
dChpdGVtKSkgeworICAgICAgICBHT3duUHRyPFNvdXBDb29raWU+IGNvb2tpZShzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOworICAgICAgICBpZiAoIWNvb2tpZS0+ZG9tYWlu
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGhvc3RuYW1lcy5hZGQoU3RyaW5nOjpm
cm9tVVRGOChjb29raWUtPmRvbWFpbikpOwogICAgIH0KLQotICAgIHNvdXBfY29va2llc19mcmVl
KGNvb2tpZXMpOwogfQogCiB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQogewogICAgIENTdHJpbmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51
dGY4KCk7CiAKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0
Q29va2llSmFyKCk7Ci0gICAgR1NMaXN0KiBjb29raWVzID0gc291cF9jb29raWVfamFyX2FsbF9j
b29raWVzKGNvb2tpZUphcik7Ci0gICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzOyBpdGVt
OyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgICAgICBTb3VwQ29va2llKiBzb3VwQ29va2llID0g
c3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAgICBpZiAoaG9zdE5h
bWVTdHJpbmcgPT0gc291cF9jb29raWVfZ2V0X2RvbWFpbihzb3VwQ29va2llKSkKLSAgICAgICAg
ICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgc291cENvb2tpZSk7
CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUphcigpOworICAgIEdP
d25QdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVK
YXIpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0g
PSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgR093blB0cjxTb3VwQ29va2llPiBjb29r
aWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpKTsKKyAgICAgICAgaWYgKHNv
dXBfY29va2llX2RvbWFpbl9tYXRjaGVzKGNvb2tpZS5nZXQoKSwgaG9zdE5hbWVTdHJpbmcuZGF0
YSgpKSkKKyAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUph
ciwgY29va2llLmdldCgpKTsKICAgICB9Ci0KLSAgICBzb3VwX2Nvb2tpZXNfZnJlZShjb29raWVz
KTsKIH0KIAogdm9pZCBkZWxldGVBbGxDb29raWVzKCkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBj
b29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7Ci0gICAgR1NMaXN0KiBjb29r
aWVzID0gc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7Ci0gICAgZm9yIChH
U0xpc3QqIGl0ZW0gPSBjb29raWVzOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkKLSAgICAgICAg
c291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCBzdGF0aWNfY2FzdDxTb3Vw
Q29va2llKj4oaXRlbS0+ZGF0YSkpOwotCi0gICAgc291cF9jb29raWVzX2ZyZWUoY29va2llcyk7
CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUphcigpOworICAgIEdP
d25QdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVK
YXIpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0g
PSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgR093blB0cjxTb3VwQ29va2llPiBjb29r
aWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpKTsKKyAgICAgICAgc291cF9j
b29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCBjb29raWUuZ2V0KCkpOworICAgIH0K
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L0Nvb2tpZUphclNvdXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9D
b29raWVKYXJTb3VwLmgKaW5kZXggYWIxZjk1Yy4uMjUxYjEzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5oCkBAIC0zMSw4
ICszMSwxMCBAQAogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgU291cENvb2tpZUphciogZGVmYXVsdENvb2tpZUphcigpOwotICAgIHZvaWQgc2V0
RGVmYXVsdENvb2tpZUphcihTb3VwQ29va2llSmFyKiBqYXIpOworCitTb3VwQ29va2llSmFyKiBz
b3VwQ29va2llSmFyKCk7Cit2b2lkIHNldFNvdXBDb29raWVKYXIoU291cENvb2tpZUphciopOwor
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL0dPd25QdHJTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9HT3duUHRyU291cC5jcHAKaW5kZXggNTZmZTY5Mi4uNDcwODBlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dPd25QdHJTb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0clNvdXAuY3BwCkBA
IC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR093blB0clNv
dXAuaCIKIAorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1jb29raWUuaD4KICNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAtdXJpLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzAsNCArMzEsMTAgQEAgdGVt
cGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPFNvdXBVUkk+KFNvdXBVUkkqIHB0cikKICAgICAg
ICAgc291cF91cmlfZnJlZShwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQ
dHI8U291cENvb2tpZT4oU291cENvb2tpZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IHNvdXBfY29va2llX2ZyZWUocHRyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dPd25QdHJTb3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0clNvdXAuaAppbmRleCBlNmJlYzUyLi5iZmRjZDg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0
clNvdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0
clNvdXAuaApAQCAtMjMsMTAgKzIzLDEyIEBACiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgogCiB0eXBlZGVmIHN0cnVjdCBfU291cFVSSSBTb3VwVVJJOwordHlwZWRlZiBzdHJ1Y3Qg
X1NvdXBDb29raWUgU291cENvb2tpZTsKIAogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4g
dm9pZCBmcmVlT3duZWRHUHRyPFNvdXBVUkk+KFNvdXBVUkkqIHB0cik7Cit0ZW1wbGF0ZTw+IHZv
aWQgZnJlZU93bmVkR1B0cjxTb3VwQ29va2llPihTb3VwQ29va2llKiBwdHIpOwogCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAKaW5kZXggNzViYjVjMy4uYWZlZWVkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKQEAgLTE1OSw5ICsxNTksOSBAQCBzdGF0aWMgdm9pZCBlbnN1cmVTZXNzaW9uSXNJ
bml0aWFsaXplZChTb3VwU2Vzc2lvbiogc2Vzc2lvbikKICAgICBpZiAoc2Vzc2lvbiA9PSBSZXNv
dXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKSkgewogICAgICAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBTT1VQX0NPT0tJRV9KQVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNP
VVBfVFlQRV9DT09LSUVfSkFSKSk7CiAgICAgICAgIGlmICghamFyKQotICAgICAgICAgICAgc291
cF9zZXNzaW9uX2FkZF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfU0VTU0lPTl9GRUFUVVJFKGRlZmF1
bHRDb29raWVKYXIoKSkpOworICAgICAgICAgICAgc291cF9zZXNzaW9uX2FkZF9mZWF0dXJlKHNl
c3Npb24sIFNPVVBfU0VTU0lPTl9GRUFUVVJFKHNvdXBDb29raWVKYXIoKSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzZXREZWZhdWx0Q29va2llSmFyKGphcik7CisgICAgICAgICAgICBz
ZXRTb3VwQ29va2llSmFyKGphcik7CiAgICAgfQogCiAgICAgaWYgKCFzb3VwX3Nlc3Npb25fZ2V0
X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0xPR0dFUikgJiYgTG9nTmV0d29yay5zdGF0ZSA9
PSBXVEZMb2dDaGFubmVsT24pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfY29va2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwCmlu
ZGV4IDZlZjIwMzQuLmE4MzZmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfY29va2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29raWVzLmNw
cApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIGV3a19jb29raWVzX2NsZWFyKHZvaWQpCiB7CiAgICAg
R1NMaXN0KiBsaXN0OwogICAgIEdTTGlzdCogcDsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVK
YXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7CisgICAgU291cENvb2tpZUphciogY29v
a2llSmFyID0gV2ViQ29yZTo6c291cENvb2tpZUphcigpOwogCiAgICAgbGlzdCA9IHNvdXBfY29v
a2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOwogICAgIGZvciAocCA9IGxpc3Q7IHA7IHAg
PSBwLT5uZXh0KQpAQCAtNzEsNyArNzEsNyBAQCBFaW5hX0xpc3QqIGV3a19jb29raWVzX2dldF9h
bGwodm9pZCkKICAgICBFaW5hX0xpc3QqIHJlc3VsdCA9IDA7CiAgICAgR1NMaXN0KiBsaXN0Owog
ICAgIEdTTGlzdCogcDsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpk
ZWZhdWx0Q29va2llSmFyKCk7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gV2ViQ29y
ZTo6c291cENvb2tpZUphcigpOwogCiAgICAgbGlzdCA9IHNvdXBfY29va2llX2phcl9hbGxfY29v
a2llcyhjb29raWVKYXIpOwogICAgIGZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CkBA
IC05Nyw3ICs5Nyw3IEBAIHZvaWQgZXdrX2Nvb2tpZXNfY29va2llX2RlbChFd2tfQ29va2llKiBj
b29raWUpCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29va2llKTsKICAgICBHU0xp
c3QqIGxpc3Q7CiAgICAgR1NMaXN0KiBwOwotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9
IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKKyAgICBTb3VwQ29va2llSmFyKiBjb29raWVK
YXIgPSBXZWJDb3JlOjpzb3VwQ29va2llSmFyKCk7CiAgICAgU291cENvb2tpZSogY29va2llMSA9
IHNvdXBfY29va2llX25ldygKICAgICAgICAgY29va2llLT5uYW1lLCBjb29raWUtPnZhbHVlLCBj
b29raWUtPmRvbWFpbiwgY29va2llLT5wYXRoLCAtMSk7CiAKQEAgLTEyNiw3ICsxMjYsNyBAQCB2
b2lkIGV3a19jb29raWVzX2Nvb2tpZV9mcmVlKEV3a19Db29raWUqIGNvb2tpZSkKIAogdm9pZCBl
d2tfY29va2llc19wb2xpY3lfc2V0KEV3a19Db29raWVfUG9saWN5IGNvb2tpZVBvbGljeSkKIHsK
LSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFy
KCk7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gV2ViQ29yZTo6c291cENvb2tpZUph
cigpOwogICAgIFNvdXBDb29raWVKYXJBY2NlcHRQb2xpY3kgcG9saWN5OwogCiAgICAgcG9saWN5
ID0gU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVM7CkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9p
ZCBld2tfY29va2llc19wb2xpY3lfc2V0KEV3a19Db29raWVfUG9saWN5IGNvb2tpZVBvbGljeSkK
IEV3a19Db29raWVfUG9saWN5IGV3a19jb29raWVzX3BvbGljeV9nZXQodm9pZCkKIHsKICAgICBF
d2tfQ29va2llX1BvbGljeSBld2tQb2xpY3kgPSBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlT
OwotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVK
YXIoKTsKKyAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpzb3VwQ29va2ll
SmFyKCk7CiAgICAgU291cENvb2tpZUphckFjY2VwdFBvbGljeSBwb2xpY3k7CiAKICAgICBwb2xp
Y3kgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3koY29va2llSmFyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1h
bmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9zb3VwL1dl
YkNvb2tpZU1hbmFnZXJTb3VwLmNwcAppbmRleCBiZTU0MjFiLi5kYTIxODA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2Vy
U291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL3NvdXAvV2Vi
Q29va2llTWFuYWdlclNvdXAuY3BwCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKIHsKLSAgICBTb3VwQ29va2llSmFy
KiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7CisgICAgU291cENvb2tp
ZUphciogY29va2llSmFyID0gV2ViQ29yZTo6c291cENvb2tpZUphcigpOwogICAgIFNvdXBDb29r
aWVKYXJBY2NlcHRQb2xpY3kgc291cFBvbGljeTsKIAogICAgIHNvdXBQb2xpY3kgPSBTT1VQX0NP
T0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2Vw
dFBvbGljeQogCiBIVFRQQ29va2llQWNjZXB0UG9saWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRm
b3JtR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpCiB7Ci0gICAgU291cENvb2tpZUphciogY29v
a2llSmFyID0gV2ViQ29yZTo6ZGVmYXVsdENvb2tpZUphcigpOworICAgIFNvdXBDb29raWVKYXIq
IGNvb2tpZUphciA9IFdlYkNvcmU6OnNvdXBDb29raWVKYXIoKTsKICAgICBTb3VwQ29va2llSmFy
QWNjZXB0UG9saWN5IHNvdXBQb2xpY3k7CiAKICAgICBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBv
bGljeTsK
</data>
<flag name="review"
          id="137574"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="137592"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
      

    </bug>

</bugzilla>