<?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>94582</bug_id>
          
          <creation_ts>2012-08-21 03:18:39 -0700</creation_ts>
          <short_desc>[EFL][WK2] Back-forward list API needs extension</short_desc>
          <delta_ts>2012-08-24 04:47:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61838</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>700569</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-21 03:18:39 -0700</bug_when>
    <thetext>EFL WK2 Back-forward list API currently does not wrap all the functionality provided by WK2 C Back-forward list API. The functions returning the back and forward lists are not supported. So the following functions are to be added:

EAPI Eina_List *ewk_back_forward_list_back_list_get(const Ewk_Back_Forward_List *list);

EAPI Eina_List *ewk_back_forward_list_back_list_with_limit_get(const Ewk_Back_Forward_List *list, unsigned limit);

EAPI Eina_List *ewk_back_forward_list_forward_list_get(const Ewk_Back_Forward_List *list);

EAPI Eina_List *ewk_back_forward_list_forward_list_with_limit_get (const Ewk_Back_Forward_List *list, unsigned limit);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700577</commentid>
    <comment_count>1</comment_count>
      <attachid>159642</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-21 03:29:31 -0700</bug_when>
    <thetext>Created attachment 159642
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700592</commentid>
    <comment_count>2</comment_count>
      <attachid>159642</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-21 03:52:27 -0700</bug_when>
    <thetext>Comment on attachment 159642
patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:96
&gt; + * @return @c Eina_List containing @c Ewk_Back_Forward_List_Item elements or @c 0 in case of error

The comment should explain how the client is expected to free the Eina_List. It is not obvious here. Also, it should be @c NULL in case of error, not @c 0.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:108
&gt; + * @return @c Eina_List containing @c Ewk_Back_Forward_List_Item elements or @c 0 in case of error

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:119
&gt; + * @return @c Eina_List containing @c Ewk_Back_Forward_List_Item elements or @c 0 in case of error

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:131
&gt; + * @return @c Eina_List containing @c Ewk_Back_Forward_List_Item elements or @c 0 in case of error

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:208
&gt; +

Extra line?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700598</commentid>
    <comment_count>3</comment_count>
      <attachid>159642</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-21 04:02:24 -0700</bug_when>
    <thetext>Comment on attachment 159642
patch

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

We are talking about this on IRC. I am afraid that this convenience api is easy to abuse so then either we fix it, make it hard to abuse or we don&apos;t add it in the first place

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:149
&gt; +Eina_List* ewk_back_forward_list_back_list_with_limit_get(const Ewk_Back_Forward_List* list, unsigned limit)

ewk_back_forward_list_last_n_back_items_copy()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700602</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-21 04:08:41 -0700</bug_when>
    <thetext>We need to consider the right use-cases and find an efficient way to accomplish those and then add the API for doing so.

First of all the client should need to be notified when the lists change and given how people create UI&apos;s, I believe that people will rather manage the lists manually in what makes most sense for them.

This new API, makes it easy to reconstruct two lists every time the list changes.

So why would people want to get the lists anyway? Well, one use case could be when a tab was closed by mistake and the user wants to reopen the tab. Chrome supports this and it remembers history. If the UI process supports this, this api makes more sense, but we need to first handle notification of added items and make it more obvious that this API is expensive, for instance by giving the methods better names. Qt has a history of doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700663</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-21 05:43:28 -0700</bug_when>
    <thetext>Having a discussion on IRC with Kenneth, came to conclusion that the simpler and more convenient solution would be if the client provides the view with an Eina_List that will be fulfilled with back-forward list items and will be keeping up-to-date. Actually the Client will be able to use this Eina_List list as back-forward list and will not need even existing Ewk_Back_Forward_List API.

There will be also a notification that back-forward list is changed and giving the index of the current item so that the Client knows when it should reread the data from the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702858</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-23 04:17:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Having a discussion on IRC with Kenneth, came to conclusion that the simpler and more convenient solution would be if the client provides the view with an Eina_List that will be fulfilled with back-forward list items and will be keeping up-to-date. Actually the Client will be able to use this Eina_List list as back-forward list and will not need even existing Ewk_Back_Forward_List API.
&gt; 
&gt; There will be also a notification that back-forward list is changed and giving the index of the current item so that the Client knows when it should reread the data from the list.

There is an obstacle in EFL framework: Eina_List cannot be modified, meaning that every attempt to modify it will result a new Eina_List instance. 
http://docs.enlightenment.org/auto/eina/group__Eina__List__Group.html
So we cannot just give to the Client a pointer to Eina_List..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702929</commentid>
    <comment_count>7</comment_count>
      <attachid>160146</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-23 06:27:41 -0700</bug_when>
    <thetext>Created attachment 160146
patch v2

Kenneth, Chris thanks for discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702933</commentid>
    <comment_count>8</comment_count>
      <attachid>160146</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-23 06:34:32 -0700</bug_when>
    <thetext>Comment on attachment 160146
patch v2

Wrong patch? I thought we agreed not to use Eina_List.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703207</commentid>
    <comment_count>9</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-23 11:51:41 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 160146 [details])
&gt; Wrong patch? I thought we agreed not to use Eina_List.

Discussed on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703210</commentid>
    <comment_count>10</comment_count>
      <attachid>160207</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-23 11:53:06 -0700</bug_when>
    <thetext>Created attachment 160207
patch v3

Functions renamed, two of them are replaced by macros</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703224</commentid>
    <comment_count>11</comment_count>
      <attachid>160207</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-23 12:01:53 -0700</bug_when>
    <thetext>Comment on attachment 160207
patch v3

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:147
&gt; +    if (!limit)
&gt; +        limit = WKBackForwardListGetBackListCount(wkList);

so if you say that you want 0 you get all? Is this how it normally works in EFL api? if not we should probably use int and return all for negative values.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:59
&gt; + */
&gt; +#define ewk_back_forward_list_back_items_copy(list) \
&gt; +    ewk_back_forward_list_n_back_items_copy(list, 0)
&gt; +
&gt; +/**

why not group this one together with the n_ version?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703235</commentid>
    <comment_count>12</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-23 12:11:55 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 160207 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160207&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:147
&gt; &gt; +    if (!limit)
&gt; &gt; +        limit = WKBackForwardListGetBackListCount(wkList);
&gt; 
&gt; so if you say that you want 0 you get all? Is this how it normally works in EFL api? if not we should probably use int and return all for negative values.
&gt; 
just wanted to keep unsigned, but you are right in EFL it is usually done 
the way you described.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:59
&gt; &gt; + */
&gt; &gt; +#define ewk_back_forward_list_back_items_copy(list) \
&gt; &gt; +    ewk_back_forward_list_n_back_items_copy(list, 0)
&gt; &gt; +
&gt; &gt; +/**
&gt; 
&gt; why not group this one together with the n_ version?
Do not mind, even though macros are usually declared in the beginning..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703247</commentid>
    <comment_count>13</comment_count>
      <attachid>160213</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-23 12:22:07 -0700</bug_when>
    <thetext>Created attachment 160213
patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703250</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-23 12:23:09 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 160207 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160207&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:147
&gt; &gt; +    if (!limit)
&gt; &gt; +        limit = WKBackForwardListGetBackListCount(wkList);
&gt; 
&gt; so if you say that you want 0 you get all? Is this how it normally works in EFL api? if not we should probably use int and return all for negative values.

EFL seems to use -1 for no limit:

evas_cache2_limit_set(Evas_Cache2 *cache, int limit)
evas_cache2_flush(Evas_Cache2 *cache)
{
   if (cache-&gt;limit == -1) return -1;
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703260</commentid>
    <comment_count>15</comment_count>
      <attachid>160215</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-23 12:42:48 -0700</bug_when>
    <thetext>Created attachment 160215
patch v5

Changed the added functions behavior so that only -1 is recognized to return the whole list. Tests are updated accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703269</commentid>
    <comment_count>16</comment_count>
      <attachid>160215</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-23 12:49:30 -0700</bug_when>
    <thetext>Comment on attachment 160215
patch v5

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:145
&gt; +

EINA_SAFETY_ON_FALSE_RETURN_VAL(limit == -1 || limit &gt;= 0); ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:160
&gt; +

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703274</commentid>
    <comment_count>17</comment_count>
      <attachid>160215</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-23 12:55:49 -0700</bug_when>
    <thetext>Comment on attachment 160215
patch v5

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:145
&gt;&gt; +
&gt; 
&gt; EINA_SAFETY_ON_FALSE_RETURN_VAL(limit == -1 || limit &gt;= 0); ?

I meant EINA_SAFETY_ON_FALSE_RETURN_VAL(limit == -1 || limit &gt;= 0, 0);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703965</commentid>
    <comment_count>18</comment_count>
      <attachid>160385</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-24 03:57:24 -0700</bug_when>
    <thetext>Created attachment 160385
patch v6

Takes Chris&apos;s proposal into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703995</commentid>
    <comment_count>19</comment_count>
      <attachid>160385</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 04:47:31 -0700</bug_when>
    <thetext>Comment on attachment 160385
patch v6

Clearing flags on attachment: 160385

Committed r126571: &lt;http://trac.webkit.org/changeset/126571&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703996</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 04:47:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159642</attachid>
            <date>2012-08-21 03:29:31 -0700</date>
            <delta_ts>2012-08-23 05:46:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug94582</filename>
            <type>text/plain</type>
            <size>12611</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDBiY2JmMWMxODc0YWQwZWMzNGNjYzVlNWVmZmE2MDE3MmM5YTEwNzQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEF1ZyAyMSAxMzoyNjo1NyAyMDEyICswMzAwCgogICAgYnVnOTQ1ODIKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMWVkNDFhMy4uMmY0ZWNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA4
LTIxICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQmFjay1mb3J3YXJkIGxpc3QgQVBJIG5lZWRzIGV4dGVuc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ1ODIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBz
ZXZlcmFsIG5ldyBmdW5jdGlvbnMgd3JhcHBpbmcgZXhpc3RpbmcgV0syIEMgYmFjay1mb3J3YXJk
IGxpc3QgQVBJCisgICAgICAgIGFuZCByZXR1cm5pbmcgbGlzdCBvZiBpdGVtcyBwcmVjZWRpbmcg
b3IgZm9sbG93aW5nIHRoZSBjdXJyZW50IGl0ZW0uCisgICAgICAgIENvcnJlc3BvbmRpbmcgQVBJ
IHVuaXQgdGVzdHMgYXJlIGFsc28gYWRkZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwOgorICAgICAgICAoY3JlYXRlRWluYUxpc3QpOgor
ICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlzdF9nZXQpOgorICAgICAgICAo
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlzdF93aXRoX2xpbWl0X2dldCk6CisgICAgICAg
IChld2tfYmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9saXN0X2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9saXN0X3dpdGhfbGltaXRfZ2V0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3BwOgor
ICAgICAgICAoVEVTVF9GKToKKwogMjAxMi0wOC0yMSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5o
YXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggZm9yIG5l
d2VyIFF0IDU6IFFUICs9IHFtbHRlc3QgZG9lcyBub3QgaW1wbHkgUVQgKz0gdGVzdGxpYiBhbnlt
b3JlLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCmluZGV4IGFjZjhkNTYuLjhjM2JkOTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRf
bGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tf
Zm9yd2FyZF9saXN0LmNwcApAQCAtODQsNiArODQsMjIgQEAgc3RhdGljIGlubGluZSBFd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSogYWRkSXRlbVRvV3JhcHBlckNhY2hlKGNvbnN0IEV3a19CYWNr
X0YKICAgICByZXR1cm4gaXRlbTsKIH0KIAorc3RhdGljIGlubGluZSBFaW5hX0xpc3QqIGNyZWF0
ZUVpbmFMaXN0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgV0tBcnJheVJlZiB3
a0xpc3QpCit7CisgICAgaWYgKCF3a0xpc3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgRWlu
YV9MaXN0KiByZXN1bHQgPSAwOworCisgICAgY29uc3Qgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdl
dFNpemUod2tMaXN0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0PFdL
QmFja0ZvcndhcmRMaXN0SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTGlzdCwgaSkp
OworICAgICAgICByZXN1bHQgPSBlaW5hX2xpc3RfYXBwZW5kKHJlc3VsdCwgYWRkSXRlbVRvV3Jh
cHBlckNhY2hlKGxpc3QsIHdrSXRlbSkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfY3Vy
cmVudF9pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCiB7CiAgICAg
RVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsK
QEAgLTEyMSw2ICsxMzcsMzkgQEAgdW5zaWduZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50
KEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCkKICAgICByZXR1cm4gV0tCYWNrRm9yd2FyZExp
c3RHZXRCYWNrTGlzdENvdW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRM
aXN0Q291bnQod2tMaXN0KSArIGN1cnJlbnRJdGVtOwogfQogCitFaW5hX0xpc3QqIGV3a19iYWNr
X2ZvcndhcmRfbGlzdF9iYWNrX2xpc3RfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCog
bGlzdCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0
LCB3a0xpc3QsIDApOworCisgICAgY29uc3QgdW5zaWduZWQgbGltaXQgPSBXS0JhY2tGb3J3YXJk
TGlzdEdldEJhY2tMaXN0Q291bnQod2tMaXN0KTsKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVm
PiBiYWNrTGlzdChBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdENvcHlCYWNrTGlzdFdpdGhMaW1p
dCh3a0xpc3QsIGxpbWl0KSk7CisgICAgcmV0dXJuIGNyZWF0ZUVpbmFMaXN0KGxpc3QsIGJhY2tM
aXN0LmdldCgpKTsKK30KKworRWluYV9MaXN0KiBld2tfYmFja19mb3J3YXJkX2xpc3RfYmFja19s
aXN0X3dpdGhfbGltaXRfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgdW5z
aWduZWQgbGltaXQpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRV
Uk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGJhY2tM
aXN0KEFkb3B0V0ssIFdLQmFja0ZvcndhcmRMaXN0Q29weUJhY2tMaXN0V2l0aExpbWl0KHdrTGlz
dCwgbGltaXQpKTsKKyAgICByZXR1cm4gY3JlYXRlRWluYUxpc3QobGlzdCwgYmFja0xpc3QuZ2V0
KCkpOworfQorCitFaW5hX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2xpc3Rf
Z2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCkKK3sKKyAgICBFV0tfQkFDS19G
T1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3a0xpc3QsIDApOworCisgICAgY29u
c3QgdW5zaWduZWQgbGltaXQgPSBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQo
d2tMaXN0KTsKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBmb3J3YXJkTGlzdChBZG9wdFdL
LCBXS0JhY2tGb3J3YXJkTGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdCh3a0xpc3QsIGxpbWl0
KSk7CisgICAgcmV0dXJuIGNyZWF0ZUVpbmFMaXN0KGxpc3QsIGZvcndhcmRMaXN0LmdldCgpKTsK
K30KKworRWluYV9MaXN0KiBld2tfYmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9saXN0X3dpdGhf
bGltaXRfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgdW5zaWduZWQgbGlt
aXQpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwg
d2tMaXN0LCAwKTsKKworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGZvcndhcmRMaXN0KEFk
b3B0V0ssIFdLQmFja0ZvcndhcmRMaXN0Q29weUZvcndhcmRMaXN0V2l0aExpbWl0KHdrTGlzdCwg
bGltaXQpKTsKKyAgICByZXR1cm4gY3JlYXRlRWluYUxpc3QobGlzdCwgZm9yd2FyZExpc3QuZ2V0
KCkpOworfQogCiAvKioKICAqIEBpbnRlcm5hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaAppbmRleCA1YjljY2E3
Li4wMDJhMzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYmFja19mb3J3YXJkX2xpc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaApAQCAtODYsNiArODYsNTIgQEAgRUFQSSBFd2tf
QmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRfaW5k
ZXhfZ2V0KGNvbnN0IEUKICAqLwogRUFQSSB1bnNpZ25lZCBld2tfYmFja19mb3J3YXJkX2xpc3Rf
Y291bnQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsKIAorLyoqCisgKiBSZXR1cm5zIHRo
ZSBsaXN0IG9mIHRoZSBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBU
aGUgQGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgYXJlIGxvY2F0ZWQgaW4g
dGhlIHJlc3VsdCBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIG9sZGVzdCBvbmUuCisgKgorICogQHBh
cmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiBA
YyBFaW5hX0xpc3QgY29udGFpbmluZyBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVt
ZW50cyBvciBAYyAwIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a19i
YWNrX2ZvcndhcmRfbGlzdF9iYWNrX2xpc3RfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlz
dCAqbGlzdCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbGlzdCBvZiB0aGUgaXRlbXMgcHJlY2Vk
aW5nIHRoZSBjdXJyZW50IGl0ZW0gbGltaXRlZCBieSBAYSBsaW1pdC4KKyAqCisgKiBUaGUgQGMg
RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgYXJlIGxvY2F0ZWQgaW4gdGhlIHJl
c3VsdCBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIG9sZGVzdCBvbmUuCisgKgorICogQHBhcmFtIGxp
c3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKiBAcGFyYW0gbGltaXQgdGhlIG51
bWJlciBvZiBpdGVtcyB0byByZXRyaWV2ZQorICoKKyAqIEByZXR1cm4gQGMgRWluYV9MaXN0IGNv
bnRhaW5pbmcgQGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgb3IgQGMgMCBp
biBjYXNlIG9mIGVycm9yCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfYmFja19mb3J3YXJkX2xp
c3RfYmFja19saXN0X3dpdGhfbGltaXRfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAq
bGlzdCwgdW5zaWduZWQgbGltaXQpOworCisvKioKKyAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdGhl
IGl0ZW1zIGZvbGxvd2luZyB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFRoZSBAYyBFd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUgcmVzdWx0IGxp
c3Qgc3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUg
YmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIEBjIEVpbmFfTGlzdCBj
b250YWluaW5nIEBjIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIGVsZW1lbnRzIG9yIEBjIDAg
aW4gY2FzZSBvZiBlcnJvcgorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X2ZvcndhcmRfbGlzdF9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsK
KworLyoqCisgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHRoZSBpdGVtcyBmb2xsb3dpbmcgdGhlIGN1
cnJlbnQgaXRlbSBsaW1pdGVkIGJ5IEBhIGxpbWl0LgorICoKKyAqIFRoZSBAYyBFd2tfQmFja19G
b3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUgcmVzdWx0IGxpc3Qg
c3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFj
ay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqIEBwYXJhbSBsaW1pdCB0aGUgbnVtYmVyIG9mIGl0
ZW1zIHRvIHJldHJpZXZlCisgKgorICogQHJldHVybiBAYyBFaW5hX0xpc3QgY29udGFpbmluZyBA
YyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBvciBAYyAwIGluIGNhc2Ugb2Yg
ZXJyb3IKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJk
X2xpc3Rfd2l0aF9saW1pdF9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0LCB1
bnNpZ25lZCBsaW1pdCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFj
a19mb3J3YXJkX2xpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0LmNwcAppbmRleCBhZjEwOTgxLi41MjAyMTFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9iYWNrX2ZvcndhcmRfbGlzdC5jcHAKQEAgLTQxLDYg
KzQxLDcgQEAgZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKIAog
c3RhdGljIGNvbnN0IGNoYXIgdGl0bGUxW10gPSAiUGFnZTEiOwogc3RhdGljIGNvbnN0IGNoYXIg
dGl0bGUyW10gPSAiUGFnZTIiOworc3RhdGljIGNvbnN0IGNoYXIgdGl0bGUzW10gPSAiUGFnZTMi
OwogCiBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFja05hdmlnYXRpb24oU291cFNlcnZlciogc2Vy
dmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSos
IFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCiB7CkBAIC0xODEsMyArMTgyLDEzNyBAQCBU
RVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KQogCiAg
ICAgRVhQRUNUX0VRKGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jb3VudChiYWNrRm9yd2FyZExpc3Qp
LCAyKTsKIH0KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9iYWNrX2xpc3RfZ2V0KQoreworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogYmFja0Zvcndh
cmRMaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHdlYlZpZXcoKSk7CisgICAg
QVNTRVJUX1RSVUUoYmFja0ZvcndhcmRMaXN0KTsKKworICAgIEVpbmFfTGlzdCogbm9uRXhpc3Rl
bnRMaXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlzdF9nZXQoYmFja0ZvcndhcmRM
aXN0KTsKKyAgICBBU1NFUlRfRkFMU0Uobm9uRXhpc3RlbnRMaXN0KTsKKworICAgIE93blB0cjxF
V0syVW5pdFRlc3RTZXJ2ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0
U2VydmVyKTsKKyAgICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2tOYXZpZ2F0aW9uKTsK
KworICAgIFdLRWluYVNoYXJlZFN0cmluZyB1cmwxID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIu
Z2V0KCksIHRpdGxlMSk7CisgICAgbG9hZFVybFN5bmModXJsMSk7CisgICAgQVNTRVJUX1NUUkVR
KGV3a192aWV3X3RpdGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTEpOworCisgICAgV0tFaW5hU2hh
cmVkU3RyaW5nIHVybDIgPSB1cmxGcm9tVGl0bGUoaHR0cFNlcnZlci5nZXQoKSwgdGl0bGUyKTsK
KyAgICBsb2FkVXJsU3luYyh1cmwyKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVf
Z2V0KHdlYlZpZXcoKSksIHRpdGxlMik7CisKKyAgICBsb2FkVXJsU3luYyh1cmxGcm9tVGl0bGUo
aHR0cFNlcnZlci5nZXQoKSwgdGl0bGUzKSk7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3Rp
dGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTMpOworCisKKyAgICBFaW5hX0xpc3QqIGJhY2tMaXN0
ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlzdF9nZXQoYmFja0ZvcndhcmRMaXN0KTsK
KyAgICBBU1NFUlRfVFJVRShiYWNrTGlzdCk7CisgICAgQVNTRVJUX0VRKGVpbmFfbGlzdF9jb3Vu
dChiYWNrTGlzdCksIDIpOworCisgICAgY2hlY2tJdGVtKHN0YXRpY19jYXN0PEV3a19CYWNrX0Zv
cndhcmRfTGlzdF9JdGVtKj4oZWluYV9saXN0X250aChiYWNrTGlzdCwgMCkpLCB0aXRsZTEsIHVy
bDEsIHVybDEpOworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoYmFja0xpc3QsIDEpKSwgdGl0bGUyLCB1cmwyLCB1cmwy
KTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9i
YWNrX2xpc3Rfd2l0aF9saW1pdF9nZXQpCit7CisgICAgT3duUHRyPEVXSzJVbml0VGVzdFNlcnZl
cj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOworICAgIGh0
dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFja05hdmlnYXRpb24pOworCisgICAgV0tFaW5hU2hh
cmVkU3RyaW5nIHVybDEgPSB1cmxGcm9tVGl0bGUoaHR0cFNlcnZlci5nZXQoKSwgdGl0bGUxKTsK
KyAgICBsb2FkVXJsU3luYyh1cmwxKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVf
Z2V0KHdlYlZpZXcoKSksIHRpdGxlMSk7CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJsMiA9
IHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTIpOworICAgIGxvYWRVcmxTeW5j
KHVybDIpOworICAgIEFTU0VSVF9TVFJFUShld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSwg
dGl0bGUyKTsKKworICAgIGxvYWRVcmxTeW5jKHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgp
LCB0aXRsZTMpKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXco
KSksIHRpdGxlMyk7CisKKyAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGJhY2tGb3J3YXJkTGlz
dCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldCh3ZWJWaWV3KCkpOworICAgIEFTU0VS
VF9UUlVFKGJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICBFaW5hX0xpc3QqIGJhY2tMaXN0ID0gZXdr
X2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlzdF93aXRoX2xpbWl0X2dldChiYWNrRm9yd2FyZExp
c3QsIDEpOworCisgICAgQVNTRVJUX1RSVUUoYmFja0xpc3QpOworICAgIEFTU0VSVF9FUShlaW5h
X2xpc3RfY291bnQoYmFja0xpc3QpLCAxKTsKKworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoYmFja0xpc3QsIDApKSwg
dGl0bGUyLCB1cmwyLCB1cmwyKTsKKworICAgIC8vIENoZWNrICcwJyBsaW1pdC4KKyAgICBiYWNr
TGlzdCA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9iYWNrX2xpc3Rfd2l0aF9saW1pdF9nZXQoYmFj
a0ZvcndhcmRMaXN0LCAwKTsKKyAgICBBU1NFUlRfRkFMU0UoYmFja0xpc3QpOworfQorCitURVNU
X0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZvcndhcmRfbGlzdF9n
ZXQpCit7CisgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBld2tf
dmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQod2ViVmlldygpKTsKKyAgICBBU1NFUlRfVFJVRShi
YWNrRm9yd2FyZExpc3QpOworCisgICAgRWluYV9MaXN0KiBub25FeGlzdGVudExpc3QgPSBld2tf
YmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9saXN0X2dldChiYWNrRm9yd2FyZExpc3QpOworICAg
IEFTU0VSVF9GQUxTRShub25FeGlzdGVudExpc3QpOworCisgICAgT3duUHRyPEVXSzJVbml0VGVz
dFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOwor
ICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFja05hdmlnYXRpb24pOworCisgICAgbG9h
ZFVybFN5bmModXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxlMSkpOworICAgIEFT
U0VSVF9TVFJFUShld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUxKTsKKworICAg
IFdLRWluYVNoYXJlZFN0cmluZyB1cmwyID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCks
IHRpdGxlMik7CisgICAgbG9hZFVybFN5bmModXJsMik7CisgICAgQVNTRVJUX1NUUkVRKGV3a192
aWV3X3RpdGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTIpOworCisgICAgV0tFaW5hU2hhcmVkU3Ry
aW5nIHVybDMgPSB1cmxGcm9tVGl0bGUoaHR0cFNlcnZlci5nZXQoKSwgdGl0bGUzKTsKKyAgICBs
b2FkVXJsU3luYyh1cmwzKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdl
YlZpZXcoKSksIHRpdGxlMyk7CisKKyAgICAvLyBHbyBiYWNrIHRvIFBhZ2UxLgorICAgIGV3a192
aWV3X2JhY2sod2ViVmlldygpKTsKKyAgICB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyh0aXRsZTIp
OworICAgIGV3a192aWV3X2JhY2sod2ViVmlldygpKTsKKyAgICB3YWl0VW50aWxUaXRsZUNoYW5n
ZWRUbyh0aXRsZTEpOworCisgICAgRWluYV9MaXN0KiBmb3J3YXJkTGlzdCA9IGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9mb3J3YXJkX2xpc3RfZ2V0KGJhY2tGb3J3YXJkTGlzdCk7CisgICAgQVNTRVJU
X1RSVUUoZm9yd2FyZExpc3QpOworICAgIEFTU0VSVF9FUShlaW5hX2xpc3RfY291bnQoZm9yd2Fy
ZExpc3QpLCAyKTsKKworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJk
X0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoZm9yd2FyZExpc3QsIDApKSwgdGl0bGUyLCB1cmwy
LCB1cmwyKTsKKyAgICBjaGVja0l0ZW0oc3RhdGljX2Nhc3Q8RXdrX0JhY2tfRm9yd2FyZF9MaXN0
X0l0ZW0qPihlaW5hX2xpc3RfbnRoKGZvcndhcmRMaXN0LCAxKSksIHRpdGxlMywgdXJsMywgdXJs
Myk7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfYmFja19mb3J3YXJkX2xpc3Rf
Zm9yd2FyZF9saXN0X3dpdGhfbGltaXRfZ2V0KQoreworICAgIE93blB0cjxFV0syVW5pdFRlc3RT
ZXJ2ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0U2VydmVyKTsKKyAg
ICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2tOYXZpZ2F0aW9uKTsKKworICAgIGxvYWRV
cmxTeW5jKHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTEpKTsKKyAgICBBU1NF
UlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRpdGxlMSk7CisKKyAgICBX
S0VpbmFTaGFyZWRTdHJpbmcgdXJsMiA9IHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0
aXRsZTIpOworICAgIGxvYWRVcmxTeW5jKHVybDIpOworICAgIEFTU0VSVF9TVFJFUShld2tfdmll
d190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUyKTsKKworICAgIFdLRWluYVNoYXJlZFN0cmlu
ZyB1cmwzID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxlMyk7CisgICAgbG9h
ZFVybFN5bmModXJsMyk7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3RpdGxlX2dldCh3ZWJW
aWV3KCkpLCB0aXRsZTMpOworCisgICAgLy8gR28gYmFjayB0byBQYWdlMS4KKyAgICBld2tfdmll
d19iYWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8odGl0bGUyKTsK
KyAgICBld2tfdmlld19iYWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVudGlsVGl0bGVDaGFuZ2Vk
VG8odGl0bGUxKTsKKworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogYmFja0ZvcndhcmRMaXN0
ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHdlYlZpZXcoKSk7CisgICAgQVNTRVJU
X1RSVUUoYmFja0ZvcndhcmRMaXN0KTsKKworICAgIEVpbmFfTGlzdCogZm9yd2FyZExpc3QgPSBl
d2tfYmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9saXN0X3dpdGhfbGltaXRfZ2V0KGJhY2tGb3J3
YXJkTGlzdCwgMSk7CisgICAgQVNTRVJUX1RSVUUoZm9yd2FyZExpc3QpOworICAgIEFTU0VSVF9F
UShlaW5hX2xpc3RfY291bnQoZm9yd2FyZExpc3QpLCAxKTsKKworICAgIGNoZWNrSXRlbShzdGF0
aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoZm9yd2Fy
ZExpc3QsIDApKSwgdGl0bGUyLCB1cmwyLCB1cmwyKTsKKworICAgIC8vIENoZWNrICcwJyBsaW1p
dC4KKyAgICBmb3J3YXJkTGlzdCA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2xpc3Rf
d2l0aF9saW1pdF9nZXQoYmFja0ZvcndhcmRMaXN0LCAwKTsKKyAgICBBU1NFUlRfRkFMU0UoZm9y
d2FyZExpc3QpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160146</attachid>
            <date>2012-08-23 06:27:41 -0700</date>
            <delta_ts>2012-08-23 11:53:06 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>bug94582_v2</filename>
            <type>text/plain</type>
            <size>13928</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDY2ZjIyNjZhOTc1OTUyM2Q5NDI0NmM0NDMyNmI1ZTM4NDA1Y2ZjYjAKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEF1ZyAyMSAxMzoyNjo1NyAyMDEyICswMzAwCgogICAgYnVnOTQ1ODIKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNTVmZWY1OS4uNzUyMWE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA4
LTI0ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQmFjay1mb3J3YXJkIGxpc3QgQVBJIG5lZWRzIGV4dGVuc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ1ODIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBz
ZXZlcmFsIG5ldyBmdW5jdGlvbnMgd3JhcHBpbmcgZXhpc3RpbmcgV0syIEMgYmFjay1mb3J3YXJk
IGxpc3QgQVBJCisgICAgICAgIGFuZCByZXR1cm5pbmcgbGlzdCBvZiBpdGVtcyBwcmVjZWRpbmcg
b3IgZm9sbG93aW5nIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgQ29ycmVzcG9uZGluZyBBUEkg
dW5pdCB0ZXN0cyBhcmUgYWxzbyBhZGRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6CisgICAgICAgIChjcmVhdGVFaW5hTGlzdCk6Cisg
ICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfYmFja19saXN0X2NvcHkpOgorICAgICAgICAo
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlzdF93aXRoX2xpbWl0X2NvcHkpOgorICAgICAg
ICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZvcndhcmRfbGlzdF9jb3B5KToKKyAgICAgICAgKGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdF9jb3B5KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3Bw
OgorICAgICAgICAoZnJlZUVpbmFMaXN0KToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTItMDgt
MjMgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CiAK
ICAgICAgICAgW1dLMl0gUmVmYWN0b3Jpbmc6IFdlYkJhY2tGb3J3YXJkTGlzdCBnZXR0ZXJzIHNo
b3VsZCBiZSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKaW5kZXggYWNmOGQ1Ni4uNTNmODBlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9y
d2FyZF9saXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
YmFja19mb3J3YXJkX2xpc3QuY3BwCkBAIC04NCw2ICs4NCwyNCBAQCBzdGF0aWMgaW5saW5lIEV3
a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUoY29uc3QgRXdr
X0JhY2tfRgogICAgIHJldHVybiBpdGVtOwogfQogCitzdGF0aWMgaW5saW5lIEVpbmFfTGlzdCog
Y3JlYXRlRWluYUxpc3QoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBXS0FycmF5
UmVmIHdrTGlzdCkKK3sKKyAgICBpZiAoIXdrTGlzdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBFaW5hX0xpc3QqIHJlc3VsdCA9IDA7CisKKyAgICBjb25zdCBzaXplX3QgY291bnQgPSBXS0Fy
cmF5R2V0U2l6ZSh3a0xpc3QpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtID0gc3RhdGljX2Nh
c3Q8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tMaXN0
LCBpKSk7CisgICAgICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtID0gYWRkSXRl
bVRvV3JhcHBlckNhY2hlKGxpc3QsIHdrSXRlbSk7CisgICAgICAgIGV3a19iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX3JlZihpdGVtKTsKKyAgICAgICAgcmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChy
ZXN1bHQsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEV3a19CYWNr
X0ZvcndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dl
dChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCiB7CiAgICAgRVdLX0JBQ0tfRk9S
V0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKQEAgLTEyMSw2ICsx
MzksMzkgQEAgdW5zaWduZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KEV3a19CYWNrX0Zv
cndhcmRfTGlzdCogbGlzdCkKICAgICByZXR1cm4gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlz
dENvdW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tM
aXN0KSArIGN1cnJlbnRJdGVtOwogfQogCitFaW5hX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9iYWNrX2xpc3RfY29weShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7Cisg
ICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAw
KTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGxpbWl0ID0gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNr
TGlzdENvdW50KHdrTGlzdCk7CisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gYmFja0xpc3Qo
QWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RDb3B5QmFja0xpc3RXaXRoTGltaXQod2tMaXN0LCBs
aW1pdCkpOworICAgIHJldHVybiBjcmVhdGVFaW5hTGlzdChsaXN0LCBiYWNrTGlzdC5nZXQoKSk7
Cit9CisKK0VpbmFfTGlzdCogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlzdF93aXRoX2xp
bWl0X2NvcHkoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCB1bnNpZ25lZCBsaW1p
dCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3
a0xpc3QsIDApOworCisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gYmFja0xpc3QoQWRvcHRX
SywgV0tCYWNrRm9yd2FyZExpc3RDb3B5QmFja0xpc3RXaXRoTGltaXQod2tMaXN0LCBsaW1pdCkp
OworICAgIHJldHVybiBjcmVhdGVFaW5hTGlzdChsaXN0LCBiYWNrTGlzdC5nZXQoKSk7Cit9CisK
K0VpbmFfTGlzdCogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZvcndhcmRfbGlzdF9jb3B5KGNvbnN0
IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJ
U1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3a0xpc3QsIDApOworCisgICAgY29uc3QgdW5zaWdu
ZWQgbGltaXQgPSBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tMaXN0KTsK
KyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBmb3J3YXJkTGlzdChBZG9wdFdLLCBXS0JhY2tG
b3J3YXJkTGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdCh3a0xpc3QsIGxpbWl0KSk7CisgICAg
cmV0dXJuIGNyZWF0ZUVpbmFMaXN0KGxpc3QsIGZvcndhcmRMaXN0LmdldCgpKTsKK30KKworRWlu
YV9MaXN0KiBld2tfYmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9saXN0X3dpdGhfbGltaXRfY29w
eShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIHVuc2lnbmVkIGxpbWl0KQorewor
ICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwg
MCk7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBmb3J3YXJkTGlzdChBZG9wdFdLLCBX
S0JhY2tGb3J3YXJkTGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdCh3a0xpc3QsIGxpbWl0KSk7
CisgICAgcmV0dXJuIGNyZWF0ZUVpbmFMaXN0KGxpc3QsIGZvcndhcmRMaXN0LmdldCgpKTsKK30K
IAogLyoqCiAgKiBAaW50ZXJuYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKaW5kZXggNWI5Y2NhNy4uZTZjZjdm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tf
Zm9yd2FyZF9saXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2JhY2tfZm9yd2FyZF9saXN0LmgKQEAgLTg2LDYgKzg2LDYwIEBAIEVBUEkgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2F0X2luZGV4X2dldChj
b25zdCBFCiAgKi8KIEVBUEkgdW5zaWduZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KEV3
a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7CiAKKy8qKgorICogQ3JlYXRlcyB0aGUgbGlzdCBj
b250YWluaW5nIHRoZSBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBU
aGUgQGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgYXJlIGxvY2F0ZWQgaW4g
dGhlIHJlc3VsdCBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIG9sZGVzdCBvbmUuCisgKgorICogQHBh
cmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiBA
YyBFaW5hX0xpc3QgY29udGFpbmluZyBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVt
ZW50cyBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAgICAgIHRoZSBFaW5h
X0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoKQorICogICAgICAgICAgICB0byBmcmVlIHRoZSBp
dGVtcworICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlz
dF9jb3B5KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7CisKKy8qKgorICogQ3Jl
YXRlcyB0aGUgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQg
aXRlbSBsaW1pdGVkIGJ5IEBhIGxpbWl0LgorICoKKyAqIFRoZSBAYyBFd2tfQmFja19Gb3J3YXJk
X0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUgcmVzdWx0IGxpc3Qgc3RhcnRp
bmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3
YXJkIGxpc3QgaW5zdGFuY2UKKyAqIEBwYXJhbSBsaW1pdCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRv
IHJldHJpZXZlCisgKgorICogQHJldHVybiBAYyBFaW5hX0xpc3QgY29udGFpbmluZyBAYyBFd2tf
QmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJy
b3IsCisgKiAgICAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUg
ZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoKQor
ICogICAgICAgICAgICB0byBmcmVlIHRoZSBpdGVtcworICovCitFQVBJIEVpbmFfTGlzdCAqZXdr
X2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfbGlzdF93aXRoX2xpbWl0X2NvcHkoY29uc3QgRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0ICpsaXN0LCB1bnNpZ25lZCBsaW1pdCk7CisKKy8qKgorICogQ3JlYXRl
cyB0aGUgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgaXRl
bS4KKyAqCisgKiBUaGUgQGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgYXJl
IGxvY2F0ZWQgaW4gdGhlIHJlc3VsdCBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIG9sZGVzdCBvbmUu
CisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgor
ICogQHJldHVybiBAYyBFaW5hX0xpc3QgY29udGFpbmluZyBAYyBFd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSBlbGVtZW50cyBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAg
ICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNl
LiBVc2UgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoKQorICogICAgICAgICAgICB0
byBmcmVlIHRoZSBpdGVtcworICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X2ZvcndhcmRfbGlzdF9jb3B5KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7
CisKKy8qKgorICogQ3JlYXRlcyB0aGUgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBmb2xsb3dp
bmcgdGhlIGN1cnJlbnQgaXRlbSBsaW1pdGVkIGJ5IEBhIGxpbWl0LgorICoKKyAqIFRoZSBAYyBF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUgcmVz
dWx0IGxpc3Qgc3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAqCisgKiBAcGFyYW0gbGlz
dCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqIEBwYXJhbSBsaW1pdCB0aGUgbnVt
YmVyIG9mIGl0ZW1zIHRvIHJldHJpZXZlCisgKgorICogQHJldHVybiBAYyBFaW5hX0xpc3QgY29u
dGFpbmluZyBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBvciBAYyBOVUxM
IGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBp
dGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fdW5yZWYoKQorICogICAgICAgICAgICB0byBmcmVlIHRoZSBpdGVtcworICovCitFQVBJ
IEVpbmFfTGlzdCAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0
X2NvcHkoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0LCB1bnNpZ25lZCBsaW1pdCk7
CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3Qu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Jh
Y2tfZm9yd2FyZF9saXN0LmNwcAppbmRleCBhZjEwOTgxLi43ZWM5MGVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3
YXJkX2xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl9iYWNrX2ZvcndhcmRfbGlzdC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgZXh0ZXJu
IEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKIAogc3RhdGljIGNvbnN0IGNo
YXIgdGl0bGUxW10gPSAiUGFnZTEiOwogc3RhdGljIGNvbnN0IGNoYXIgdGl0bGUyW10gPSAiUGFn
ZTIiOworc3RhdGljIGNvbnN0IGNoYXIgdGl0bGUzW10gPSAiUGFnZTMiOwogCiBzdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFja05hdmlnYXRpb24oU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250
ZXh0KiwgZ3BvaW50ZXIpCiB7CkBAIC03OCw2ICs3OSwxMyBAQCBzdGF0aWMgaW5saW5lIFdLRWlu
YVNoYXJlZFN0cmluZyB1cmxGcm9tVGl0bGUoRVdLMlVuaXRUZXN0U2VydmVyKiBodHRwU2VydmVy
LCBjbwogICAgIHJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlRWluYUxp
c3QoRWluYV9MaXN0KiBsaXN0KQoreworICAgIHZvaWQqIGRhdGEgPSAwOworICAgIEVJTkFfTElT
VF9GUkVFKGxpc3QsIGRhdGEpCisgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3Vu
cmVmKHN0YXRpY19jYXN0PEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4oZGF0YSkpOworfQor
CiBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2N1cnJlbnRf
aXRlbV9nZXQpCiB7CiAgICAgY29uc3QgY2hhciogdXJsID0gZW52aXJvbm1lbnQtPmRlZmF1bHRU
ZXN0UGFnZVVybCgpOwpAQCAtMTgxLDMgKzE4OSwxNDQgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJh
c2UsIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jb3VudCkKIAogICAgIEVYUEVDVF9FUShld2tfYmFj
a19mb3J3YXJkX2xpc3RfY291bnQoYmFja0ZvcndhcmRMaXN0KSwgMik7CiB9CisKK1RFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfYmFja19mb3J3YXJkX2xpc3RfYmFja19saXN0X2NvcHkpCit7
CisgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBld2tfdmlld19i
YWNrX2ZvcndhcmRfbGlzdF9nZXQod2ViVmlldygpKTsKKyAgICBBU1NFUlRfVFJVRShiYWNrRm9y
d2FyZExpc3QpOworCisgICAgRWluYV9MaXN0KiBub25FeGlzdGVudExpc3QgPSBld2tfYmFja19m
b3J3YXJkX2xpc3RfYmFja19saXN0X2NvcHkoYmFja0ZvcndhcmRMaXN0KTsKKyAgICBBU1NFUlRf
RkFMU0Uobm9uRXhpc3RlbnRMaXN0KTsKKworICAgIE93blB0cjxFV0syVW5pdFRlc3RTZXJ2ZXI+
IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0U2VydmVyKTsKKyAgICBodHRw
U2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2tOYXZpZ2F0aW9uKTsKKworICAgIFdLRWluYVNoYXJl
ZFN0cmluZyB1cmwxID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxlMSk7Cisg
ICAgbG9hZFVybFN5bmModXJsMSk7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3RpdGxlX2dl
dCh3ZWJWaWV3KCkpLCB0aXRsZTEpOworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHVybDIgPSB1
cmxGcm9tVGl0bGUoaHR0cFNlcnZlci5nZXQoKSwgdGl0bGUyKTsKKyAgICBsb2FkVXJsU3luYyh1
cmwyKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRp
dGxlMik7CisKKyAgICBsb2FkVXJsU3luYyh1cmxGcm9tVGl0bGUoaHR0cFNlcnZlci5nZXQoKSwg
dGl0bGUzKSk7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3RpdGxlX2dldCh3ZWJWaWV3KCkp
LCB0aXRsZTMpOworCisgICAgRWluYV9MaXN0KiBiYWNrTGlzdCA9IGV3a19iYWNrX2ZvcndhcmRf
bGlzdF9iYWNrX2xpc3RfY29weShiYWNrRm9yd2FyZExpc3QpOworICAgIEFTU0VSVF9UUlVFKGJh
Y2tMaXN0KTsKKyAgICBBU1NFUlRfRVEoZWluYV9saXN0X2NvdW50KGJhY2tMaXN0KSwgMik7CisK
KyAgICBjaGVja0l0ZW0oc3RhdGljX2Nhc3Q8RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qPihl
aW5hX2xpc3RfbnRoKGJhY2tMaXN0LCAwKSksIHRpdGxlMSwgdXJsMSwgdXJsMSk7CisgICAgY2hl
Y2tJdGVtKHN0YXRpY19jYXN0PEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4oZWluYV9saXN0
X250aChiYWNrTGlzdCwgMSkpLCB0aXRsZTIsIHVybDIsIHVybDIpOworCisgICAgZnJlZUVpbmFM
aXN0KGJhY2tMaXN0KTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9iYWNrX2xpc3Rfd2l0aF9saW1pdF9jb3B5KQoreworICAgIE93blB0cjxFV0sy
VW5pdFRlc3RTZXJ2ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0U2Vy
dmVyKTsKKyAgICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2tOYXZpZ2F0aW9uKTsKKwor
ICAgIFdLRWluYVNoYXJlZFN0cmluZyB1cmwxID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0
KCksIHRpdGxlMSk7CisgICAgbG9hZFVybFN5bmModXJsMSk7CisgICAgQVNTRVJUX1NUUkVRKGV3
a192aWV3X3RpdGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTEpOworCisgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIHVybDIgPSB1cmxGcm9tVGl0bGUoaHR0cFNlcnZlci5nZXQoKSwgdGl0bGUyKTsKKyAg
ICBsb2FkVXJsU3luYyh1cmwyKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0
KHdlYlZpZXcoKSksIHRpdGxlMik7CisKKyAgICBsb2FkVXJsU3luYyh1cmxGcm9tVGl0bGUoaHR0
cFNlcnZlci5nZXQoKSwgdGl0bGUzKSk7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3RpdGxl
X2dldCh3ZWJWaWV3KCkpLCB0aXRsZTMpOworCisgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBi
YWNrRm9yd2FyZExpc3QgPSBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQod2ViVmlldygp
KTsKKyAgICBBU1NFUlRfVFJVRShiYWNrRm9yd2FyZExpc3QpOworCisgICAgRWluYV9MaXN0KiBi
YWNrTGlzdCA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9iYWNrX2xpc3Rfd2l0aF9saW1pdF9jb3B5
KGJhY2tGb3J3YXJkTGlzdCwgMSk7CisKKyAgICBBU1NFUlRfVFJVRShiYWNrTGlzdCk7CisgICAg
QVNTRVJUX0VRKGVpbmFfbGlzdF9jb3VudChiYWNrTGlzdCksIDEpOworCisgICAgY2hlY2tJdGVt
KHN0YXRpY19jYXN0PEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4oZWluYV9saXN0X250aChi
YWNrTGlzdCwgMCkpLCB0aXRsZTIsIHVybDIsIHVybDIpOworCisgICAgZnJlZUVpbmFMaXN0KGJh
Y2tMaXN0KTsKKworICAgIC8vIENoZWNrICcwJyBsaW1pdC4KKyAgICBiYWNrTGlzdCA9IGV3a19i
YWNrX2ZvcndhcmRfbGlzdF9iYWNrX2xpc3Rfd2l0aF9saW1pdF9jb3B5KGJhY2tGb3J3YXJkTGlz
dCwgMCk7CisgICAgQVNTRVJUX0ZBTFNFKGJhY2tMaXN0KTsKK30KKworVEVTVF9GKEVXSzJVbml0
VGVzdEJhc2UsIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2xpc3RfY29weSkKK3sKKyAg
ICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGV3a192aWV3X2JhY2tf
Zm9yd2FyZF9saXN0X2dldCh3ZWJWaWV3KCkpOworICAgIEFTU0VSVF9UUlVFKGJhY2tGb3J3YXJk
TGlzdCk7CisKKyAgICBFaW5hX0xpc3QqIG5vbkV4aXN0ZW50TGlzdCA9IGV3a19iYWNrX2Zvcndh
cmRfbGlzdF9mb3J3YXJkX2xpc3RfY29weShiYWNrRm9yd2FyZExpc3QpOworICAgIEFTU0VSVF9G
QUxTRShub25FeGlzdGVudExpc3QpOworCisgICAgT3duUHRyPEVXSzJVbml0VGVzdFNlcnZlcj4g
aHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOworICAgIGh0dHBT
ZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFja05hdmlnYXRpb24pOworCisgICAgbG9hZFVybFN5bmMo
dXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxlMSkpOworICAgIEFTU0VSVF9TVFJF
UShld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUxKTsKKworICAgIFdLRWluYVNo
YXJlZFN0cmluZyB1cmwyID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxlMik7
CisgICAgbG9hZFVybFN5bmModXJsMik7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3RpdGxl
X2dldCh3ZWJWaWV3KCkpLCB0aXRsZTIpOworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHVybDMg
PSB1cmxGcm9tVGl0bGUoaHR0cFNlcnZlci5nZXQoKSwgdGl0bGUzKTsKKyAgICBsb2FkVXJsU3lu
Yyh1cmwzKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSks
IHRpdGxlMyk7CisKKyAgICAvLyBHbyBiYWNrIHRvIFBhZ2UxLgorICAgIGV3a192aWV3X2JhY2so
d2ViVmlldygpKTsKKyAgICB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyh0aXRsZTIpOworICAgIGV3
a192aWV3X2JhY2sod2ViVmlldygpKTsKKyAgICB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyh0aXRs
ZTEpOworCisgICAgRWluYV9MaXN0KiBmb3J3YXJkTGlzdCA9IGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9mb3J3YXJkX2xpc3RfY29weShiYWNrRm9yd2FyZExpc3QpOworICAgIEFTU0VSVF9UUlVFKGZv
cndhcmRMaXN0KTsKKyAgICBBU1NFUlRfRVEoZWluYV9saXN0X2NvdW50KGZvcndhcmRMaXN0KSwg
Mik7CisKKyAgICBjaGVja0l0ZW0oc3RhdGljX2Nhc3Q8RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0
ZW0qPihlaW5hX2xpc3RfbnRoKGZvcndhcmRMaXN0LCAwKSksIHRpdGxlMiwgdXJsMiwgdXJsMik7
CisgICAgY2hlY2tJdGVtKHN0YXRpY19jYXN0PEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4o
ZWluYV9saXN0X250aChmb3J3YXJkTGlzdCwgMSkpLCB0aXRsZTMsIHVybDMsIHVybDMpOworCisg
ICAgZnJlZUVpbmFMaXN0KGZvcndhcmRMaXN0KTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJh
c2UsIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdF9jb3B5KQor
eworICAgIE93blB0cjxFV0syVW5pdFRlc3RTZXJ2ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihu
ZXcgRVdLMlVuaXRUZXN0U2VydmVyKTsKKyAgICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJh
Y2tOYXZpZ2F0aW9uKTsKKworICAgIGxvYWRVcmxTeW5jKHVybEZyb21UaXRsZShodHRwU2VydmVy
LmdldCgpLCB0aXRsZTEpKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdl
YlZpZXcoKSksIHRpdGxlMSk7CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJsMiA9IHVybEZy
b21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTIpOworICAgIGxvYWRVcmxTeW5jKHVybDIp
OworICAgIEFTU0VSVF9TVFJFUShld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUy
KTsKKworICAgIFdLRWluYVNoYXJlZFN0cmluZyB1cmwzID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2
ZXIuZ2V0KCksIHRpdGxlMyk7CisgICAgbG9hZFVybFN5bmModXJsMyk7CisgICAgQVNTRVJUX1NU
UkVRKGV3a192aWV3X3RpdGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTMpOworCisgICAgLy8gR28g
YmFjayB0byBQYWdlMS4KKyAgICBld2tfdmlld19iYWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVu
dGlsVGl0bGVDaGFuZ2VkVG8odGl0bGUyKTsKKyAgICBld2tfdmlld19iYWNrKHdlYlZpZXcoKSk7
CisgICAgd2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8odGl0bGUxKTsKKworICAgIEV3a19CYWNrX0Zv
cndhcmRfTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0KHdlYlZpZXcoKSk7CisgICAgQVNTRVJUX1RSVUUoYmFja0ZvcndhcmRMaXN0KTsKKworICAg
IEVpbmFfTGlzdCogZm9yd2FyZExpc3QgPSBld2tfYmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9s
aXN0X3dpdGhfbGltaXRfY29weShiYWNrRm9yd2FyZExpc3QsIDEpOworICAgIEFTU0VSVF9UUlVF
KGZvcndhcmRMaXN0KTsKKyAgICBBU1NFUlRfRVEoZWluYV9saXN0X2NvdW50KGZvcndhcmRMaXN0
KSwgMSk7CisKKyAgICBjaGVja0l0ZW0oc3RhdGljX2Nhc3Q8RXdrX0JhY2tfRm9yd2FyZF9MaXN0
X0l0ZW0qPihlaW5hX2xpc3RfbnRoKGZvcndhcmRMaXN0LCAwKSksIHRpdGxlMiwgdXJsMiwgdXJs
Mik7CisKKyAgICBmcmVlRWluYUxpc3QoZm9yd2FyZExpc3QpOworCisgICAgLy8gQ2hlY2sgJzAn
IGxpbWl0LgorICAgIGZvcndhcmRMaXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZvcndhcmRf
bGlzdF93aXRoX2xpbWl0X2NvcHkoYmFja0ZvcndhcmRMaXN0LCAwKTsKKyAgICBBU1NFUlRfRkFM
U0UoZm9yd2FyZExpc3QpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160207</attachid>
            <date>2012-08-23 11:53:06 -0700</date>
            <delta_ts>2012-08-23 12:22:07 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>bug94582_v3</filename>
            <type>text/plain</type>
            <size>11455</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGMzMmEyYjExYjYzYzBjY2I4YTAzMWY0YTY2Yjk2YmM1YmUxZDJmNWYKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEF1ZyAyMSAxMzoyNjo1NyAyMDEyICswMzAwCgogICAgYnVnOTQ1ODIKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNTVmZWY1OS4uZTM5ODRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4
LTI0ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQmFjay1mb3J3YXJkIGxpc3QgQVBJIG5lZWRzIGV4dGVuc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ1ODIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBz
ZXZlcmFsIG5ldyBmdW5jdGlvbnMgd3JhcHBpbmcgZXhpc3RpbmcgV0syIEMgYmFjay1mb3J3YXJk
IGxpc3QgQVBJCisgICAgICAgIGFuZCByZXR1cm5pbmcgbGlzdCBvZiBpdGVtcyBwcmVjZWRpbmcg
b3IgZm9sbG93aW5nIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgQ29ycmVzcG9uZGluZyBBUEkg
dW5pdCB0ZXN0cyBhcmUgYWxzbyBhZGRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6CisgICAgICAgIChjcmVhdGVFaW5hTGlzdCk6Cisg
ICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHkpOgorICAgICAg
ICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3BwOgor
ICAgICAgICAoZnJlZUVpbmFMaXN0KToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTItMDgtMjMg
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CiAKICAg
ICAgICAgW1dLMl0gUmVmYWN0b3Jpbmc6IFdlYkJhY2tGb3J3YXJkTGlzdCBnZXR0ZXJzIHNob3Vs
ZCBiZSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKaW5kZXggYWNmOGQ1Ni4uNmQ1NmIyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFj
a19mb3J3YXJkX2xpc3QuY3BwCkBAIC04NCw2ICs4NCwyNCBAQCBzdGF0aWMgaW5saW5lIEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUoY29uc3QgRXdrX0Jh
Y2tfRgogICAgIHJldHVybiBpdGVtOwogfQogCitzdGF0aWMgaW5saW5lIEVpbmFfTGlzdCogY3Jl
YXRlRWluYUxpc3QoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBXS0FycmF5UmVm
IHdrTGlzdCkKK3sKKyAgICBpZiAoIXdrTGlzdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBF
aW5hX0xpc3QqIHJlc3VsdCA9IDA7CisKKyAgICBjb25zdCBzaXplX3QgY291bnQgPSBXS0FycmF5
R2V0U2l6ZSh3a0xpc3QpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
eworICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtID0gc3RhdGljX2Nhc3Q8
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tMaXN0LCBp
KSk7CisgICAgICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtID0gYWRkSXRlbVRv
V3JhcHBlckNhY2hlKGxpc3QsIHdrSXRlbSk7CisgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX3JlZihpdGVtKTsKKyAgICAgICAgcmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1
bHQsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEV3a19CYWNrX0Zv
cndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChj
b25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCiB7CiAgICAgRVdLX0JBQ0tfRk9SV0FS
RF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKQEAgLTEyMSw2ICsxMzks
MjcgQEAgdW5zaWduZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KEV3a19CYWNrX0Zvcndh
cmRfTGlzdCogbGlzdCkKICAgICByZXR1cm4gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENv
dW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tMaXN0
KSArIGN1cnJlbnRJdGVtOwogfQogCitFaW5hX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9u
X2JhY2tfaXRlbXNfY29weShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIHVuc2ln
bmVkIGxpbWl0KQoreworICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJO
KGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICBpZiAoIWxpbWl0KQorICAgICAgICBsaW1pdCA9IFdL
QmFja0ZvcndhcmRMaXN0R2V0QmFja0xpc3RDb3VudCh3a0xpc3QpOworICAgIFdLUmV0YWluUHRy
PFdLQXJyYXlSZWY+IGJhY2tMaXN0KEFkb3B0V0ssIFdLQmFja0ZvcndhcmRMaXN0Q29weUJhY2tM
aXN0V2l0aExpbWl0KHdrTGlzdCwgbGltaXQpKTsKKworICAgIHJldHVybiBjcmVhdGVFaW5hTGlz
dChsaXN0LCBiYWNrTGlzdC5nZXQoKSk7Cit9CisKK0VpbmFfTGlzdCogZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCog
bGlzdCwgdW5zaWduZWQgbGltaXQpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dF
VF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAgIGlmICghbGltaXQpCisgICAgICAg
IGxpbWl0ID0gV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlzdENvdW50KHdrTGlzdCk7Cisg
ICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gZm9yd2FyZExpc3QoQWRvcHRXSywgV0tCYWNrRm9y
d2FyZExpc3RDb3B5Rm9yd2FyZExpc3RXaXRoTGltaXQod2tMaXN0LCBsaW1pdCkpOworCisgICAg
cmV0dXJuIGNyZWF0ZUVpbmFMaXN0KGxpc3QsIGZvcndhcmRMaXN0LmdldCgpKTsKK30KIAogLyoq
CiAgKiBAaW50ZXJuYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKaW5kZXggNWI5Y2NhNy4uOGFhZDAzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tf
Zm9yd2FyZF9saXN0LmgKQEAgLTQxLDYgKzQxLDM4IEBAIGV4dGVybiAiQyIgewogdHlwZWRlZiBz
dHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdCBFd2tfQmFja19Gb3J3YXJkX0xpc3Q7CiAKIC8q
KgorICogQ3JlYXRlcyB0aGUgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBwcmVjZWRpbmcgdGhl
IGN1cnJlbnQgaXRlbS4KKyAqCisgKiBUaGUgQGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0g
ZWxlbWVudHMgYXJlIGxvY2F0ZWQgaW4gdGhlIHJlc3VsdCBsaXN0IHN0YXJ0aW5nIHdpdGggdGhl
IG9sZGVzdCBvbmUuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGlu
c3RhbmNlCisgKgorICogQHJldHVybiBAYyBFaW5hX0xpc3QgY29udGFpbmluZyBAYyBFd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3Is
CisgKiAgICAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJl
ZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoKQorICog
ICAgICAgICAgICB0byBmcmVlIHRoZSBpdGVtcworICoKKyAqIEBzZWUgZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X25fYmFja19pdGVtc19jb3B5CisgKi8KKyNkZWZpbmUgZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X2JhY2tfaXRlbXNfY29weShsaXN0KSBcCisgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X25f
YmFja19pdGVtc19jb3B5KGxpc3QsIDApCisKKy8qKgorICogQ3JlYXRlcyB0aGUgbGlzdCBjb250
YWluaW5nIHRoZSBpdGVtcyBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBUaGUg
QGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgYXJlIGxvY2F0ZWQgaW4gdGhl
IHJlc3VsdCBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIG9sZGVzdCBvbmUuCisgKgorICogQHBhcmFt
IGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiBAYyBF
aW5hX0xpc3QgY29udGFpbmluZyBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50
cyBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAgICAgIHRoZSBFaW5hX0xp
c3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoKQorICogICAgICAgICAgICB0byBmcmVlIHRoZSBpdGVt
cworICoKKyAqIEBzZWUgZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5
CisgKi8KKyNkZWZpbmUgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZvcndhcmRfaXRlbXNfY29weShs
aXN0KSBcCisgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGxp
c3QsIDApCisKKy8qKgogICogUmV0dXJucyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0
LgogICoKICAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQpAQCAt
ODYsNiArMTE4LDM2IEBAIEVBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX2F0X2luZGV4X2dldChjb25zdCBFCiAgKi8KIEVBUEkgdW5zaWdu
ZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlz
dCk7CiAKKy8qKgorICogQ3JlYXRlcyB0aGUgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBwcmVj
ZWRpbmcgdGhlIGN1cnJlbnQgaXRlbSBsaW1pdGVkIGJ5IEBhIGxpbWl0LgorICoKKyAqIFRoZSBA
YyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUg
cmVzdWx0IGxpc3Qgc3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAqIGlmIEBhIGxpbWl0
IGlzIGVxdWFsIHRvIEBjIDAgYWxsIHRoZSBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRl
bSBhcmUgcmV0dXJuZWQuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0
IGluc3RhbmNlCisgKiBAcGFyYW0gbGltaXQgdGhlIG51bWJlciBvZiBpdGVtcyB0byByZXRyaWV2
ZQorICoKKyAqIEByZXR1cm4gQGMgRWluYV9MaXN0IGNvbnRhaW5pbmcgQGMgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLAorICog
ICAgICAgICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFm
dGVyIHVzZS4gVXNlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKCkKKyAqICAgICAg
ICAgICAgdG8gZnJlZSB0aGUgaXRlbXMKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a19iYWNrX2Zv
cndhcmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3Qg
Kmxpc3QsIHVuc2lnbmVkIGxpbWl0KTsKKworLyoqCisgKiBDcmVhdGVzIHRoZSBsaXN0IGNvbnRh
aW5pbmcgdGhlIGl0ZW1zIGZvbGxvd2luZyB0aGUgY3VycmVudCBpdGVtIGxpbWl0ZWQgYnkgQGEg
bGltaXQuCisgKgorICogVGhlIEBjIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIGVsZW1lbnRz
IGFyZSBsb2NhdGVkIGluIHRoZSByZXN1bHQgbGlzdCBzdGFydGluZyB3aXRoIHRoZSBvbGRlc3Qg
b25lLgorICogaWYgQGEgbGltaXQgaXMgZXF1YWwgdG8gQGMgMCBhbGwgdGhlIGl0ZW1zIHByZWNl
ZGluZyB0aGUgY3VycmVudCBpdGVtIGFyZSByZXR1cm5lZC4KKyAqCisgKiBAcGFyYW0gbGlzdCB0
aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqIEBwYXJhbSBsaW1pdCB0aGUgbnVtYmVy
IG9mIGl0ZW1zIHRvIHJldHJpZXZlCisgKgorICogQHJldHVybiBAYyBFaW5hX0xpc3QgY29udGFp
bmluZyBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBvciBAYyBOVUxMIGlu
IGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVt
cyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fdW5yZWYoKQorICogICAgICAgICAgICB0byBmcmVlIHRoZSBpdGVtcworICovCitFQVBJIEVp
bmFfTGlzdCAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGNvbnN0
IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCwgdW5zaWduZWQgbGltaXQpOworCiAjaWZkZWYg
X19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9iYWNrX2ZvcndhcmRf
bGlzdC5jcHAKaW5kZXggYWYxMDk4MS4uMWIzMGVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
YmFja19mb3J3YXJkX2xpc3QuY3BwCkBAIC00MSw2ICs0MSw3IEBAIGV4dGVybiBFV0syVW5pdFRl
c3RFbnZpcm9ubWVudCogZW52aXJvbm1lbnQ7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHRpdGxlMVtd
ID0gIlBhZ2UxIjsKIHN0YXRpYyBjb25zdCBjaGFyIHRpdGxlMltdID0gIlBhZ2UyIjsKK3N0YXRp
YyBjb25zdCBjaGFyIHRpdGxlM1tdID0gIlBhZ2UzIjsKIAogc3RhdGljIHZvaWQgc2VydmVyQ2Fs
bGJhY2tOYXZpZ2F0aW9uKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2Us
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2lu
dGVyKQogewpAQCAtNzgsNiArNzksMTMgQEAgc3RhdGljIGlubGluZSBXS0VpbmFTaGFyZWRTdHJp
bmcgdXJsRnJvbVRpdGxlKEVXSzJVbml0VGVzdFNlcnZlciogaHR0cFNlcnZlciwgY28KICAgICBy
ZXR1cm4gcmVzOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZUVpbmFMaXN0KEVpbmFfTGlz
dCogbGlzdCkKK3sKKyAgICB2b2lkKiBkYXRhID0gMDsKKyAgICBFSU5BX0xJU1RfRlJFRShsaXN0
LCBkYXRhKQorICAgICAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihzdGF0aWNf
Y2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGRhdGEpKTsKK30KKwogVEVTVF9GKEVX
SzJVbml0VGVzdEJhc2UsIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0KQog
ewogICAgIGNvbnN0IGNoYXIqIHVybCA9IGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VVcmwo
KTsKQEAgLTE4MSwzICsxODksNzcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19iYWNr
X2ZvcndhcmRfbGlzdF9jb3VudCkKIAogICAgIEVYUEVDVF9FUShld2tfYmFja19mb3J3YXJkX2xp
c3RfY291bnQoYmFja0ZvcndhcmRMaXN0KSwgMik7CiB9CisKK1RFU1RfRihFV0syVW5pdFRlc3RC
YXNlLCBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHkpCit7CisgICAgT3du
UHRyPEVXSzJVbml0VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5p
dFRlc3RTZXJ2ZXIpOworICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFja05hdmlnYXRp
b24pOworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHVybDEgPSB1cmxGcm9tVGl0bGUoaHR0cFNl
cnZlci5nZXQoKSwgdGl0bGUxKTsKKyAgICBsb2FkVXJsU3luYyh1cmwxKTsKKyAgICBBU1NFUlRf
U1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRpdGxlMSk7CisKKyAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgdXJsMiA9IHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRs
ZTIpOworICAgIGxvYWRVcmxTeW5jKHVybDIpOworICAgIEFTU0VSVF9TVFJFUShld2tfdmlld190
aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUyKTsKKworICAgIGxvYWRVcmxTeW5jKHVybEZyb21U
aXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTMpKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3Zp
ZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRpdGxlMyk7CisKKyAgICBFd2tfQmFja19Gb3J3YXJk
X0xpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldCh3
ZWJWaWV3KCkpOworICAgIEFTU0VSVF9UUlVFKGJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICBFaW5h
X0xpc3QqIGJhY2tMaXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fYmFja19pdGVtc19jb3B5
KGJhY2tGb3J3YXJkTGlzdCwgMSk7CisgICAgQVNTRVJUX1RSVUUoYmFja0xpc3QpOworICAgIEFT
U0VSVF9FUShlaW5hX2xpc3RfY291bnQoYmFja0xpc3QpLCAxKTsKKyAgICBjaGVja0l0ZW0oc3Rh
dGljX2Nhc3Q8RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qPihlaW5hX2xpc3RfbnRoKGJhY2tM
aXN0LCAwKSksIHRpdGxlMiwgdXJsMiwgdXJsMik7CisgICAgZnJlZUVpbmFMaXN0KGJhY2tMaXN0
KTsKKworICAgIC8vIENoZWNrICcwJyBsaW1pdC4KKyAgICBiYWNrTGlzdCA9IGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weShiYWNrRm9yd2FyZExpc3QsIDApOworICAgIEFT
U0VSVF9UUlVFKGJhY2tMaXN0KTsKKyAgICBBU1NFUlRfRVEoZWluYV9saXN0X2NvdW50KGJhY2tM
aXN0KSwgMik7CisgICAgY2hlY2tJdGVtKHN0YXRpY19jYXN0PEV3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKj4oZWluYV9saXN0X250aChiYWNrTGlzdCwgMCkpLCB0aXRsZTEsIHVybDEsIHVybDEp
OworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+
KGVpbmFfbGlzdF9udGgoYmFja0xpc3QsIDEpKSwgdGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAgICBm
cmVlRWluYUxpc3QoYmFja0xpc3QpOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdr
X2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KQoreworICAgIE93blB0cjxF
V0syVW5pdFRlc3RTZXJ2ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0
U2VydmVyKTsKKyAgICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2tOYXZpZ2F0aW9uKTsK
KworICAgIGxvYWRVcmxTeW5jKHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTEp
KTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRpdGxl
MSk7CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJsMiA9IHVybEZyb21UaXRsZShodHRwU2Vy
dmVyLmdldCgpLCB0aXRsZTIpOworICAgIGxvYWRVcmxTeW5jKHVybDIpOworICAgIEFTU0VSVF9T
VFJFUShld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUyKTsKKworICAgIFdLRWlu
YVNoYXJlZFN0cmluZyB1cmwzID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxl
Myk7CisgICAgbG9hZFVybFN5bmModXJsMyk7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3Rp
dGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTMpOworCisgICAgLy8gR28gYmFjayB0byBQYWdlMS4K
KyAgICBld2tfdmlld19iYWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVudGlsVGl0bGVDaGFuZ2Vk
VG8odGl0bGUyKTsKKyAgICBld2tfdmlld19iYWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVudGls
VGl0bGVDaGFuZ2VkVG8odGl0bGUxKTsKKworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogYmFj
a0ZvcndhcmRMaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHdlYlZpZXcoKSk7
CisgICAgQVNTRVJUX1RSVUUoYmFja0ZvcndhcmRMaXN0KTsKKworICAgIEVpbmFfTGlzdCogZm9y
d2FyZExpc3QgPSBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHkoYmFj
a0ZvcndhcmRMaXN0LCAxKTsKKyAgICBBU1NFUlRfVFJVRShmb3J3YXJkTGlzdCk7CisgICAgQVNT
RVJUX0VRKGVpbmFfbGlzdF9jb3VudChmb3J3YXJkTGlzdCksIDEpOworICAgIGNoZWNrSXRlbShz
dGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoZm9y
d2FyZExpc3QsIDApKSwgdGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAgICBmcmVlRWluYUxpc3QoZm9y
d2FyZExpc3QpOworCisgICAgLy8gQ2hlY2sgJzAnIGxpbWl0LgorICAgIGZvcndhcmRMaXN0ID0g
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGJhY2tGb3J3YXJkTGlz
dCwgMCk7CisgICAgQVNTRVJUX1RSVUUoZm9yd2FyZExpc3QpOworICAgIEFTU0VSVF9FUShlaW5h
X2xpc3RfY291bnQoZm9yd2FyZExpc3QpLCAyKTsKKyAgICBjaGVja0l0ZW0oc3RhdGljX2Nhc3Q8
RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qPihlaW5hX2xpc3RfbnRoKGZvcndhcmRMaXN0LCAw
KSksIHRpdGxlMiwgdXJsMiwgdXJsMik7CisgICAgY2hlY2tJdGVtKHN0YXRpY19jYXN0PEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4oZWluYV9saXN0X250aChmb3J3YXJkTGlzdCwgMSkpLCB0
aXRsZTMsIHVybDMsIHVybDMpOworICAgIGZyZWVFaW5hTGlzdChmb3J3YXJkTGlzdCk7Cit9Cg==
</data>
<flag name="review"
          id="170721"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160213</attachid>
            <date>2012-08-23 12:22:07 -0700</date>
            <delta_ts>2012-08-23 12:33:11 -0700</delta_ts>
            <desc>patch v4</desc>
            <filename>bug94582_v4</filename>
            <type>text/plain</type>
            <size>11462</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGM1NDIyMDQ2MzQ3Y2NiMWUwYzIxMTE3ZDA5MWYyYjQ2NWZjNTRiNTMKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEF1ZyAyMSAxMzoyNjo1NyAyMDEyICswMzAwCgogICAgYnVnOTQ1ODIKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNTVmZWY1OS4uZTM5ODRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4
LTI0ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQmFjay1mb3J3YXJkIGxpc3QgQVBJIG5lZWRzIGV4dGVuc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ1ODIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBz
ZXZlcmFsIG5ldyBmdW5jdGlvbnMgd3JhcHBpbmcgZXhpc3RpbmcgV0syIEMgYmFjay1mb3J3YXJk
IGxpc3QgQVBJCisgICAgICAgIGFuZCByZXR1cm5pbmcgbGlzdCBvZiBpdGVtcyBwcmVjZWRpbmcg
b3IgZm9sbG93aW5nIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgQ29ycmVzcG9uZGluZyBBUEkg
dW5pdCB0ZXN0cyBhcmUgYWxzbyBhZGRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6CisgICAgICAgIChjcmVhdGVFaW5hTGlzdCk6Cisg
ICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHkpOgorICAgICAg
ICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3BwOgor
ICAgICAgICAoZnJlZUVpbmFMaXN0KToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTItMDgtMjMg
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CiAKICAg
ICAgICAgW1dLMl0gUmVmYWN0b3Jpbmc6IFdlYkJhY2tGb3J3YXJkTGlzdCBnZXR0ZXJzIHNob3Vs
ZCBiZSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKaW5kZXggYWNmOGQ1Ni4uZjBiODhhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFj
a19mb3J3YXJkX2xpc3QuY3BwCkBAIC04NCw2ICs4NCwyNCBAQCBzdGF0aWMgaW5saW5lIEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUoY29uc3QgRXdrX0Jh
Y2tfRgogICAgIHJldHVybiBpdGVtOwogfQogCitzdGF0aWMgaW5saW5lIEVpbmFfTGlzdCogY3Jl
YXRlRWluYUxpc3QoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBXS0FycmF5UmVm
IHdrTGlzdCkKK3sKKyAgICBpZiAoIXdrTGlzdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBF
aW5hX0xpc3QqIHJlc3VsdCA9IDA7CisKKyAgICBjb25zdCBzaXplX3QgY291bnQgPSBXS0FycmF5
R2V0U2l6ZSh3a0xpc3QpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
eworICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtID0gc3RhdGljX2Nhc3Q8
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tMaXN0LCBp
KSk7CisgICAgICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtID0gYWRkSXRlbVRv
V3JhcHBlckNhY2hlKGxpc3QsIHdrSXRlbSk7CisgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX3JlZihpdGVtKTsKKyAgICAgICAgcmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1
bHQsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEV3a19CYWNrX0Zv
cndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChj
b25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCiB7CiAgICAgRVdLX0JBQ0tfRk9SV0FS
RF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKQEAgLTEyMSw2ICsxMzks
MjcgQEAgdW5zaWduZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KEV3a19CYWNrX0Zvcndh
cmRfTGlzdCogbGlzdCkKICAgICByZXR1cm4gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENv
dW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tMaXN0
KSArIGN1cnJlbnRJdGVtOwogfQogCitFaW5hX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9u
X2JhY2tfaXRlbXNfY29weShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIGludCBs
aW1pdCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0
LCB3a0xpc3QsIDApOworCisgICAgaWYgKGxpbWl0IDwgMCkKKyAgICAgICAgbGltaXQgPSBXS0Jh
Y2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQod2tMaXN0KTsKKyAgICBXS1JldGFpblB0cjxX
S0FycmF5UmVmPiBiYWNrTGlzdChBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdENvcHlCYWNrTGlz
dFdpdGhMaW1pdCh3a0xpc3QsIGxpbWl0KSk7CisKKyAgICByZXR1cm4gY3JlYXRlRWluYUxpc3Qo
bGlzdCwgYmFja0xpc3QuZ2V0KCkpOworfQorCitFaW5hX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRf
bGlzdF9uX2ZvcndhcmRfaXRlbXNfY29weShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxp
c3QsIGludCBsaW1pdCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JF
VFVSTihsaXN0LCB3a0xpc3QsIDApOworCisgICAgaWYgKGxpbWl0IDwgMCkKKyAgICAgICAgbGlt
aXQgPSBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tMaXN0KTsKKyAgICBX
S1JldGFpblB0cjxXS0FycmF5UmVmPiBmb3J3YXJkTGlzdChBZG9wdFdLLCBXS0JhY2tGb3J3YXJk
TGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdCh3a0xpc3QsIGxpbWl0KSk7CisKKyAgICByZXR1
cm4gY3JlYXRlRWluYUxpc3QobGlzdCwgZm9yd2FyZExpc3QuZ2V0KCkpOworfQogCiAvKioKICAq
IEBpbnRlcm5hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaAppbmRleCA1YjljY2E3Li5kNWI5YWYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3
YXJkX2xpc3QuaApAQCAtODYsNiArODYsNjggQEAgRUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3Rf
SXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRfaW5kZXhfZ2V0KGNvbnN0IEUKICAq
LwogRUFQSSB1bnNpZ25lZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY291bnQoRXdrX0JhY2tfRm9y
d2FyZF9MaXN0ICpsaXN0KTsKIAorLyoqCisgKiBDcmVhdGVzIHRoZSBsaXN0IGNvbnRhaW5pbmcg
dGhlIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtIGxpbWl0ZWQgYnkgQGEgbGltaXQu
CisgKgorICogVGhlIEBjIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIGVsZW1lbnRzIGFyZSBs
b2NhdGVkIGluIHRoZSByZXN1bHQgbGlzdCBzdGFydGluZyB3aXRoIHRoZSBvbGRlc3Qgb25lLgor
ICogaWYgQGEgbGltaXQgaXMgbmVnYXRpdmUgYWxsIHRoZSBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1
cnJlbnQgaXRlbSBhcmUgcmV0dXJuZWQuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9y
d2FyZCBsaXN0IGluc3RhbmNlCisgKiBAcGFyYW0gbGltaXQgdGhlIG51bWJlciBvZiBpdGVtcyB0
byByZXRyaWV2ZQorICoKKyAqIEByZXR1cm4gQGMgRWluYV9MaXN0IGNvbnRhaW5pbmcgQGMgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVy
cm9yLAorICogICAgICAgICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJl
IGZyZWVkIGFmdGVyIHVzZS4gVXNlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKCkK
KyAqICAgICAgICAgICAgdG8gZnJlZSB0aGUgaXRlbXMKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3
a19iYWNrX2ZvcndhcmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weShjb25zdCBFd2tfQmFja19Gb3J3
YXJkX0xpc3QgKmxpc3QsIGludCBsaW1pdCk7CisKKy8qKgorICogQ3JlYXRlcyB0aGUgbGlzdCBj
b250YWluaW5nIHRoZSBpdGVtcyBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgaXRlbSBsaW1pdGVkIGJ5
IEBhIGxpbWl0LgorICoKKyAqIFRoZSBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVt
ZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUgcmVzdWx0IGxpc3Qgc3RhcnRpbmcgd2l0aCB0aGUgb2xk
ZXN0IG9uZS4KKyAqIGlmIEBhIGxpbWl0IGlzIG5lZ2F0aXZlIGFsbCB0aGUgaXRlbXMgcHJlY2Vk
aW5nIHRoZSBjdXJyZW50IGl0ZW0gYXJlIHJldHVybmVkLgorICoKKyAqIEBwYXJhbSBsaXN0IHRo
ZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICogQHBhcmFtIGxpbWl0IHRoZSBudW1iZXIg
b2YgaXRlbXMgdG8gcmV0cmlldmUKKyAqCisgKiBAcmV0dXJuIEBjIEVpbmFfTGlzdCBjb250YWlu
aW5nIEBjIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4g
Y2FzZSBvZiBlcnJvciwKKyAqICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1z
IHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuIFVzZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV91bnJlZigpCisgKiAgICAgICAgICAgIHRvIGZyZWUgdGhlIGl0ZW1zCisgKi8KK0VBUEkgRWlu
YV9MaXN0ICpld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHkoY29uc3Qg
RXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0LCBpbnQgbGltaXQpOworCisvKioKKyAqIENyZWF0
ZXMgdGhlIGxpc3QgY29udGFpbmluZyB0aGUgaXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0
ZW0uCisgKgorICogVGhlIEBjIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIGVsZW1lbnRzIGFy
ZSBsb2NhdGVkIGluIHRoZSByZXN1bHQgbGlzdCBzdGFydGluZyB3aXRoIHRoZSBvbGRlc3Qgb25l
LgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICoK
KyAqIEByZXR1cm4gQGMgRWluYV9MaXN0IGNvbnRhaW5pbmcgQGMgRXdrX0JhY2tfRm9yd2FyZF9M
aXN0X0l0ZW0gZWxlbWVudHMgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLAorICogICAgICAg
ICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHVz
ZS4gVXNlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKCkKKyAqICAgICAgICAgICAg
dG8gZnJlZSB0aGUgaXRlbXMKKyAqCisgKiBAc2VlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uX2Jh
Y2tfaXRlbXNfY29weQorICovCisjZGVmaW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9iYWNrX2l0
ZW1zX2NvcHkobGlzdCkgXAorICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uX2JhY2tfaXRlbXNf
Y29weShsaXN0LCAtMSkKKworLyoqCisgKiBDcmVhdGVzIHRoZSBsaXN0IGNvbnRhaW5pbmcgdGhl
IGl0ZW1zIGZvbGxvd2luZyB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFRoZSBAYyBFd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUgcmVzdWx0IGxp
c3Qgc3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUg
YmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIEBjIEVpbmFfTGlzdCBj
b250YWluaW5nIEBjIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIGVsZW1lbnRzIG9yIEBjIE5V
TEwgaW4gY2FzZSBvZiBlcnJvciwKKyAqICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRz
IGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuIFVzZSBld2tfYmFja19mb3J3YXJkX2xp
c3RfaXRlbV91bnJlZigpCisgKiAgICAgICAgICAgIHRvIGZyZWUgdGhlIGl0ZW1zCisgKgorICog
QHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHkKKyAqLworI2Rl
ZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtc19jb3B5KGxpc3QpIFwKKyAg
ICBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHkobGlzdCwgLTEpCisK
ICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2JhY2tf
Zm9yd2FyZF9saXN0LmNwcAppbmRleCBhZjEwOTgxLi42OGMxNWRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJk
X2xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl9iYWNrX2ZvcndhcmRfbGlzdC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgZXh0ZXJuIEVX
SzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKIAogc3RhdGljIGNvbnN0IGNoYXIg
dGl0bGUxW10gPSAiUGFnZTEiOwogc3RhdGljIGNvbnN0IGNoYXIgdGl0bGUyW10gPSAiUGFnZTIi
Oworc3RhdGljIGNvbnN0IGNoYXIgdGl0bGUzW10gPSAiUGFnZTMiOwogCiBzdGF0aWMgdm9pZCBz
ZXJ2ZXJDYWxsYmFja05hdmlnYXRpb24oU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0
KiwgZ3BvaW50ZXIpCiB7CkBAIC03OCw2ICs3OSwxMyBAQCBzdGF0aWMgaW5saW5lIFdLRWluYVNo
YXJlZFN0cmluZyB1cmxGcm9tVGl0bGUoRVdLMlVuaXRUZXN0U2VydmVyKiBodHRwU2VydmVyLCBj
bwogICAgIHJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlRWluYUxpc3Qo
RWluYV9MaXN0KiBsaXN0KQoreworICAgIHZvaWQqIGRhdGEgPSAwOworICAgIEVJTkFfTElTVF9G
UkVFKGxpc3QsIGRhdGEpCisgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVm
KHN0YXRpY19jYXN0PEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4oZGF0YSkpOworfQorCiBU
RVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2N1cnJlbnRfaXRl
bV9nZXQpCiB7CiAgICAgY29uc3QgY2hhciogdXJsID0gZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0
UGFnZVVybCgpOwpAQCAtMTgxLDMgKzE4OSw4MyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KQogCiAgICAgRVhQRUNUX0VRKGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9jb3VudChiYWNrRm9yd2FyZExpc3QpLCAyKTsKIH0KKworVEVTVF9GKEVXSzJV
bml0VGVzdEJhc2UsIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weSkKK3sK
KyAgICBPd25QdHI8RVdLMlVuaXRUZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIobmV3
IEVXSzJVbml0VGVzdFNlcnZlcik7CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNr
TmF2aWdhdGlvbik7CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJsMSA9IHVybEZyb21UaXRs
ZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTEpOworICAgIGxvYWRVcmxTeW5jKHVybDEpOworICAg
IEFTU0VSVF9TVFJFUShld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUxKTsKKwor
ICAgIFdLRWluYVNoYXJlZFN0cmluZyB1cmwyID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0
KCksIHRpdGxlMik7CisgICAgbG9hZFVybFN5bmModXJsMik7CisgICAgQVNTRVJUX1NUUkVRKGV3
a192aWV3X3RpdGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTIpOworCisgICAgbG9hZFVybFN5bmMo
dXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxlMykpOworICAgIEFTU0VSVF9TVFJF
UShld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUzKTsKKworICAgIEV3a19CYWNr
X0ZvcndhcmRfTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xp
c3RfZ2V0KHdlYlZpZXcoKSk7CisgICAgQVNTRVJUX1RSVUUoYmFja0ZvcndhcmRMaXN0KTsKKwor
ICAgIEVpbmFfTGlzdCogYmFja0xpc3QgPSBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0
ZW1zX2NvcHkoYmFja0ZvcndhcmRMaXN0LCAxKTsKKyAgICBBU1NFUlRfVFJVRShiYWNrTGlzdCk7
CisgICAgQVNTRVJUX0VRKGVpbmFfbGlzdF9jb3VudChiYWNrTGlzdCksIDEpOworICAgIGNoZWNr
SXRlbShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9u
dGgoYmFja0xpc3QsIDApKSwgdGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAgICBmcmVlRWluYUxpc3Qo
YmFja0xpc3QpOworCisgICAgLy8gQ2hlY2sgJzAnIGxpbWl0LgorICAgIGJhY2tMaXN0ID0gZXdr
X2JhY2tfZm9yd2FyZF9saXN0X25fYmFja19pdGVtc19jb3B5KGJhY2tGb3J3YXJkTGlzdCwgMCk7
CisgICAgQVNTRVJUX0ZBTFNFKGJhY2tMaXN0KTsKKworICAgIGJhY2tMaXN0ID0gZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X25fYmFja19pdGVtc19jb3B5KGJhY2tGb3J3YXJkTGlzdCwgLTEpOworICAg
IEFTU0VSVF9UUlVFKGJhY2tMaXN0KTsKKyAgICBBU1NFUlRfRVEoZWluYV9saXN0X2NvdW50KGJh
Y2tMaXN0KSwgMik7CisgICAgY2hlY2tJdGVtKHN0YXRpY19jYXN0PEV3a19CYWNrX0ZvcndhcmRf
TGlzdF9JdGVtKj4oZWluYV9saXN0X250aChiYWNrTGlzdCwgMCkpLCB0aXRsZTEsIHVybDEsIHVy
bDEpOworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bSo+KGVpbmFfbGlzdF9udGgoYmFja0xpc3QsIDEpKSwgdGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAg
ICBmcmVlRWluYUxpc3QoYmFja0xpc3QpOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KQoreworICAgIE93blB0
cjxFV0syVW5pdFRlc3RTZXJ2ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRU
ZXN0U2VydmVyKTsKKyAgICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2tOYXZpZ2F0aW9u
KTsKKworICAgIGxvYWRVcmxTeW5jKHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRs
ZTEpKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRp
dGxlMSk7CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJsMiA9IHVybEZyb21UaXRsZShodHRw
U2VydmVyLmdldCgpLCB0aXRsZTIpOworICAgIGxvYWRVcmxTeW5jKHVybDIpOworICAgIEFTU0VS
VF9TVFJFUShld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUyKTsKKworICAgIFdL
RWluYVNoYXJlZFN0cmluZyB1cmwzID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRp
dGxlMyk7CisgICAgbG9hZFVybFN5bmModXJsMyk7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3
X3RpdGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTMpOworCisgICAgLy8gR28gYmFjayB0byBQYWdl
MS4KKyAgICBld2tfdmlld19iYWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVudGlsVGl0bGVDaGFu
Z2VkVG8odGl0bGUyKTsKKyAgICBld2tfdmlld19iYWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVu
dGlsVGl0bGVDaGFuZ2VkVG8odGl0bGUxKTsKKworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCog
YmFja0ZvcndhcmRMaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHdlYlZpZXco
KSk7CisgICAgQVNTRVJUX1RSVUUoYmFja0ZvcndhcmRMaXN0KTsKKworICAgIEVpbmFfTGlzdCog
Zm9yd2FyZExpc3QgPSBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHko
YmFja0ZvcndhcmRMaXN0LCAxKTsKKyAgICBBU1NFUlRfVFJVRShmb3J3YXJkTGlzdCk7CisgICAg
QVNTRVJUX0VRKGVpbmFfbGlzdF9jb3VudChmb3J3YXJkTGlzdCksIDEpOworICAgIGNoZWNrSXRl
bShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgo
Zm9yd2FyZExpc3QsIDApKSwgdGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAgICBmcmVlRWluYUxpc3Qo
Zm9yd2FyZExpc3QpOworCisgICAgLy8gQ2hlY2sgJzAnIGxpbWl0LgorICAgIGZvcndhcmRMaXN0
ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGJhY2tGb3J3YXJk
TGlzdCwgMCk7CisgICAgQVNTRVJUX0ZBTFNFKGZvcndhcmRMaXN0KTsKKworICAgIGZvcndhcmRM
aXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGJhY2tGb3J3
YXJkTGlzdCwgLTEpOworICAgIEFTU0VSVF9UUlVFKGZvcndhcmRMaXN0KTsKKyAgICBBU1NFUlRf
RVEoZWluYV9saXN0X2NvdW50KGZvcndhcmRMaXN0KSwgMik7CisgICAgY2hlY2tJdGVtKHN0YXRp
Y19jYXN0PEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4oZWluYV9saXN0X250aChmb3J3YXJk
TGlzdCwgMCkpLCB0aXRsZTIsIHVybDIsIHVybDIpOworICAgIGNoZWNrSXRlbShzdGF0aWNfY2Fz
dDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoZm9yd2FyZExpc3Qs
IDEpKSwgdGl0bGUzLCB1cmwzLCB1cmwzKTsKKyAgICBmcmVlRWluYUxpc3QoZm9yd2FyZExpc3Qp
OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160215</attachid>
            <date>2012-08-23 12:42:48 -0700</date>
            <delta_ts>2012-08-24 03:57:24 -0700</delta_ts>
            <desc>patch v5</desc>
            <filename>bug94582_v5</filename>
            <type>text/plain</type>
            <size>11558</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGM3MDQyNTQxODA5MjRmOGJlODU4OTU2NTQzNTliMTEwOWViOGJlYTEKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEF1ZyAyMSAxMzoyNjo1NyAyMDEyICswMzAwCgogICAgYnVnOTQ1ODIKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNTVmZWY1OS4uZTM5ODRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4
LTI0ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQmFjay1mb3J3YXJkIGxpc3QgQVBJIG5lZWRzIGV4dGVuc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ1ODIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBz
ZXZlcmFsIG5ldyBmdW5jdGlvbnMgd3JhcHBpbmcgZXhpc3RpbmcgV0syIEMgYmFjay1mb3J3YXJk
IGxpc3QgQVBJCisgICAgICAgIGFuZCByZXR1cm5pbmcgbGlzdCBvZiBpdGVtcyBwcmVjZWRpbmcg
b3IgZm9sbG93aW5nIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgQ29ycmVzcG9uZGluZyBBUEkg
dW5pdCB0ZXN0cyBhcmUgYWxzbyBhZGRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6CisgICAgICAgIChjcmVhdGVFaW5hTGlzdCk6Cisg
ICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHkpOgorICAgICAg
ICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3BwOgor
ICAgICAgICAoZnJlZUVpbmFMaXN0KToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTItMDgtMjMg
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CiAKICAg
ICAgICAgW1dLMl0gUmVmYWN0b3Jpbmc6IFdlYkJhY2tGb3J3YXJkTGlzdCBnZXR0ZXJzIHNob3Vs
ZCBiZSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKaW5kZXggYWNmOGQ1Ni4uODE5YmJiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFj
a19mb3J3YXJkX2xpc3QuY3BwCkBAIC04NCw2ICs4NCwyNCBAQCBzdGF0aWMgaW5saW5lIEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUoY29uc3QgRXdrX0Jh
Y2tfRgogICAgIHJldHVybiBpdGVtOwogfQogCitzdGF0aWMgaW5saW5lIEVpbmFfTGlzdCogY3Jl
YXRlRWluYUxpc3QoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBXS0FycmF5UmVm
IHdrTGlzdCkKK3sKKyAgICBpZiAoIXdrTGlzdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBF
aW5hX0xpc3QqIHJlc3VsdCA9IDA7CisKKyAgICBjb25zdCBzaXplX3QgY291bnQgPSBXS0FycmF5
R2V0U2l6ZSh3a0xpc3QpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
eworICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtID0gc3RhdGljX2Nhc3Q8
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tMaXN0LCBp
KSk7CisgICAgICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtID0gYWRkSXRlbVRv
V3JhcHBlckNhY2hlKGxpc3QsIHdrSXRlbSk7CisgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX3JlZihpdGVtKTsKKyAgICAgICAgcmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1
bHQsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEV3a19CYWNrX0Zv
cndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChj
b25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCiB7CiAgICAgRVdLX0JBQ0tfRk9SV0FS
RF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKQEAgLTEyMSw2ICsxMzks
MzUgQEAgdW5zaWduZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KEV3a19CYWNrX0Zvcndh
cmRfTGlzdCogbGlzdCkKICAgICByZXR1cm4gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENv
dW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tMaXN0
KSArIGN1cnJlbnRJdGVtOwogfQogCitFaW5hX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9u
X2JhY2tfaXRlbXNfY29weShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIGludCBs
aW1pdCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0
LCB3a0xpc3QsIDApOworCisgICAgaWYgKGxpbWl0ID09IC0xKQorICAgICAgICBsaW1pdCA9IFdL
QmFja0ZvcndhcmRMaXN0R2V0QmFja0xpc3RDb3VudCh3a0xpc3QpOworCisgICAgaWYgKCFsaW1p
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBiYWNr
TGlzdChBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdENvcHlCYWNrTGlzdFdpdGhMaW1pdCh3a0xp
c3QsIGxpbWl0KSk7CisKKyAgICByZXR1cm4gY3JlYXRlRWluYUxpc3QobGlzdCwgYmFja0xpc3Qu
Z2V0KCkpOworfQorCitFaW5hX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uX2ZvcndhcmRf
aXRlbXNfY29weShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIGludCBsaW1pdCkK
K3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3a0xp
c3QsIDApOworCisgICAgaWYgKGxpbWl0ID09IC0xKQorICAgICAgICBsaW1pdCA9IFdLQmFja0Zv
cndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudCh3a0xpc3QpOworCisgICAgaWYgKCFsaW1pdCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBmb3J3YXJk
TGlzdChBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdCh3
a0xpc3QsIGxpbWl0KSk7CisKKyAgICByZXR1cm4gY3JlYXRlRWluYUxpc3QobGlzdCwgZm9yd2Fy
ZExpc3QuZ2V0KCkpOworfQogCiAvKioKICAqIEBpbnRlcm5hbApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaAppbmRl
eCA1YjljY2E3Li5jNTg0NzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaApAQCAtODYsNiArODYsNjggQEAg
RUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fYXRfaW5kZXhfZ2V0KGNvbnN0IEUKICAqLwogRUFQSSB1bnNpZ25lZCBld2tfYmFja19mb3J3
YXJkX2xpc3RfY291bnQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsKIAorLyoqCisgKiBD
cmVhdGVzIHRoZSBsaXN0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVu
dCBpdGVtIGxpbWl0ZWQgYnkgQGEgbGltaXQuCisgKgorICogVGhlIEBjIEV3a19CYWNrX0Zvcndh
cmRfTGlzdF9JdGVtIGVsZW1lbnRzIGFyZSBsb2NhdGVkIGluIHRoZSByZXN1bHQgbGlzdCBzdGFy
dGluZyB3aXRoIHRoZSBvbGRlc3Qgb25lLgorICogaWYgQGEgbGltaXQgaXMgZXF1YWwgdG8gQGMg
LTEgYWxsIHRoZSBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbSBhcmUgcmV0dXJuZWQu
CisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKiBA
cGFyYW0gbGltaXQgdGhlIG51bWJlciBvZiBpdGVtcyB0byByZXRyaWV2ZQorICoKKyAqIEByZXR1
cm4gQGMgRWluYV9MaXN0IGNvbnRhaW5pbmcgQGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0g
ZWxlbWVudHMgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLAorICogICAgICAgICAgICB0aGUg
RWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHVzZS4gVXNlIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKCkKKyAqICAgICAgICAgICAgdG8gZnJlZSB0
aGUgaXRlbXMKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9uX2Jh
Y2tfaXRlbXNfY29weShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmxpc3QsIGludCBsaW1p
dCk7CisKKy8qKgorICogQ3JlYXRlcyB0aGUgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBmb2xs
b3dpbmcgdGhlIGN1cnJlbnQgaXRlbSBsaW1pdGVkIGJ5IEBhIGxpbWl0LgorICoKKyAqIFRoZSBA
YyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUg
cmVzdWx0IGxpc3Qgc3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAqIGlmIEBhIGxpbWl0
IGlzIGVxdWFsIHRvIEBjIC0xIGFsbCB0aGUgaXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0
ZW0gYXJlIHJldHVybmVkLgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlz
dCBpbnN0YW5jZQorICogQHBhcmFtIGxpbWl0IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmll
dmUKKyAqCisgKiBAcmV0dXJuIEBjIEVpbmFfTGlzdCBjb250YWluaW5nIEBjIEV3a19CYWNrX0Zv
cndhcmRfTGlzdF9JdGVtIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvciwKKyAq
ICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBh
ZnRlciB1c2UuIFVzZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZigpCisgKiAgICAg
ICAgICAgIHRvIGZyZWUgdGhlIGl0ZW1zCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfYmFja19m
b3J3YXJkX2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHkoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9M
aXN0ICpsaXN0LCBpbnQgbGltaXQpOworCisvKioKKyAqIENyZWF0ZXMgdGhlIGxpc3QgY29udGFp
bmluZyB0aGUgaXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogVGhlIEBj
IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIGVsZW1lbnRzIGFyZSBsb2NhdGVkIGluIHRoZSBy
ZXN1bHQgbGlzdCBzdGFydGluZyB3aXRoIHRoZSBvbGRlc3Qgb25lLgorICoKKyAqIEBwYXJhbSBs
aXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gQGMgRWlu
YV9MaXN0IGNvbnRhaW5pbmcgQGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMg
b3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLAorICogICAgICAgICAgICB0aGUgRWluYV9MaXN0
IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHVzZS4gVXNlIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX3VucmVmKCkKKyAqICAgICAgICAgICAgdG8gZnJlZSB0aGUgaXRlbXMK
KyAqCisgKiBAc2VlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weQorICov
CisjZGVmaW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9iYWNrX2l0ZW1zX2NvcHkobGlzdCkgXAor
ICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weShsaXN0LCAtMSkKKwor
LyoqCisgKiBDcmVhdGVzIHRoZSBsaXN0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIGZvbGxvd2luZyB0
aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFRoZSBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUgcmVzdWx0IGxpc3Qgc3RhcnRpbmcgd2l0aCB0
aGUgb2xkZXN0IG9uZS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3Qg
aW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIEBjIEVpbmFfTGlzdCBjb250YWluaW5nIEBjIEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJv
ciwKKyAqICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBm
cmVlZCBhZnRlciB1c2UuIFVzZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZigpCisg
KiAgICAgICAgICAgIHRvIGZyZWUgdGhlIGl0ZW1zCisgKgorICogQHNlZSBld2tfYmFja19mb3J3
YXJkX2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHkKKyAqLworI2RlZmluZSBld2tfYmFja19mb3J3
YXJkX2xpc3RfZm9yd2FyZF9pdGVtc19jb3B5KGxpc3QpIFwKKyAgICBld2tfYmFja19mb3J3YXJk
X2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHkobGlzdCwgLTEpCisKICNpZmRlZiBfX2NwbHVzcGx1
cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0LmNwcApp
bmRleCBhZjEwOTgxLi42OGMxNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9iYWNrX2Zvcndh
cmRfbGlzdC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25t
ZW50KiBlbnZpcm9ubWVudDsKIAogc3RhdGljIGNvbnN0IGNoYXIgdGl0bGUxW10gPSAiUGFnZTEi
Owogc3RhdGljIGNvbnN0IGNoYXIgdGl0bGUyW10gPSAiUGFnZTIiOworc3RhdGljIGNvbnN0IGNo
YXIgdGl0bGUzW10gPSAiUGFnZTMiOwogCiBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFja05hdmln
YXRpb24oU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hh
ciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCiB7CkBA
IC03OCw2ICs3OSwxMyBAQCBzdGF0aWMgaW5saW5lIFdLRWluYVNoYXJlZFN0cmluZyB1cmxGcm9t
VGl0bGUoRVdLMlVuaXRUZXN0U2VydmVyKiBodHRwU2VydmVyLCBjbwogICAgIHJldHVybiByZXM7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlRWluYUxpc3QoRWluYV9MaXN0KiBsaXN0KQor
eworICAgIHZvaWQqIGRhdGEgPSAwOworICAgIEVJTkFfTElTVF9GUkVFKGxpc3QsIGRhdGEpCisg
ICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKHN0YXRpY19jYXN0PEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4oZGF0YSkpOworfQorCiBURVNUX0YoRVdLMlVuaXRUZXN0
QmFzZSwgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2N1cnJlbnRfaXRlbV9nZXQpCiB7CiAgICAgY29u
c3QgY2hhciogdXJsID0gZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpOwpAQCAtMTgx
LDMgKzE4OSw4MyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X2NvdW50KQogCiAgICAgRVhQRUNUX0VRKGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jb3VudChi
YWNrRm9yd2FyZExpc3QpLCAyKTsKIH0KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19i
YWNrX2ZvcndhcmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weSkKK3sKKyAgICBPd25QdHI8RVdLMlVu
aXRUZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIobmV3IEVXSzJVbml0VGVzdFNlcnZl
cik7CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrTmF2aWdhdGlvbik7CisKKyAg
ICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJsMSA9IHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgp
LCB0aXRsZTEpOworICAgIGxvYWRVcmxTeW5jKHVybDEpOworICAgIEFTU0VSVF9TVFJFUShld2tf
dmlld190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUxKTsKKworICAgIFdLRWluYVNoYXJlZFN0
cmluZyB1cmwyID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxlMik7CisgICAg
bG9hZFVybFN5bmModXJsMik7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3RpdGxlX2dldCh3
ZWJWaWV3KCkpLCB0aXRsZTIpOworCisgICAgbG9hZFVybFN5bmModXJsRnJvbVRpdGxlKGh0dHBT
ZXJ2ZXIuZ2V0KCksIHRpdGxlMykpOworICAgIEFTU0VSVF9TVFJFUShld2tfdmlld190aXRsZV9n
ZXQod2ViVmlldygpKSwgdGl0bGUzKTsKKworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogYmFj
a0ZvcndhcmRMaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHdlYlZpZXcoKSk7
CisgICAgQVNTRVJUX1RSVUUoYmFja0ZvcndhcmRMaXN0KTsKKworICAgIEVpbmFfTGlzdCogYmFj
a0xpc3QgPSBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHkoYmFja0Zvcndh
cmRMaXN0LCAxKTsKKyAgICBBU1NFUlRfVFJVRShiYWNrTGlzdCk7CisgICAgQVNTRVJUX0VRKGVp
bmFfbGlzdF9jb3VudChiYWNrTGlzdCksIDEpOworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoYmFja0xpc3QsIDApKSwg
dGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAgICBmcmVlRWluYUxpc3QoYmFja0xpc3QpOworCisgICAg
Ly8gQ2hlY2sgJzAnIGxpbWl0LgorICAgIGJhY2tMaXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0
X25fYmFja19pdGVtc19jb3B5KGJhY2tGb3J3YXJkTGlzdCwgMCk7CisgICAgQVNTRVJUX0ZBTFNF
KGJhY2tMaXN0KTsKKworICAgIGJhY2tMaXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fYmFj
a19pdGVtc19jb3B5KGJhY2tGb3J3YXJkTGlzdCwgLTEpOworICAgIEFTU0VSVF9UUlVFKGJhY2tM
aXN0KTsKKyAgICBBU1NFUlRfRVEoZWluYV9saXN0X2NvdW50KGJhY2tMaXN0KSwgMik7CisgICAg
Y2hlY2tJdGVtKHN0YXRpY19jYXN0PEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4oZWluYV9s
aXN0X250aChiYWNrTGlzdCwgMCkpLCB0aXRsZTEsIHVybDEsIHVybDEpOworICAgIGNoZWNrSXRl
bShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgo
YmFja0xpc3QsIDEpKSwgdGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAgICBmcmVlRWluYUxpc3QoYmFj
a0xpc3QpOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KQoreworICAgIE93blB0cjxFV0syVW5pdFRlc3RTZXJ2
ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0U2VydmVyKTsKKyAgICBo
dHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2tOYXZpZ2F0aW9uKTsKKworICAgIGxvYWRVcmxT
eW5jKHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTEpKTsKKyAgICBBU1NFUlRf
U1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRpdGxlMSk7CisKKyAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgdXJsMiA9IHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRs
ZTIpOworICAgIGxvYWRVcmxTeW5jKHVybDIpOworICAgIEFTU0VSVF9TVFJFUShld2tfdmlld190
aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUyKTsKKworICAgIFdLRWluYVNoYXJlZFN0cmluZyB1
cmwzID0gdXJsRnJvbVRpdGxlKGh0dHBTZXJ2ZXIuZ2V0KCksIHRpdGxlMyk7CisgICAgbG9hZFVy
bFN5bmModXJsMyk7CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3RpdGxlX2dldCh3ZWJWaWV3
KCkpLCB0aXRsZTMpOworCisgICAgLy8gR28gYmFjayB0byBQYWdlMS4KKyAgICBld2tfdmlld19i
YWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8odGl0bGUyKTsKKyAg
ICBld2tfdmlld19iYWNrKHdlYlZpZXcoKSk7CisgICAgd2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8o
dGl0bGUxKTsKKworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogYmFja0ZvcndhcmRMaXN0ID0g
ZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHdlYlZpZXcoKSk7CisgICAgQVNTRVJUX1RS
VUUoYmFja0ZvcndhcmRMaXN0KTsKKworICAgIEVpbmFfTGlzdCogZm9yd2FyZExpc3QgPSBld2tf
YmFja19mb3J3YXJkX2xpc3Rfbl9mb3J3YXJkX2l0ZW1zX2NvcHkoYmFja0ZvcndhcmRMaXN0LCAx
KTsKKyAgICBBU1NFUlRfVFJVRShmb3J3YXJkTGlzdCk7CisgICAgQVNTRVJUX0VRKGVpbmFfbGlz
dF9jb3VudChmb3J3YXJkTGlzdCksIDEpOworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxFd2tf
QmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoZm9yd2FyZExpc3QsIDApKSwg
dGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAgICBmcmVlRWluYUxpc3QoZm9yd2FyZExpc3QpOworCisg
ICAgLy8gQ2hlY2sgJzAnIGxpbWl0LgorICAgIGZvcndhcmRMaXN0ID0gZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGJhY2tGb3J3YXJkTGlzdCwgMCk7CisgICAgQVNT
RVJUX0ZBTFNFKGZvcndhcmRMaXN0KTsKKworICAgIGZvcndhcmRMaXN0ID0gZXdrX2JhY2tfZm9y
d2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGJhY2tGb3J3YXJkTGlzdCwgLTEpOworICAg
IEFTU0VSVF9UUlVFKGZvcndhcmRMaXN0KTsKKyAgICBBU1NFUlRfRVEoZWluYV9saXN0X2NvdW50
KGZvcndhcmRMaXN0KSwgMik7CisgICAgY2hlY2tJdGVtKHN0YXRpY19jYXN0PEV3a19CYWNrX0Zv
cndhcmRfTGlzdF9JdGVtKj4oZWluYV9saXN0X250aChmb3J3YXJkTGlzdCwgMCkpLCB0aXRsZTIs
IHVybDIsIHVybDIpOworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJk
X0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoZm9yd2FyZExpc3QsIDEpKSwgdGl0bGUzLCB1cmwz
LCB1cmwzKTsKKyAgICBmcmVlRWluYUxpc3QoZm9yd2FyZExpc3QpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160385</attachid>
            <date>2012-08-24 03:57:24 -0700</date>
            <delta_ts>2012-08-24 04:47:30 -0700</delta_ts>
            <desc>patch v6</desc>
            <filename>bug94582_v6</filename>
            <type>text/plain</type>
            <size>11571</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDg5YTI5NTQxNmZhZWZhYjYzNDk3YmExYTYwNWI1N2QyMjI0M2QzM2MKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEF1ZyAyMSAxMzoyNjo1NyAyMDEyICswMzAwCgogICAgYnVnOTQ1ODIKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggZTcwZGY0NC4uYjMxY2Y0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4
LTI0ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQmFjay1mb3J3YXJkIGxpc3QgQVBJIG5lZWRzIGV4dGVuc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ1ODIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBz
ZXZlcmFsIG5ldyBmdW5jdGlvbnMgd3JhcHBpbmcgZXhpc3RpbmcgV0syIEMgYmFjay1mb3J3YXJk
IGxpc3QgQVBJCisgICAgICAgIGFuZCByZXR1cm5pbmcgbGlzdCBvZiBpdGVtcyBwcmVjZWRpbmcg
b3IgZm9sbG93aW5nIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgQ29ycmVzcG9uZGluZyBBUEkg
dW5pdCB0ZXN0cyBhcmUgYWxzbyBhZGRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6CisgICAgICAgIChjcmVhdGVFaW5hTGlzdCk6Cisg
ICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHkpOgorICAgICAg
ICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QuY3BwOgor
ICAgICAgICAoZnJlZUVpbmFMaXN0KToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTItMDgtMjIg
IEplc3VzIFNhbmNoZXotUGFsZW5jaWEgIDxqZXN1cy5wYWxlbmNpYUBvcGVuYm9zc2Eub3JnPgog
CiAgICAgICAgIFtFRkxdIFVzZSBXVEZfVVNFX1NPVVAgaW5zdGVhZCBCVUlMRElOR19TT1VQX18K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zv
cndhcmRfbGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFj
a19mb3J3YXJkX2xpc3QuY3BwCmluZGV4IGFjZjhkNTYuLmMzYzdjMWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9s
aXN0LmNwcApAQCAtODQsNiArODQsMjQgQEAgc3RhdGljIGlubGluZSBFd2tfQmFja19Gb3J3YXJk
X0xpc3RfSXRlbSogYWRkSXRlbVRvV3JhcHBlckNhY2hlKGNvbnN0IEV3a19CYWNrX0YKICAgICBy
ZXR1cm4gaXRlbTsKIH0KIAorc3RhdGljIGlubGluZSBFaW5hX0xpc3QqIGNyZWF0ZUVpbmFMaXN0
KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgV0tBcnJheVJlZiB3a0xpc3QpCit7
CisgICAgaWYgKCF3a0xpc3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgRWluYV9MaXN0KiBy
ZXN1bHQgPSAwOworCisgICAgY29uc3Qgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tM
aXN0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0PFdLQmFja0Zvcndh
cmRMaXN0SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTGlzdCwgaSkpOworICAgICAg
ICBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSA9IGFkZEl0ZW1Ub1dyYXBwZXJDYWNo
ZShsaXN0LCB3a0l0ZW0pOworICAgICAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9yZWYo
aXRlbSk7CisgICAgICAgIHJlc3VsdCA9IGVpbmFfbGlzdF9hcHBlbmQocmVzdWx0LCBpdGVtKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFd2tfQmFja19Gb3J3YXJkX0xpc3Rf
SXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2N1cnJlbnRfaXRlbV9nZXQoY29uc3QgRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KiBsaXN0KQogewogICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19H
RVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CkBAIC0xMjEsNiArMTM5LDI5IEBAIHVuc2ln
bmVkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jb3VudChFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxp
c3QpCiAgICAgcmV0dXJuIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0xpc3RDb3VudCh3a0xpc3Qp
ICsgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlzdENvdW50KHdrTGlzdCkgKyBjdXJyZW50
SXRlbTsKIH0KIAorRWluYV9MaXN0KiBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1z
X2NvcHkoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBpbnQgbGltaXQpCit7Cisg
ICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAw
KTsKKworICAgIGlmIChsaW1pdCA9PSAtMSkKKyAgICAgICAgbGltaXQgPSBXS0JhY2tGb3J3YXJk
TGlzdEdldEJhY2tMaXN0Q291bnQod2tMaXN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwobGltaXQgPj0gMCwgMCk7CisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gYmFj
a0xpc3QoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RDb3B5QmFja0xpc3RXaXRoTGltaXQod2tM
aXN0LCBsaW1pdCkpOworCisgICAgcmV0dXJuIGNyZWF0ZUVpbmFMaXN0KGxpc3QsIGJhY2tMaXN0
LmdldCgpKTsKK30KKworRWluYV9MaXN0KiBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9mb3J3YXJk
X2l0ZW1zX2NvcHkoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBpbnQgbGltaXQp
Cit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tM
aXN0LCAwKTsKKworICAgIGlmIChsaW1pdCA9PSAtMSkKKyAgICAgICAgbGltaXQgPSBXS0JhY2tG
b3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tMaXN0KTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwobGltaXQgPj0gMCwgMCk7CisgICAgV0tSZXRhaW5QdHI8V0tBcnJh
eVJlZj4gZm9yd2FyZExpc3QoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RDb3B5Rm9yd2FyZExp
c3RXaXRoTGltaXQod2tMaXN0LCBsaW1pdCkpOworCisgICAgcmV0dXJuIGNyZWF0ZUVpbmFMaXN0
KGxpc3QsIGZvcndhcmRMaXN0LmdldCgpKTsKK30KIAogLyoqCiAgKiBAaW50ZXJuYWwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRf
bGlzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0LmgKaW5kZXggNWI5Y2NhNy4uYzU4NDc2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKQEAgLTg2
LDYgKzg2LDY4IEBAIEVBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX2F0X2luZGV4X2dldChjb25zdCBFCiAgKi8KIEVBUEkgdW5zaWduZWQg
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7
CiAKKy8qKgorICogQ3JlYXRlcyB0aGUgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBwcmVjZWRp
bmcgdGhlIGN1cnJlbnQgaXRlbSBsaW1pdGVkIGJ5IEBhIGxpbWl0LgorICoKKyAqIFRoZSBAYyBF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9jYXRlZCBpbiB0aGUgcmVz
dWx0IGxpc3Qgc3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAqIGlmIEBhIGxpbWl0IGlz
IGVxdWFsIHRvIEBjIC0xIGFsbCB0aGUgaXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0g
YXJlIHJldHVybmVkLgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBp
bnN0YW5jZQorICogQHBhcmFtIGxpbWl0IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUK
KyAqCisgKiBAcmV0dXJuIEBjIEVpbmFfTGlzdCBjb250YWluaW5nIEBjIEV3a19CYWNrX0Zvcndh
cmRfTGlzdF9JdGVtIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvciwKKyAqICAg
ICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRl
ciB1c2UuIFVzZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZigpCisgKiAgICAgICAg
ICAgIHRvIGZyZWUgdGhlIGl0ZW1zCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfYmFja19mb3J3
YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHkoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICps
aXN0LCBpbnQgbGltaXQpOworCisvKioKKyAqIENyZWF0ZXMgdGhlIGxpc3QgY29udGFpbmluZyB0
aGUgaXRlbXMgZm9sbG93aW5nIHRoZSBjdXJyZW50IGl0ZW0gbGltaXRlZCBieSBAYSBsaW1pdC4K
KyAqCisgKiBUaGUgQGMgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgYXJlIGxv
Y2F0ZWQgaW4gdGhlIHJlc3VsdCBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIG9sZGVzdCBvbmUuCisg
KiBpZiBAYSBsaW1pdCBpcyBlcXVhbCB0byBAYyAtMSBhbGwgdGhlIGl0ZW1zIHByZWNlZGluZyB0
aGUgY3VycmVudCBpdGVtIGFyZSByZXR1cm5lZC4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFj
ay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqIEBwYXJhbSBsaW1pdCB0aGUgbnVtYmVyIG9mIGl0
ZW1zIHRvIHJldHJpZXZlCisgKgorICogQHJldHVybiBAYyBFaW5hX0xpc3QgY29udGFpbmluZyBA
YyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBvciBAYyBOVUxMIGluIGNhc2Ug
b2YgZXJyb3IsCisgKiAgICAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91
bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5y
ZWYoKQorICogICAgICAgICAgICB0byBmcmVlIHRoZSBpdGVtcworICovCitFQVBJIEVpbmFfTGlz
dCAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGNvbnN0IEV3a19C
YWNrX0ZvcndhcmRfTGlzdCAqbGlzdCwgaW50IGxpbWl0KTsKKworLyoqCisgKiBDcmVhdGVzIHRo
ZSBsaXN0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtLgor
ICoKKyAqIFRoZSBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBhcmUgbG9j
YXRlZCBpbiB0aGUgcmVzdWx0IGxpc3Qgc3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IG9uZS4KKyAq
CisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBA
cmV0dXJuIEBjIEVpbmFfTGlzdCBjb250YWluaW5nIEBjIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9J
dGVtIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvciwKKyAqICAgICAgICAgICAg
dGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuIFVz
ZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZigpCisgKiAgICAgICAgICAgIHRvIGZy
ZWUgdGhlIGl0ZW1zCisgKgorICogQHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0
ZW1zX2NvcHkKKyAqLworI2RlZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtc19j
b3B5KGxpc3QpIFwKKyAgICBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHko
bGlzdCwgLTEpCisKKy8qKgorICogQ3JlYXRlcyB0aGUgbGlzdCBjb250YWluaW5nIHRoZSBpdGVt
cyBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBUaGUgQGMgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0X0l0ZW0gZWxlbWVudHMgYXJlIGxvY2F0ZWQgaW4gdGhlIHJlc3VsdCBsaXN0IHN0
YXJ0aW5nIHdpdGggdGhlIG9sZGVzdCBvbmUuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2st
Zm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiBAYyBFaW5hX0xpc3QgY29udGFp
bmluZyBAYyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBlbGVtZW50cyBvciBAYyBOVUxMIGlu
IGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVt
cyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fdW5yZWYoKQorICogICAgICAgICAgICB0byBmcmVlIHRoZSBpdGVtcworICoKKyAqIEBzZWUg
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5CisgKi8KKyNkZWZpbmUg
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZvcndhcmRfaXRlbXNfY29weShsaXN0KSBcCisgICAgZXdr
X2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGxpc3QsIC0xKQorCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9iYWNrX2Zvcndh
cmRfbGlzdC5jcHAKaW5kZXggYWYxMDk4MS4uNjhjMTVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfYmFja19mb3J3YXJkX2xpc3QuY3BwCkBAIC00MSw2ICs0MSw3IEBAIGV4dGVybiBFV0syVW5p
dFRlc3RFbnZpcm9ubWVudCogZW52aXJvbm1lbnQ7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHRpdGxl
MVtdID0gIlBhZ2UxIjsKIHN0YXRpYyBjb25zdCBjaGFyIHRpdGxlMltdID0gIlBhZ2UyIjsKK3N0
YXRpYyBjb25zdCBjaGFyIHRpdGxlM1tdID0gIlBhZ2UzIjsKIAogc3RhdGljIHZvaWQgc2VydmVy
Q2FsbGJhY2tOYXZpZ2F0aW9uKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3Nh
Z2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdw
b2ludGVyKQogewpAQCAtNzgsNiArNzksMTMgQEAgc3RhdGljIGlubGluZSBXS0VpbmFTaGFyZWRT
dHJpbmcgdXJsRnJvbVRpdGxlKEVXSzJVbml0VGVzdFNlcnZlciogaHR0cFNlcnZlciwgY28KICAg
ICByZXR1cm4gcmVzOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZUVpbmFMaXN0KEVpbmFf
TGlzdCogbGlzdCkKK3sKKyAgICB2b2lkKiBkYXRhID0gMDsKKyAgICBFSU5BX0xJU1RfRlJFRShs
aXN0LCBkYXRhKQorICAgICAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihzdGF0
aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGRhdGEpKTsKK30KKwogVEVTVF9G
KEVXSzJVbml0VGVzdEJhc2UsIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0
KQogewogICAgIGNvbnN0IGNoYXIqIHVybCA9IGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VV
cmwoKTsKQEAgLTE4MSwzICsxODksODMgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19i
YWNrX2ZvcndhcmRfbGlzdF9jb3VudCkKIAogICAgIEVYUEVDVF9FUShld2tfYmFja19mb3J3YXJk
X2xpc3RfY291bnQoYmFja0ZvcndhcmRMaXN0KSwgMik7CiB9CisKK1RFU1RfRihFV0syVW5pdFRl
c3RCYXNlLCBld2tfYmFja19mb3J3YXJkX2xpc3Rfbl9iYWNrX2l0ZW1zX2NvcHkpCit7CisgICAg
T3duUHRyPEVXSzJVbml0VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0sy
VW5pdFRlc3RTZXJ2ZXIpOworICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFja05hdmln
YXRpb24pOworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHVybDEgPSB1cmxGcm9tVGl0bGUoaHR0
cFNlcnZlci5nZXQoKSwgdGl0bGUxKTsKKyAgICBsb2FkVXJsU3luYyh1cmwxKTsKKyAgICBBU1NF
UlRfU1RSRVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRpdGxlMSk7CisKKyAgICBX
S0VpbmFTaGFyZWRTdHJpbmcgdXJsMiA9IHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0
aXRsZTIpOworICAgIGxvYWRVcmxTeW5jKHVybDIpOworICAgIEFTU0VSVF9TVFJFUShld2tfdmll
d190aXRsZV9nZXQod2ViVmlldygpKSwgdGl0bGUyKTsKKworICAgIGxvYWRVcmxTeW5jKHVybEZy
b21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTMpKTsKKyAgICBBU1NFUlRfU1RSRVEoZXdr
X3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRpdGxlMyk7CisKKyAgICBFd2tfQmFja19Gb3J3
YXJkX0xpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dl
dCh3ZWJWaWV3KCkpOworICAgIEFTU0VSVF9UUlVFKGJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICBF
aW5hX0xpc3QqIGJhY2tMaXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fYmFja19pdGVtc19j
b3B5KGJhY2tGb3J3YXJkTGlzdCwgMSk7CisgICAgQVNTRVJUX1RSVUUoYmFja0xpc3QpOworICAg
IEFTU0VSVF9FUShlaW5hX2xpc3RfY291bnQoYmFja0xpc3QpLCAxKTsKKyAgICBjaGVja0l0ZW0o
c3RhdGljX2Nhc3Q8RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qPihlaW5hX2xpc3RfbnRoKGJh
Y2tMaXN0LCAwKSksIHRpdGxlMiwgdXJsMiwgdXJsMik7CisgICAgZnJlZUVpbmFMaXN0KGJhY2tM
aXN0KTsKKworICAgIC8vIENoZWNrICcwJyBsaW1pdC4KKyAgICBiYWNrTGlzdCA9IGV3a19iYWNr
X2ZvcndhcmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weShiYWNrRm9yd2FyZExpc3QsIDApOworICAg
IEFTU0VSVF9GQUxTRShiYWNrTGlzdCk7CisKKyAgICBiYWNrTGlzdCA9IGV3a19iYWNrX2Zvcndh
cmRfbGlzdF9uX2JhY2tfaXRlbXNfY29weShiYWNrRm9yd2FyZExpc3QsIC0xKTsKKyAgICBBU1NF
UlRfVFJVRShiYWNrTGlzdCk7CisgICAgQVNTRVJUX0VRKGVpbmFfbGlzdF9jb3VudChiYWNrTGlz
dCksIDIpOworICAgIGNoZWNrSXRlbShzdGF0aWNfY2FzdDxFd2tfQmFja19Gb3J3YXJkX0xpc3Rf
SXRlbSo+KGVpbmFfbGlzdF9udGgoYmFja0xpc3QsIDApKSwgdGl0bGUxLCB1cmwxLCB1cmwxKTsK
KyAgICBjaGVja0l0ZW0oc3RhdGljX2Nhc3Q8RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qPihl
aW5hX2xpc3RfbnRoKGJhY2tMaXN0LCAxKSksIHRpdGxlMiwgdXJsMiwgdXJsMik7CisgICAgZnJl
ZUVpbmFMaXN0KGJhY2tMaXN0KTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19i
YWNrX2ZvcndhcmRfbGlzdF9uX2ZvcndhcmRfaXRlbXNfY29weSkKK3sKKyAgICBPd25QdHI8RVdL
MlVuaXRUZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIobmV3IEVXSzJVbml0VGVzdFNl
cnZlcik7CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrTmF2aWdhdGlvbik7CisK
KyAgICBsb2FkVXJsU3luYyh1cmxGcm9tVGl0bGUoaHR0cFNlcnZlci5nZXQoKSwgdGl0bGUxKSk7
CisgICAgQVNTRVJUX1NUUkVRKGV3a192aWV3X3RpdGxlX2dldCh3ZWJWaWV3KCkpLCB0aXRsZTEp
OworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHVybDIgPSB1cmxGcm9tVGl0bGUoaHR0cFNlcnZl
ci5nZXQoKSwgdGl0bGUyKTsKKyAgICBsb2FkVXJsU3luYyh1cmwyKTsKKyAgICBBU1NFUlRfU1RS
RVEoZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSksIHRpdGxlMik7CisKKyAgICBXS0VpbmFT
aGFyZWRTdHJpbmcgdXJsMyA9IHVybEZyb21UaXRsZShodHRwU2VydmVyLmdldCgpLCB0aXRsZTMp
OworICAgIGxvYWRVcmxTeW5jKHVybDMpOworICAgIEFTU0VSVF9TVFJFUShld2tfdmlld190aXRs
ZV9nZXQod2ViVmlldygpKSwgdGl0bGUzKTsKKworICAgIC8vIEdvIGJhY2sgdG8gUGFnZTEuCisg
ICAgZXdrX3ZpZXdfYmFjayh3ZWJWaWV3KCkpOworICAgIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRv
KHRpdGxlMik7CisgICAgZXdrX3ZpZXdfYmFjayh3ZWJWaWV3KCkpOworICAgIHdhaXRVbnRpbFRp
dGxlQ2hhbmdlZFRvKHRpdGxlMSk7CisKKyAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGJhY2tG
b3J3YXJkTGlzdCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldCh3ZWJWaWV3KCkpOwor
ICAgIEFTU0VSVF9UUlVFKGJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICBFaW5hX0xpc3QqIGZvcndh
cmRMaXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X25fZm9yd2FyZF9pdGVtc19jb3B5KGJhY2tG
b3J3YXJkTGlzdCwgMSk7CisgICAgQVNTRVJUX1RSVUUoZm9yd2FyZExpc3QpOworICAgIEFTU0VS
VF9FUShlaW5hX2xpc3RfY291bnQoZm9yd2FyZExpc3QpLCAxKTsKKyAgICBjaGVja0l0ZW0oc3Rh
dGljX2Nhc3Q8RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qPihlaW5hX2xpc3RfbnRoKGZvcndh
cmRMaXN0LCAwKSksIHRpdGxlMiwgdXJsMiwgdXJsMik7CisgICAgZnJlZUVpbmFMaXN0KGZvcndh
cmRMaXN0KTsKKworICAgIC8vIENoZWNrICcwJyBsaW1pdC4KKyAgICBmb3J3YXJkTGlzdCA9IGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9uX2ZvcndhcmRfaXRlbXNfY29weShiYWNrRm9yd2FyZExpc3Qs
IDApOworICAgIEFTU0VSVF9GQUxTRShmb3J3YXJkTGlzdCk7CisKKyAgICBmb3J3YXJkTGlzdCA9
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uX2ZvcndhcmRfaXRlbXNfY29weShiYWNrRm9yd2FyZExp
c3QsIC0xKTsKKyAgICBBU1NFUlRfVFJVRShmb3J3YXJkTGlzdCk7CisgICAgQVNTRVJUX0VRKGVp
bmFfbGlzdF9jb3VudChmb3J3YXJkTGlzdCksIDIpOworICAgIGNoZWNrSXRlbShzdGF0aWNfY2Fz
dDxFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+KGVpbmFfbGlzdF9udGgoZm9yd2FyZExpc3Qs
IDApKSwgdGl0bGUyLCB1cmwyLCB1cmwyKTsKKyAgICBjaGVja0l0ZW0oc3RhdGljX2Nhc3Q8RXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qPihlaW5hX2xpc3RfbnRoKGZvcndhcmRMaXN0LCAxKSks
IHRpdGxlMywgdXJsMywgdXJsMyk7CisgICAgZnJlZUVpbmFMaXN0KGZvcndhcmRMaXN0KTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>