<?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>51587</bug_id>
          
          <creation_ts>2010-12-24 02:06:57 -0800</creation_ts>
          <short_desc>[GTK] Remove mandatory Enchant dependency</short_desc>
          <delta_ts>2011-02-21 02:05:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>420+</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="ManDay">manday</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>326521</commentid>
    <comment_count>0</comment_count>
    <who name="ManDay">manday</who>
    <bug_when>2010-12-24 02:06:57 -0800</bug_when>
    <thetext>Behaviour: Webkit-GTK unconditionally depends on enchant spellchecking.
Expected behaviour: Neither webkit nor webkit-GTK should unconditionally depend on a spellchecker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327134</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-27 16:01:03 -0800</bug_when>
    <thetext>ManDay: Can you explain a bit more why you need this? Xan &amp; Carlos: Thoughts on this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327210</commentid>
    <comment_count>2</comment_count>
    <who name="ManDay">manday</who>
    <bug_when>2010-12-28 02:54:41 -0800</bug_when>
    <thetext>I feel that imposing a spellchecker on a user is unasked for. Checking spelling is a distinct component that might be optionally looked for, but certainly not necessary. Many people, me being one of them, would like to forgo a spellchecker and remain a minimalistic setup. Imagine if bash unconditionally shipped with a spell-checker (for filenames). It might be a contrived example, yet I&apos;d find it equally inappropriate. Thanks for your understanding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327407</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-28 15:33:01 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I feel that imposing a spellchecker on a user is unasked for. Checking spelling is a distinct component that might be optionally looked for, but certainly not necessary. Many people, me being one of them, would like to forgo a spellchecker and remain a minimalistic setup. Imagine if bash unconditionally shipped with a spell-checker (for filenames). It might be a contrived example, yet I&apos;d find it equally inappropriate. Thanks for your understanding.

Keep in mind that it&apos;s up the application to decide whether or not to enable the spell checker. If you simply want to turn the spell checker off, I recommend filing a bug against the application embedding WebKitGTK+.

On the other hand, if there is an issue with the dependency itself, then perhaps we shouldn&apos;t close this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327516</commentid>
    <comment_count>4</comment_count>
    <who name="ManDay">manday</who>
    <bug_when>2010-12-29 01:35:09 -0800</bug_when>
    <thetext>It is my very point that the spell checker is an *optional* component. Thus my words, it should not be an enforced dependency.
A minimalistic setup, which I mentioned, for most people does not mean &quot;install everything and then disable it&quot; but rather &quot;install only what is necessecary&quot;. I&apos;m aware of the counter-argument that disk space is cheap these days and one should not care about what is installed, but I oppose to it, because it may only serve as an argument against an argument and eventually does not justify the actual point (the dependency).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327518</commentid>
    <comment_count>5</comment_count>
    <who name="ManDay">manday</who>
    <bug_when>2010-12-29 01:48:47 -0800</bug_when>
    <thetext>I&apos;d like to add something to prevent any possible misunderstanding: I&apos;m experiencing this issue on Gentoo-Linux and file it here because there is no USE-Flag (Gentoo install option) that would remove the dependency. I therefore assume that there is no configure-Option or even the possibility to forgo enchant. If this impression of mine is wrong and there has always been an adequate configure option to compile without enchant please take my apologies and consider this issue closed. I would then file a bug at Gentoo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337719</commentid>
    <comment_count>6</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-01-20 16:51:05 -0800</bug_when>
    <thetext>I have WebKitGTK+ without enchant because our linux platform doesn&apos;t support enchant library yet.

If possible, can we have an option to remove enchant dependency when compiling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337917</commentid>
    <comment_count>7</comment_count>
      <attachid>79706</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-01-21 00:17:48 -0800</bug_when>
    <thetext>Created attachment 79706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337918</commentid>
    <comment_count>8</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-01-21 00:19:03 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=79706) [details]
&gt; Patch

This is modified patch which we did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337925</commentid>
    <comment_count>9</comment_count>
      <attachid>79706</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-21 01:06:12 -0800</bug_when>
    <thetext>Comment on attachment 79706
Patch

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

Looks good, but I have a few style nits.

&gt; ChangeLog:9
&gt; +        Add enable-spell-checker option which decide whether to use spell
&gt; +        checker. If disabled, WebKit/GTK+ will not use enchant library.

Should be &quot;which decides&quot; and WebKitGTK+.

&gt; Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:32
&gt; +#if ENABLE(SPELL_CHECKER)
&gt;  #include &lt;enchant.h&gt;
&gt; +#endif

Please split this out of the main block of includes now that it has an #ifdef around it.

&gt; Source/WebKit/gtk/webkit/webkitwebsettings.cpp:39
&gt; +#if ENABLE(SPELL_CHECKER)
&gt;  #include &lt;enchant.h&gt;
&gt; +#endif

Ditto.

&gt; Source/WebKit/gtk/webkit/webkitwebsettings.cpp:1267
&gt; +        g_value_set_boolean(value, false);

You should use FALSE here explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338012</commentid>
    <comment_count>10</comment_count>
      <attachid>79725</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-01-21 05:08:14 -0800</bug_when>
    <thetext>Created attachment 79725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338013</commentid>
    <comment_count>11</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-01-21 05:13:44 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=79725) [details]
&gt; Patch

Thank you for your reviewing.

I applied what you mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338884</commentid>
    <comment_count>12</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-01-24 00:47:19 -0800</bug_when>
    <thetext>I&apos;ve commented with Martin that maybe we could try to avoid of the ifdefs adding a dummy spell checker, and separating the enchant code in a file and the dummy in other file. That way we could make the compile option --enable-enchant instead of removing the spell checking option. If it is disabled we would use the dummy implementation.

Spell checking is a webkit feature so I think it would be better that solution because it would be more consistent to always have the spell checking option that you can enable or disable, even if that is dummy. And we would avoid the enchant library compilation if we want. Does this make sense to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340043</commentid>
    <comment_count>13</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-01-25 17:32:45 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I&apos;ve commented with Martin that maybe we could try to avoid of the ifdefs adding a dummy spell checker, and separating the enchant code in a file and the dummy in other file. That way we could make the compile option --enable-enchant instead of removing the spell checking option. If it is disabled we would use the dummy implementation.
&gt; 
&gt; Spell checking is a webkit feature so I think it would be better that solution because it would be more consistent to always have the spell checking option that you can enable or disable, even if that is dummy. And we would avoid the enchant library compilation if we want. Does this make sense to you?

Yes, It looks better.
If then, how about SpellCheckerEnchant.cpp and SpellCheckerDummy.cpp?
I&apos;ll move some of functions in EditorClient into each files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340050</commentid>
    <comment_count>14</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-25 17:41:55 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; If then, how about SpellCheckerEnchant.cpp and SpellCheckerDummy.cpp?
&gt; I&apos;ll move some of functions in EditorClient into each files.

Sounds like a good plan, but why not just split out the implementations of the methods of EditorClient into three files:

EditorClient.cpp: for code that is shared
EditorClientEnchant.cpp: for the enchant versions of the spell check methods EditorClientNoSpellChecking.cpp:  (or something similar) for the empty implementation

Perhaps then webkitwebsettings.cpp could just call static methods of the EditorClient to update the spelling dictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340869</commentid>
    <comment_count>15</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-27 07:55:47 -0800</bug_when>
    <thetext>It looks like someone else has started splitting this functionality off into a separate client altogether here: https://bugs.webkit.org/show_bug.cgi?id=53213 If this lands it will simplify your patch greatly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340870</commentid>
    <comment_count>16</comment_count>
      <attachid>79725</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-27 07:56:18 -0800</bug_when>
    <thetext>Comment on attachment 79725
Patch

r- for now, because we hope to implement this differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351843</commentid>
    <comment_count>17</comment_count>
      <attachid>82579</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-02-15 20:02:51 -0800</bug_when>
    <thetext>Created attachment 82579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352101</commentid>
    <comment_count>18</comment_count>
      <attachid>82579</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-16 08:45:51 -0800</bug_when>
    <thetext>Comment on attachment 82579
Patch

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

Great stuff. This is much cleaner than the old approach.

&gt; configure.ac:296
&gt; +AC_MSG_CHECKING([whether to enable enchant support])
&gt; +AC_ARG_ENABLE([enchant],
&gt; +  [AS_HELP_STRING([--enable-enchant],[enable support for enchant])],
&gt; +  [],[enable_enchant=&quot;yes&quot;])
&gt; +AC_MSG_RESULT([$enable_enchant])
&gt; +
&gt; +if test &quot;$enable_enchant&quot; = &quot;yes&quot;; then
&gt; +PKG_CHECK_MODULES(ENCHANT, enchant &gt;= $ENCHANT_REQUIRED_VERSION, [], [enable_enchant=&quot;no&quot;])

Instead of --enable-enchant, I think this should be called --enable-spellcheck since we have no alternative at the moment.

&gt; Source/WebKit/gtk/WebCoreSupport/TextCheckerClientEnchant.cpp:77
&gt; +    PangoLanguage* language = pango_language_get_default();
&gt; +    PangoLogAttr* attrs = g_new(PangoLogAttr, utflen+1);

You could use a GOwnPtr for these.

&gt; Source/WebKit/gtk/webkit/webkitwebsettings.cpp:1054
&gt; +#if ENABLE(ENCHANT)
&gt; +        g_slist_foreach(priv-&gt;enchant_dicts, WebKit::TextCheckerClientEnchant::freeSpellCheckingLanguage, 0);
&gt;          g_slist_free(priv-&gt;enchant_dicts);
&gt; -        priv-&gt;enchant_dicts = spellDictionaries;
&gt; +        priv-&gt;enchant_dicts = WebKit::TextCheckerClientEnchant::updateSpellCheckingLanguage(priv-&gt;spell_checking_languages);
&gt; +#endif

Instead of having the WebKitWebView continue to hold the enchant_dicts property, it is should be a member of TextCheckerEnchant. Since different WebViews may have different enchant_dicts, the WebView should communicate with the instance of the TextChecker associated with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352561</commentid>
    <comment_count>19</comment_count>
      <attachid>82745</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-02-16 20:09:51 -0800</bug_when>
    <thetext>Created attachment 82745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352572</commentid>
    <comment_count>20</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-02-16 20:27:04 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 82579 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82579&amp;action=review
&gt; 
&gt; Great stuff. This is much cleaner than the old approach.
&gt; 
&gt; &gt; configure.ac:296
&gt; &gt; +AC_MSG_CHECKING([whether to enable enchant support])
&gt; &gt; +AC_ARG_ENABLE([enchant],
&gt; &gt; +  [AS_HELP_STRING([--enable-enchant],[enable support for enchant])],
&gt; &gt; +  [],[enable_enchant=&quot;yes&quot;])
&gt; &gt; +AC_MSG_RESULT([$enable_enchant])
&gt; &gt; +
&gt; &gt; +if test &quot;$enable_enchant&quot; = &quot;yes&quot;; then
&gt; &gt; +PKG_CHECK_MODULES(ENCHANT, enchant &gt;= $ENCHANT_REQUIRED_VERSION, [], [enable_enchant=&quot;no&quot;])
&gt; 
&gt; Instead of --enable-enchant, I think this should be called --enable-spellcheck since we have no alternative at the moment.
&gt; 
Done.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/TextCheckerClientEnchant.cpp:77
&gt; &gt; +    PangoLanguage* language = pango_language_get_default();
&gt; &gt; +    PangoLogAttr* attrs = g_new(PangoLogAttr, utflen+1);
&gt; 
&gt; You could use a GOwnPtr for these.
&gt; 
Done.

&gt; &gt; Source/WebKit/gtk/webkit/webkitwebsettings.cpp:1054
&gt; &gt; +#if ENABLE(ENCHANT)
&gt; &gt; +        g_slist_foreach(priv-&gt;enchant_dicts, WebKit::TextCheckerClientEnchant::freeSpellCheckingLanguage, 0);
&gt; &gt;          g_slist_free(priv-&gt;enchant_dicts);
&gt; &gt; -        priv-&gt;enchant_dicts = spellDictionaries;
&gt; &gt; +        priv-&gt;enchant_dicts = WebKit::TextCheckerClientEnchant::updateSpellCheckingLanguage(priv-&gt;spell_checking_languages);
&gt; &gt; +#endif
&gt; 
&gt; Instead of having the WebKitWebView continue to hold the enchant_dicts property, it is should be a member of TextCheckerEnchant. Since different WebViews may have different enchant_dicts, the WebView should communicate with the instance of the TextChecker associated with it.

Right, It looks quite better.
Please check that I did as you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354214</commentid>
    <comment_count>21</comment_count>
      <attachid>82745</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-19 13:06:20 -0800</bug_when>
    <thetext>Comment on attachment 82745
Patch

Clearing flags on attachment: 82745

Committed r79130: &lt;http://trac.webkit.org/changeset/79130&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354215</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-19 13:06:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354452</commentid>
    <comment_count>23</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-21 01:06:55 -0800</bug_when>
    <thetext>The commit broke a lot of spellchecking tests:

http://build.webkit.org/results/GTK%20Linux%2064-bit%20Debug/r79193%20(19546)/results.html

Did they work for you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354453</commentid>
    <comment_count>24</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-02-21 01:19:29 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; The commit broke a lot of spellchecking tests:
&gt; 
&gt; http://build.webkit.org/results/GTK%20Linux%2064-bit%20Debug/r79193%20(19546)/results.html
&gt; 
&gt; Did they work for you?

Oops, I will check any mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354464</commentid>
    <comment_count>25</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-21 01:52:56 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; The commit broke a lot of spellchecking tests:
&gt; &gt; 
&gt; &gt; http://build.webkit.org/results/GTK%20Linux%2064-bit%20Debug/r79193%20(19546)/results.html
&gt; &gt; 
&gt; &gt; Did they work for you?
&gt; 
&gt; Oops, I will check any mistake.

I found the issue, apparently the list of dictionaries is not correctly initialized. After fixing that I found there is also a crasher becase we are trying to free the default pango language. I&apos;m creating a bug and uploading a patch and add you to the CC.

I hope this helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354470</commentid>
    <comment_count>26</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-21 02:05:14 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt;
&gt; [...]
&gt;
&gt; I found the issue, apparently the list of dictionaries is not correctly initialized. After fixing that I found there is also a crasher becase we are trying to free the default pango language. I&apos;m creating a bug and uploading a patch and add you to the CC.
&gt; 

Added bug 54860</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79706</attachid>
            <date>2011-01-21 00:17:48 -0800</date>
            <delta_ts>2011-01-21 05:08:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51587-20110121171738.patch</filename>
            <type>text/plain</type>
            <size>11107</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDc2MzM0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEt
MjAgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFJlbW92ZSBtYW5kYXRvcnkg
RW5jaGFudCBkZXBlbmRlbmN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTU4NworCisgICAgICAgIEFkZCBlbmFibGUtc3BlbGwtY2hlY2tlciBvcHRp
b24gd2hpY2ggZGVjaWRlIHdoZXRoZXIgdG8gdXNlIHNwZWxsCisgICAgICAgIGNoZWNrZXIuIElm
IGRpc2FibGVkLCBXZWJLaXQvR1RLKyB3aWxsIG5vdCB1c2UgZW5jaGFudCBsaWJyYXJ5LgorCisg
ICAgICAgICogY29uZmlndXJlLmFjOgorCiAyMDExLTAxLTIwICBTaWRkaGFydGggTWF0aHVyICA8
c2lkZGhhcnRoLm1hdGh1ckBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxv
IEdvbWJvcy4KSW5kZXg6IGNvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJ
KHJldmlzaW9uIDc2MzM0KQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYs
OSArMjk2LDIwIEBAIFBLR19DSEVDS19NT0RVTEVTKFBBTkdPLCAKIEFDX1NVQlNUKFBBTkdPX0NG
TEFHUykKIEFDX1NVQlNUKFBBTkdPX0xJQlMpCiAKLVBLR19DSEVDS19NT0RVTEVTKEVOQ0hBTlQs
IGVuY2hhbnQgPj0gJEVOQ0hBTlRfUkVRVUlSRURfVkVSU0lPTikKK0FDX01TR19DSEVDS0lORyhb
d2hldGhlciB0byBlbmFibGUgc3BlbGwgY2hlY2tlciBzdXBwb3J0XSkKK0FDX0FSR19FTkFCTEUo
W3NwZWxsLWNoZWNrZXJdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNwZWxsLWNoZWNr
ZXJdLFtlbmFibGUgc3VwcG9ydCBmb3Igc3BlbGwgY2hlY2tlcl0pXSwKKyAgW10sW2VuYWJsZV9z
cGVsbF9jaGVja2VyPSJ5ZXMiXSkKK0FDX01TR19SRVNVTFQoWyRlbmFibGVfc3BlbGxfY2hlY2tl
cl0pCisKK2lmIHRlc3QgIiRlbmFibGVfc3BlbGxfY2hlY2tlciIgPSAieWVzIjsgdGhlbgorUEtH
X0NIRUNLX01PRFVMRVMoRU5DSEFOVCwgZW5jaGFudCA+PSAkRU5DSEFOVF9SRVFVSVJFRF9WRVJT
SU9OLCBbXSwgW2VuYWJsZV9zcGVsbF9jaGVja2VyPSJubyJdKQorICAgaWYgdGVzdCAiJGVuYWJs
ZV9zcGVsbF9jaGVja2VyIiA9ICJubyI7IHRoZW4KKyAgICAgIEFDX01TR19XQVJOKFtTcGVsbCBj
aGVja2VyIHdhcyBkaXNhYmxlZCBiZWNhdXNlIG9mIG1pc3NpbmcgZW5jaGFudF0pCisgICBmaQog
QUNfU1VCU1QoRU5DSEFOVF9DRkxBR1MpCiBBQ19TVUJTVChFTkNIQU5UX0xJQlMpCitmaQogCiBQ
S0dfQ0hFQ0tfTU9EVUxFUyhHQUlMLCAkR0FJTF9QQ19OQU1FID49ICRHQUlMX1JFUVVJUkVEX1ZF
UlNJT04pCiBBQ19TVUJTVChHQUlMX0NGTEFHUykKQEAgLTEwMDcsNiArMTAxOCw3IEBAIEFNX0NP
TkRJVElPTkFMKFtFTkFCTEVfV0VCX0FVRElPXSxbdGVzdCAKIEFNX0NPTkRJVElPTkFMKFtFTkFC
TEVfV0VCX1RJTUlOR10sW3Rlc3QgIiRlbmFibGVfd2ViX3RpbWluZyIgPSAieWVzIl0pCiBBTV9D
T05ESVRJT05BTChbRU5BQkxFX09QQ09ERV9TVEFUU10sW3Rlc3QgIiRlbmFibGVfb3Bjb2RlX3N0
YXRzIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfV0VCS0lUMl0sW3Rlc3QgIiRl
bmFibGVfd2Via2l0MiIgPSAieWVzIl0pCitBTV9DT05ESVRJT05BTChbRU5BQkxFX1NQRUxMX0NI
RUNLRVJdLFt0ZXN0ICIkZW5hYmxlX3NwZWxsX2NoZWNrZXIiID0gInllcyJdKQogCiAjIEd0ayBj
b25kaXRpb25hbHMKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfSU5UUk9TUEVDVElPTl0sW3Rlc3Qg
IiRlbmFibGVfaW50cm9zcGVjdGlvbiIgPSAieWVzIl0pCkBAIC0xMDkwLDYgKzExMDIsNyBAQCBG
ZWF0dXJlczoKICBYSFRNTC1NUCBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6ICRlbmFibGVfeGh0bWxtcAogIFhQQVRIIHN1cHBvcnQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV94cGF0aAogIFhTTFQgc3Vw
cG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJs
ZV94c2x0CisgU3BlbGwgY2hlY2tlciBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAkZW5hYmxlX3NwZWxsX2NoZWNrZXIKIAogR1RLKyBjb25maWd1cmF0aW9uOgog
IEdUSysgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogJHdpdGhfZ3RrCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NjMzNCkKKysrIFNv
dXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDExLTAxLTIwICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBSZW1vdmUg
bWFuZGF0b3J5IEVuY2hhbnQgZGVwZW5kZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE1ODcKKworICAgICAgICBBZGQgU1BFTExfQ0hFQ0tFUiBt
YWNyby4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNT
cGVsbENoZWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjppZ25vcmVXb3Jk
SW5TcGVsbERvY3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpsZWFybldv
cmQpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX3NldHRpbmdzX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0
X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X3Byb3BlcnR5KToK
KyAgICAgICAgKHdlYmtpdF93ZWJfc2V0dGluZ3NfY29weSk6CisKIDIwMTEtMDEtMTkgIEpvb25l
IEh1ciAgPGpvb25lLmh1ckBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gNzYzMzQpCisrKyBTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw3ICsyNyw5IEBACiAjaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgogI2luY2x1
ZGUgIkVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCisjaWYgRU5BQkxFKFNQRUxM
X0NIRUNLRVIpCiAjaW5jbHVkZSA8ZW5jaGFudC5oPgorI2VuZGlmCiAjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CkBAIC0yODUsMTIgKzI4NywxNiBAQCBib29sIEVkaXRvckNsaWVudDo6c2hvdWxkU2hvd0RlbGV0
ZUludGVyCiAKIGJvb2wgRWRpdG9yQ2xpZW50Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpCiB7CisjaWYgRU5BQkxFKFNQRUxMX0NIRUNLRVIpCiAgICAgV2ViS2l0V2ViU2V0dGlu
Z3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpOwog
CiAgICAgZ2Jvb2xlYW4gZW5hYmxlZDsKICAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJlbmFi
bGUtc3BlbGwtY2hlY2tpbmciLCAmZW5hYmxlZCwgTlVMTCk7CiAKICAgICByZXR1cm4gZW5hYmxl
ZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIGJvb2wgRWRpdG9yQ2xp
ZW50Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQpAQCAtNTY4LDEyICs1NzQsMTQgQEAgYm9v
bCBFZGl0b3JDbGllbnQ6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZQogCiB2b2lkIEVkaXRvckNsaWVu
dDo6dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKQogeworI2lmIEVOQUJMRShTUEVMTF9D
SEVDS0VSKQogICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KTsKIAogICAgIGdib29sZWFuIGVuYWJsZWQ7CiAgICAg
Z19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZW5hYmxlLXNwZWxsLWNoZWNraW5nIiwgJmVuYWJsZWQs
IE5VTEwpOwogCiAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXNwZWxsLWNoZWNr
aW5nIiwgIWVuYWJsZWQsIE5VTEwpOworI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50Ojp0
b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQpAQCAtODg5LDYgKzg5Nyw3IEBAIHZvaWQgRWRpdG9yQ2xp
ZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXIKIAogdm9pZCBFZGl0b3JDbGllbnQ6Omlnbm9yZVdv
cmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0KQogeworI2lmIEVOQUJMRShTUEVM
TF9DSEVDS0VSKQogICAgIEdTTGlzdCogZGljdHMgPSB3ZWJraXRXZWJWaWV3R2V0RW5jaGFudERp
Y3RzKG1fd2ViVmlldyk7CiAKICAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQp
IHsKQEAgLTg5NiwxMCArOTA1LDEyIEBAIHZvaWQgRWRpdG9yQ2xpZW50OjppZ25vcmVXb3JkSW5T
cGVsbERvY3UKIAogICAgICAgICBlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb24oZGljdCwgdGV4
dC51dGY4KCkuZGF0YSgpLCAtMSk7CiAgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yQ2xp
ZW50OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB0ZXh0KQogeworI2lmIEVOQUJMRShTUEVMTF9D
SEVDS0VSKQogICAgIEdTTGlzdCogZGljdHMgPSB3ZWJraXRXZWJWaWV3R2V0RW5jaGFudERpY3Rz
KG1fd2ViVmlldyk7CiAKICAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsK
QEAgLTkwNywxMCArOTE4LDEyIEBAIHZvaWQgRWRpdG9yQ2xpZW50OjpsZWFybldvcmQoY29uc3Qg
U3RyaW4KIAogICAgICAgICBlbmNoYW50X2RpY3RfYWRkX3RvX3BlcnNvbmFsKGRpY3QsIHRleHQu
dXRmOCgpLmRhdGEoKSwgLTEpOwogICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIEVkaXRvckNsaWVu
dDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBp
bnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCiB7CisjaWYg
RU5BQkxFKFNQRUxMX0NIRUNLRVIpCiAgICAgR1NMaXN0KiBkaWN0cyA9IHdlYmtpdFdlYlZpZXdH
ZXRFbmNoYW50RGljdHMobV93ZWJWaWV3KTsKICAgICBpZiAoIWRpY3RzKQogICAgICAgICByZXR1
cm47CkBAIC05NjcsNiArOTgwLDcgQEAgdm9pZCBFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZwogCiAgICAgZ19mcmVlKGF0dHJzKTsKICAgICBnX2ZyZWUoY3RleHQpOworI2VuZGlm
CiB9CiAKIFN0cmluZyBFZGl0b3JDbGllbnQ6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgaW5wdXRXb3JkKQpAQCAtMTAwNCw2ICsxMDE4LDcg
QEAgYm9vbCBFZGl0b3JDbGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogCiB2b2lkIEVkaXRv
ckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJp
bmcmIGNvbnRleHQsIFdURjo6VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7CisjaWYgRU5BQkxF
KFNQRUxMX0NIRUNLRVIpCiAgICAgR1NMaXN0KiBkaWN0cyA9IHdlYmtpdFdlYlZpZXdHZXRFbmNo
YW50RGljdHMobV93ZWJWaWV3KTsKICAgICBndWVzc2VzLmNsZWFyKCk7CiAKQEAgLTEwMjAsNiAr
MTAzNSw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb24KICAgICAg
ICAgaWYgKG51bWJlck9mU3VnZ2VzdGlvbnMgPiAwKQogICAgICAgICAgICAgZW5jaGFudF9kaWN0
X2ZyZWVfc3VnZ2VzdGlvbnMoZGljdCwgc3VnZ2VzdGlvbnMpOwogICAgIH0KKyNlbmRpZgogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5n
cy5jcHAJKHJldmlzaW9uIDc2MzM0KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1
ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0dmVyc2lvbi5oIgog
I2luY2x1ZGUgIndlYmtpdHdlYnNldHRpbmdzcHJpdmF0ZS5oIgorI2lmIEVOQUJMRShTUEVMTF9D
SEVDS0VSKQogI2luY2x1ZGUgPGVuY2hhbnQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogI2lu
Y2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CkBAIC04OCw4ICs5MCwxMCBAQCBzdHJ1Y3QgX1dlYktp
dFdlYlNldHRpbmdzUHJpdmF0ZSB7CiAgICAgZ2Zsb2F0IHpvb21fc3RlcDsKICAgICBnYm9vbGVh
biBlbmFibGVfZGV2ZWxvcGVyX2V4dHJhczsKICAgICBnYm9vbGVhbiBlbmFibGVfcHJpdmF0ZV9i
cm93c2luZzsKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tFUikKICAgICBnYm9vbGVhbiBlbmFibGVf
c3BlbGxfY2hlY2tpbmc7CiAgICAgZ2NoYXIqIHNwZWxsX2NoZWNraW5nX2xhbmd1YWdlczsKKyNl
bmRpZgogICAgIEdTTGlzdCogZW5jaGFudF9kaWN0czsKICAgICBnYm9vbGVhbiBlbmFibGVfY2Fy
ZXRfYnJvd3Npbmc7CiAgICAgZ2Jvb2xlYW4gZW5hYmxlX2h0bWw1X2RhdGFiYXNlOwpAQCAtOTIz
LDYgKzkyNyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3NfaW5pdChXZWIKICAg
ICB3ZWJfc2V0dGluZ3MtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUod2ViX3Nl
dHRpbmdzLCBXRUJLSVRfVFlQRV9XRUJfU0VUVElOR1MsIFdlYktpdFdlYlNldHRpbmdzUHJpdmF0
ZSk7CiB9CiAKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tFUikKIHN0YXRpYyBFbmNoYW50QnJva2Vy
KiBnZXRfZW5jaGFudF9icm9rZXIoKQogewogICAgIHN0YXRpYyBFbmNoYW50QnJva2VyKiBicm9r
ZXIgPSAwOwpAQCAtOTM5LDYgKzk0NCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2UKIAogICAgIGVuY2hhbnRfYnJva2VyX2ZyZWVfZGljdChicm9rZXIsIGRpY3Qp
OwogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3NfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQogewpAQCAtOTUzLDEwICs5NTksMTIgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl9zZXR0aW5nc19maW5hbGl6ZQogICAgIGdfZnJlZShwcml2LT5zYW5zX3NlcmlmX2Zv
bnRfZmFtaWx5KTsKICAgICBnX2ZyZWUocHJpdi0+c2VyaWZfZm9udF9mYW1pbHkpOwogICAgIGdf
ZnJlZShwcml2LT51c2VyX3N0eWxlc2hlZXRfdXJpKTsKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tF
UikKICAgICBnX2ZyZWUocHJpdi0+c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKTsKIAogICAgIGdf
c2xpc3RfZm9yZWFjaChwcml2LT5lbmNoYW50X2RpY3RzLCBmcmVlX3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlLCAwKTsKICAgICBnX3NsaXN0X2ZyZWUocHJpdi0+ZW5jaGFudF9kaWN0cyk7CisjZW5k
aWYKIAogICAgIGdfZnJlZShwcml2LT51c2VyX2FnZW50KTsKIApAQCAtOTc0LDkgKzk4MiwxMSBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9wcm9wCiB7CiAgICAgV2ViS2l0
V2ViU2V0dGluZ3MqIHdlYl9zZXR0aW5ncyA9IFdFQktJVF9XRUJfU0VUVElOR1Mob2JqZWN0KTsK
ICAgICBXZWJLaXRXZWJTZXR0aW5nc1ByaXZhdGUqIHByaXYgPSB3ZWJfc2V0dGluZ3MtPnByaXY7
CisjaWYgRU5BQkxFKFNQRUxMX0NIRUNLRVIpCiAgICAgRW5jaGFudEJyb2tlciogYnJva2VyOwog
ICAgIEVuY2hhbnREaWN0KiBkaWN0OwogICAgIEdTTGlzdCogc3BlbGxEaWN0aW9uYXJpZXMgPSAw
OworI2VuZGlmCiAKICAgICBzd2l0Y2gocHJvcF9pZCkgewogICAgIGNhc2UgUFJPUF9ERUZBVUxU
X0VOQ09ESU5HOgpAQCAtMTA2Myw5ICsxMDczLDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
c2V0dGluZ3Nfc2V0X3Byb3AKICAgICAgICAgcHJpdi0+ZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3Jh
Z2UgPSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBQUk9QX0VOQUJMRV9TUEVMTF9DSEVDS0lORzoKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tFUikK
ICAgICAgICAgcHJpdi0+ZW5hYmxlX3NwZWxsX2NoZWNraW5nID0gZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX1NQRUxMX0NI
RUNLSU5HX0xBTkdVQUdFUzoKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tFUikKICAgICAgICAgZ19m
cmVlKHByaXYtPnNwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyk7CiAgICAgICAgIHByaXYtPnNwZWxs
X2NoZWNraW5nX2xhbmd1YWdlcyA9IGdfc3RyZHVwKGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OwogCkBAIC0xMDk3LDYgKzExMTAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdz
X3NldF9wcm9wCiAgICAgICAgIGdfc2xpc3RfZm9yZWFjaChwcml2LT5lbmNoYW50X2RpY3RzLCBm
cmVlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlLCAwKTsKICAgICAgICAgZ19zbGlzdF9mcmVlKHBy
aXYtPmVuY2hhbnRfZGljdHMpOwogICAgICAgICBwcml2LT5lbmNoYW50X2RpY3RzID0gc3BlbGxE
aWN0aW9uYXJpZXM7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0VOQUJM
RV9YU1NfQVVESVRPUjoKICAgICAgICAgcHJpdi0+ZW5hYmxlX3hzc19hdWRpdG9yID0gZ192YWx1
ZV9nZXRfYm9vbGVhbih2YWx1ZSk7CkBAIC0xMjQ3LDEwICsxMjYxLDE4IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X3Byb3AKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgcHJpdi0+ZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2UpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFBST1BfRU5BQkxFX1NQRUxMX0NIRUNLSU5HOgorI2lmIEVOQUJMRShTUEVM
TF9DSEVDS0VSKQogICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5lbmFi
bGVfc3BlbGxfY2hlY2tpbmcpOworI2Vsc2UKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgZmFsc2UpOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9TUEVM
TF9DSEVDS0lOR19MQU5HVUFHRVM6CisjaWYgRU5BQkxFKFNQRUxMX0NIRUNLRVIpCiAgICAgICAg
IGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
KTsKKyNlbHNlCisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgIiIpOworI2VuZGlm
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9FTkFCTEVfWFNTX0FVRElUT1I6CiAgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPmVuYWJsZV94c3NfYXVkaXRvcik7
CkBAIC0xMzYxLDggKzEzODMsMTAgQEAgV2ViS2l0V2ViU2V0dGluZ3MqIHdlYmtpdF93ZWJfc2V0
dGluZ3NfYwogICAgICAgICAgICAgICAgICAiem9vbS1zdGVwIiwgcHJpdi0+em9vbV9zdGVwLAog
ICAgICAgICAgICAgICAgICAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMiLCBwcml2LT5lbmFibGVf
ZGV2ZWxvcGVyX2V4dHJhcywKICAgICAgICAgICAgICAgICAgImVuYWJsZS1wcml2YXRlLWJyb3dz
aW5nIiwgcHJpdi0+ZW5hYmxlX3ByaXZhdGVfYnJvd3NpbmcsCisjaWYgRU5BQkxFKFNQRUxMX0NI
RUNLRVIpCiAgICAgICAgICAgICAgICAgICJlbmFibGUtc3BlbGwtY2hlY2tpbmciLCBwcml2LT5l
bmFibGVfc3BlbGxfY2hlY2tpbmcsCiAgICAgICAgICAgICAgICAgICJzcGVsbC1jaGVja2luZy1s
YW5ndWFnZXMiLCBwcml2LT5zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMsCisjZW5kaWYKICAgICAg
ICAgICAgICAgICAgImVuYWJsZS1jYXJldC1icm93c2luZyIsIHByaXYtPmVuYWJsZV9jYXJldF9i
cm93c2luZywKICAgICAgICAgICAgICAgICAgImVuYWJsZS1odG1sNS1kYXRhYmFzZSIsIHByaXYt
PmVuYWJsZV9odG1sNV9kYXRhYmFzZSwKICAgICAgICAgICAgICAgICAgImVuYWJsZS1odG1sNS1s
b2NhbC1zdG9yYWdlIiwgcHJpdi0+ZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2UsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79725</attachid>
            <date>2011-01-21 05:08:14 -0800</date>
            <delta_ts>2011-02-15 20:02:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51587-20110121220811.patch</filename>
            <type>text/plain</type>
            <size>11603</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDc2MzQ0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEt
MjEgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFJlbW92ZSBtYW5kYXRvcnkg
RW5jaGFudCBkZXBlbmRlbmN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTU4NworCisgICAgICAgIEFkZCBlbmFibGUtc3BlbGwtY2hlY2tlciBvcHRp
b24gd2hpY2ggZGVjaWRlcyB3aGV0aGVyIHRvIHVzZSBzcGVsbAorICAgICAgICBjaGVja2VyLiBJ
ZiBkaXNhYmxlZCwgV2ViS2l0R1RLKyB3aWxsIG5vdCB1c2UgZW5jaGFudCBsaWJyYXJ5LgorCisg
ICAgICAgICogY29uZmlndXJlLmFjOgorCiAyMDExLTAxLTIwICBTaWRkaGFydGggTWF0aHVyICA8
c2lkZGhhcnRoLm1hdGh1ckBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxv
IEdvbWJvcy4KSW5kZXg6IGNvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJ
KHJldmlzaW9uIDc2MzQwKQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYs
OSArMjk2LDIwIEBAIFBLR19DSEVDS19NT0RVTEVTKFBBTkdPLAogQUNfU1VCU1QoUEFOR09fQ0ZM
QUdTKQogQUNfU1VCU1QoUEFOR09fTElCUykKIAotUEtHX0NIRUNLX01PRFVMRVMoRU5DSEFOVCwg
ZW5jaGFudCA+PSAkRU5DSEFOVF9SRVFVSVJFRF9WRVJTSU9OKQorQUNfTVNHX0NIRUNLSU5HKFt3
aGV0aGVyIHRvIGVuYWJsZSBzcGVsbCBjaGVja2VyIHN1cHBvcnRdKQorQUNfQVJHX0VOQUJMRShb
c3BlbGwtY2hlY2tlcl0sCisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3BlbGwtY2hlY2tl
cl0sW2VuYWJsZSBzdXBwb3J0IGZvciBzcGVsbCBjaGVja2VyXSldLAorICBbXSxbZW5hYmxlX3Nw
ZWxsX2NoZWNrZXI9InllcyJdKQorQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zcGVsbF9jaGVja2Vy
XSkKKworaWYgdGVzdCAiJGVuYWJsZV9zcGVsbF9jaGVja2VyIiA9ICJ5ZXMiOyB0aGVuCitQS0df
Q0hFQ0tfTU9EVUxFUyhFTkNIQU5ULCBlbmNoYW50ID49ICRFTkNIQU5UX1JFUVVJUkVEX1ZFUlNJ
T04sIFtdLCBbZW5hYmxlX3NwZWxsX2NoZWNrZXI9Im5vIl0pCisgICBpZiB0ZXN0ICIkZW5hYmxl
X3NwZWxsX2NoZWNrZXIiID0gIm5vIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW1NwZWxsIGNo
ZWNrZXIgd2FzIGRpc2FibGVkIGJlY2F1c2Ugb2YgbWlzc2luZyBlbmNoYW50XSkKKyAgIGZpCiBB
Q19TVUJTVChFTkNIQU5UX0NGTEFHUykKIEFDX1NVQlNUKEVOQ0hBTlRfTElCUykKK2ZpCiAKIFBL
R19DSEVDS19NT0RVTEVTKEdBSUwsICRHQUlMX1BDX05BTUUgPj0gJEdBSUxfUkVRVUlSRURfVkVS
U0lPTikKIEFDX1NVQlNUKEdBSUxfQ0ZMQUdTKQpAQCAtMTAwNyw2ICsxMDE4LDcgQEAgQU1fQ09O
RElUSU9OQUwoW0VOQUJMRV9XRUJfQVVESU9dLFt0ZXN0CiBBTV9DT05ESVRJT05BTChbRU5BQkxF
X1dFQl9USU1JTkddLFt0ZXN0ICIkZW5hYmxlX3dlYl90aW1pbmciID0gInllcyJdKQogQU1fQ09O
RElUSU9OQUwoW0VOQUJMRV9PUENPREVfU1RBVFNdLFt0ZXN0ICIkZW5hYmxlX29wY29kZV9zdGF0
cyIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX1dFQktJVDJdLFt0ZXN0ICIkZW5h
YmxlX3dlYmtpdDIiID0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9TUEVMTF9DSEVD
S0VSXSxbdGVzdCAiJGVuYWJsZV9zcGVsbF9jaGVja2VyIiA9ICJ5ZXMiXSkKIAogIyBHdGsgY29u
ZGl0aW9uYWxzCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX0lOVFJPU1BFQ1RJT05dLFt0ZXN0ICIk
ZW5hYmxlX2ludHJvc3BlY3Rpb24iID0gInllcyJdKQpAQCAtMTA5MCw2ICsxMTAyLDcgQEAgRmVh
dHVyZXM6CiAgWEhUTUwtTVAgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAkZW5hYmxlX3hodG1sbXAKICBYUEFUSCBzdXBwb3J0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfeHBhdGgKICBYU0xUIHN1cHBv
cnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVf
eHNsdAorIFNwZWxsIGNoZWNrZXIgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogJGVuYWJsZV9zcGVsbF9jaGVja2VyCiAKIEdUSysgY29uZmlndXJhdGlvbjoKICBH
VEsrIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
ICR3aXRoX2d0awpJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNzYzNDQpCisrKyBTb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAor
MjAxMS0wMS0yMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gUmVtb3ZlIG1h
bmRhdG9yeSBFbmNoYW50IGRlcGVuZGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUxNTg3CisKKyAgICAgICAgQWRkIFNQRUxMX0NIRUNLRVIgbWFj
cm8uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0b2dnbGVDb250aW51b3VzU3Bl
bGxDaGVja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aWdub3JlV29yZElu
U3BlbGxEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6bGVhcm5Xb3Jk
KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcp
OgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAg
ICAgICAgKiB3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwOgorICAgICAgICAod2Via2l0X3dl
Yl9zZXR0aW5nc19maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9w
cm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfd2ViX3NldHRpbmdzX2dldF9wcm9wZXJ0eSk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3NldHRpbmdzX2NvcHkpOgorCiAyMDExLTAxLTE5ICBKb29uZSBI
dXIgIDxqb29uZS5odXJAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFu
ZHJlYXMgS2xpbmcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDc2MzQwKQorKysgU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKICNpbmNsdWRl
ICJFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgPGVuY2hhbnQu
aD4KICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTUwLDYgKzQ5LDEwIEBACiAjaW5jbHVkZSAid2Via2l0
d2Vidmlld3ByaXZhdGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBF
TkFCTEUoU1BFTExfQ0hFQ0tFUikKKyNpbmNsdWRlIDxlbmNoYW50Lmg+CisjZW5kaWYKKwogLy8g
QXJiaXRyYXJ5IGRlcHRoIGxpbWl0IGZvciB0aGUgdW5kbyBzdGFjaywgdG8ga2VlcCBpdCBmcm9t
IHVzaW5nCiAvLyB1bmJvdW5kZWQgbWVtb3J5LiAgVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIg
b2YgZGlzdGluY3QgdW5kb2FibGUKIC8vIGFjdGlvbnMgLS0gdW5icm9rZW4gc3RyZXRjaGVzIG9m
IHR5cGVkIGNoYXJhY3RlcnMgYXJlIGNvYWxlc2NlZApAQCAtMjg1LDEyICsyODgsMTYgQEAgYm9v
bCBFZGl0b3JDbGllbnQ6OnNob3VsZFNob3dEZWxldGVJbnRlcgogCiBib29sIEVkaXRvckNsaWVu
dDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQogeworI2lmIEVOQUJMRShTUEVM
TF9DSEVDS0VSKQogICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KTsKIAogICAgIGdib29sZWFuIGVuYWJsZWQ7CiAg
ICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZW5hYmxlLXNwZWxsLWNoZWNraW5nIiwgJmVuYWJs
ZWQsIE5VTEwpOwogCiAgICAgcmV0dXJuIGVuYWJsZWQ7CisjZWxzZQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgogfQogCiBib29sIEVkaXRvckNsaWVudDo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCkKQEAgLTU2OCwxMiArNTc1LDE0IEBAIGJvb2wgRWRpdG9yQ2xpZW50Ojppc1NlbGVjdFRy
YWlsaW5nV2hpdGUKIAogdm9pZCBFZGl0b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nKCkKIHsKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tFUikKICAgICBXZWJLaXRXZWJTZXR0
aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyk7
CiAKICAgICBnYm9vbGVhbiBlbmFibGVkOwogICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImVu
YWJsZS1zcGVsbC1jaGVja2luZyIsICZlbmFibGVkLCBOVUxMKTsKIAogICAgIGdfb2JqZWN0X3Nl
dChzZXR0aW5ncywgImVuYWJsZS1zcGVsbC1jaGVja2luZyIsICFlbmFibGVkLCBOVUxMKTsKKyNl
bmRpZgogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKQEAg
LTg4OSw2ICs4OTgsNyBAQCB2b2lkIEVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFy
CiAKIHZvaWQgRWRpdG9yQ2xpZW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tFUikKICAgICBHU0xpc3QqIGRp
Y3RzID0gd2Via2l0V2ViVmlld0dldEVuY2hhbnREaWN0cyhtX3dlYlZpZXcpOwogCiAgICAgZm9y
ICg7IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0KSB7CkBAIC04OTYsMTAgKzkwNiwxMiBAQCB2
b2lkIEVkaXRvckNsaWVudDo6aWdub3JlV29yZEluU3BlbGxEb2N1CiAKICAgICAgICAgZW5jaGFu
dF9kaWN0X2FkZF90b19zZXNzaW9uKGRpY3QsIHRleHQudXRmOCgpLmRhdGEoKSwgLTEpOwogICAg
IH0KKyNlbmRpZgogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6bGVhcm5Xb3JkKGNvbnN0IFN0cmlu
ZyYgdGV4dCkKIHsKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tFUikKICAgICBHU0xpc3QqIGRpY3Rz
ID0gd2Via2l0V2ViVmlld0dldEVuY2hhbnREaWN0cyhtX3dlYlZpZXcpOwogCiAgICAgZm9yICg7
IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0KSB7CkBAIC05MDcsMTAgKzkxOSwxMiBAQCB2b2lk
IEVkaXRvckNsaWVudDo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluCiAKICAgICAgICAgZW5jaGFudF9k
aWN0X2FkZF90b19wZXJzb25hbChkaWN0LCB0ZXh0LnV0ZjgoKS5kYXRhKCksIC0xKTsKICAgICB9
CisjZW5kaWYKIH0KIAogdm9pZCBFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhj
b25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQqIG1pc3NwZWxsaW5nTGVuZ3RoKQogeworI2lmIEVOQUJMRShTUEVMTF9DSEVDS0VSKQogICAg
IEdTTGlzdCogZGljdHMgPSB3ZWJraXRXZWJWaWV3R2V0RW5jaGFudERpY3RzKG1fd2ViVmlldyk7
CiAgICAgaWYgKCFkaWN0cykKICAgICAgICAgcmV0dXJuOwpAQCAtOTY3LDYgKzk4MSw3IEBAIHZv
aWQgRWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcKIAogICAgIGdfZnJlZShhdHRy
cyk7CiAgICAgZ19mcmVlKGN0ZXh0KTsKKyNlbmRpZgogfQogCiBTdHJpbmcgRWRpdG9yQ2xpZW50
OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
IGlucHV0V29yZCkKQEAgLTEwMDQsNiArMTAxOSw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50OjpzcGVs
bGluZ1VJSXNTaG93aW5nKCkKIAogdm9pZCBFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxT
dHJpbmc+JiBndWVzc2VzKQogeworI2lmIEVOQUJMRShTUEVMTF9DSEVDS0VSKQogICAgIEdTTGlz
dCogZGljdHMgPSB3ZWJraXRXZWJWaWV3R2V0RW5jaGFudERpY3RzKG1fd2ViVmlldyk7CiAgICAg
Z3Vlc3Nlcy5jbGVhcigpOwogCkBAIC0xMDIwLDYgKzEwMzYsNyBAQCB2b2lkIEVkaXRvckNsaWVu
dDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uCiAgICAgICAgIGlmIChudW1iZXJPZlN1Z2dlc3Rpb25z
ID4gMCkKICAgICAgICAgICAgIGVuY2hhbnRfZGljdF9mcmVlX3N1Z2dlc3Rpb25zKGRpY3QsIHN1
Z2dlc3Rpb25zKTsKICAgICB9CisjZW5kaWYKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA3NjM0MCkKKysr
IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5o
IgogI2luY2x1ZGUgIndlYmtpdHZlcnNpb24uaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJzZXR0aW5n
c3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxlbmNoYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAjaW5jbHVk
ZSA8Z2xpYi9naTE4bi1saWIuaD4KQEAgLTQzLDYgKzQyLDEwIEBACiAjaW5jbHVkZSA8c3lzL3V0
c25hbWUuaD4KICNlbmRpZgogCisjaWYgRU5BQkxFKFNQRUxMX0NIRUNLRVIpCisjaW5jbHVkZSA8
ZW5jaGFudC5oPgorI2VuZGlmCisKIC8qKgogICogU0VDVElPTjp3ZWJraXR3ZWJzZXR0aW5ncwog
ICogQHNob3J0X2Rlc2NyaXB0aW9uOiBDb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgYSAjV2ViS2l0
V2ViVmlldwpAQCAtODgsOCArOTEsMTAgQEAgc3RydWN0IF9XZWJLaXRXZWJTZXR0aW5nc1ByaXZh
dGUgewogICAgIGdmbG9hdCB6b29tX3N0ZXA7CiAgICAgZ2Jvb2xlYW4gZW5hYmxlX2RldmVsb3Bl
cl9leHRyYXM7CiAgICAgZ2Jvb2xlYW4gZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmc7CisjaWYgRU5B
QkxFKFNQRUxMX0NIRUNLRVIpCiAgICAgZ2Jvb2xlYW4gZW5hYmxlX3NwZWxsX2NoZWNraW5nOwog
ICAgIGdjaGFyKiBzcGVsbF9jaGVja2luZ19sYW5ndWFnZXM7CisjZW5kaWYKICAgICBHU0xpc3Qq
IGVuY2hhbnRfZGljdHM7CiAgICAgZ2Jvb2xlYW4gZW5hYmxlX2NhcmV0X2Jyb3dzaW5nOwogICAg
IGdib29sZWFuIGVuYWJsZV9odG1sNV9kYXRhYmFzZTsKQEAgLTkyMyw2ICs5MjgsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX2luaXQoV2ViCiAgICAgd2ViX3NldHRpbmdzLT5w
cml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHdlYl9zZXR0aW5ncywgV0VCS0lUX1RZ
UEVfV0VCX1NFVFRJTkdTLCBXZWJLaXRXZWJTZXR0aW5nc1ByaXZhdGUpOwogfQogCisjaWYgRU5B
QkxFKFNQRUxMX0NIRUNLRVIpCiBzdGF0aWMgRW5jaGFudEJyb2tlciogZ2V0X2VuY2hhbnRfYnJv
a2VyKCkKIHsKICAgICBzdGF0aWMgRW5jaGFudEJyb2tlciogYnJva2VyID0gMDsKQEAgLTkzOSw2
ICs5NDUsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlCiAKICAg
ICBlbmNoYW50X2Jyb2tlcl9mcmVlX2RpY3QoYnJva2VyLCBkaWN0KTsKIH0KKyNlbmRpZgogCiBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
IHsKQEAgLTk1MywxMCArOTYwLDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3Nf
ZmluYWxpemUKICAgICBnX2ZyZWUocHJpdi0+c2Fuc19zZXJpZl9mb250X2ZhbWlseSk7CiAgICAg
Z19mcmVlKHByaXYtPnNlcmlmX2ZvbnRfZmFtaWx5KTsKICAgICBnX2ZyZWUocHJpdi0+dXNlcl9z
dHlsZXNoZWV0X3VyaSk7CisjaWYgRU5BQkxFKFNQRUxMX0NIRUNLRVIpCiAgICAgZ19mcmVlKHBy
aXYtPnNwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyk7CiAKICAgICBnX3NsaXN0X2ZvcmVhY2gocHJp
di0+ZW5jaGFudF9kaWN0cywgZnJlZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZSwgMCk7CiAgICAg
Z19zbGlzdF9mcmVlKHByaXYtPmVuY2hhbnRfZGljdHMpOworI2VuZGlmCiAKICAgICBnX2ZyZWUo
cHJpdi0+dXNlcl9hZ2VudCk7CiAKQEAgLTk3NCw5ICs5ODMsMTEgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl9zZXR0aW5nc19zZXRfcHJvcAogewogICAgIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJf
c2V0dGluZ3MgPSBXRUJLSVRfV0VCX1NFVFRJTkdTKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViU2V0
dGluZ3NQcml2YXRlKiBwcml2ID0gd2ViX3NldHRpbmdzLT5wcml2OworI2lmIEVOQUJMRShTUEVM
TF9DSEVDS0VSKQogICAgIEVuY2hhbnRCcm9rZXIqIGJyb2tlcjsKICAgICBFbmNoYW50RGljdCog
ZGljdDsKICAgICBHU0xpc3QqIHNwZWxsRGljdGlvbmFyaWVzID0gMDsKKyNlbmRpZgogCiAgICAg
c3dpdGNoKHByb3BfaWQpIHsKICAgICBjYXNlIFBST1BfREVGQVVMVF9FTkNPRElORzoKQEAgLTEw
NjMsOSArMTA3NCwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9wcm9w
CiAgICAgICAgIHByaXYtPmVuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlID0gZ192YWx1ZV9nZXRf
Ym9vbGVhbih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9FTkFCTEVfU1BF
TExfQ0hFQ0tJTkc6CisjaWYgRU5BQkxFKFNQRUxMX0NIRUNLRVIpCiAgICAgICAgIHByaXYtPmVu
YWJsZV9zcGVsbF9jaGVja2luZyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOworI2VuZGlm
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9TUEVMTF9DSEVDS0lOR19MQU5HVUFHRVM6
CisjaWYgRU5BQkxFKFNQRUxMX0NIRUNLRVIpCiAgICAgICAgIGdfZnJlZShwcml2LT5zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMpOwogICAgICAgICBwcml2LT5zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXMgPSBnX3N0cmR1cChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKIApAQCAtMTA5Nyw2ICsx
MTExLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19zZXRfcHJvcAogICAgICAg
ICBnX3NsaXN0X2ZvcmVhY2gocHJpdi0+ZW5jaGFudF9kaWN0cywgZnJlZV9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZSwgMCk7CiAgICAgICAgIGdfc2xpc3RfZnJlZShwcml2LT5lbmNoYW50X2RpY3Rz
KTsKICAgICAgICAgcHJpdi0+ZW5jaGFudF9kaWN0cyA9IHNwZWxsRGljdGlvbmFyaWVzOworI2Vu
ZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9FTkFCTEVfWFNTX0FVRElUT1I6CiAg
ICAgICAgIHByaXYtPmVuYWJsZV94c3NfYXVkaXRvciA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFs
dWUpOwpAQCAtMTI0NywxMCArMTI2MiwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NldHRp
bmdzX2dldF9wcm9wCiAgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPmVu
YWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9Q
X0VOQUJMRV9TUEVMTF9DSEVDS0lORzoKKyNpZiBFTkFCTEUoU1BFTExfQ0hFQ0tFUikKICAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+ZW5hYmxlX3NwZWxsX2NoZWNraW5n
KTsKKyNlbHNlCisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIEZBTFNFKTsKKyNl
bmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfU1BFTExfQ0hFQ0tJTkdfTEFOR1VB
R0VTOgorI2lmIEVOQUJMRShTUEVMTF9DSEVDS0VSKQogICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIHByaXYtPnNwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyk7CisjZWxzZQorICAgICAg
ICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsICIiKTsKKyNlbmRpZgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFBST1BfRU5BQkxFX1hTU19BVURJVE9SOgogICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCBwcml2LT5lbmFibGVfeHNzX2F1ZGl0b3IpOwpAQCAtMTM2MSw4ICsxMzg0
LDEwIEBAIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJraXRfd2ViX3NldHRpbmdzX2MKICAgICAgICAg
ICAgICAgICAgInpvb20tc3RlcCIsIHByaXYtPnpvb21fc3RlcCwKICAgICAgICAgICAgICAgICAg
ImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgcHJpdi0+ZW5hYmxlX2RldmVsb3Blcl9leHRyYXMs
CiAgICAgICAgICAgICAgICAgICJlbmFibGUtcHJpdmF0ZS1icm93c2luZyIsIHByaXYtPmVuYWJs
ZV9wcml2YXRlX2Jyb3dzaW5nLAorI2lmIEVOQUJMRShTUEVMTF9DSEVDS0VSKQogICAgICAgICAg
ICAgICAgICAiZW5hYmxlLXNwZWxsLWNoZWNraW5nIiwgcHJpdi0+ZW5hYmxlX3NwZWxsX2NoZWNr
aW5nLAogICAgICAgICAgICAgICAgICAic3BlbGwtY2hlY2tpbmctbGFuZ3VhZ2VzIiwgcHJpdi0+
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzLAorI2VuZGlmCiAgICAgICAgICAgICAgICAgICJlbmFi
bGUtY2FyZXQtYnJvd3NpbmciLCBwcml2LT5lbmFibGVfY2FyZXRfYnJvd3NpbmcsCiAgICAgICAg
ICAgICAgICAgICJlbmFibGUtaHRtbDUtZGF0YWJhc2UiLCBwcml2LT5lbmFibGVfaHRtbDVfZGF0
YWJhc2UsCiAgICAgICAgICAgICAgICAgICJlbmFibGUtaHRtbDUtbG9jYWwtc3RvcmFnZSIsIHBy
aXYtPmVuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82579</attachid>
            <date>2011-02-15 20:02:51 -0800</date>
            <delta_ts>2011-02-16 20:09:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51587-20110216130250.patch</filename>
            <type>text/plain</type>
            <size>28510</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDc4Njc1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDIt
MTUgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFJlbW92ZSBtYW5kYXRvcnkg
RW5jaGFudCBkZXBlbmRlbmN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTU4NworCisgICAgICAgIEFkZCBlbmFibGUtZW5jaGFudCBvcHRpb24gd2hp
Y2ggZGVjaWRlcyB3aGV0aGVyIHRvIHVzZSBlbmNoYW50LgorICAgICAgICBJZiBkaXNhYmxlZCwg
V2ViS2l0R1RLKyB3aWxsIG5vdCB1c2UgZW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgICogY29u
ZmlndXJlLmFjOgorCiAyMDExLTAyLTEzICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KSW5kZXg6IGNvbmZpZ3VyZS5h
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDc4NjQ5KQorKysgY29uZmln
dXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsOSArMjg2LDE3IEBAIFBLR19DSEVDS19NT0RV
TEVTKFBBTkdPLCAKIEFDX1NVQlNUKFBBTkdPX0NGTEFHUykKIEFDX1NVQlNUKFBBTkdPX0xJQlMp
CiAKLVBLR19DSEVDS19NT0RVTEVTKEVOQ0hBTlQsIGVuY2hhbnQgPj0gJEVOQ0hBTlRfUkVRVUlS
RURfVkVSU0lPTikKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgZW5jaGFudCBz
dXBwb3J0XSkKK0FDX0FSR19FTkFCTEUoW2VuY2hhbnRdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0t
ZW5hYmxlLWVuY2hhbnRdLFtlbmFibGUgc3VwcG9ydCBmb3IgZW5jaGFudF0pXSwKKyAgW10sW2Vu
YWJsZV9lbmNoYW50PSJ5ZXMiXSkKK0FDX01TR19SRVNVTFQoWyRlbmFibGVfZW5jaGFudF0pCisK
K2lmIHRlc3QgIiRlbmFibGVfZW5jaGFudCIgPSAieWVzIjsgdGhlbgorUEtHX0NIRUNLX01PRFVM
RVMoRU5DSEFOVCwgZW5jaGFudCA+PSAkRU5DSEFOVF9SRVFVSVJFRF9WRVJTSU9OLCBbXSwgW2Vu
YWJsZV9lbmNoYW50PSJubyJdKQogQUNfU1VCU1QoRU5DSEFOVF9DRkxBR1MpCiBBQ19TVUJTVChF
TkNIQU5UX0xJQlMpCitmaQogCiBQS0dfQ0hFQ0tfTU9EVUxFUyhHQUlMLCAkR0FJTF9QQ19OQU1F
ID49ICRHQUlMX1JFUVVJUkVEX1ZFUlNJT04pCiBBQ19TVUJTVChHQUlMX0NGTEFHUykKQEAgLTk4
OSw2ICs5OTcsNyBAQCBBTV9DT05ESVRJT05BTChbRU5BQkxFX1dFQl9BVURJT10sW3Rlc3QgCiBB
TV9DT05ESVRJT05BTChbRU5BQkxFX1dFQl9USU1JTkddLFt0ZXN0ICIkZW5hYmxlX3dlYl90aW1p
bmciID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9PUENPREVfU1RBVFNdLFt0ZXN0
ICIkZW5hYmxlX29wY29kZV9zdGF0cyIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxF
X1dFQktJVDJdLFt0ZXN0ICIkZW5hYmxlX3dlYmtpdDIiID0gInllcyJdKQorQU1fQ09ORElUSU9O
QUwoW0VOQUJMRV9FTkNIQU5UXSxbdGVzdCAiJGVuYWJsZV9lbmNoYW50IiA9ICJ5ZXMiXSkKIAog
IyBHdGsgY29uZGl0aW9uYWxzCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX0lOVFJPU1BFQ1RJT05d
LFt0ZXN0ICIkZW5hYmxlX2ludHJvc3BlY3Rpb24iID0gInllcyJdKQpAQCAtMTA3Myw2ICsxMDgy
LDcgQEAgRmVhdHVyZXM6CiAgWEhUTUwtTVAgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX3hodG1sbXAKICBYUEFUSCBzdXBwb3J0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfeHBhdGgKICBY
U0xUIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
ICRlbmFibGVfeHNsdAorIEVuY2hhbnQgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogJGVuYWJsZV9lbmNoYW50CiAKIEdUSysgY29uZmlndXJhdGlvbjoK
ICBHVEsrIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6ICR3aXRoX2d0awpJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNzg2NzUpCisrKyBT
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBA
QAorMjAxMS0wMi0xNSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gUmVtb3Zl
IG1hbmRhdG9yeSBFbmNoYW50IGRlcGVuZGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNTg3CisKKyAgICAgICAgRXh0cmFjdCBUZXh0Q2hlY2tl
ckNsaWVudEVuY2hhbnQgRnJvbSBFZGl0b3JDbGllbnRHdGsgYW5kIHJlbW92ZQorICAgICAgICBl
bmNoYW50IGRlcGVuZGVuY3kgZnJvbSBvdGhlciBmaWxlcy4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9y
Q2xpZW50Ojp0ZXh0Q2hlY2tlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNr
ZXJDbGllbnRFbmNoYW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
Q2xpZW50RW5jaGFudDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50KToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpsZWFybldvcmQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6Z2V0
QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZCk6
CisgICAgICAgIChXZWJLaXQ6OmdldEF2YWlsYWJsZURpY3Rpb25hcmllc0NhbGxiYWNrKToKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50Ojp1cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2UpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6
OmZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1Rl
eHRDaGVja2VyQ2xpZW50RW5jaGFudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXJDbGllbnRFbmNoYW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfc2V0dGlu
Z3NfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3dlYl9zZXR0aW5nc19zZXRfcHJvcGVydHkp
OgorCiAyMDExLTAyLTE1ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNzg2NDkpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5h
bQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTUgQEAgbGlid2Via2l0Z3RrX0BXRUJLSVRH
VEtfQVBJX01BSk9SX1ZFUlNJTwogCSQoU1lNQk9MX1ZJU0lCSUxJVFkpIFwKIAkkKGdsb2JhbF9j
ZmxhZ3MpCiAKK2lmIEVOQUJMRV9FTkNIQU5UCit3ZWJraXRndGtfY3BwZmxhZ3MgKz0gXAorCS1E
RU5BQkxFX0VOQ0hBTlQ9MQorCit3ZWJraXRndGtfc291cmNlcyArPSBcCisJU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRFbmNoYW50LmNwcCBcCisJU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRFbmNoYW50LmgK
K2VuZGlmCisKICMgV2hlbiBidWlsZGluZyBXZWJDb3JlL1dlYktpdCwgd2Ugd2FudCBXZWJDb3Jl
L2NvbmZpZy5oIGFuZCBOT1QgSmF2YVNjcmlwdENvcmUvY29uZmlnLmgsCiAjIGhlbmNlLCBpdCdz
IGltcG9ydGFudCB0aGF0IFdlYkNvcmUvIHNob3VsZCBjb21lIGZpcnN0IGJlZm9yZSBKYXZhU2Ny
aXB0Q29yZSBpbiB0aGUKICMgaW5jbHVkZSBwYXRoLgpAQCAtNDcsNiArNTYsNyBAQCBsaWJ3ZWJr
aXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPCiAJJCh3ZWJjb3JlX2NwcGZsYWdzKSBc
CiAJJCh3ZWJjb3JlZ3RrX2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykg
XAorCSQod2Via2l0Z3RrX2NwcGZsYWdzKSBcCiAJLWZuby1zdHJpY3QtYWxpYXNpbmcgXAogCSQo
SElMRE9OX0NQUEZMQUdTKSBcCiAJJChDT1ZFUkFHRV9DRkxBR1MpIFwKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAko
cmV2aXNpb24gNzg2NDkpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVk
ZSAiRGF0YU9iamVjdEd0ay5oIgogI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAi
RWRpdG9yLmgiCi0jaW5jbHVkZSA8ZW5jaGFudC5oPgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
ICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtODQy
LDYgKzg0MSw5IEBAIHZvaWQgRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZE1vdXMKIAog
RWRpdG9yQ2xpZW50OjpFZGl0b3JDbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICA6
IG1faXNJblJlZG8oZmFsc2UpCisjaWYgRU5BQkxFKEVOQ0hBTlQpCisgICAgLCBtX3RleHRDaGVj
a2VyQ2xpZW50KHdlYlZpZXcpCisjZW5kaWYKICAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQogICAg
ICwgbV9wcmV2ZW50TmV4dENvbXBvc2l0aW9uQ29tbWl0KGZhbHNlKQogICAgICwgbV90cmVhdENv
bnRleHRDb21taXRBc0tleUV2ZW50KGZhbHNlKQpAQCAtODk3LDEwMCArODk5LDYgQEAgdm9pZCBF
ZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcgogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgRWRpdG9yQ2xpZW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0
IFN0cmluZyYgdGV4dCkKLXsKLSAgICBHU0xpc3QqIGRpY3RzID0gd2Via2l0V2ViVmlld0dldEVu
Y2hhbnREaWN0cyhtX3dlYlZpZXcpOwotCi0gICAgZm9yICg7IGRpY3RzOyBkaWN0cyA9IGRpY3Rz
LT5uZXh0KSB7Ci0gICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFu
dERpY3QqPihkaWN0cy0+ZGF0YSk7Ci0KLSAgICAgICAgZW5jaGFudF9kaWN0X2FkZF90b19zZXNz
aW9uKGRpY3QsIHRleHQudXRmOCgpLmRhdGEoKSwgLTEpOwotICAgIH0KLX0KLQotdm9pZCBFZGl0
b3JDbGllbnQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgR1NMaXN0KiBk
aWN0cyA9IHdlYmtpdFdlYlZpZXdHZXRFbmNoYW50RGljdHMobV93ZWJWaWV3KTsKLQotICAgIGZv
ciAoOyBkaWN0czsgZGljdHMgPSBkaWN0cy0+bmV4dCkgewotICAgICAgICBFbmNoYW50RGljdCog
ZGljdCA9IHN0YXRpY19jYXN0PEVuY2hhbnREaWN0Kj4oZGljdHMtPmRhdGEpOwotCi0gICAgICAg
IGVuY2hhbnRfZGljdF9hZGRfdG9fcGVyc29uYWwoZGljdCwgdGV4dC51dGY4KCkuZGF0YSgpLCAt
MSk7Ci0gICAgfQotfQotCi12b2lkIEVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludCogbWlzc3BlbGxpbmdMZW5ndGgpCi17Ci0gICAgR1NMaXN0KiBkaWN0cyA9IHdlYmtpdFdl
YlZpZXdHZXRFbmNoYW50RGljdHMobV93ZWJWaWV3KTsKLSAgICBpZiAoIWRpY3RzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnY2hhciogY3RleHQgPSBnX3V0ZjE2X3RvX3V0ZjgoY29uc3RfY2Fz
dDxndW5pY2hhcjIqPih0ZXh0KSwgbGVuZ3RoLCAwLCAwLCAwKTsKLSAgICBpbnQgdXRmbGVuID0g
Z191dGY4X3N0cmxlbihjdGV4dCwgLTEpOwotCi0gICAgUGFuZ29MYW5ndWFnZSogbGFuZ3VhZ2Ug
PSBwYW5nb19sYW5ndWFnZV9nZXRfZGVmYXVsdCgpOwotICAgIFBhbmdvTG9nQXR0ciogYXR0cnMg
PSBnX25ldyhQYW5nb0xvZ0F0dHIsIHV0ZmxlbisxKTsKLQotICAgIC8vIHBhbmdvX2dldF9sb2df
YXR0cnMgdXNlcyBhbiBhZGl0aW9uYWwgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgdGV4dC4K
LSAgICBwYW5nb19nZXRfbG9nX2F0dHJzKGN0ZXh0LCAtMSwgLTEsIGxhbmd1YWdlLCBhdHRycywg
dXRmbGVuKzEpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGgrMTsgaSsrKSB7Ci0g
ICAgICAgIC8vIFdlIGdvIHRocm91Z2ggZWFjaCBjaGFyYWN0ZXIgdW50aWwgd2UgZmluZCBhbiBp
c193b3JkX3N0YXJ0LAotICAgICAgICAvLyB0aGVuIHdlIGdldCBpbnRvIGFuIGlubmVyIGxvb3Ag
dG8gZmluZCB0aGUgaXNfd29yZF9lbmQgY29ycmVzcG9uZGluZwotICAgICAgICAvLyB0byBpdC4K
LSAgICAgICAgaWYgKGF0dHJzW2ldLmlzX3dvcmRfc3RhcnQpIHsKLSAgICAgICAgICAgIGludCBz
dGFydCA9IGk7Ci0gICAgICAgICAgICBpbnQgZW5kID0gaTsKLSAgICAgICAgICAgIGludCB3b3Jk
TGVuZ3RoOwotCi0gICAgICAgICAgICB3aGlsZSAoYXR0cnNbZW5kXS5pc193b3JkX2VuZCA8IDEp
Ci0gICAgICAgICAgICAgICAgZW5kKys7Ci0KLSAgICAgICAgICAgIHdvcmRMZW5ndGggPSBlbmQg
LSBzdGFydDsKLSAgICAgICAgICAgIC8vIFNldCB0aGUgaXRlcmF0b3IgdG8gYmUgYXQgdGhlIGN1
cnJlbnQgd29yZCBlbmQsIHNvIHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBjaGVjayBjaGFyYWN0
ZXJzIHR3aWNlLgotICAgICAgICAgICAgaSA9IGVuZDsKLQotICAgICAgICAgICAgZm9yICg7IGRp
Y3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgRW5jaGFudERpY3Qq
IGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRpY3RzLT5kYXRhKTsKLSAgICAgICAg
ICAgICAgICBnY2hhciogY3N0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKGN0ZXh0LCBz
dGFydCk7Ci0gICAgICAgICAgICAgICAgZ2ludCBieXRlcyA9IHN0YXRpY19jYXN0PGdpbnQ+KGdf
dXRmOF9vZmZzZXRfdG9fcG9pbnRlcihjdGV4dCwgZW5kKSAtIGNzdGFydCk7Ci0gICAgICAgICAg
ICAgICAgZ2NoYXIqIHdvcmQgPSBnX25ldzAoZ2NoYXIsIGJ5dGVzKzEpOwotICAgICAgICAgICAg
ICAgIGludCByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBnX3V0Zjhfc3RybmNweSh3b3JkLCBj
c3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVuY2hhbnRf
ZGljdF9jaGVjayhkaWN0LCB3b3JkLCAtMSk7Ci0gICAgICAgICAgICAgICAgZ19mcmVlKHdvcmQp
OwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgKm1p
c3NwZWxsaW5nTG9jYXRpb24gPSBzdGFydDsKLSAgICAgICAgICAgICAgICAgICAgKm1pc3NwZWxs
aW5nTGVuZ3RoID0gd29yZExlbmd0aDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBTdG9wIGNoZWNraW5nLCB0aGlzIHdvcmQgaXMgb2sgaW4gYXQgbGVh
c3Qgb25lIGRpY3QuCi0gICAgICAgICAgICAgICAgICAgICptaXNzcGVsbGluZ0xvY2F0aW9uID0g
LTE7Ci0gICAgICAgICAgICAgICAgICAgICptaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGdfZnJlZShhdHRycyk7Ci0gICAgZ19mcmVlKGN0ZXh0KTsK
LX0KLQotU3RyaW5nIEVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dFdvcmQpCi17Ci0gICAgLy8gVGhpcyBtZXRo
b2QgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGN1c3RvbWl6ZWQgYWxnb3JpdGhtcyBmb3IgdGhl
IHBhcnRpY3VsYXIgYnJvd3Nlci4KLSAgICAvLyBDdXJyZW50bHksIGl0IGNvbXB1dGVzIGFuIGVt
cHR5IHN0cmluZy4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50
OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJE
ZXRhaWw+JiwgaW50KiwgaW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lk
IEVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0
cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBA
IC0xMDEyLDI0ICs5MjAsNCBAQCBib29sIEVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2lu
ZygpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFdURjo6
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCi17Ci0gICAgR1NMaXN0KiBkaWN0cyA9IHdlYmtpdFdl
YlZpZXdHZXRFbmNoYW50RGljdHMobV93ZWJWaWV3KTsKLSAgICBndWVzc2VzLmNsZWFyKCk7Ci0K
LSAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKLSAgICAgICAgc2l6ZV90
IG51bWJlck9mU3VnZ2VzdGlvbnM7Ci0gICAgICAgIHNpemVfdCBpOwotCi0gICAgICAgIEVuY2hh
bnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3QqPihkaWN0cy0+ZGF0YSk7Ci0g
ICAgICAgIGdjaGFyKiogc3VnZ2VzdGlvbnMgPSBlbmNoYW50X2RpY3Rfc3VnZ2VzdChkaWN0LCB3
b3JkLnV0ZjgoKS5kYXRhKCksIC0xLCAmbnVtYmVyT2ZTdWdnZXN0aW9ucyk7Ci0KLSAgICAgICAg
Zm9yIChpID0gMDsgaSA8IG51bWJlck9mU3VnZ2VzdGlvbnMgJiYgaSA8IDEwOyBpKyspCi0gICAg
ICAgICAgICBndWVzc2VzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KHN1Z2dlc3Rpb25zW2ldKSk7
Ci0KLSAgICAgICAgaWYgKG51bWJlck9mU3VnZ2VzdGlvbnMgPiAwKQotICAgICAgICAgICAgZW5j
aGFudF9kaWN0X2ZyZWVfc3VnZ2VzdGlvbnMoZGljdCwgc3VnZ2VzdGlvbnMpOwotICAgIH0KLX0K
LQogfQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50R3RrLmgJKHJldmlzaW9uIDc4NjQ5KQorKysgU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDEyIEBACiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KIAorI2lmIEVOQUJMRShFTkNIQU5UKQorI2luY2x1ZGUgIlRleHRD
aGVja2VyQ2xpZW50RW5jaGFudC5oIgorI2Vsc2UKKyNpbmNsdWRlICJFbXB0eUNsaWVudHMuaCIK
KyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3Owog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OCw3ICs1NCw3IEBAIGNsYXNzIEtleWJvYXJkRXZl
bnQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBFZGl0b3JDbGllbnQgOiBwdWJsaWMg
V2ViQ29yZTo6RWRpdG9yQ2xpZW50LCAgcHVibGljIFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50
IHsKK2NsYXNzIEVkaXRvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGllbnQgewog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBtX2lzSW5SZWRvOwogCkBAIC0xMjMsMjMgKzEy
OSwyMSBAQCBjbGFzcyBFZGl0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6RWRpCiAgICAgICAg
IHZpcnR1YWwgdm9pZCB0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKFdlYkNvcmU6OkVsZW1l
bnQqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKFdlYkNv
cmU6OkVsZW1lbnQqKTsKIAotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlRleHRDaGVja2VyQ2xp
ZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICAgICAgdmlydHVhbCBXZWJD
b3JlOjpUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKSB7IHJldHVybiAmbV90ZXh0Q2hl
Y2tlckNsaWVudDsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERv
Y3VtZW50KGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBsZWFybldv
cmQoY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxp
bmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgIHZpcnR1YWwgV1RGOjpTdHJp
bmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgV1RGOjpT
dHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0
IFVDaGFyKiwgaW50IGxlbmd0aCwgV1RGOjpWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4m
LCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBX
VEY6OlN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgV1RGOjpT
dHJpbmcmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdyk7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCk7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYgd29yZCwgY29u
c3QgV1RGOjpTdHJpbmcmIGNvbnRleHQsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nl
cyk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6U3BlbGxD
aGVja2VyKiwgaW50LCBjb25zdCBXVEY6OlN0cmluZyYpIHt9CiAKICAgICBwcml2YXRlOgorI2lm
IEVOQUJMRShFTkNIQU5UKQorICAgICAgICBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQgbV90ZXh0
Q2hlY2tlckNsaWVudDsKKyNlbHNlCisgICAgICAgIFdlYkNvcmU6OkVtcHR5VGV4dENoZWNrZXJD
bGllbnQgbV90ZXh0Q2hlY2tlckNsaWVudDsKKyNlbmRpZgogICAgICAgICBXZWJLaXRXZWJWaWV3
KiBtX3dlYlZpZXc7CiAgICAgICAgIGJvb2wgbV9wcmV2ZW50TmV4dENvbXBvc2l0aW9uQ29tbWl0
OwogICAgICAgICBib29sIG1fdHJlYXRDb250ZXh0Q29tbWl0QXNLZXlFdmVudDsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50RW5jaGFudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENo
ZWNrZXJDbGllbnRFbmNoYW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50RW5jaGFudC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICog
IENvcHlyaWdodCAoQykgMjAwOSBEaWVnbyBFc2NhbGFudGUgVXJyZWxvIDxkaWVnb2VAZ25vbWUu
b3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgorICog
IENvcHlyaWdodCAoQykgMjAxMCwgTWFydGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Via2l0Lm9y
Zz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuaCIKKworI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAid2Via2l0d2Vic2V0dGluZ3Nwcml2YXRlLmgiCisjaW5j
bHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxlbmNoYW50Lmg+CisjaW5j
bHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitFbmNoYW50QnJva2VyKiBU
ZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmJyb2tlciA9IDA7CisKK1RleHRDaGVja2VyQ2xpZW50
RW5jaGFudDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CisgICAgOiBtX3dlYlZpZXcod2ViVmlldykKK3sKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVu
dEVuY2hhbnQ6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0KQor
eworICAgIEdTTGlzdCogZGljdHMgPSB3ZWJraXRXZWJWaWV3R2V0RW5jaGFudERpY3RzKG1fd2Vi
Vmlldyk7CisKKyAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKKyAgICAg
ICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRpY3RzLT5k
YXRhKTsKKworICAgICAgICBlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb24oZGljdCwgdGV4dC51
dGY4KCkuZGF0YSgpLCAtMSk7CisgICAgfQorfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RW5j
aGFudDo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBHU0xpc3QqIGRpY3Rz
ID0gd2Via2l0V2ViVmlld0dldEVuY2hhbnREaWN0cyhtX3dlYlZpZXcpOworCisgICAgZm9yICg7
IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0KSB7CisgICAgICAgIEVuY2hhbnREaWN0KiBkaWN0
ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3QqPihkaWN0cy0+ZGF0YSk7CisKKyAgICAgICAgZW5j
aGFudF9kaWN0X2FkZF90b19wZXJzb25hbChkaWN0LCB0ZXh0LnV0ZjgoKS5kYXRhKCksIC0xKTsK
KyAgICB9Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBHU0xpc3QqIGRpY3RzID0g
d2Via2l0V2ViVmlld0dldEVuY2hhbnREaWN0cyhtX3dlYlZpZXcpOworICAgIGlmICghZGljdHMp
CisgICAgICAgIHJldHVybjsKKworICAgIGdjaGFyKiBjdGV4dCA9IGdfdXRmMTZfdG9fdXRmOChj
b25zdF9jYXN0PGd1bmljaGFyMio+KHRleHQpLCBsZW5ndGgsIDAsIDAsIDApOworICAgIGludCB1
dGZsZW4gPSBnX3V0Zjhfc3RybGVuKGN0ZXh0LCAtMSk7CisKKyAgICBQYW5nb0xhbmd1YWdlKiBs
YW5ndWFnZSA9IHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCk7CisgICAgUGFuZ29Mb2dBdHRy
KiBhdHRycyA9IGdfbmV3KFBhbmdvTG9nQXR0ciwgdXRmbGVuKzEpOworCisgICAgLy8gcGFuZ29f
Z2V0X2xvZ19hdHRycyB1c2VzIGFuIGFkaXRpb25hbCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRo
ZSB0ZXh0LgorICAgIHBhbmdvX2dldF9sb2dfYXR0cnMoY3RleHQsIC0xLCAtMSwgbGFuZ3VhZ2Us
IGF0dHJzLCB1dGZsZW4rMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aCsxOyBp
KyspIHsKKyAgICAgICAgLy8gV2UgZ28gdGhyb3VnaCBlYWNoIGNoYXJhY3RlciB1bnRpbCB3ZSBm
aW5kIGFuIGlzX3dvcmRfc3RhcnQsCisgICAgICAgIC8vIHRoZW4gd2UgZ2V0IGludG8gYW4gaW5u
ZXIgbG9vcCB0byBmaW5kIHRoZSBpc193b3JkX2VuZCBjb3JyZXNwb25kaW5nCisgICAgICAgIC8v
IHRvIGl0LgorICAgICAgICBpZiAoYXR0cnNbaV0uaXNfd29yZF9zdGFydCkgeworICAgICAgICAg
ICAgaW50IHN0YXJ0ID0gaTsKKyAgICAgICAgICAgIGludCBlbmQgPSBpOworICAgICAgICAgICAg
aW50IHdvcmRMZW5ndGg7CisKKyAgICAgICAgICAgIHdoaWxlIChhdHRyc1tlbmRdLmlzX3dvcmRf
ZW5kIDwgMSkKKyAgICAgICAgICAgICAgICBlbmQrKzsKKworICAgICAgICAgICAgd29yZExlbmd0
aCA9IGVuZCAtIHN0YXJ0OworICAgICAgICAgICAgLy8gU2V0IHRoZSBpdGVyYXRvciB0byBiZSBh
dCB0aGUgY3VycmVudCB3b3JkIGVuZCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIGNoZWNr
IGNoYXJhY3RlcnMgdHdpY2UuCisgICAgICAgICAgICBpID0gZW5kOworCisgICAgICAgICAgICBm
b3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKKyAgICAgICAgICAgICAgICBFbmNo
YW50RGljdCogZGljdCA9IHN0YXRpY19jYXN0PEVuY2hhbnREaWN0Kj4oZGljdHMtPmRhdGEpOwor
ICAgICAgICAgICAgICAgIGdjaGFyKiBjc3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIo
Y3RleHQsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBnaW50IGJ5dGVzID0gc3RhdGljX2Nhc3Q8
Z2ludD4oZ191dGY4X29mZnNldF90b19wb2ludGVyKGN0ZXh0LCBlbmQpIC0gY3N0YXJ0KTsKKyAg
ICAgICAgICAgICAgICBnY2hhciogd29yZCA9IGdfbmV3MChnY2hhciwgYnl0ZXMrMSk7CisgICAg
ICAgICAgICAgICAgaW50IHJlc3VsdDsKKworICAgICAgICAgICAgICAgIGdfdXRmOF9zdHJuY3B5
KHdvcmQsIGNzdGFydCwgZW5kIC0gc3RhcnQpOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
ZW5jaGFudF9kaWN0X2NoZWNrKGRpY3QsIHdvcmQsIC0xKTsKKyAgICAgICAgICAgICAgICBnX2Zy
ZWUod29yZCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAg
ICAgICAqbWlzc3BlbGxpbmdMb2NhdGlvbiA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICAq
bWlzc3BlbGxpbmdMZW5ndGggPSB3b3JkTGVuZ3RoOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3AgY2hlY2tpbmcsIHRoaXMgd29yZCBpcyBvayBp
biBhdCBsZWFzdCBvbmUgZGljdC4KKyAgICAgICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5nTG9j
YXRpb24gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5nTGVuZ3RoID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZ19mcmVlKGF0dHJzKTsKKyAgICBnX2ZyZWUo
Y3RleHQpOworfQorCitTdHJpbmcgVGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpnZXRBdXRvQ29y
cmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIGlucHV0V29yZCkK
K3sKKyAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcgY3VzdG9taXpl
ZCBhbGdvcml0aG1zIGZvciB0aGUgcGFydGljdWxhciBicm93c2VyLgorICAgIC8vIEN1cnJlbnRs
eSwgaXQgY29tcHV0ZXMgYW4gZW1wdHkgc3RyaW5nLgorICAgIHJldHVybiBTdHJpbmcoKTsKK30K
Kwordm9pZCBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNv
bnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRFbmNoYW50
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgV1RGOjpWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3sKKyAgICBHU0xpc3QqIGRpY3Rz
ID0gd2Via2l0V2ViVmlld0dldEVuY2hhbnREaWN0cyhtX3dlYlZpZXcpOworICAgIGd1ZXNzZXMu
Y2xlYXIoKTsKKworICAgIGZvciAoOyBkaWN0czsgZGljdHMgPSBkaWN0cy0+bmV4dCkgeworICAg
ICAgICBzaXplX3QgbnVtYmVyT2ZTdWdnZXN0aW9uczsKKyAgICAgICAgc2l6ZV90IGk7CisKKyAg
ICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRpY3Rz
LT5kYXRhKTsKKyAgICAgICAgZ2NoYXIqKiBzdWdnZXN0aW9ucyA9IGVuY2hhbnRfZGljdF9zdWdn
ZXN0KGRpY3QsIHdvcmQudXRmOCgpLmRhdGEoKSwgLTEsICZudW1iZXJPZlN1Z2dlc3Rpb25zKTsK
KworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZTdWdnZXN0aW9ucyAmJiBpIDwgMTA7
IGkrKykKKyAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoc3VnZ2Vz
dGlvbnNbaV0pKTsKKworICAgICAgICBpZiAobnVtYmVyT2ZTdWdnZXN0aW9ucyA+IDApCisgICAg
ICAgICAgICBlbmNoYW50X2RpY3RfZnJlZV9zdWdnZXN0aW9ucyhkaWN0LCBzdWdnZXN0aW9ucyk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnZXRBdmFpbGFibGVEaWN0aW9uYXJpZXNDYWxsYmFj
ayhjb25zdCBjaGFyKiBjb25zdCBsYW5ndWFnZVRhZywgY29uc3QgY2hhciogY29uc3QsIGNvbnN0
IGNoYXIqIGNvbnN0LCBjb25zdCBjaGFyKiBjb25zdCwgdm9pZCogZGF0YSkKK3sKKyAgICBWZWN0
b3I8Q1N0cmluZz4qIGRpY3RzID0gc3RhdGljX2Nhc3Q8VmVjdG9yPENTdHJpbmc+Kj4oZGF0YSk7
CisKKyAgICBkaWN0cy0+YXBwZW5kKGxhbmd1YWdlVGFnKTsKK30KKworR1NMaXN0KiBUZXh0Q2hl
Y2tlckNsaWVudEVuY2hhbnQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZShjb25zdCBjaGFy
KiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKQoreworICAgIEVuY2hhbnREaWN0KiBkaWN0OworICAg
IEdTTGlzdCogc3BlbGxEaWN0aW9uYXJpZXMgPSAwOworCisgICAgaWYgKCFicm9rZXIpCisgICAg
ICAgIGJyb2tlciA9IGVuY2hhbnRfYnJva2VyX2luaXQoKTsKKworICAgIGlmIChzcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKSB7CisgICAgICAgIGNoYXIqKiBsYW5ncyA9IGdfc3Ryc3BsaXQoc3BlbGxD
aGVja2luZ0xhbmd1YWdlcywgIiwiLCAtMSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBsYW5n
c1tpXTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZW5jaGFudF9icm9rZXJfZGljdF9leGlzdHMo
YnJva2VyLCBsYW5nc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBkaWN0ID0gZW5jaGFudF9icm9r
ZXJfcmVxdWVzdF9kaWN0KGJyb2tlciwgbGFuZ3NbaV0pOworICAgICAgICAgICAgICAgIHNwZWxs
RGljdGlvbmFyaWVzID0gZ19zbGlzdF9hcHBlbmQoc3BlbGxEaWN0aW9uYXJpZXMsIGRpY3QpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdfc3RyZnJlZXYobGFuZ3MpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxhbmd1YWdlID0gcGFuZ29fbGFuZ3VhZ2Vf
dG9fc3RyaW5nKGd0a19nZXRfZGVmYXVsdF9sYW5ndWFnZSgpKTsKKyAgICAgICAgaWYgKGVuY2hh
bnRfYnJva2VyX2RpY3RfZXhpc3RzKGJyb2tlciwgbGFuZ3VhZ2UpKSB7CisgICAgICAgICAgICBk
aWN0ID0gZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0KGJyb2tlciwgbGFuZ3VhZ2UpOworICAg
ICAgICAgICAgc3BlbGxEaWN0aW9uYXJpZXMgPSBnX3NsaXN0X2FwcGVuZChzcGVsbERpY3Rpb25h
cmllcywgZGljdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBObyBkaWN0aW9u
YXJpZXMgc2VsZWN0ZWQsIHdlIGdldCBvbmUgZnJvbSB0aGUgbGlzdAorICAgICAgICAgICAgVmVj
dG9yPENTdHJpbmc+IGFsbERpY3Rpb25hcmllczsKKyAgICAgICAgICAgIGVuY2hhbnRfYnJva2Vy
X2xpc3RfZGljdHMoYnJva2VyLCBnZXRBdmFpbGFibGVEaWN0aW9uYXJpZXNDYWxsYmFjaywgJmFs
bERpY3Rpb25hcmllcyk7CisgICAgICAgICAgICBpZiAoIWFsbERpY3Rpb25hcmllcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBkaWN0ID0gZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0
KGJyb2tlciwgYWxsRGljdGlvbmFyaWVzWzBdLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgc3Bl
bGxEaWN0aW9uYXJpZXMgPSBnX3NsaXN0X2FwcGVuZChzcGVsbERpY3Rpb25hcmllcywgZGljdCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNwZWxsRGljdGlv
bmFyaWVzOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6ZnJlZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZShncG9pbnRlciBkYXRhLCBncG9pbnRlcikKK3sKKyAgICBpZiAoIWJyb2tl
cikKKyAgICAgICAgYnJva2VyID0gZW5jaGFudF9icm9rZXJfaW5pdCgpOworCisgICAgRW5jaGFu
dERpY3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRhdGEpOworICAgIGVuY2hh
bnRfYnJva2VyX2ZyZWVfZGljdChicm9rZXIsIGRpY3QpOworfQorCit9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNs
aWVudEVuY2hhbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L1RleHRDaGVja2VyQ2xpZW50RW5jaGFudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8bXJvYmluc29uQHdlYmtpdC5vcmc+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRDaGVja2Vy
Q2xpZW50RW5jaGFudF9oCisjZGVmaW5lIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudF9oCisKKyNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorCit0eXBlZGVmIHN0cnVjdCBfR1NMaXN0IEdT
TGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZpZXc7Cit0eXBl
ZGVmIHN0cnVjdCBzdHJfZW5jaGFudF9icm9rZXIgRW5jaGFudEJyb2tlcjsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudCA6IHB1YmxpYyBXZWJD
b3JlOjpUZXh0Q2hlY2tlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBUZXh0Q2hlY2tl
ckNsaWVudEVuY2hhbnQoV2ViS2l0V2ViVmlldyopOworICAgICAgICB2aXJ0dWFsIHZvaWQgaWdu
b3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBXVEY6OlN0cmluZyYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQq
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICB2
aXJ0dWFsIFdURjo6U3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRX
b3JkKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1t
YXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFdURjo6VmVjdG9yPFdlYkNvcmU6
OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1h
ckxlbmd0aCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBX
VEY6OlN0cmluZyYgd29yZCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRleHQsIFdURjo6VmVjdG9y
PFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hl
Y2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdURjo6U3Ry
aW5nJikge30KKworICAgICAgICBzdGF0aWMgR1NMaXN0KiB1cGRhdGVTcGVsbENoZWNraW5nTGFu
Z3VhZ2UoY29uc3QgY2hhciopOworICAgICAgICBzdGF0aWMgdm9pZCBmcmVlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlKGdwb2ludGVyLCBncG9pbnRlcik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgV2Vi
S2l0V2ViVmlldyogbV93ZWJWaWV3OworICAgICAgICBzdGF0aWMgRW5jaGFudEJyb2tlciogYnJv
a2VyOworICAgIH07Cit9CisjZW5kaWYKKwpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnNldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA3ODY0OSkKKysrIFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1
ZGUgIndlYmtpdHZlcnNpb24uaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJzZXR0aW5nc3ByaXZhdGUu
aCIKLSNpbmNsdWRlIDxlbmNoYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAjaW5jbHVkZSA8Z2xpYi9n
aTE4bi1saWIuaD4KQEAgLTQzLDYgKzQyLDEwIEBACiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4K
ICNlbmRpZgogCisjaWYgRU5BQkxFKEVOQ0hBTlQpCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGll
bnRFbmNoYW50LmgiCisjZW5kaWYKKwogLyoqCiAgKiBTRUNUSU9OOndlYmtpdHdlYnNldHRpbmdz
CiAgKiBAc2hvcnRfZGVzY3JpcHRpb246IENvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiBhICNXZWJL
aXRXZWJWaWV3CkBAIC05MjMsMjMgKzkyNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0
dGluZ3NfaW5pdChXZWIKICAgICB3ZWJfc2V0dGluZ3MtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUod2ViX3NldHRpbmdzLCBXRUJLSVRfVFlQRV9XRUJfU0VUVElOR1MsIFdlYktp
dFdlYlNldHRpbmdzUHJpdmF0ZSk7CiB9CiAKLXN0YXRpYyBFbmNoYW50QnJva2VyKiBnZXRfZW5j
aGFudF9icm9rZXIoKQotewotICAgIHN0YXRpYyBFbmNoYW50QnJva2VyKiBicm9rZXIgPSAwOwot
ICAgIGlmICghYnJva2VyKQotICAgICAgICBicm9rZXIgPSBlbmNoYW50X2Jyb2tlcl9pbml0KCk7
Ci0KLSAgICByZXR1cm4gYnJva2VyOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgICBF
bmNoYW50RGljdCogZGljdCA9IHN0YXRpY19jYXN0PEVuY2hhbnREaWN0Kj4oZGF0YSk7Ci0gICAg
RW5jaGFudEJyb2tlciogYnJva2VyID0gZ2V0X2VuY2hhbnRfYnJva2VyKCk7Ci0KLSAgICBlbmNo
YW50X2Jyb2tlcl9mcmVlX2RpY3QoYnJva2VyLCBkaWN0KTsKLX0KLQogc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl9zZXR0aW5nc19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0
V2ViU2V0dGluZ3MqIHdlYl9zZXR0aW5ncyA9IFdFQktJVF9XRUJfU0VUVElOR1Mob2JqZWN0KTsK
QEAgLTk1NSwyOCArOTQxLDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3NfZmlu
YWxpemUKICAgICBnX2ZyZWUocHJpdi0+dXNlcl9zdHlsZXNoZWV0X3VyaSk7CiAgICAgZ19mcmVl
KHByaXYtPnNwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyk7CiAKLSAgICBnX3NsaXN0X2ZvcmVhY2go
cHJpdi0+ZW5jaGFudF9kaWN0cywgZnJlZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZSwgMCk7Cisj
aWYgRU5BQkxFKEVOQ0hBTlQpCisgICAgZ19zbGlzdF9mb3JlYWNoKHByaXYtPmVuY2hhbnRfZGlj
dHMsIFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpmcmVlU3BlbGxDaGVja2luZ0xh
bmd1YWdlLCAwKTsKICAgICBnX3NsaXN0X2ZyZWUocHJpdi0+ZW5jaGFudF9kaWN0cyk7CisjZW5k
aWYKIAogICAgIGdfZnJlZShwcml2LT51c2VyX2FnZW50KTsKIAogICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF93ZWJfc2V0dGluZ3NfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0K
IAotc3RhdGljIHZvaWQgZ2V0QXZhaWxhYmxlRGljdGlvbmFyaWVzQ2FsbGJhY2soY29uc3QgY2hh
ciogY29uc3QgbGFuZ3VhZ2VUYWcsIGNvbnN0IGNoYXIqIGNvbnN0LCBjb25zdCBjaGFyKiBjb25z
dCwgY29uc3QgY2hhciogY29uc3QsIHZvaWQqIGRhdGEpCi17Ci0gICAgVmVjdG9yPENTdHJpbmc+
KiBkaWN0cyA9IHN0YXRpY19jYXN0PFZlY3RvcjxDU3RyaW5nPio+KGRhdGEpOwotCi0gICAgZGlj
dHMtPmFwcGVuZChsYW5ndWFnZVRhZyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0
dGluZ3Nfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCiB7CiAgICAgV2ViS2l0V2ViU2V0dGlu
Z3MqIHdlYl9zZXR0aW5ncyA9IFdFQktJVF9XRUJfU0VUVElOR1Mob2JqZWN0KTsKICAgICBXZWJL
aXRXZWJTZXR0aW5nc1ByaXZhdGUqIHByaXYgPSB3ZWJfc2V0dGluZ3MtPnByaXY7Ci0gICAgRW5j
aGFudEJyb2tlciogYnJva2VyOwotICAgIEVuY2hhbnREaWN0KiBkaWN0OwotICAgIEdTTGlzdCog
c3BlbGxEaWN0aW9uYXJpZXMgPSAwOwogCiAgICAgc3dpdGNoKHByb3BfaWQpIHsKICAgICBjYXNl
IFBST1BfREVGQVVMVF9FTkNPRElORzoKQEAgLTEwNjksMzQgKzEwNDcsMTEgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl9zZXR0aW5nc19zZXRfcHJvcAogICAgICAgICBnX2ZyZWUocHJpdi0+c3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKTsKICAgICAgICAgcHJpdi0+c3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzID0gZ19zdHJkdXAoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CiAKLSAgICAgICAg
YnJva2VyID0gZ2V0X2VuY2hhbnRfYnJva2VyKCk7Ci0gICAgICAgIGlmIChwcml2LT5zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMpIHsKLSAgICAgICAgICAgIGNoYXIqKiBsYW5ncyA9IGdfc3Ryc3Bs
aXQocHJpdi0+c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzLCAiLCIsIC0xKTsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBsYW5nc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVu
Y2hhbnRfYnJva2VyX2RpY3RfZXhpc3RzKGJyb2tlciwgbGFuZ3NbaV0pKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRpY3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBsYW5n
c1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWxsRGljdGlvbmFyaWVzID0gZ19zbGlzdF9h
cHBlbmQoc3BlbGxEaWN0aW9uYXJpZXMsIGRpY3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGdfc3RyZnJlZXYobGFuZ3MpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY29uc3QgY2hhciogbGFuZ3VhZ2UgPSBwYW5nb19sYW5ndWFnZV90b19z
dHJpbmcoZ3RrX2dldF9kZWZhdWx0X2xhbmd1YWdlKCkpOwotICAgICAgICAgICAgaWYgKGVuY2hh
bnRfYnJva2VyX2RpY3RfZXhpc3RzKGJyb2tlciwgbGFuZ3VhZ2UpKSB7Ci0gICAgICAgICAgICAg
ICAgZGljdCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdChicm9rZXIsIGxhbmd1YWdlKTsK
LSAgICAgICAgICAgICAgICBzcGVsbERpY3Rpb25hcmllcyA9IGdfc2xpc3RfYXBwZW5kKHNwZWxs
RGljdGlvbmFyaWVzLCBkaWN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gTm8gZGljdGlvbmFyaWVzIHNlbGVjdGVkLCB3ZSBnZXQgb25lIGZyb20gdGhlIGxpc3QK
LSAgICAgICAgICAgICAgICBWZWN0b3I8Q1N0cmluZz4gYWxsRGljdGlvbmFyaWVzOwotICAgICAg
ICAgICAgICAgIGVuY2hhbnRfYnJva2VyX2xpc3RfZGljdHMoYnJva2VyLCBnZXRBdmFpbGFibGVE
aWN0aW9uYXJpZXNDYWxsYmFjaywgJmFsbERpY3Rpb25hcmllcyk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFhbGxEaWN0aW9uYXJpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRp
Y3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBhbGxEaWN0aW9uYXJpZXNb
MF0uZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc3BlbGxEaWN0aW9uYXJpZXMgPSBnX3Ns
aXN0X2FwcGVuZChzcGVsbERpY3Rpb25hcmllcywgZGljdCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGdfc2xpc3RfZm9yZWFjaChwcml2LT5l
bmNoYW50X2RpY3RzLCBmcmVlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlLCAwKTsKKyNpZiBFTkFC
TEUoRU5DSEFOVCkKKyAgICAgICAgZ19zbGlzdF9mb3JlYWNoKHByaXYtPmVuY2hhbnRfZGljdHMs
IFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpmcmVlU3BlbGxDaGVja2luZ0xhbmd1
YWdlLCAwKTsKICAgICAgICAgZ19zbGlzdF9mcmVlKHByaXYtPmVuY2hhbnRfZGljdHMpOwotICAg
ICAgICBwcml2LT5lbmNoYW50X2RpY3RzID0gc3BlbGxEaWN0aW9uYXJpZXM7CisgICAgICAgIHBy
aXYtPmVuY2hhbnRfZGljdHMgPSBXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6dXBk
YXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlKHByaXYtPnNwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyk7
CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0VOQUJMRV9YU1NfQVVESVRP
UjoKICAgICAgICAgcHJpdi0+ZW5hYmxlX3hzc19hdWRpdG9yID0gZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82745</attachid>
            <date>2011-02-16 20:09:51 -0800</date>
            <delta_ts>2011-02-19 13:06:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51587-20110217130948.patch</filename>
            <type>text/plain</type>
            <size>30165</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDc4Nzgx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDIt
MTYgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFJlbW92ZSBtYW5kYXRvcnkg
RW5jaGFudCBkZXBlbmRlbmN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTU4NworCisgICAgICAgIEFkZCBlbmFibGUtc3BlbGxjaGVjayBvcHRpb24g
d2hpY2ggZGVjaWRlcyB3aGV0aGVyIHRvIHVzZSBlbmNoYW50LgorICAgICAgICBJZiBkaXNhYmxl
ZCwgV2ViS2l0R1RLKyB3aWxsIG5vdCB1c2UgZW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgICog
Y29uZmlndXJlLmFjOgorCiAyMDExLTAyLTEzICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KSW5kZXg6IGNvbmZpZ3Vy
ZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDc4NjQ5KQorKysgY29u
ZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsOSArMjg2LDE3IEBAIFBLR19DSEVDS19N
T0RVTEVTKFBBTkdPLCAKIEFDX1NVQlNUKFBBTkdPX0NGTEFHUykKIEFDX1NVQlNUKFBBTkdPX0xJ
QlMpCiAKLVBLR19DSEVDS19NT0RVTEVTKEVOQ0hBTlQsIGVuY2hhbnQgPj0gJEVOQ0hBTlRfUkVR
VUlSRURfVkVSU0lPTikKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgc3BlbGxj
aGVjayBzdXBwb3J0XSkKK0FDX0FSR19FTkFCTEUoW3NwZWxsY2hlY2tdLAorICBbQVNfSEVMUF9T
VFJJTkcoWy0tZW5hYmxlLXNwZWxsY2hlY2tdLFtlbmFibGUgc3VwcG9ydCBmb3Igc3BlbGxjaGVj
a10pXSwKKyAgW10sW2VuYWJsZV9zcGVsbGNoZWNrPSJ5ZXMiXSkKK0FDX01TR19SRVNVTFQoWyRl
bmFibGVfc3BlbGxjaGVja10pCisKK2lmIHRlc3QgIiRlbmFibGVfc3BlbGxjaGVjayIgPSAieWVz
IjsgdGhlbgorUEtHX0NIRUNLX01PRFVMRVMoRU5DSEFOVCwgZW5jaGFudCA+PSAkRU5DSEFOVF9S
RVFVSVJFRF9WRVJTSU9OLCBbXSwgW2VuYWJsZV9zcGVsbGNoZWNrPSJubyJdKQogQUNfU1VCU1Qo
RU5DSEFOVF9DRkxBR1MpCiBBQ19TVUJTVChFTkNIQU5UX0xJQlMpCitmaQogCiBQS0dfQ0hFQ0tf
TU9EVUxFUyhHQUlMLCAkR0FJTF9QQ19OQU1FID49ICRHQUlMX1JFUVVJUkVEX1ZFUlNJT04pCiBB
Q19TVUJTVChHQUlMX0NGTEFHUykKQEAgLTk4OSw2ICs5OTcsNyBAQCBBTV9DT05ESVRJT05BTChb
RU5BQkxFX1dFQl9BVURJT10sW3Rlc3QgCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX1dFQl9USU1J
TkddLFt0ZXN0ICIkZW5hYmxlX3dlYl90aW1pbmciID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwo
W0VOQUJMRV9PUENPREVfU1RBVFNdLFt0ZXN0ICIkZW5hYmxlX29wY29kZV9zdGF0cyIgPSAieWVz
Il0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX1dFQktJVDJdLFt0ZXN0ICIkZW5hYmxlX3dlYmtp
dDIiID0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9TUEVMTENIRUNLXSxbdGVzdCAi
JGVuYWJsZV9zcGVsbGNoZWNrIiA9ICJ5ZXMiXSkKIAogIyBHdGsgY29uZGl0aW9uYWxzCiBBTV9D
T05ESVRJT05BTChbRU5BQkxFX0lOVFJPU1BFQ1RJT05dLFt0ZXN0ICIkZW5hYmxlX2ludHJvc3Bl
Y3Rpb24iID0gInllcyJdKQpAQCAtMTA3Myw2ICsxMDgyLDcgQEAgRmVhdHVyZXM6CiAgWEhUTUwt
TVAgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5h
YmxlX3hodG1sbXAKICBYUEFUSCBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6ICRlbmFibGVfeHBhdGgKICBYU0xUIHN1cHBvcnQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfeHNsdAorIFNwZWxsY2hl
Y2sgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJs
ZV9zcGVsbGNoZWNrCiAKIEdUSysgY29uZmlndXJhdGlvbjoKICBHVEsrIHZlcnNpb24gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2d0awpJbmRleDog
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNzg3ODEpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxMS0wMi0xNiAgUnl1YW4g
Q2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gUmVtb3ZlIG1hbmRhdG9yeSBFbmNoYW50IGRl
cGVuZGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUxNTg3CisKKyAgICAgICAgRXh0cmFjdCBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQgRnJvbSBF
ZGl0b3JDbGllbnRHdGsgYW5kIHJlbW92ZQorICAgICAgICBlbmNoYW50IGRlcGVuZGVuY3kgZnJv
bSBvdGhlciBmaWxlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudDo6RWRpdG9yQ2xpZW50KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRHdGsuaDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0Q2hlY2tlcik6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRFbmNoYW50LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6VGV4dENo
ZWNrZXJDbGllbnRFbmNoYW50KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRF
bmNoYW50Ojp+VGV4dENoZWNrZXJDbGllbnRFbmNoYW50KToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXJDbGllbnRFbmNoYW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpsZWFybldvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6Z2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAg
ICAgIChXZWJLaXQ6OmdldEF2YWlsYWJsZURpY3Rpb25hcmllc0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFu
Z3VhZ2UpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmZyZWVT
cGVsbENoZWNraW5nTGFuZ3VhZ2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1RleHRDaGVj
a2VyQ2xpZW50RW5jaGFudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJD
bGllbnRFbmNoYW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogd2Via2l0
L3dlYmtpdHdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfc2V0dGluZ3NfZmlu
YWxpemUpOgorICAgICAgICAod2Via2l0X3dlYl9zZXR0aW5nc19zZXRfcHJvcGVydHkpOgorICAg
ICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19zZXR0aW5nc19ub3RpZnkpOgorCiAyMDExLTAyLTE2ICBKb29uZSBIdXIgIDxqb29uZS5odXJA
Y29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3ODY0OSkKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxNSBAQCBs
aWJ3ZWJraXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPCiAJJChTWU1CT0xfVklTSUJJ
TElUWSkgXAogCSQoZ2xvYmFsX2NmbGFncykKIAoraWYgRU5BQkxFX1NQRUxMQ0hFQ0sKK3dlYmtp
dGd0a19jcHBmbGFncyArPSBcCisJLURFTkFCTEVfU1BFTExDSEVDSz0xCisKK3dlYmtpdGd0a19z
b3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tl
ckNsaWVudEVuY2hhbnQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9U
ZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuaAorZW5kaWYKKwogIyBXaGVuIGJ1aWxkaW5nIFdlYkNv
cmUvV2ViS2l0LCB3ZSB3YW50IFdlYkNvcmUvY29uZmlnLmggYW5kIE5PVCBKYXZhU2NyaXB0Q29y
ZS9jb25maWcuaCwKICMgaGVuY2UsIGl0J3MgaW1wb3J0YW50IHRoYXQgV2ViQ29yZS8gc2hvdWxk
IGNvbWUgZmlyc3QgYmVmb3JlIEphdmFTY3JpcHRDb3JlIGluIHRoZQogIyBpbmNsdWRlIHBhdGgu
CkBAIC00Nyw2ICs1Niw3IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJT
SU8KIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwKIAkk
KGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCisJJCh3ZWJraXRndGtfY3BwZmxhZ3MpIFwKIAkt
Zm5vLXN0cmljdC1hbGlhc2luZyBcCiAJJChISUxET05fQ1BQRkxBR1MpIFwKIAkkKENPVkVSQUdF
X0NGTEFHUykgXApJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCShyZXZpc2lvbiA3ODY0OSkKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCiAjaW5jbHVkZSAi
RWRpdENvbW1hbmQuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlIDxlbmNoYW50Lmg+
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCkBAIC04NDIsNiArODQxLDkgQEAgdm9pZCBFZGl0b3JDbGllbnQ6
OmhhbmRsZUlucHV0TWV0aG9kTW91cwogCiBFZGl0b3JDbGllbnQ6OkVkaXRvckNsaWVudChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDogbV9pc0luUmVkbyhmYWxzZSkKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICAsIG1fdGV4dENoZWNrZXJDbGllbnQod2ViVmlldykKKyNlbmRpZgog
ICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3ByZXZlbnROZXh0Q29tcG9zaXRpb25D
b21taXQoZmFsc2UpCiAgICAgLCBtX3RyZWF0Q29udGV4dENvbW1pdEFzS2V5RXZlbnQoZmFsc2Up
CkBAIC04OTcsMTAwICs4OTksNiBAQCB2b2lkIEVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUlu
VGV4dEFyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnQ6Omln
bm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0KQotewotICAgIEdTTGlz
dCogZGljdHMgPSB3ZWJraXRXZWJWaWV3R2V0RW5jaGFudERpY3RzKG1fd2ViVmlldyk7Ci0KLSAg
ICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKLSAgICAgICAgRW5jaGFudERp
Y3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRpY3RzLT5kYXRhKTsKLQotICAg
ICAgICBlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb24oZGljdCwgdGV4dC51dGY4KCkuZGF0YSgp
LCAtMSk7Ci0gICAgfQotfQotCi12b2lkIEVkaXRvckNsaWVudDo6bGVhcm5Xb3JkKGNvbnN0IFN0
cmluZyYgdGV4dCkKLXsKLSAgICBHU0xpc3QqIGRpY3RzID0gd2Via2l0V2ViVmlld0dldEVuY2hh
bnREaWN0cyhtX3dlYlZpZXcpOwotCi0gICAgZm9yICg7IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5u
ZXh0KSB7Ci0gICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERp
Y3QqPihkaWN0cy0+ZGF0YSk7Ci0KLSAgICAgICAgZW5jaGFudF9kaWN0X2FkZF90b19wZXJzb25h
bChkaWN0LCB0ZXh0LnV0ZjgoKS5kYXRhKCksIC0xKTsKLSAgICB9Ci19Ci0KLXZvaWQgRWRpdG9y
Q2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5n
dGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKLXsK
LSAgICBHU0xpc3QqIGRpY3RzID0gd2Via2l0V2ViVmlld0dldEVuY2hhbnREaWN0cyhtX3dlYlZp
ZXcpOwotICAgIGlmICghZGljdHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdjaGFyKiBjdGV4
dCA9IGdfdXRmMTZfdG9fdXRmOChjb25zdF9jYXN0PGd1bmljaGFyMio+KHRleHQpLCBsZW5ndGgs
IDAsIDAsIDApOwotICAgIGludCB1dGZsZW4gPSBnX3V0Zjhfc3RybGVuKGN0ZXh0LCAtMSk7Ci0K
LSAgICBQYW5nb0xhbmd1YWdlKiBsYW5ndWFnZSA9IHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0
KCk7Ci0gICAgUGFuZ29Mb2dBdHRyKiBhdHRycyA9IGdfbmV3KFBhbmdvTG9nQXR0ciwgdXRmbGVu
KzEpOwotCi0gICAgLy8gcGFuZ29fZ2V0X2xvZ19hdHRycyB1c2VzIGFuIGFkaXRpb25hbCBwb3Np
dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgotICAgIHBhbmdvX2dldF9sb2dfYXR0cnMoY3Rl
eHQsIC0xLCAtMSwgbGFuZ3VhZ2UsIGF0dHJzLCB1dGZsZW4rMSk7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbmd0aCsxOyBpKyspIHsKLSAgICAgICAgLy8gV2UgZ28gdGhyb3VnaCBlYWNo
IGNoYXJhY3RlciB1bnRpbCB3ZSBmaW5kIGFuIGlzX3dvcmRfc3RhcnQsCi0gICAgICAgIC8vIHRo
ZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBpc193b3JkX2VuZCBjb3Jy
ZXNwb25kaW5nCi0gICAgICAgIC8vIHRvIGl0LgotICAgICAgICBpZiAoYXR0cnNbaV0uaXNfd29y
ZF9zdGFydCkgewotICAgICAgICAgICAgaW50IHN0YXJ0ID0gaTsKLSAgICAgICAgICAgIGludCBl
bmQgPSBpOwotICAgICAgICAgICAgaW50IHdvcmRMZW5ndGg7Ci0KLSAgICAgICAgICAgIHdoaWxl
IChhdHRyc1tlbmRdLmlzX3dvcmRfZW5kIDwgMSkKLSAgICAgICAgICAgICAgICBlbmQrKzsKLQot
ICAgICAgICAgICAgd29yZExlbmd0aCA9IGVuZCAtIHN0YXJ0OwotICAgICAgICAgICAgLy8gU2V0
IHRoZSBpdGVyYXRvciB0byBiZSBhdCB0aGUgY3VycmVudCB3b3JkIGVuZCwgc28gd2UgZG9uJ3QK
LSAgICAgICAgICAgIC8vIGNoZWNrIGNoYXJhY3RlcnMgdHdpY2UuCi0gICAgICAgICAgICBpID0g
ZW5kOwotCi0gICAgICAgICAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsK
LSAgICAgICAgICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IHN0YXRpY19jYXN0PEVuY2hhbnRE
aWN0Kj4oZGljdHMtPmRhdGEpOwotICAgICAgICAgICAgICAgIGdjaGFyKiBjc3RhcnQgPSBnX3V0
Zjhfb2Zmc2V0X3RvX3BvaW50ZXIoY3RleHQsIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICBnaW50
IGJ5dGVzID0gc3RhdGljX2Nhc3Q8Z2ludD4oZ191dGY4X29mZnNldF90b19wb2ludGVyKGN0ZXh0
LCBlbmQpIC0gY3N0YXJ0KTsKLSAgICAgICAgICAgICAgICBnY2hhciogd29yZCA9IGdfbmV3MChn
Y2hhciwgYnl0ZXMrMSk7Ci0gICAgICAgICAgICAgICAgaW50IHJlc3VsdDsKLQotICAgICAgICAg
ICAgICAgIGdfdXRmOF9zdHJuY3B5KHdvcmQsIGNzdGFydCwgZW5kIC0gc3RhcnQpOwotCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gZW5jaGFudF9kaWN0X2NoZWNrKGRpY3QsIHdvcmQsIC0xKTsK
LSAgICAgICAgICAgICAgICBnX2ZyZWUod29yZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCkgewotICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdMb2NhdGlvbiA9IHN0YXJ0Owot
ICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdMZW5ndGggPSB3b3JkTGVuZ3RoOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN0b3AgY2hlY2tp
bmcsIHRoaXMgd29yZCBpcyBvayBpbiBhdCBsZWFzdCBvbmUgZGljdC4KLSAgICAgICAgICAgICAg
ICAgICAgKm1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgKm1p
c3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZ19mcmVl
KGF0dHJzKTsKLSAgICBnX2ZyZWUoY3RleHQpOwotfQotCi1TdHJpbmcgRWRpdG9yQ2xpZW50Ojpn
ZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIGlu
cHV0V29yZCkKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcg
Y3VzdG9taXplZCBhbGdvcml0aG1zIGZvciB0aGUgcGFydGljdWxhciBicm93c2VyLgotICAgIC8v
IEN1cnJlbnRseSwgaXQgY29tcHV0ZXMgYW4gZW1wdHkgc3RyaW5nLgotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0
IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTEwMTIsMjQgKzkyMCw0IEBAIGJvb2wgRWRp
dG9yQ2xpZW50OjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQs
IGNvbnN0IFN0cmluZyYgY29udGV4dCwgV1RGOjpWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKLXsK
LSAgICBHU0xpc3QqIGRpY3RzID0gd2Via2l0V2ViVmlld0dldEVuY2hhbnREaWN0cyhtX3dlYlZp
ZXcpOwotICAgIGd1ZXNzZXMuY2xlYXIoKTsKLQotICAgIGZvciAoOyBkaWN0czsgZGljdHMgPSBk
aWN0cy0+bmV4dCkgewotICAgICAgICBzaXplX3QgbnVtYmVyT2ZTdWdnZXN0aW9uczsKLSAgICAg
ICAgc2l6ZV90IGk7Ci0KLSAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxF
bmNoYW50RGljdCo+KGRpY3RzLT5kYXRhKTsKLSAgICAgICAgZ2NoYXIqKiBzdWdnZXN0aW9ucyA9
IGVuY2hhbnRfZGljdF9zdWdnZXN0KGRpY3QsIHdvcmQudXRmOCgpLmRhdGEoKSwgLTEsICZudW1i
ZXJPZlN1Z2dlc3Rpb25zKTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZTdWdn
ZXN0aW9ucyAmJiBpIDwgMTA7IGkrKykKLSAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKFN0cmlu
Zzo6ZnJvbVVURjgoc3VnZ2VzdGlvbnNbaV0pKTsKLQotICAgICAgICBpZiAobnVtYmVyT2ZTdWdn
ZXN0aW9ucyA+IDApCi0gICAgICAgICAgICBlbmNoYW50X2RpY3RfZnJlZV9zdWdnZXN0aW9ucyhk
aWN0LCBzdWdnZXN0aW9ucyk7Ci0gICAgfQotfQotCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAkocmV2aXNpb24gNzg2
NDkpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksMTIgQEAKICNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRFbmNoYW50LmgiCisj
ZWxzZQorI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5oIgorI2VuZGlmCisKIHR5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQ4LDcgKzU0LDcgQEAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWNsYXNzIEVkaXRvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGllbnQsICBw
dWJsaWMgV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnQgeworY2xhc3MgRWRpdG9yQ2xpZW50IDog
cHVibGljIFdlYkNvcmU6OkVkaXRvckNsaWVudCB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBi
b29sIG1faXNJblJlZG87CiAKQEAgLTEyMywyMyArMTI5LDIxIEBAIGNsYXNzIEVkaXRvckNsaWVu
dCA6IHB1YmxpYyBXZWJDb3JlOjpFZGkKICAgICAgICAgdmlydHVhbCB2b2lkIHRleHRXaWxsQmVE
ZWxldGVkSW5UZXh0RmllbGQoV2ViQ29yZTo6RWxlbWVudCopOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgdGV4dERpZENoYW5nZUluVGV4dEFyZWEoV2ViQ29yZTo6RWxlbWVudCopOwogCi0gICAgICAg
IHZpcnR1YWwgV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgeyByZXR1
cm4gdGhpczsgfQorICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50KiB0
ZXh0Q2hlY2tlcigpIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV1RGOjpTdHJpbmcm
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBXVEY6OlN0cmluZyYpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwg
aW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKLSAgICAgICAgdmlydHVhbCBXVEY6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBXVEY6OlN0cmluZyYpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBXVEY6
OlZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9u
LCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV2ViQ29y
ZTo6R3JhbW1hckRldGFpbCYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBXVEY6OlN0cmluZyYpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KTsKICAgICAgICAgdmlydHVhbCBib29sIHNw
ZWxsaW5nVUlJc1Nob3dpbmcoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFdURjo6U3RyaW5nJiB3b3JkLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGV4dCwg
V1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1
dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdURjo6
U3RyaW5nJikge30KIAogICAgIHByaXZhdGU6CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
ICAgIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudCBtX3RleHRDaGVja2VyQ2xpZW50OworI2Vsc2UK
KyAgICAgICAgV2ViQ29yZTo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudCBtX3RleHRDaGVja2VyQ2xp
ZW50OworI2VuZGlmCiAgICAgICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKICAgICAgICAg
Ym9vbCBtX3ByZXZlbnROZXh0Q29tcG9zaXRpb25Db21taXQ7CiAgICAgICAgIGJvb2wgbV90cmVh
dENvbnRleHRDb21taXRBc0tleUV2ZW50OwpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRFbmNoYW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENo
ZWNrZXJDbGllbnRFbmNoYW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTYgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IERp
ZWdvIEVzY2FsYW50ZSBVcnJlbG8gPGRpZWdvZUBnbm9tZS5vcmc+CisgKiAgQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBN
YXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3JnPgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2Vy
Q2xpZW50RW5jaGFudC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJ3ZWJraXR3ZWJzZXR0aW5nc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3cHJp
dmF0ZS5oIgorI2luY2x1ZGUgPGVuY2hhbnQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0VuY2hhbnRCcm9rZXIqIFRleHRDaGVja2VyQ2xpZW50RW5jaGFu
dDo6YnJva2VyID0gMDsKKworVGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpUZXh0Q2hlY2tlckNs
aWVudEVuY2hhbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICA6IG1fd2ViVmlldyh3ZWJW
aWV3KQorICAgICwgbV9lbmNoYW50RGljdHMoMCkKK3sKK30KKworVGV4dENoZWNrZXJDbGllbnRF
bmNoYW50Ojp+VGV4dENoZWNrZXJDbGllbnRFbmNoYW50KCkKK3sKKyAgICBnX3NsaXN0X2ZvcmVh
Y2gobV9lbmNoYW50RGljdHMsIGZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UsIDApOworICAgIGdf
c2xpc3RfZnJlZShtX2VuY2hhbnREaWN0cyk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRF
bmNoYW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sK
KyAgICBHU0xpc3QqIGRpY3RzID0gbV9lbmNoYW50RGljdHM7CisKKyAgICBmb3IgKDsgZGljdHM7
IGRpY3RzID0gZGljdHMtPm5leHQpIHsKKyAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0
aWNfY2FzdDxFbmNoYW50RGljdCo+KGRpY3RzLT5kYXRhKTsKKworICAgICAgICBlbmNoYW50X2Rp
Y3RfYWRkX3RvX3Nlc3Npb24oZGljdCwgdGV4dC51dGY4KCkuZGF0YSgpLCAtMSk7CisgICAgfQor
fQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6bGVhcm5Xb3JkKGNvbnN0IFN0cmlu
ZyYgdGV4dCkKK3sKKyAgICBHU0xpc3QqIGRpY3RzID0gbV9lbmNoYW50RGljdHM7CisKKyAgICBm
b3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKKyAgICAgICAgRW5jaGFudERpY3Qq
IGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRpY3RzLT5kYXRhKTsKKworICAgICAg
ICBlbmNoYW50X2RpY3RfYWRkX3RvX3BlcnNvbmFsKGRpY3QsIHRleHQudXRmOCgpLmRhdGEoKSwg
LTEpOworICAgIH0KK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKQoreworICAgIEdTTGlzdCogZGlj
dHMgPSBtX2VuY2hhbnREaWN0czsKKyAgICBpZiAoIWRpY3RzKQorICAgICAgICByZXR1cm47CisK
KyAgICBnY2hhciogY3RleHQgPSBnX3V0ZjE2X3RvX3V0ZjgoY29uc3RfY2FzdDxndW5pY2hhcjIq
Pih0ZXh0KSwgbGVuZ3RoLCAwLCAwLCAwKTsKKyAgICBpbnQgdXRmbGVuID0gZ191dGY4X3N0cmxl
bihjdGV4dCwgLTEpOworCisgICAgR093blB0cjxQYW5nb0xhbmd1YWdlPiBsYW5ndWFnZShwYW5n
b19sYW5ndWFnZV9nZXRfZGVmYXVsdCgpKTsKKyAgICBHT3duUHRyPFBhbmdvTG9nQXR0cj4gYXR0
cnMoZ19uZXcoUGFuZ29Mb2dBdHRyLCB1dGZsZW4rMSkpOworCisgICAgLy8gcGFuZ29fZ2V0X2xv
Z19hdHRycyB1c2VzIGFuIGFkaXRpb25hbCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0
LgorICAgIHBhbmdvX2dldF9sb2dfYXR0cnMoY3RleHQsIC0xLCAtMSwgbGFuZ3VhZ2UuZ2V0KCks
IGF0dHJzLmdldCgpLCB1dGZsZW4rMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aCsxOyBpKyspIHsKKyAgICAgICAgLy8gV2UgZ28gdGhyb3VnaCBlYWNoIGNoYXJhY3RlciB1bnRp
bCB3ZSBmaW5kIGFuIGlzX3dvcmRfc3RhcnQsCisgICAgICAgIC8vIHRoZW4gd2UgZ2V0IGludG8g
YW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBpc193b3JkX2VuZCBjb3JyZXNwb25kaW5nCisgICAg
ICAgIC8vIHRvIGl0LgorICAgICAgICBpZiAoYXR0cnMuZ2V0KClbaV0uaXNfd29yZF9zdGFydCkg
eworICAgICAgICAgICAgaW50IHN0YXJ0ID0gaTsKKyAgICAgICAgICAgIGludCBlbmQgPSBpOwor
ICAgICAgICAgICAgaW50IHdvcmRMZW5ndGg7CisKKyAgICAgICAgICAgIHdoaWxlIChhdHRycy5n
ZXQoKVtlbmRdLmlzX3dvcmRfZW5kIDwgMSkKKyAgICAgICAgICAgICAgICBlbmQrKzsKKworICAg
ICAgICAgICAgd29yZExlbmd0aCA9IGVuZCAtIHN0YXJ0OworICAgICAgICAgICAgLy8gU2V0IHRo
ZSBpdGVyYXRvciB0byBiZSBhdCB0aGUgY3VycmVudCB3b3JkIGVuZCwgc28gd2UgZG9uJ3QKKyAg
ICAgICAgICAgIC8vIGNoZWNrIGNoYXJhY3RlcnMgdHdpY2UuCisgICAgICAgICAgICBpID0gZW5k
OworCisgICAgICAgICAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKKyAg
ICAgICAgICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IHN0YXRpY19jYXN0PEVuY2hhbnREaWN0
Kj4oZGljdHMtPmRhdGEpOworICAgICAgICAgICAgICAgIGdjaGFyKiBjc3RhcnQgPSBnX3V0Zjhf
b2Zmc2V0X3RvX3BvaW50ZXIoY3RleHQsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBnaW50IGJ5
dGVzID0gc3RhdGljX2Nhc3Q8Z2ludD4oZ191dGY4X29mZnNldF90b19wb2ludGVyKGN0ZXh0LCBl
bmQpIC0gY3N0YXJ0KTsKKyAgICAgICAgICAgICAgICBnY2hhciogd29yZCA9IGdfbmV3MChnY2hh
ciwgYnl0ZXMrMSk7CisgICAgICAgICAgICAgICAgaW50IHJlc3VsdDsKKworICAgICAgICAgICAg
ICAgIGdfdXRmOF9zdHJuY3B5KHdvcmQsIGNzdGFydCwgZW5kIC0gc3RhcnQpOworCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZW5jaGFudF9kaWN0X2NoZWNrKGRpY3QsIHdvcmQsIC0xKTsKKyAg
ICAgICAgICAgICAgICBnX2ZyZWUod29yZCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkg
eworICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdMb2NhdGlvbiA9IHN0YXJ0OworICAg
ICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdMZW5ndGggPSB3b3JkTGVuZ3RoOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3AgY2hlY2tpbmcs
IHRoaXMgd29yZCBpcyBvayBpbiBhdCBsZWFzdCBvbmUgZGljdC4KKyAgICAgICAgICAgICAgICAg
ICAgKm1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgKm1pc3Nw
ZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitTdHJpbmcgVGV4
dENoZWNrZXJDbGllbnRFbmNoYW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmIGlucHV0V29yZCkKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBj
YW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcgY3VzdG9taXplZCBhbGdvcml0aG1zIGZvciB0aGUgcGFy
dGljdWxhciBicm93c2VyLgorICAgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMgYW4gZW1wdHkg
c3RyaW5nLgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVu
dEVuY2hhbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8
R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgV1RGOjpWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3NlcykKK3sKKyAgICBHU0xpc3QqIGRpY3RzID0gbV9lbmNoYW50RGljdHM7CisgICAg
Z3Vlc3Nlcy5jbGVhcigpOworCisgICAgZm9yICg7IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0
KSB7CisgICAgICAgIHNpemVfdCBudW1iZXJPZlN1Z2dlc3Rpb25zOworICAgICAgICBzaXplX3Qg
aTsKKworICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IHN0YXRpY19jYXN0PEVuY2hhbnREaWN0
Kj4oZGljdHMtPmRhdGEpOworICAgICAgICBnY2hhcioqIHN1Z2dlc3Rpb25zID0gZW5jaGFudF9k
aWN0X3N1Z2dlc3QoZGljdCwgd29yZC51dGY4KCkuZGF0YSgpLCAtMSwgJm51bWJlck9mU3VnZ2Vz
dGlvbnMpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJPZlN1Z2dlc3Rpb25zICYm
IGkgPCAxMDsgaSsrKQorICAgICAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRG
OChzdWdnZXN0aW9uc1tpXSkpOworCisgICAgICAgIGlmIChudW1iZXJPZlN1Z2dlc3Rpb25zID4g
MCkKKyAgICAgICAgICAgIGVuY2hhbnRfZGljdF9mcmVlX3N1Z2dlc3Rpb25zKGRpY3QsIHN1Z2dl
c3Rpb25zKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdldEF2YWlsYWJsZURpY3Rpb25hcmll
c0NhbGxiYWNrKGNvbnN0IGNoYXIqIGNvbnN0IGxhbmd1YWdlVGFnLCBjb25zdCBjaGFyKiBjb25z
dCwgY29uc3QgY2hhciogY29uc3QsIGNvbnN0IGNoYXIqIGNvbnN0LCB2b2lkKiBkYXRhKQorewor
ICAgIFZlY3RvcjxDU3RyaW5nPiogZGljdHMgPSBzdGF0aWNfY2FzdDxWZWN0b3I8Q1N0cmluZz4q
PihkYXRhKTsKKworICAgIGRpY3RzLT5hcHBlbmQobGFuZ3VhZ2VUYWcpOworfQorCit2b2lkIFRl
eHRDaGVja2VyQ2xpZW50RW5jaGFudDo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlKGNvbnN0
IGNoYXIqIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpCit7CisgICAgRW5jaGFudERpY3QqIGRpY3Q7
CisgICAgR1NMaXN0KiBzcGVsbERpY3Rpb25hcmllcyA9IDA7CisKKyAgICBpZiAoIWJyb2tlcikK
KyAgICAgICAgYnJva2VyID0gZW5jaGFudF9icm9rZXJfaW5pdCgpOworCisgICAgaWYgKHNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMpIHsKKyAgICAgICAgY2hhcioqIGxhbmdzID0gZ19zdHJzcGxpdChz
cGVsbENoZWNraW5nTGFuZ3VhZ2VzLCAiLCIsIC0xKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGxhbmdzW2ldOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChlbmNoYW50X2Jyb2tlcl9kaWN0X2V4
aXN0cyhicm9rZXIsIGxhbmdzW2ldKSkgeworICAgICAgICAgICAgICAgIGRpY3QgPSBlbmNoYW50
X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBsYW5nc1tpXSk7CisgICAgICAgICAgICAgICAg
c3BlbGxEaWN0aW9uYXJpZXMgPSBnX3NsaXN0X2FwcGVuZChzcGVsbERpY3Rpb25hcmllcywgZGlj
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ19zdHJmcmVldihsYW5ncyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgY2hhciogbGFuZ3VhZ2UgPSBwYW5nb19sYW5n
dWFnZV90b19zdHJpbmcoZ3RrX2dldF9kZWZhdWx0X2xhbmd1YWdlKCkpOworICAgICAgICBpZiAo
ZW5jaGFudF9icm9rZXJfZGljdF9leGlzdHMoYnJva2VyLCBsYW5ndWFnZSkpIHsKKyAgICAgICAg
ICAgIGRpY3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBsYW5ndWFnZSk7
CisgICAgICAgICAgICBzcGVsbERpY3Rpb25hcmllcyA9IGdfc2xpc3RfYXBwZW5kKHNwZWxsRGlj
dGlvbmFyaWVzLCBkaWN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIGRp
Y3Rpb25hcmllcyBzZWxlY3RlZCwgd2UgZ2V0IG9uZSBmcm9tIHRoZSBsaXN0CisgICAgICAgICAg
ICBWZWN0b3I8Q1N0cmluZz4gYWxsRGljdGlvbmFyaWVzOworICAgICAgICAgICAgZW5jaGFudF9i
cm9rZXJfbGlzdF9kaWN0cyhicm9rZXIsIGdldEF2YWlsYWJsZURpY3Rpb25hcmllc0NhbGxiYWNr
LCAmYWxsRGljdGlvbmFyaWVzKTsKKyAgICAgICAgICAgIGlmICghYWxsRGljdGlvbmFyaWVzLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGRpY3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0
X2RpY3QoYnJva2VyLCBhbGxEaWN0aW9uYXJpZXNbMF0uZGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICBzcGVsbERpY3Rpb25hcmllcyA9IGdfc2xpc3RfYXBwZW5kKHNwZWxsRGljdGlvbmFyaWVzLCBk
aWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBnX3NsaXN0X2ZvcmVh
Y2gobV9lbmNoYW50RGljdHMsIGZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UsIDApOworICAgIGdf
c2xpc3RfZnJlZShtX2VuY2hhbnREaWN0cyk7CisgICAgbV9lbmNoYW50RGljdHMgPSBzcGVsbERp
Y3Rpb25hcmllczsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmZyZWVTcGVs
bENoZWNraW5nTGFuZ3VhZ2UoZ3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIpCit7CisgICAgaWYgKCFi
cm9rZXIpCisgICAgICAgIGJyb2tlciA9IGVuY2hhbnRfYnJva2VyX2luaXQoKTsKKworICAgIEVu
Y2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3QqPihkYXRhKTsKKyAgICBl
bmNoYW50X2Jyb2tlcl9mcmVlX2RpY3QoYnJva2VyLCBkaWN0KTsKK30KKworfQpJbmRleDogU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRFbmNoYW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNr
ZXJDbGllbnRFbmNoYW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6
YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQu
b3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0Q2hl
Y2tlckNsaWVudEVuY2hhbnRfaAorI2RlZmluZSBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnRfaAor
CisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0dTTGlz
dCBHU0xpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3Owor
dHlwZWRlZiBzdHJ1Y3Qgc3RyX2VuY2hhbnRfYnJva2VyIEVuY2hhbnRCcm9rZXI7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQgOiBwdWJsaWMg
V2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dENo
ZWNrZXJDbGllbnRFbmNoYW50KFdlYktpdFdlYlZpZXcqKTsKKyAgICAgICAgflRleHRDaGVja2Vy
Q2xpZW50RW5jaGFudCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxE
b2N1bWVudChjb25zdCBXVEY6OlN0cmluZyYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5X
b3JkKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxs
aW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9j
YXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICB2aXJ0dWFsIFdURjo6U3Ry
aW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFdURjo6
U3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25z
dCBVQ2hhciosIGludCBsZW5ndGgsIFdURjo6VmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+
JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYgd29y
ZCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRleHQsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYg
Z3Vlc3Nlcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhX
ZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJikge30KKworICAg
ICAgICB2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZShjb25zdCBjaGFyKik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIGZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoZ3BvaW50ZXIsIGdwb2lu
dGVyKTsKKyAgICBwcml2YXRlOgorICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7Cisg
ICAgICAgIEdTTGlzdCogbV9lbmNoYW50RGljdHM7CisgICAgICAgIHN0YXRpYyBFbmNoYW50QnJv
a2VyKiBicm9rZXI7CisgICAgfTsKK30KKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAJKHJldmlzaW9uIDc4NjQ5KQorKysg
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgi
CiAjaW5jbHVkZSAid2Via2l0dmVyc2lvbi5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnNldHRpbmdz
cHJpdmF0ZS5oIgotI2luY2x1ZGUgPGVuY2hhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRl
IDxnbGliL2dpMThuLWxpYi5oPgpAQCAtOTAsNyArODksNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNl
dHRpbmdzUHJpdmF0ZSB7CiAgICAgZ2Jvb2xlYW4gZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmc7CiAg
ICAgZ2Jvb2xlYW4gZW5hYmxlX3NwZWxsX2NoZWNraW5nOwogICAgIGdjaGFyKiBzcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXM7Ci0gICAgR1NMaXN0KiBlbmNoYW50X2RpY3RzOwogICAgIGdib29sZWFu
IGVuYWJsZV9jYXJldF9icm93c2luZzsKICAgICBnYm9vbGVhbiBlbmFibGVfaHRtbDVfZGF0YWJh
c2U7CiAgICAgZ2Jvb2xlYW4gZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2U7CkBAIC05MjMsMjMg
KzkyMSw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3NfaW5pdChXZWIKICAgICB3
ZWJfc2V0dGluZ3MtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUod2ViX3NldHRp
bmdzLCBXRUJLSVRfVFlQRV9XRUJfU0VUVElOR1MsIFdlYktpdFdlYlNldHRpbmdzUHJpdmF0ZSk7
CiB9CiAKLXN0YXRpYyBFbmNoYW50QnJva2VyKiBnZXRfZW5jaGFudF9icm9rZXIoKQotewotICAg
IHN0YXRpYyBFbmNoYW50QnJva2VyKiBicm9rZXIgPSAwOwotICAgIGlmICghYnJva2VyKQotICAg
ICAgICBicm9rZXIgPSBlbmNoYW50X2Jyb2tlcl9pbml0KCk7Ci0KLSAgICByZXR1cm4gYnJva2Vy
OwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlKGdwb2ludGVy
IGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgICBFbmNoYW50RGljdCogZGljdCA9IHN0
YXRpY19jYXN0PEVuY2hhbnREaWN0Kj4oZGF0YSk7Ci0gICAgRW5jaGFudEJyb2tlciogYnJva2Vy
ID0gZ2V0X2VuY2hhbnRfYnJva2VyKCk7Ci0KLSAgICBlbmNoYW50X2Jyb2tlcl9mcmVlX2RpY3Qo
YnJva2VyLCBkaWN0KTsKLX0KLQogc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHdlYl9zZXR0
aW5ncyA9IFdFQktJVF9XRUJfU0VUVElOR1Mob2JqZWN0KTsKQEAgLTk1NSwyOCArOTM2LDE1IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3NfZmluYWxpemUKICAgICBnX2ZyZWUocHJp
di0+dXNlcl9zdHlsZXNoZWV0X3VyaSk7CiAgICAgZ19mcmVlKHByaXYtPnNwZWxsX2NoZWNraW5n
X2xhbmd1YWdlcyk7CiAKLSAgICBnX3NsaXN0X2ZvcmVhY2gocHJpdi0+ZW5jaGFudF9kaWN0cywg
ZnJlZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZSwgMCk7Ci0gICAgZ19zbGlzdF9mcmVlKHByaXYt
PmVuY2hhbnRfZGljdHMpOwotCiAgICAgZ19mcmVlKHByaXYtPnVzZXJfYWdlbnQpOwogCiAgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl9zZXR0aW5nc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRBdmFpbGFibGVEaWN0aW9uYXJpZXNDYWxs
YmFjayhjb25zdCBjaGFyKiBjb25zdCBsYW5ndWFnZVRhZywgY29uc3QgY2hhciogY29uc3QsIGNv
bnN0IGNoYXIqIGNvbnN0LCBjb25zdCBjaGFyKiBjb25zdCwgdm9pZCogZGF0YSkKLXsKLSAgICBW
ZWN0b3I8Q1N0cmluZz4qIGRpY3RzID0gc3RhdGljX2Nhc3Q8VmVjdG9yPENTdHJpbmc+Kj4oZGF0
YSk7Ci0KLSAgICBkaWN0cy0+YXBwZW5kKGxhbmd1YWdlVGFnKTsKLX0KLQogc3RhdGljIHZvaWQg
d2Via2l0X3dlYl9zZXR0aW5nc19zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKIHsKICAgICBX
ZWJLaXRXZWJTZXR0aW5ncyogd2ViX3NldHRpbmdzID0gV0VCS0lUX1dFQl9TRVRUSU5HUyhvYmpl
Y3QpOwogICAgIFdlYktpdFdlYlNldHRpbmdzUHJpdmF0ZSogcHJpdiA9IHdlYl9zZXR0aW5ncy0+
cHJpdjsKLSAgICBFbmNoYW50QnJva2VyKiBicm9rZXI7Ci0gICAgRW5jaGFudERpY3QqIGRpY3Q7
Ci0gICAgR1NMaXN0KiBzcGVsbERpY3Rpb25hcmllcyA9IDA7CiAKICAgICBzd2l0Y2gocHJvcF9p
ZCkgewogICAgIGNhc2UgUFJPUF9ERUZBVUxUX0VOQ09ESU5HOgpAQCAtMTA2OCwzNSArMTAzNiw2
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0X3Byb3AKICAgICBjYXNlIFBS
T1BfU1BFTExfQ0hFQ0tJTkdfTEFOR1VBR0VTOgogICAgICAgICBnX2ZyZWUocHJpdi0+c3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzKTsKICAgICAgICAgcHJpdi0+c3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzID0gZ19zdHJkdXAoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0KLSAgICAgICAgYnJv
a2VyID0gZ2V0X2VuY2hhbnRfYnJva2VyKCk7Ci0gICAgICAgIGlmIChwcml2LT5zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXMpIHsKLSAgICAgICAgICAgIGNoYXIqKiBsYW5ncyA9IGdfc3Ryc3BsaXQo
cHJpdi0+c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzLCAiLCIsIC0xKTsKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBsYW5nc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVuY2hh
bnRfYnJva2VyX2RpY3RfZXhpc3RzKGJyb2tlciwgbGFuZ3NbaV0pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRpY3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBsYW5nc1tp
XSk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWxsRGljdGlvbmFyaWVzID0gZ19zbGlzdF9hcHBl
bmQoc3BlbGxEaWN0aW9uYXJpZXMsIGRpY3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGdfc3RyZnJlZXYobGFuZ3MpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgY29uc3QgY2hhciogbGFuZ3VhZ2UgPSBwYW5nb19sYW5ndWFnZV90b19zdHJp
bmcoZ3RrX2dldF9kZWZhdWx0X2xhbmd1YWdlKCkpOwotICAgICAgICAgICAgaWYgKGVuY2hhbnRf
YnJva2VyX2RpY3RfZXhpc3RzKGJyb2tlciwgbGFuZ3VhZ2UpKSB7Ci0gICAgICAgICAgICAgICAg
ZGljdCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdChicm9rZXIsIGxhbmd1YWdlKTsKLSAg
ICAgICAgICAgICAgICBzcGVsbERpY3Rpb25hcmllcyA9IGdfc2xpc3RfYXBwZW5kKHNwZWxsRGlj
dGlvbmFyaWVzLCBkaWN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gTm8gZGljdGlvbmFyaWVzIHNlbGVjdGVkLCB3ZSBnZXQgb25lIGZyb20gdGhlIGxpc3QKLSAg
ICAgICAgICAgICAgICBWZWN0b3I8Q1N0cmluZz4gYWxsRGljdGlvbmFyaWVzOwotICAgICAgICAg
ICAgICAgIGVuY2hhbnRfYnJva2VyX2xpc3RfZGljdHMoYnJva2VyLCBnZXRBdmFpbGFibGVEaWN0
aW9uYXJpZXNDYWxsYmFjaywgJmFsbERpY3Rpb25hcmllcyk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFhbGxEaWN0aW9uYXJpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpY3Qg
PSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBhbGxEaWN0aW9uYXJpZXNbMF0u
ZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc3BlbGxEaWN0aW9uYXJpZXMgPSBnX3NsaXN0
X2FwcGVuZChzcGVsbERpY3Rpb25hcmllcywgZGljdCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGdfc2xpc3RfZm9yZWFjaChwcml2LT5lbmNo
YW50X2RpY3RzLCBmcmVlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlLCAwKTsKLSAgICAgICAgZ19z
bGlzdF9mcmVlKHByaXYtPmVuY2hhbnRfZGljdHMpOwotICAgICAgICBwcml2LT5lbmNoYW50X2Rp
Y3RzID0gc3BlbGxEaWN0aW9uYXJpZXM7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9F
TkFCTEVfWFNTX0FVRElUT1I6CiAgICAgICAgIHByaXYtPmVuYWJsZV94c3NfYXVkaXRvciA9IGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOwpAQCAtMTQyNCwxNSArMTM2Myw2IEBAIEdfQ09OU1Rf
UkVUVVJOIGdjaGFyKiB3ZWJraXRfd2ViX3NldHRpbmcKICAgICByZXR1cm4gcHJpdi0+dXNlcl9h
Z2VudDsKIH0KIAotR1NMaXN0KiB3ZWJraXRXZWJWaWV3R2V0RW5jaGFudERpY3RzKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpLCAwKTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyk7Ci0KLSAgICByZXR1cm4gc2V0
dGluZ3MtPnByaXYtPmVuY2hhbnRfZGljdHM7Ci19Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBX
ZWJDb3JlOjpFZGl0aW5nQmVoYXZpb3JUeXBlIGNvcmUoV2ViS2l0RWRpdGluZ0JlaGF2aW9yIHR5
cGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShy
ZXZpc2lvbiA3ODY0OSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4NSw2ICszNDg1LDEyIEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19zZXR0aW5nc19ub3QKICAgICAgICAgc2V0dGluZ3MtPnNldEphdmFFbmFi
bGVkKGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKSk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBn
X2ludGVybl9zdHJpbmcoImVuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmciKSkKICAgICAgICAgc2V0
dGluZ3MtPnNldEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZChnX3ZhbHVlX2dldF9ib29sZWFuKCZ2
YWx1ZSkpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGVsc2UgaWYgKG5hbWUgPT0gZ19p
bnRlcm5fc3RyaW5nKCJzcGVsbC1jaGVja2luZy1sYW5ndWFnZXMiKSkgeworICAgICAgICBXZWJL
aXQ6OkVkaXRvckNsaWVudCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpFZGl0b3JDbGll
bnQqPihjb3JlKHdlYlZpZXcpLT5lZGl0b3JDbGllbnQoKSk7CisgICAgICAgIHN0YXRpY19jYXN0
PFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50Kj4oY2xpZW50LT50ZXh0Q2hlY2tlcigp
KS0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlKGdfdmFsdWVfZ2V0X3N0cmluZygmdmFsdWUp
KTsKKyAgICB9CisjZW5kaWYKICAgICBlbHNlIGlmICghZ19vYmplY3RfY2xhc3NfZmluZF9wcm9w
ZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1Mod2ViU2V0dGluZ3MpLCBuYW1lKSkKICAgICAgICAgZ193
YXJuaW5nKCJVbmV4cGVjdGVkIHNldHRpbmcgJyVzJyIsIG5hbWUpOwogICAgIGdfdmFsdWVfdW5z
ZXQoJnZhbHVlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>