<?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>90878</bug_id>
          
          <creation_ts>2012-07-10 06:24:37 -0700</creation_ts>
          <short_desc>[GTK] Add API to set preferred languages to WebKit2 GTK+</short_desc>
          <delta_ts>2012-08-20 03:36:01 -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>WebKit2</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</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>94431</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>danw</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>665712</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-07-10 06:24:37 -0700</bug_when>
    <thetext>This is another soup session property that needs to be exposed by our API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665720</commentid>
    <comment_count>1</comment_count>
      <attachid>151451</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-07-10 06:32:04 -0700</bug_when>
    <thetext>Created attachment 151451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665724</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-10 06:37:41 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698333</commentid>
    <comment_count>3</comment_count>
      <attachid>151451</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-17 07:40:44 -0700</bug_when>
    <thetext>Comment on attachment 151451
Patch

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

Looks good, but I have a few minor comments and I still don&apos;t understand the changes in the platform-independent code.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:425
&gt; +    return g_strdelimit(g_ascii_strdown(language, -1), &quot;_&quot;, &apos;-&apos;);

You treat the return value here as UTF-8 and the annotation for webkit_web_context_set_preferred_languages says that it takes UTF-8, so maybe this should be g_utf8_strdown?

Another thing you could do is to just return a string:
return String::fromUTF8(language).lower().replace(&quot;_&quot;, &quot;-&quot;);

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:221
&gt; +    GList* languages = g_list_prepend(0, (gpointer)&quot;dE&quot;);
&gt; +    languages = g_list_prepend(languages, (gpointer)&quot;ES_es&quot;);
&gt; +    languages = g_list_prepend(languages, (gpointer)&quot;en&quot;);
&gt; +    webkit_web_context_set_preferred_languages(webkit_web_context_get_default(), languages);

The casts to gpointer are almost certainly unecessary since the strings are const char*. Maybe you could double-check here?

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:316
&gt; +#if PLATFORM(GTK)
&gt; +    languageDidChange();
&gt; +#endif

I&apos;m not sure I understand completely why this change is necessary for GTK+ only.

&gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:126
&gt; +    // Fallback to &quot;en&quot; is the list is empty.

is the list -&gt; if the list

&gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:145
&gt; +        builder.append(languages[i]);

You should probably use languages[i].utf8() for the sake of safety.

&gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:148
&gt; +        if (quality &amp;&amp; quality &lt; 100) {

It seems the only way that quality could be &gt;= 100 is if i or delta is &lt;= 0. It doesn&apos;t look like tihs can happen, so perhaps you can remove the quality &lt; 0 check here.

&gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:151
&gt; +            char buffer[8];
&gt; +            g_ascii_formatd(buffer, 8, &quot;%.2f&quot;, quality / 100.0);
&gt; +            builder.append(String::format(&quot;;q=%s&quot;, buffer));

Hrm. why not just use string.format here? builder.append(String::format(&quot;;q=%.2f&quot;, quality / 100.0)));

It&apos;s probably a good idea to use

&gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:162
&gt; +    SoupSession* session = WebCore::ResourceHandle::defaultSession();
&gt; +    CString acceptLanguages = buildAcceptLanguages(languages);
&gt; +    g_object_set(G_OBJECT(session), &quot;accept-language&quot;, acceptLanguages.data(), NULL);

This could probably be one line sanely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699007</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-19 02:05:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 151451 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151451&amp;action=review
&gt; 
&gt; Looks good, but I have a few minor comments and I still don&apos;t understand the changes in the platform-independent code.

Thanks for reviewing.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:425
&gt; &gt; +    return g_strdelimit(g_ascii_strdown(language, -1), &quot;_&quot;, &apos;-&apos;);
&gt; 
&gt; You treat the return value here as UTF-8 and the annotation for webkit_web_context_set_preferred_languages says that it takes UTF-8, so maybe this should be g_utf8_strdown?
&gt; 
&gt; Another thing you could do is to just return a string:
&gt; return String::fromUTF8(language).lower().replace(&quot;_&quot;, &quot;-&quot;);

This looks much nicer :-)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:221
&gt; &gt; +    GList* languages = g_list_prepend(0, (gpointer)&quot;dE&quot;);
&gt; &gt; +    languages = g_list_prepend(languages, (gpointer)&quot;ES_es&quot;);
&gt; &gt; +    languages = g_list_prepend(languages, (gpointer)&quot;en&quot;);
&gt; &gt; +    webkit_web_context_set_preferred_languages(webkit_web_context_get_default(), languages);
&gt; 
&gt; The casts to gpointer are almost certainly unecessary since the strings are const char*. Maybe you could double-check here?

They are indeed needed, I&apos;ve replaced the C style cast for this beautiful C++ style 

cast const_cast&lt;gpointer&gt;(static_cast&lt;const void*&gt;()

&gt; &gt; Source/WebKit2/WebProcess/WebProcess.cpp:316
&gt; &gt; +#if PLATFORM(GTK)
&gt; &gt; +    languageDidChange();
&gt; &gt; +#endif
&gt; 
&gt; I&apos;m not sure I understand completely why this change is necessary for GTK+ only.

because only the gtk+ port uses a language observer in the web process, but I agree it&apos;s harmless for tother ports, so I&apos;ve removed the #ifdef

&gt; &gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:126
&gt; &gt; +    // Fallback to &quot;en&quot; is the list is empty.
&gt; 
&gt; is the list -&gt; if the list

Ok.

&gt; &gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:145
&gt; &gt; +        builder.append(languages[i]);
&gt; 
&gt; You should probably use languages[i].utf8() for the sake of safety.

I don&apos;t think so, the function receives a vecor of String, and StringBuilder uses String, so we only need to convert the final string.

&gt; &gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:148
&gt; &gt; +        if (quality &amp;&amp; quality &lt; 100) {
&gt; 
&gt; It seems the only way that quality could be &gt;= 100 is if i or delta is &lt;= 0. It doesn&apos;t look like tihs can happen, so perhaps you can remove the quality &lt; 0 check here.

I&apos;m not sure I understand this, I guess you mean I can remove the quality &lt; 100 check. When i is 0 quality is always 100, and that always happens for the first iteration of the loop.

&gt; &gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:151
&gt; &gt; +            char buffer[8];
&gt; &gt; +            g_ascii_formatd(buffer, 8, &quot;%.2f&quot;, quality / 100.0);
&gt; &gt; +            builder.append(String::format(&quot;;q=%s&quot;, buffer));
&gt; 
&gt; Hrm. why not just use string.format here? builder.append(String::format(&quot;;q=%.2f&quot;, quality / 100.0)));

Because g_ascii_formatd() is locale independent, String::format() would return a &apos;,&apos; instead of &apos;.&apos; in my spanish system for example.

&gt; It&apos;s probably a good idea to use
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp:162
&gt; &gt; +    SoupSession* session = WebCore::ResourceHandle::defaultSession();
&gt; &gt; +    CString acceptLanguages = buildAcceptLanguages(languages);
&gt; &gt; +    g_object_set(G_OBJECT(session), &quot;accept-language&quot;, acceptLanguages.data(), NULL);
&gt; 
&gt; This could probably be one line sanely.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699012</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-19 02:24:24 -0700</bug_when>
    <thetext>Committed r125972: &lt;http://trac.webkit.org/changeset/125972&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699045</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-08-19 10:10:15 -0700</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=94428</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699053</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-19 11:27:36 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 94431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699312</commentid>
    <comment_count>8</comment_count>
      <attachid>159360</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-20 01:26:58 -0700</bug_when>
    <thetext>Created attachment 159360
Updated patch to fix the mac build

Try to fix mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699371</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-20 03:21:19 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=159360) [details]
&gt; Updated patch to fix the mac build
&gt; 
&gt; Try to fix mac build.

All boxes are green now, let&apos;s give it another try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699376</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-20 03:27:44 -0700</bug_when>
    <thetext>Committed r126017: &lt;http://trac.webkit.org/changeset/126017&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151451</attachid>
            <date>2012-07-10 06:32:04 -0700</date>
            <delta_ts>2012-08-20 01:26:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-languages-api.diff</filename>
            <type>text/plain</type>
            <size>16582</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1MTdmNWM3Li4yNDY4ZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTItMDctMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gc2V0IHByZWZlcnJlZCBsYW5ndWFnZXMgdG8g
V2ViS2l0MiBHVEsrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MDg3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgIChj
YW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXIpOiBIZWxwZXIgZnVuY3Rpb24gdG8gY2Fub25pY2Fs
aXplCisgICAgICAgIGxhbmd1YWdlIGluZGV0aWZpZXIgYXMgc3BlY2lmaWVkIGluIFJGQyAyNjE2
LgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKTog
UHVibGljIEFQSSB0byBzZXQgYQorICAgICAgICBsaXN0IG9mIHByZWZlcnJlZCBsYW5ndWFnZXMg
c29ydGVkIGZyb20gbW9zdCBkZXNpcmFibGUgdG8gbGVhc3QKKyAgICAgICAgZGVzaXJhYmxlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3
IHN5bWJvbC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2Vi
Q29udGV4dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk6CisgICAgICAg
IChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJB
bGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcDoK
KyAgICAgICAgKHJlc291cmNlR2V0RGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYlZpZXdUZXN0
OjptYWluUmVzb3VyY2VEYXRhKTogTW92ZWQgZnJvbSBUZXN0V2ViS2l0V2ViQ29udGV4dAorICAg
ICAgICB0byBtYWtlIGl0IGF2YWlsYWJsZSB0byBhbGwgV2ViVmlld1Rlc3RzLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6dXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQpOiBOb3RpZnkgb3VyCisgICAgICAgIG9ic2VydmVyIHRo
YXQgdGhlIGxhbmd1YWdlcyBoYXZlIGJlZW4gb3ZlcnJpZGVuLgorICAgICAgICAqIFdlYlByb2Nl
c3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpidWlsZEFjY2VwdExh
bmd1YWdlcyk6IEhlbHBlciBmdW5jdGlvbiB0byBidWlsZCB0aGUKKyAgICAgICAgYWNjZXB0IGxh
bmd1YWdlcyBhcyBzcGVjaWZpZWQgaW4gUkZDIDI2MTYuCisgICAgICAgIChXZWJLaXQ6OnNldFNv
dXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UpOiBTZXQgdGhlIGFjY2VwdC1sYW5ndWFnZQorICAgICAg
ICBwcm9wZXJ0eSBvZiB0aGUgZGVmYXVsdCBTb3VwU2Vzc2lvbi4KKyAgICAgICAgKFdlYktpdDo6
bGFuZ3VhZ2VDaGFuZ2VkKTogVXBkYXRlIHRoZSBwcmVmZXJyZWQgbGFuZ3VhZ2VzIGluCisgICAg
ICAgIFNvdXBTZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVXZWJQcm9jZXNzKTogQWRkIGFuCisgICAgICAgIG9ic2VydmVyIHRvIGJlIG5vdGlm
aWVkIHdoZW4gdGhlIGxpc3Qgb2YgcHJlZmVycmVkIGxhbmd1YWdlcyBpcworICAgICAgICB1cGRh
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSk6IFJl
bW92ZSB0aGUgb2JzZXJ2ZXIgYWRkZWQKKyAgICAgICAgaW4gcGxhdGZvcm1Jbml0aWFsaXplV2Vi
UHJvY2VzcygpLgorCiAyMDEyLTA3LTA5ICBNYXR0IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBBZGQgRU5BQkxFX0RJQUxPR19FTEVNRU5UIGFuZCBza2VsZXRv
biBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcAppbmRleCA4YTA2MjVjLi5lZWQzYTQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAt
MzEsNyArMzEsOSBAQAogI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IApAQCAtNDE4LDYgKzQyMCwzOCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9yZWdpc3Rlcl91
cmlfc2NoZW1lKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYQogICAgIFdLU291
cFJlcXVlc3RNYW5hZ2VyUmVnaXN0ZXJVUklTY2hlbWUoY29udGV4dC0+cHJpdi0+cmVxdWVzdE1h
bmFnZXIuZ2V0KCksIHdrU2NoZW1lLmdldCgpKTsKIH0KIAorc3RhdGljIGlubGluZSBjaGFyKiBj
YW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXIoY2hhciogbGFuZ3VhZ2UpCit7CisgICAgcmV0dXJu
IGdfc3RyZGVsaW1pdChnX2FzY2lpX3N0cmRvd24obGFuZ3VhZ2UsIC0xKSwgIl8iLCAnLScpOwor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJlZmVycmVkX2xhbmd1YWdlczoK
KyAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKiBAbGFuZ3VhZ2VzOiAoZWxlbWVu
dC10eXBlIHV0ZjgpOiBhICNHTGlzdCBvZiBsYW5ndWFnZSBpZGVudGlmaWVycworICoKKyAqIFNl
dCB0aGUgbGlzdCBvZiBwcmVmZXJyZWQgbGFuZ3VhZ2VzLCBzb3J0ZWQgZnJvbSBtb3N0IGRlc2ly
YWJsZQorICogdG8gbGVhc3QgZGVzaXJhYmxlLiBUaGUgbGlzdCB3aWxsIGJlIHVzZWQgdG8gYnVp
bGQgdGhlICJBY2NlcHQtTGFuZ3VhZ2UiCisgKiBoZWFkZXIgdGhhdCB3aWxsIGJlIGluY2x1ZGVk
IGluIHRoZSBuZXR3b3JrIHJlcXVlc3RzIHN0YXJ0ZWQgYnkKKyAqIHRoZSAjV2ViS2l0V2ViQ29u
dGV4dC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9sYW5ndWFn
ZXMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgR0xpc3QqIGxhbmd1YWdlTGlzdCkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CisKKyAg
ICBpZiAoIWxhbmd1YWdlTGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0cmlu
Zz4gbGFuZ3VhZ2VzOworICAgIGZvciAoR0xpc3QqIGl0ZXIgPSBsYW5ndWFnZUxpc3Q7IGl0ZXI7
IGl0ZXIgPSBnX2xpc3RfbmV4dChpdGVyKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IGxhbmd1
YWdlKGdfc3RyZHVwKHN0YXRpY19jYXN0PGNoYXIqPihpdGVyLT5kYXRhKSkpOworICAgICAgICBs
YW5ndWFnZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoY2Fub25pY2FsTGFuZ3VhZ2VJZGVudGlm
aWVyKGxhbmd1YWdlLmdldCgpKSkpOworICAgIH0KKworICAgIFdlYkNvcmU6Om92ZXJyaWRlVXNl
clByZWZlcnJlZExhbmd1YWdlcyhsYW5ndWFnZXMpOworICAgIFdlYkNvcmU6Omxhbmd1YWdlRGlk
Q2hhbmdlKCk7Cit9CisKIFdlYktpdERvd25sb2FkKiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVh
dGVEb3dubG9hZChXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQpCiB7CiAgICAgR1JlZlB0cjxXZWJL
aXREb3dubG9hZD4gZG93bmxvYWQgPSBkb3dubG9hZHNNYXAoKS5nZXQod2tEb3dubG9hZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmgKaW5kZXggODNiNjAxYS4uZmJlMzgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaApAQCAtMTMyLDYgKzEzMiwxMSBAQCB3
ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSAgICAgICAgICAgICAgKFdlYktp
dFdlYkNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAgKnNjaGVtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAg
dXNlcl9kYXRhKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3By
ZWZlcnJlZF9sYW5ndWFnZXMgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAg
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAqbGFuZ3VhZ2VzKTsKKwogR19F
TkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBlZDY2ZWI0
Li5jNjcyOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTMzLDYgKzMzLDcgQEAg
d2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcgogd2Via2l0X3dlYl9jb250ZXh0
X3NldF9hZGRpdGlvbmFsX3BsdWdpbnNfZGlyZWN0b3J5CiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3BsdWdpbnMKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2luc19maW5pc2gKK3dlYmtpdF93
ZWJfY29udGV4dF9zZXRfcHJlZmVycmVkX2xhbmd1YWdlcwogCiA8U1VCU0VDVElPTiBVUkkgU2No
ZW1lPgogV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29u
dGV4dC5jcHAKaW5kZXggZTdkNDNhMS4uNjlmN2NjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250
ZXh0LmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVk
ZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNp
bmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTI3LDYgKzI4LDggQEAKICNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCitzdGF0aWMg
V2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKwogc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRE
ZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgLy8gQ2hlY2sgdGhlcmUn
cyBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCB3ZWIgY29udGV4dC4KQEAgLTE2NSwz
NSArMTY4LDYgQEAgcHVibGljOgogICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJf
dXJpX3NjaGVtZSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgc2NoZW1lLCB1cmlT
Y2hlbWVSZXF1ZXN0Q2FsbGJhY2ssIHRoaXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJl
c291cmNlR2V0RGF0YUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIGdwb2ludGVyIHVzZXJEYXRhKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGRhdGFTaXplOwot
ICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRh
dGEgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhX2ZpbmlzaChXRUJLSVRfV0VCX1JFU09V
UkNFKG9iamVjdCksIHJlc3VsdCwgJmRhdGFTaXplLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAg
ICBnX2Fzc2VydChkYXRhKTsKLQotICAgICAgICBVUklTY2hlbWVUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8VVJJU2NoZW1lVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+bV9yZXNvdXJj
ZURhdGEuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKLSAgICAgICAgdGVzdC0+
bV9yZXNvdXJjZURhdGFTaXplID0gZGF0YVNpemU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
dGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogbWFpblJlc291cmNl
RGF0YShzaXplX3QmIG1haW5SZXNvdXJjZURhdGFTaXplKQotICAgIHsKLSAgICAgICAgbV9yZXNv
dXJjZURhdGFTaXplID0gMDsKLSAgICAgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKLSAgICAg
ICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWlu
X3Jlc291cmNlKG1fd2ViVmlldyk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLQotICAg
ICAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKHJlc291cmNlLCAwLCByZXNvdXJjZUdl
dERhdGFDYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKLQotICAgICAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IG1fcmVzb3VyY2VEYXRhU2l6ZTsK
LSAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VEYXRhLmdldCgpOwotICAgIH0KLQotICAgIEdPd25Q
dHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsK
ICAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IG1fdXJpU2NoZW1lUmVxdWVzdDsK
ICAgICBIYXNoTWFwPFN0cmluZywgVVJJU2NoZW1lSGFuZGxlcj4gbV9oYW5kbGVyc01hcDsKIH07
CkBAIC0yMzEsMTMgKzIwNSw1NiBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFVSSVNjaGVt
ZShVUklTY2hlbWVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCkpOwog
fQogCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyhXZWJWaWV3VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWREZWZh
dWx0TGFuZ3VhZ2UgPSAiZW4iOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cisg
ICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBjb25zdCBjaGFyKiBtYWlu
UmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6
ZSk7CisgICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxl
bihleHBlY3RlZERlZmF1bHRMYW5ndWFnZSkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5S
ZXNvdXJjZURhdGEsIGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlLCBtYWluUmVzb3VyY2VEYXRhU2l6
ZSkpOworCisgICAgR0xpc3QqIGxhbmd1YWdlcyA9IGdfbGlzdF9wcmVwZW5kKDAsIChncG9pbnRl
cikiZEUiKTsKKyAgICBsYW5ndWFnZXMgPSBnX2xpc3RfcHJlcGVuZChsYW5ndWFnZXMsIChncG9p
bnRlcikiRVNfZXMiKTsKKyAgICBsYW5ndWFnZXMgPSBnX2xpc3RfcHJlcGVuZChsYW5ndWFnZXMs
IChncG9pbnRlcikiZW4iKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9s
YW5ndWFnZXMod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIGxhbmd1YWdlcyk7Cisg
ICAgZ19saXN0X2ZyZWUobGFuZ3VhZ2VzKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBleHBl
Y3RlZExhbmd1YWdlcyA9ICJlbiwgZXMtZXM7cT0wLjkwLCBkZTtxPTAuODAiOworICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwor
ICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJj
ZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9
PSwgc3RybGVuKGV4cGVjdGVkTGFuZ3VhZ2VzKSk7CisgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFp
blJlc291cmNlRGF0YSwgZXhwZWN0ZWRMYW5ndWFnZXMsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291
cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xp
ZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09V
UF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Cisg
ICAgY29uc3QgY2hhciogYWNjZXB0TGFuZ3VhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRf
b25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdC1MYW5ndWFnZSIpOworICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9DT1BZLCBhY2NlcHRMYW5ndWFnZSwgc3RybGVuKGFjY2VwdExhbmd1YWdlKSk7CisgICAgc291
cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKIHZv
aWQgYmVmb3JlQWxsKCkKIHsKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsK
KyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCiAgICAgVGVzdDo6YWRkKCJXZWJL
aXRXZWJDb250ZXh0IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJDb250ZXh0RGVmYXVsdCk7
CiAgICAgUGx1Z2luc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJnZXQtcGx1Z2lucyIs
IHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk7CiAgICAgVVJJU2NoZW1lVGVzdDo6YWRkKCJXZWJL
aXRXZWJDb250ZXh0IiwgInVyaS1zY2hlbWUiLCB0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZSk7Cisg
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJsYW5ndWFnZXMiLCB0ZXN0
V2ViQ29udGV4dExhbmd1YWdlcyk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQogeworICAgIGRlbGV0
ZSBrU2VydmVyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDMyMWI2YTMuLjE2ZTgxZjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBAIFdlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdCgpCiAgICAg
LCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKICAgICAsIG1fcGFyZW50V2lu
ZG93KDApCiAgICAgLCBtX2phdmFzY3JpcHRSZXN1bHQoMCkKKyAgICAsIG1fcmVzb3VyY2VEYXRh
U2l6ZSgwKQogewogICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1QobV93ZWJWaWV3KSk7CiB9CkBAIC0xOTcsNiArMTk4LDMzIEBAIHZvaWQgV2ViVmlld1Rl
c3Q6OnJlc2l6ZVZpZXcoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGd0a193aWRnZXRfc2l6
ZV9hbGxvY2F0ZShHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxvY2F0aW9uKTsKIH0KIAorc3Rh
dGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgc2l6ZV90IGRhdGFTaXpl
OworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0g
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9maW5pc2goV0VCS0lUX1dFQl9SRVNPVVJDRShv
YmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2Vy
dChkYXRhKTsKKworICAgIFdlYlZpZXdUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8V2ViVmlld1Rl
c3QqPih1c2VyRGF0YSk7CisgICAgdGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKKyAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRh
U2l6ZTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitjb25z
dCBjaGFyKiBXZWJWaWV3VGVzdDo6bWFpblJlc291cmNlRGF0YShzaXplX3QmIG1haW5SZXNvdXJj
ZURhdGFTaXplKQoreworICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgbV9yZXNvdXJj
ZURhdGEuY2xlYXIoKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNv
dXJjZSk7CisKKyAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKHJlc291cmNlLCAwLCBy
ZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworCisgICAgbWFpblJlc291cmNlRGF0YVNpemUgPSBtX3Jlc291cmNlRGF0YVNpemU7
CisgICAgcmV0dXJuIG1fcmVzb3VyY2VEYXRhLmdldCgpOworfQorCiB2b2lkIFdlYlZpZXdUZXN0
Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykK
IHsKICAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAppbmRleCA4ZTQ2OWYxLi5j
YTI2NDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJWaWV3VGVzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2Fp
dFVudGlsVGl0bGVDaGFuZ2VkKCk7CiAgICAgdm9pZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoR3RrV2luZG93VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOwogICAgIHZvaWQgcmVzaXpl
VmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJj
ZURhdGEoc2l6ZV90JiBtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CiAKICAgICB2b2lkIG1vdXNlTW92
ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CiAgICAg
dm9pZCBjbGlja01vdXNlQnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiA9
IDEsIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOwpAQCAtNjksNiArNzAsOCBAQCBw
dWJsaWM6CiAgICAgQ1N0cmluZyBtX2V4cGVjdGVkVGl0bGU7CiAgICAgV2ViS2l0SmF2YXNjcmlw
dFJlc3VsdCogbV9qYXZhc2NyaXB0UmVzdWx0OwogICAgIEdFcnJvcioqIG1famF2YXNjcmlwdEVy
cm9yOworICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7CisgICAgc2l6ZV90IG1fcmVz
b3VyY2VEYXRhU2l6ZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGRvTW91c2VCdXR0b25FdmVudChH
ZGtFdmVudFR5cGUsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCAzYTk5NDA0Li4yYjJlMWY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTMxMSw2ICsz
MTEsOSBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoYm9vbCB1
c2VGb250U21vb3RoaW5nKQogdm9pZCBXZWJQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKSBjb25zdAogewogICAgIG92
ZXJyaWRlVXNlclByZWZlcnJlZExhbmd1YWdlcyhsYW5ndWFnZXMpOworI2lmIFBMQVRGT1JNKEdU
SykKKyAgICBsYW5ndWFnZURpZENoYW5nZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vz
czo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NF
bmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJv
Y2Vzc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzR3Rr
LmNwcAppbmRleCBmNDU2NmQzLi4xMGY2MTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmls
ZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTGFuZ3VhZ2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL01lbW9yeUNhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZUNhY2hlLmg+CkBAIC0zOCw2ICszOSw4IEBACiAjaW5jbHVk
ZSA8bGlic291cC9zb3VwLWNhY2hlLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgIU9T
KFdJTkRPV1MpCiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC0xMTIsMTMgKzExNSw2OSBAQCB2b2lk
IFdlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyhSZXNvdXJjZUNhY2hlc1Rv
Q2xlYXIpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKQorLy8gVGhpcyBmdW5jdGlvbiBpcyBiYXNl
ZCBvbiBFcGlwaGFueSBjb2RlIGluIGVwaHktZW1iZWQtcHJlZnMuYy4KK3N0YXRpYyBDU3RyaW5n
IGJ1aWxkQWNjZXB0TGFuZ3VhZ2VzKFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcykKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIC8vIElnbm9yZSAiQyIgbG9jYWxlLgorICAgIHNpemVfdCBw
b3NpdGlvbiA9IGxhbmd1YWdlcy5maW5kKCJjIik7CisgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZv
dW5kKQorICAgICAgICBsYW5ndWFnZXMucmVtb3ZlKHBvc2l0aW9uKTsKKworICAgIC8vIEZhbGxi
YWNrIHRvICJlbiIgaXMgdGhlIGxpc3QgaXMgZW1wdHkuCisgICAgaWYgKGxhbmd1YWdlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiAiZW4iOworCisgICAgLy8gQ2FsY3VsYXRlIGRlbHRhcyBm
b3IgdGhlIHF1YWxpdHkgdmFsdWVzLgorICAgIGludCBkZWx0YTsKKyAgICBpZiAobGFuZ3VhZ2Vz
LnNpemUoKSA8IDEwKQorICAgICAgICBkZWx0YSA9IDEwOworICAgIGVsc2UgaWYgKGxhbmd1YWdl
cy5zaXplKCkgPCAyMCkKKyAgICAgICAgZGVsdGEgPSA1OworICAgIGVsc2UKKyAgICAgICAgZGVs
dGEgPSAxOworCisgICAgLy8gU2V0IHF1YWxpdHkgdmFsdWVzIGZvciBlYWNoIGxhbmd1YWdlLgor
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
bmd1YWdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIsICIpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxhbmd1YWdlc1tpXSk7
CisKKyAgICAgICAgaW50IHF1YWxpdHkgPSAxMDAgLSBpICogZGVsdGE7CisgICAgICAgIGlmIChx
dWFsaXR5ICYmIHF1YWxpdHkgPCAxMDApIHsKKyAgICAgICAgICAgIGNoYXIgYnVmZmVyWzhdOwor
ICAgICAgICAgICAgZ19hc2NpaV9mb3JtYXRkKGJ1ZmZlciwgOCwgIiUuMmYiLCBxdWFsaXR5IC8g
MTAwLjApOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIjtxPSVz
IiwgYnVmZmVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpLnV0ZjgoKTsKK30KKworc3RhdGljIHZvaWQgc2V0U291cFNlc3Npb25BY2NlcHRMYW5n
dWFnZShWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMpCit7CisgICAgU291cFNlc3Npb24qIHNlc3Np
b24gPSBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBDU3Ry
aW5nIGFjY2VwdExhbmd1YWdlcyA9IGJ1aWxkQWNjZXB0TGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cisg
ICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNlc3Npb24pLCAiYWNjZXB0LWxhbmd1YWdlIiwgYWNj
ZXB0TGFuZ3VhZ2VzLmRhdGEoKSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGxhbmd1YWdlQ2hh
bmdlZCh2b2lkKikKK3sKKyAgICBzZXRTb3VwU2Vzc2lvbkFjY2VwdExhbmd1YWdlKFdlYkNvcmU6
OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKQoreworICAgIGlmICghcGFy
YW1ldGVycy5sYW5ndWFnZXMuaXNFbXB0eSgpKQorICAgICAgICBzZXRTb3VwU2Vzc2lvbkFjY2Vw
dExhbmd1YWdlKHBhcmFtZXRlcnMubGFuZ3VhZ2VzKTsKKworICAgIFdlYkNvcmU6OmFkZExhbmd1
YWdlQ2hhbmdlT2JzZXJ2ZXIodGhpcywgbGFuZ3VhZ2VDaGFuZ2VkKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCiB7CisgICAgV2ViQ29yZTo6cmVtb3ZlTGFuZ3Vh
Z2VDaGFuZ2VPYnNlcnZlcih0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="159904"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159360</attachid>
            <date>2012-08-20 01:26:58 -0700</date>
            <delta_ts>2012-08-20 03:36:01 -0700</delta_ts>
            <desc>Updated patch to fix the mac build</desc>
            <filename>wk2-preferred-languages3.diff</filename>
            <type>text/plain</type>
            <size>17597</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNTVjMmJmLi44YTI0ZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTItMDgtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gc2V0IHByZWZlcnJlZCBsYW5ndWFnZXMgdG8g
V2ViS2l0MiBHVEsrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MDg3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCBXZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSgp
LgorCiAyMDEyLTA4LTE5ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbVjhdIFJlcGxhY2UgcHJveHkoKS0+d2luZG93U2hlbGwoKSBpbiBTY3JpcHRDb250
cm9sbGVyIHdpdGggd2luZG93U2hlbGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA1OTU1MTYy
Li4xNmQwNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNDU2LDYgKzQ1Niw3IEBAIF9fWk43
V2ViQ29yZTE3R2x5cGhQYWdlVHJlZU5vZGUxOHRyZWVHbHlwaFBhZ2VDb3VudEV2CiBfX1pON1dl
YkNvcmUxN0hpc3RvcnlDb250cm9sbGVyMjZzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZUV2CiBf
X1pON1dlYkNvcmUxN0hpc3RvcnlDb250cm9sbGVyMzNyZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGVFdgogX19aTjdXZWJDb3JlMTdKU0RPTUdsb2JhbE9iamVjdDZzX2luZm9FCitfX1pO
N1dlYkNvcmUxN2xhbmd1YWdlRGlkQ2hhbmdlRXYKIF9fWk43V2ViQ29yZTE3UmVndWxhckV4cHJl
c3Npb25DMUVSS04zV1RGNlN0cmluZ0VOUzFfMTlUZXh0Q2FzZVNlbnNpdGl2aXR5RQogX19aTjdX
ZWJDb3JlMTdSZWd1bGFyRXhwcmVzc2lvbkQxRXYKIF9fWk43V2ViQ29yZTE3Vmlld3BvcnRBcmd1
bWVudHMxOWRlcHJlY2F0ZWRUYXJnZXREUElFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWRhMTg3ZC4uZjBjZDkz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA4LTIwICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgQVBJIHRv
IHNldCBwcmVmZXJyZWQgbGFuZ3VhZ2VzIHRvIFdlYktpdDIgR1RLKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA4NzgKKworICAgICAgICBSZXZpZXdl
ZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJlZmVy
cmVkX2xhbmd1YWdlcyk6IFB1YmxpYyBBUEkgdG8gc2V0IGEKKyAgICAgICAgbGlzdCBvZiBwcmVm
ZXJyZWQgbGFuZ3VhZ2VzIHNvcnRlZCBmcm9tIG1vc3QgZGVzaXJhYmxlIHRvIGxlYXN0CisgICAg
ICAgIGRlc2lyYWJsZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rp
b25zLnR4dDogQWRkIG5ldyBzeW1ib2wuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAodGVzdFdlYkNvbnRleHRMYW5n
dWFnZXMpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToK
KyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChyZXNvdXJjZUdldERhdGFDYWxsYmFjayk6CisgICAg
ICAgIChXZWJWaWV3VGVzdDo6bWFpblJlc291cmNlRGF0YSk6IE1vdmVkIGZyb20gVGVzdFdlYktp
dFdlYkNvbnRleHQKKyAgICAgICAgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gYWxsIFdlYlZpZXdU
ZXN0cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKTogTm90aWZ5IG91cgorICAg
ICAgICBvYnNlcnZlciB0aGF0IHRoZSBsYW5ndWFnZXMgaGF2ZSBiZWVuIG92ZXJyaWRlbi4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6YnVpbGRBY2NlcHRMYW5ndWFnZXMpOiBIZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGQgdGhlCisg
ICAgICAgIGFjY2VwdCBsYW5ndWFnZXMgYXMgc3BlY2lmaWVkIGluIFJGQyAyNjE2LgorICAgICAg
ICAoV2ViS2l0OjpzZXRTb3VwU2Vzc2lvbkFjY2VwdExhbmd1YWdlKTogU2V0IHRoZSBhY2NlcHQt
bGFuZ3VhZ2UKKyAgICAgICAgcHJvcGVydHkgb2YgdGhlIGRlZmF1bHQgU291cFNlc3Npb24uCisg
ICAgICAgIChXZWJLaXQ6Omxhbmd1YWdlQ2hhbmdlZCk6IFVwZGF0ZSB0aGUgcHJlZmVycmVkIGxh
bmd1YWdlcyBpbgorICAgICAgICBTb3VwU2Vzc2lvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6IEFkZCBhbgorICAgICAgICBvYnNl
cnZlciB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBsaXN0IG9mIHByZWZlcnJlZCBsYW5ndWFnZXMg
aXMKKyAgICAgICAgdXBkYXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZv
cm1UZXJtaW5hdGUpOiBSZW1vdmUgdGhlIG9ic2VydmVyIGFkZGVkCisgICAgICAgIGluIHBsYXRm
b3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoKS4KKwogMjAxMi0wOC0xOSAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYlBhZ2VQcm94eTo6c2V0Q3Vyc29yIGRvZXMg
bm90IGNoZWNrIHRoYXQgdGhlIHZpZXcgaXMgc3RpbGwgaW4gYW4gYWN0aXZlIHdpbmRvdwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcAppbmRleCBmZTlkZjlmLi42MjBjOWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgpAQCAtNTE4LDYgKzUxOSwzMSBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsCiAjZW5kaWYK
IH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9sYW5ndWFnZXM6
CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICogQGxhbmd1YWdlczogKGVsZW1l
bnQtdHlwZSB1dGY4KTogYSAjR0xpc3Qgb2YgbGFuZ3VhZ2UgaWRlbnRpZmllcnMKKyAqCisgKiBT
ZXQgdGhlIGxpc3Qgb2YgcHJlZmVycmVkIGxhbmd1YWdlcywgc29ydGVkIGZyb20gbW9zdCBkZXNp
cmFibGUKKyAqIHRvIGxlYXN0IGRlc2lyYWJsZS4gVGhlIGxpc3Qgd2lsbCBiZSB1c2VkIHRvIGJ1
aWxkIHRoZSAiQWNjZXB0LUxhbmd1YWdlIgorICogaGVhZGVyIHRoYXQgd2lsbCBiZSBpbmNsdWRl
ZCBpbiB0aGUgbmV0d29yayByZXF1ZXN0cyBzdGFydGVkIGJ5CisgKiB0aGUgI1dlYktpdFdlYkNv
bnRleHQuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3Vh
Z2VzKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIEdMaXN0KiBsYW5ndWFnZUxpc3QpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOworCisg
ICAgaWYgKCFsYW5ndWFnZUxpc3QpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxTdHJp
bmc+IGxhbmd1YWdlczsKKyAgICBmb3IgKEdMaXN0KiBpdGVyID0gbGFuZ3VhZ2VMaXN0OyBpdGVy
OyBpdGVyID0gZ19saXN0X25leHQoaXRlcikpCisgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoU3Ry
aW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjaGFyKj4oaXRlci0+ZGF0YSkpLmxvd2VyKCkucmVw
bGFjZSgiXyIsICItIikpOworCisgICAgV2ViQ29yZTo6b3ZlcnJpZGVVc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzKGxhbmd1YWdlcyk7CisgICAgV2ViQ29yZTo6bGFuZ3VhZ2VEaWRDaGFuZ2UoKTsKK30K
KwogV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKFdL
RG93bmxvYWRSZWYgd2tEb3dubG9hZCkKIHsKICAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBk
b3dubG9hZCA9IGRvd25sb2Fkc01hcCgpLmdldCh3a0Rvd25sb2FkKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAppbmRleCAwZDMy
YmE1Li41YWY3ZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5oCkBAIC0xNDYsNiArMTQ2LDEwIEBAIFdFQktJVF9BUEkgdm9p
ZAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMgICAgIChX
ZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAg
ICAgICAgICAgKmxhbmd1YWdlcyk7CiAKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9jb250
ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAg
ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xpc3QgICAgICAgICAgICAgICAgICAgICAgICAgKmxhbmd1YWdl
cyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5k
ZXggNTg1ZTFiMC4uMmVjZmNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0zNyw2
ICszNyw3IEBAIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZAog
d2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkCiB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcwogd2Via2l0X3dlYl9jb250ZXh0
X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMKK3dlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJl
ZmVycmVkX2xhbmd1YWdlcwogCiA8U1VCU0VDVElPTiBVUkkgU2NoZW1lPgogV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdENhbGxiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggMWIx
NzJkZi4uY2RlMGJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjAsNiAr
MjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVz
dC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
QEAgLTI3LDYgKzI4LDggQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
a1NlcnZlcjsKKwogc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiB7CiAgICAgLy8gQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBpbnN0YW5j
ZSBvZiB0aGUgZGVmYXVsdCB3ZWIgY29udGV4dC4KQEAgLTE2NSwzNSArMTY4LDYgQEAgcHVibGlj
OgogICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgc2NoZW1lLCB1cmlTY2hlbWVSZXF1ZXN0Q2FsbGJh
Y2ssIHRoaXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlR2V0RGF0YUNhbGxi
YWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJE
YXRhKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGRhdGFTaXplOwotICAgICAgICBHT3duUHRyPEdF
cnJvcj4gZXJyb3I7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSB3ZWJraXRfd2ViX3Jl
c291cmNlX2dldF9kYXRhX2ZpbmlzaChXRUJLSVRfV0VCX1JFU09VUkNFKG9iamVjdCksIHJlc3Vs
dCwgJmRhdGFTaXplLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydChkYXRhKTsK
LQotICAgICAgICBVUklTY2hlbWVUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8VVJJU2NoZW1lVGVz
dCo+KHVzZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKLSAgICAgICAgdGVzdC0+bV9yZXNvdXJjZURhdGFTaXpl
ID0gZGF0YVNpemU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YShzaXplX3QmIG1haW5S
ZXNvdXJjZURhdGFTaXplKQotICAgIHsKLSAgICAgICAgbV9yZXNvdXJjZURhdGFTaXplID0gMDsK
LSAgICAgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKLSAgICAgICAgV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmll
dyk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLQotICAgICAgICB3ZWJraXRfd2ViX3Jl
c291cmNlX2dldF9kYXRhKHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhp
cyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQotICAgICAgICBtYWlu
UmVzb3VyY2VEYXRhU2l6ZSA9IG1fcmVzb3VyY2VEYXRhU2l6ZTsKLSAgICAgICAgcmV0dXJuIG1f
cmVzb3VyY2VEYXRhLmdldCgpOwotICAgIH0KLQotICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJj
ZURhdGE7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKICAgICBHUmVmUHRyPFdlYktp
dFVSSVNjaGVtZVJlcXVlc3Q+IG1fdXJpU2NoZW1lUmVxdWVzdDsKICAgICBIYXNoTWFwPFN0cmlu
ZywgVVJJU2NoZW1lSGFuZGxlcj4gbV9oYW5kbGVyc01hcDsKIH07CkBAIC0yNjYsMTQgKzI0MCw1
NyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcihUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0KSk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RXZWJD
b250ZXh0TGFuZ3VhZ2VzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBleHBlY3RlZERlZmF1bHRMYW5ndWFnZSA9ICJlbiI7CisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBzaXplX3QgbWFpblJlc291cmNlRGF0
YVNpemUgPSAwOworICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWlu
UmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGV4cGVjdGVkRGVmYXVsdExhbmd1YWdl
KSk7CisgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgZXhwZWN0ZWREZWZh
dWx0TGFuZ3VhZ2UsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7CisKKyAgICBHTGlzdCogbGFuZ3Vh
Z2VzID0gZ19saXN0X3ByZXBlbmQoMCwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8
Y29uc3Qgdm9pZCo+KCJkRSIpKSk7CisgICAgbGFuZ3VhZ2VzID0gZ19saXN0X3ByZXBlbmQobGFu
Z3VhZ2VzLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oIkVT
X2VzIikpKTsKKyAgICBsYW5ndWFnZXMgPSBnX2xpc3RfcHJlcGVuZChsYW5ndWFnZXMsIGNvbnN0
X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiZW4iKSkpOworICAgIHdl
YmtpdF93ZWJfY29udGV4dF9zZXRfcHJlZmVycmVkX2xhbmd1YWdlcyh3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2RlZmF1bHQoKSwgbGFuZ3VhZ2VzKTsKKyAgICBnX2xpc3RfZnJlZShsYW5ndWFnZXMp
OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkTGFuZ3VhZ2VzID0gImVuLCBlcy1l
cztxPTAuOTAsIGRlO3E9MC44MCI7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KyAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgbWFpblJlc291cmNlRGF0YSA9IHRl
c3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oZXhwZWN0ZWRMYW5ndWFn
ZXMpKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBleHBlY3RlZExh
bmd1YWdlcywgbWFpblJlc291cmNlRGF0YVNpemUpKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVy
Q2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
Y2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7
CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVO
VEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBjb25zdCBjaGFyKiBhY2NlcHRMYW5n
dWFnZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFk
ZXJzLCAiQWNjZXB0LUxhbmd1YWdlIik7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIGFjY2VwdExhbmd1YWdlLCBz
dHJsZW4oYWNjZXB0TGFuZ3VhZ2UpKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogeworICAgIGtT
ZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJD
YWxsYmFjayk7CisKICAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1j
b250ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZhdWx0KTsKICAgICBQbHVnaW5zVGVzdDo6YWRkKCJX
ZWJLaXRXZWJDb250ZXh0IiwgImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5z
KTsKICAgICBVUklTY2hlbWVUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVt
ZSIsIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKTsKICAgICBUZXN0OjphZGQoIldlYktpdFdlYkNv
bnRleHQiLCAic3BlbGwtY2hlY2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTsKKyAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImxhbmd1YWdlcyIsIHRlc3RX
ZWJDb250ZXh0TGFuZ3VhZ2VzKTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCiB7CisgICAgZGVsZXRl
IGtTZXJ2ZXI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKaW5kZXggMzIxYjZhMy4uMTZlODFmODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAgV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKICAgICAs
IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQogICAgICwgbV9wYXJlbnRXaW5k
b3coMCkKICAgICAsIG1famF2YXNjcmlwdFJlc3VsdCgwKQorICAgICwgbV9yZXNvdXJjZURhdGFT
aXplKDApCiB7CiAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChtX3dlYlZpZXcpKTsKIH0KQEAgLTE5Nyw2ICsxOTgsMzMgQEAgdm9pZCBXZWJWaWV3VGVz
dDo6cmVzaXplVmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ3RrX3dpZGdldF9zaXpl
X2FsbG9jYXRlKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwogfQogCitzdGF0
aWMgdm9pZCByZXNvdXJjZUdldERhdGFDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBzaXplX3QgZGF0YVNpemU7
CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSB3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhX2ZpbmlzaChXRUJLSVRfV0VCX1JFU09VUkNFKG9i
amVjdCksIHJlc3VsdCwgJmRhdGFTaXplLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0
KGRhdGEpOworCisgICAgV2ViVmlld1Rlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxXZWJWaWV3VGVz
dCo+KHVzZXJEYXRhKTsKKyAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oZGF0YSkpOworICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhU2l6ZSA9IGRhdGFT
aXplOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK2NvbnN0
IGNoYXIqIFdlYlZpZXdUZXN0OjptYWluUmVzb3VyY2VEYXRhKHNpemVfdCYgbWFpblJlc291cmNl
RGF0YVNpemUpCit7CisgICAgbV9yZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBtX3Jlc291cmNl
RGF0YS5jbGVhcigpOworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291
cmNlKTsKKworICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVzb3VyY2UsIDAsIHJl
c291cmNlR2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7CisKKyAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IG1fcmVzb3VyY2VEYXRhU2l6ZTsK
KyAgICByZXR1cm4gbV9yZXNvdXJjZURhdGEuZ2V0KCk7Cit9CisKIHZvaWQgV2ViVmlld1Rlc3Q6
Om1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQog
ewogICAgIGdfYXNzZXJ0KG1fcGFyZW50V2luZG93KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCmluZGV4IDhlNDY5ZjEuLmNh
MjY0OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlZpZXdUZXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuaApAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB3YWl0
VW50aWxUaXRsZUNoYW5nZWQoKTsKICAgICB2b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZChHdGtXaW5kb3dUeXBlID0gR1RLX1dJTkRPV19QT1BVUCk7CiAgICAgdm9pZCByZXNpemVW
aWV3KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgY29uc3QgY2hhciogbWFpblJlc291cmNl
RGF0YShzaXplX3QmIG1haW5SZXNvdXJjZURhdGFTaXplKTsKIAogICAgIHZvaWQgbW91c2VNb3Zl
VG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKICAgICB2
b2lkIGNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uID0g
MSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CkBAIC02OSw2ICs3MCw4IEBAIHB1
YmxpYzoKICAgICBDU3RyaW5nIG1fZXhwZWN0ZWRUaXRsZTsKICAgICBXZWJLaXRKYXZhc2NyaXB0
UmVzdWx0KiBtX2phdmFzY3JpcHRSZXN1bHQ7CiAgICAgR0Vycm9yKiogbV9qYXZhc2NyaXB0RXJy
b3I7CisgICAgR093blB0cjxjaGFyPiBtX3Jlc291cmNlRGF0YTsKKyAgICBzaXplX3QgbV9yZXNv
dXJjZURhdGFTaXplOwogCiBwcml2YXRlOgogICAgIHZvaWQgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdk
a0V2ZW50VHlwZSwgaW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGFjNGJhYjIuLjE0OTBmZjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMzE1LDYgKzMx
NSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhib29sIHVz
ZUZvbnRTbW9vdGhpbmcpCiB2b2lkIFdlYlByb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpIGNvbnN0CiB7CiAgICAgb3Zl
cnJpZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7CisgICAgbGFuZ3VhZ2VEaWRD
aGFuZ2UoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hh
bmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwCmluZGV4IGQ4ZDAxNjcuLjI0Y2EyMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9MYW5ndWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlQ2FjaGUu
aD4KQEAgLTM4LDYgKzM5LDggQEAKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtY2FjaGUuaD4KICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiAhT1MoV0lORE9XUykKICNpbmNsdWRlIDx1bmlzdGQu
aD4KQEAgLTExMyw5ICsxMTYsNjIgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUNsZWFyUmVz
b3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0NsZWFyIGNhY2hlc1RvQ2xlYXIKICAgICBzb3Vw
X2NhY2hlX2NsZWFyKFNPVVBfQ0FDSEUoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24s
IFNPVVBfVFlQRV9DQUNIRSkpKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmLCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKQorLy8gVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBFcGlw
aGFueSBjb2RlIGluIGVwaHktZW1iZWQtcHJlZnMuYy4KK3N0YXRpYyBDU3RyaW5nIGJ1aWxkQWNj
ZXB0TGFuZ3VhZ2VzKFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcykKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIC8vIElnbm9yZSAiQyIgbG9jYWxlLgorICAgIHNpemVfdCBwb3NpdGlvbiA9
IGxhbmd1YWdlcy5maW5kKCJjIik7CisgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKQorICAg
ICAgICBsYW5ndWFnZXMucmVtb3ZlKHBvc2l0aW9uKTsKKworICAgIC8vIEZhbGxiYWNrIHRvICJl
biIgaWYgdGhlIGxpc3QgaXMgZW1wdHkuCisgICAgaWYgKGxhbmd1YWdlcy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAiZW4iOworCisgICAgLy8gQ2FsY3VsYXRlIGRlbHRhcyBmb3IgdGhlIHF1
YWxpdHkgdmFsdWVzLgorICAgIGludCBkZWx0YTsKKyAgICBpZiAobGFuZ3VhZ2VzLnNpemUoKSA8
IDEwKQorICAgICAgICBkZWx0YSA9IDEwOworICAgIGVsc2UgaWYgKGxhbmd1YWdlcy5zaXplKCkg
PCAyMCkKKyAgICAgICAgZGVsdGEgPSA1OworICAgIGVsc2UKKyAgICAgICAgZGVsdGEgPSAxOwor
CisgICAgLy8gU2V0IHF1YWxpdHkgdmFsdWVzIGZvciBlYWNoIGxhbmd1YWdlLgorICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhbmd1YWdlcy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIsICIpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxhbmd1YWdlc1tpXSk7CisKKyAgICAg
ICAgaW50IHF1YWxpdHkgPSAxMDAgLSBpICogZGVsdGE7CisgICAgICAgIGlmIChxdWFsaXR5ID4g
MCAmJiBxdWFsaXR5IDwgMTAwKSB7CisgICAgICAgICAgICBjaGFyIGJ1ZmZlcls4XTsKKyAgICAg
ICAgICAgIGdfYXNjaWlfZm9ybWF0ZChidWZmZXIsIDgsICIlLjJmIiwgcXVhbGl0eSAvIDEwMC4w
KTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCI7cT0lcyIsIGJ1
ZmZlcikpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KS51dGY4KCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFNvdXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2Uo
VmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzKQoreworICAgIGdfb2JqZWN0X3NldChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKSwgImFjY2VwdC1sYW5ndWFnZSIsIGJ1aWxk
QWNjZXB0TGFuZ3VhZ2VzKGxhbmd1YWdlcykuZGF0YSgpLCBOVUxMKTsKK30KKworc3RhdGljIHZv
aWQgbGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqKQoreworICAgIHNldFNvdXBTZXNzaW9uQWNjZXB0TGFu
Z3VhZ2UoV2ViQ29yZTo6dXNlclByZWZlcnJlZExhbmd1YWdlcygpKTsKK30KKwordm9pZCBXZWJQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopCit7
CisgICAgaWYgKCFwYXJhbWV0ZXJzLmxhbmd1YWdlcy5pc0VtcHR5KCkpCisgICAgICAgIHNldFNv
dXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UocGFyYW1ldGVycy5sYW5ndWFnZXMpOworCisgICAgV2Vi
Q29yZTo6YWRkTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlcih0aGlzLCBsYW5ndWFnZUNoYW5nZWQpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKQEAgLTEyNCw2ICsxODAs
OCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKICAgICBTb3VwQ2FjaGUq
IGNhY2hlID0gU09VUF9DQUNIRShzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09V
UF9UWVBFX0NBQ0hFKSk7CiAgICAgc291cF9jYWNoZV9mbHVzaChjYWNoZSk7CiAgICAgc291cF9j
YWNoZV9kdW1wKGNhY2hlKTsKKworICAgIFdlYkNvcmU6OnJlbW92ZUxhbmd1YWdlQ2hhbmdlT2Jz
ZXJ2ZXIodGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>