<?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>54446</bug_id>
          
          <creation_ts>2011-02-15 04:13:27 -0800</creation_ts>
          <short_desc>Share the helper functions used by Latin-1 and UTF-8 text codecs</short_desc>
          <delta_ts>2011-02-15 10:22:07 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>darin</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>351185</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-02-15 04:13:27 -0800</bug_when>
    <thetext>The new TextCodecUTF8 is using the 0x80808080 trick from TextCodecLatin1.
We should put the helper functions in a single place instead of duplicating it in both implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351187</commentid>
    <comment_count>1</comment_count>
      <attachid>82435</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-02-15 04:19:15 -0800</bug_when>
    <thetext>Created attachment 82435
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351313</commentid>
    <comment_count>2</comment_count>
      <attachid>82435</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-15 08:52:57 -0800</bug_when>
    <thetext>Comment on attachment 82435
Proposed patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Move MachineWord, UCharByteFiller and the other helper functions
&gt; +        into TextCodecHelpers.h where they can be used by both TextCodecUTF8
&gt; +        and TextCodecLatin1.

Very good idea--I should have done this--but I do not like the name “helpers” because it’s so vague.

I would call this TextCodecASCIIFastPath.h or something along those lines.

&gt; Source/WebCore/platform/text/TextCodecLatin1.cpp:130
&gt; +        if (*source &lt; 0x80) {

Should use isASCII instead of hardcoding 0x80.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351315</commentid>
    <comment_count>3</comment_count>
      <attachid>82435</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-15 08:53:59 -0800</bug_when>
    <thetext>Comment on attachment 82435
Proposed patch

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

&gt; Source/WebCore/platform/text/TextCodecHelpers.h:34
&gt; +// Assuming that a pointer is the size of a &quot;machine word&quot;, then
&gt; +// uintptr_t is an integer type that is also a machine word.
&gt; +typedef uintptr_t MachineWord;

Oops, this header needs to be in the WebCore namespace, not the global namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351335</commentid>
    <comment_count>4</comment_count>
      <attachid>82469</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-02-15 09:14:46 -0800</bug_when>
    <thetext>Created attachment 82469
Proposed patch v2

Updated patch addressing all comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351352</commentid>
    <comment_count>5</comment_count>
      <attachid>82469</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-15 09:34:50 -0800</bug_when>
    <thetext>Comment on attachment 82469
Proposed patch v2

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

r=me -- also had some ideas for further cleanup

&gt; Source/WebCore/platform/text/TextCodecLatin1.cpp:137
&gt; -                    if (chunk &amp; NonASCIIMask&lt;sizeof(uintptr_t)&gt;::value())
&gt; +                    if (chunk &amp; NonASCIIMask&lt;sizeof(MachineWord)&gt;::value())
&gt;                          goto useLookupTable;

I realized we can make this even cleaner by defining a function in the header:

    inline MachineWord NonASCIIMachineWordMask()
    {
        return NonASCIIMask&lt;sizeof(MachineWord)&gt;::value();
    }

Or:

    inline bool isAllASCII(MachineWord word)
    {
        return word &amp; NonASCIIMask&lt;sizeof(MachineWord)&gt;::value();
    }

And use one of these functions in the files. Then the template magic stays in the header.

&gt; Source/WebCore/platform/text/TextCodecLatin1.cpp:139
&gt; +                    UCharByteFiller&lt;sizeof(MachineWord)&gt;::copy(destination, source);

And here:

    inline void copyASCIIMachineWord(UChar* destination, const uint8_t* source)
    {
        UCharByteFiller&lt;sizeof(MachineWord)&gt;::copy(destination, source);
    }

Or the type of source could be const MachineWord* and we could cast it.

It’s nice to keep the template goop in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351357</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-02-15 09:43:30 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 82469 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82469&amp;action=review
&gt; 
&gt; r=me -- also had some ideas for further cleanup

And good ideas they are, will incorporate them when landing.

&gt;     inline bool isAllASCII(MachineWord word)
&gt;     {
&gt;         return word &amp; NonASCIIMask&lt;sizeof(MachineWord)&gt;::value();
&gt;     }

This should probably be called isNotAllASCII(). ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351361</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-15 09:45:11 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; And good ideas they are, will incorporate them when landing.
&gt; 
&gt; &gt;     inline bool isAllASCII(MachineWord word)
&gt; &gt;     {
&gt; &gt;         return word &amp; NonASCIIMask&lt;sizeof(MachineWord)&gt;::value();
&gt; &gt;     }
&gt; 
&gt; This should probably be called isNotAllASCII(). ;)

Or we could put a ! in the function, which is probably what I would do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351385</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-02-15 10:22:07 -0800</bug_when>
    <thetext>Committed r78580: &lt;http://trac.webkit.org/changeset/78580&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82435</attachid>
            <date>2011-02-15 04:19:15 -0800</date>
            <delta_ts>2011-02-15 09:14:46 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-54446.diff</filename>
            <type>text/plain</type>
            <size>16435</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNWE0YzU5Li43Nzc4NzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYg
QEAKKzIwMTEtMDItMTUgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNoYXJlIHRoZSBoZWxw
ZXIgZnVuY3Rpb25zIHVzZWQgYnkgTGF0aW4tMSBhbmQgVVRGLTggdGV4dCBjb2RlY3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NDQ2CisKKyAgICAg
ICAgTW92ZSBNYWNoaW5lV29yZCwgVUNoYXJCeXRlRmlsbGVyIGFuZCB0aGUgb3RoZXIgaGVscGVy
IGZ1bmN0aW9ucworICAgICAgICBpbnRvIFRleHRDb2RlY0hlbHBlcnMuaCB3aGVyZSB0aGV5IGNh
biBiZSB1c2VkIGJ5IGJvdGggVGV4dENvZGVjVVRGOAorICAgICAgICBhbmQgVGV4dENvZGVjTGF0
aW4xLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0hlbHBlcnMuaDogQWRkZWQuCisgICAg
ICAgIChpc0FsaWduZWRUb01hY2hpbmVXb3JkKToKKyAgICAgICAgKGFsaWduVG9NYWNoaW5lV29y
ZCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENvZGVjTGF0aW4xOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5jcHA6CisKIDIwMTEtMDItMTUgIERpcmsgU2NodWx6ZSAgPGty
aXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDdlNTgxZDYuLjcwMGIzMDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCkBAIC0yNjQ1LDYgKzI2NDUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlYy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0hlbHBlcnMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNMYXRpbjEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xh
dGluMS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZp
bmVkLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWQzZDE2NS4uZTRkM2RiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMzM0NCw2ICszMzQ0LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0
L1RleHRDaGVja2VyQ2xpZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNIZWxwZXJzLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNJQ1UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNMYXRpbjEuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggODgwYmFlMy4uMzUyZDhmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTIyNTMsNiArMjI1Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3Jt
L3RleHQvU2VnbWVudGVkU3RyaW5nLmggXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJp
ZXMuaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaCBcCisgICAgcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNIZWxwZXJzLmggXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmggXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaCBcCiAgICAgcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggN2EwOGFhYS4uNzQxNTkyMiAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTMwMjUzLDYgKzMwMjUz
LDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHRDb2RlY0hlbHBlcnMuaCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dENv
ZGVjSUNVLmNwcCIKIAkJCQkJPgogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ZjA2ZGJj
Li42MDIxNWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC02NTcsNiArNjU3LDcgQEAKIAkJMjRGNTRFQUQxMDFGRTkxNDAwMEFF
NzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQky
NTQyRjREQTExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MkY0RDgxMTY2QzI1
QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLzsgfTsKIAkJMjU0MkY0REIx
MTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREOTExNjZDMjVBMDBFODlBODYg
LyogVXNlckdlc3R1cmVJbmRpY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkyNkU5OEExMDEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVj
SGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjZFOThBMEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0hlbHBlcnMuaCAqLzsgfTsKIAkJ
Mjk0ODlGQzcxMkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTQ4OUZDNTEyQzAw
RjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaCAqLzsgfTsKIAkJMjlBODEy
MkIwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMEQwRkJCOUMxRDAwNTEwMjkz
IC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5oICovOyB9OwogCQkyOUE4MTIyQzBGQkI5QzFEMDA1MTAy
OTMgLyogQWNjZXNzaWJpbGl0eUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI5QTgxMjBFMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5
TGlzdC5oICovOyB9OwpAQCAtNjk5NSw2ICs2OTk2LDcgQEAKIAkJMjRGNTRFQUIxMDFGRTkxNDAw
MEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVIb3N0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI1NDJGNEQ4MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyR2VzdHVyZUluZGlj
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI1NDJGNEQ5MTE2NkMyNUEw
MEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVc2VyR2VzdHVyZUluZGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjSGVscGVycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNIZWxwZXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5NDg5RkM1MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OUE4MTIwRDBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlUYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIwRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJp
bGl0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0
eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTQ3LDYgKzE3NTQ5LDcg
QEAKIAkJCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAq
LywKIAkJCQlCMkMzREEwOTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjLmNwcCAqLywKIAkJ
CQlCMkMzREEwQTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjLmggKi8sCisJCQkJMjZFOThB
MEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0hlbHBlcnMuaCAqLywKIAkJCQlCMkMzREEw
QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjSUNVLmNwcCAqLywKIAkJCQlCMkMzREEwQzBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjSUNVLmggKi8sCiAJCQkJQjJDM0RBMEQwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5jcHAgKi8sCkBAIC0yMjQxNiw2ICsyMjQxOSw3
IEBACiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc1Q0EyOEIxMzAzNjVGODAwRTk5QUQ5IC8qIENyeXB0by5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc1Q0EyQTIxMzAzNjc5RDAwRTk5QUQ5IC8qIEpTQ3J5cHRvLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkyNkU5OEExMDEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjSGVscGVy
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0hlbHBlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjSGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjBl
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY0hlbHBlcnMuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBUZXh0Q29kZWNIZWxwZXJzX2gKKyNkZWZpbmUgVGV4dENvZGVjSGVscGVyc19oCisKKyNp
bmNsdWRlIDxzdGRpbnQuaD4KKworLy8gQXNzdW1pbmcgdGhhdCBhIHBvaW50ZXIgaXMgdGhlIHNp
emUgb2YgYSAibWFjaGluZSB3b3JkIiwgdGhlbgorLy8gdWludHB0cl90IGlzIGFuIGludGVnZXIg
dHlwZSB0aGF0IGlzIGFsc28gYSBtYWNoaW5lIHdvcmQuCit0eXBlZGVmIHVpbnRwdHJfdCBNYWNo
aW5lV29yZDsKKworLy8gVGhpcyBjb25zdGFudCBoYXMgdHlwZSB1aW50cHRyX3Qgc2luY2Ugd2Ug
d2lsbCB1c2UgaXQgdG8gYWxpZ24KKy8vIHBvaW50ZXJzLiBOb3QgYmVjYXVzZSBNYWNoaW5lV29y
ZCBpcyB1aW50cHRyX3QuCitjb25zdCB1aW50cHRyX3QgbWFjaGluZVdvcmRBbGlnbm1lbnRNYXNr
ID0gc2l6ZW9mKE1hY2hpbmVXb3JkKSAtIDE7CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPiBzdHJ1
Y3QgTm9uQVNDSUlNYXNrOwordGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNrPDQ+IHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgdmFsdWUoKSB7IHJldHVybiAweDgwODA4MDgwVTsgfQorfTsKK3Rl
bXBsYXRlPD4gc3RydWN0IE5vbkFTQ0lJTWFzazw4PiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODA4MDgwODA4MFVMTDsgfQorfTsKKwor
dGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI8ND4geworICAgIHN0YXRpYyB2b2lkIGNvcHkoVUNoYXIq
IGRlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90KiBzb3VyY2UpCisgICAgeworICAgICAgICBkZXN0
aW5hdGlvblswXSA9IHNvdXJjZVswXTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2Vb
MV07CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlWzJdOworICAgICAgICBkZXN0aW5h
dGlvblszXSA9IHNvdXJjZVszXTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgVUNoYXJC
eXRlRmlsbGVyPDg+IHsKKyAgICBzdGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBkZXN0aW5hdGlvbiwg
Y29uc3QgdWludDhfdCogc291cmNlKQorICAgIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBz
b3VyY2VbMF07CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzFdOworICAgICAgICBk
ZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsyXTsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBzb3Vy
Y2VbM107CisgICAgICAgIGRlc3RpbmF0aW9uWzRdID0gc291cmNlWzRdOworICAgICAgICBkZXN0
aW5hdGlvbls1XSA9IHNvdXJjZVs1XTsKKyAgICAgICAgZGVzdGluYXRpb25bNl0gPSBzb3VyY2Vb
Nl07CisgICAgICAgIGRlc3RpbmF0aW9uWzddID0gc291cmNlWzddOworICAgIH0KK307CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0FsaWduZWRUb01hY2hpbmVXb3JkKGNvbnN0IHZvaWQqIHBvaW50
ZXIpCit7CisgICAgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIp
ICYgbWFjaGluZVdvcmRBbGlnbm1lbnRNYXNrKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIGlubGluZSBUKiBhbGlnblRvTWFjaGluZVdvcmQoVCogcG9pbnRlcikKK3sKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfm1hY2hpbmVXb3JkQWxpZ25tZW50TWFzayk7Cit9CisKKyNlbmRpZiAvLyBUZXh0
Q29kZWNIZWxwZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjTGF0aW4xLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjTGF0aW4xLmNwcAppbmRleCAyYTIxN2M1Li43ODIxM2UwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaW5jbHVkZSAiVGV4dENvZGVjTGF0aW4xLmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiVGV4dENvZGVjSGVscGVycy5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMTE2LDc2ICsxMTYsNDIg
QEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJh
ciByZWdpc3RyYXIpCiAgICAgcmVnaXN0cmFyKCJVUy1BU0NJSSIsIG5ld1N0cmVhbWluZ1RleHRE
ZWNvZGVyV2luZG93c0xhdGluMSwgMCk7CiB9CiAKLXRlbXBsYXRlPHNpemVfdCBzaXplPiBzdHJ1
Y3QgTm9uQVNDSUlNYXNrOwotdGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNrPDQ+IHsKLSAg
ICBzdGF0aWMgdW5zaWduZWQgdmFsdWUoKSB7IHJldHVybiAweDgwODA4MDgwVTsgfQotfTsKLXRl
bXBsYXRlPD4gc3RydWN0IE5vbkFTQ0lJTWFzazw4PiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODA4MDgwODA4MFVMTDsgfQotfTsKLQot
dGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI7Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI8ND4gewotICAgIHN0YXRpYyB2b2lkIGNvcHkoVUNoYXIq
IGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYykKLSAgICB7Ci0gICAgICAgIGRlc3RbMF0g
PSBzcmNbMF07Ci0gICAgICAgIGRlc3RbMV0gPSBzcmNbMV07Ci0gICAgICAgIGRlc3RbMl0gPSBz
cmNbMl07Ci0gICAgICAgIGRlc3RbM10gPSBzcmNbM107Ci0gICAgfQotfTsKLXRlbXBsYXRlPD4g
c3RydWN0IFVDaGFyQnl0ZUZpbGxlcjw4PiB7Ci0gICAgc3RhdGljIHZvaWQgY29weShVQ2hhciog
ZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjKQotICAgIHsKLSAgICAgICAgZGVzdFswXSA9
IHNyY1swXTsKLSAgICAgICAgZGVzdFsxXSA9IHNyY1sxXTsKLSAgICAgICAgZGVzdFsyXSA9IHNy
Y1syXTsKLSAgICAgICAgZGVzdFszXSA9IHNyY1szXTsKLSAgICAgICAgZGVzdFs0XSA9IHNyY1s0
XTsKLSAgICAgICAgZGVzdFs1XSA9IHNyY1s1XTsKLSAgICAgICAgZGVzdFs2XSA9IHNyY1s2XTsK
LSAgICAgICAgZGVzdFs3XSA9IHNyY1s3XTsKLSAgICB9Ci19OwotCiBTdHJpbmcgVGV4dENvZGVj
TGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJv
b2wsIGJvb2wmKQogewogICAgIFVDaGFyKiBjaGFyYWN0ZXJzOwogICAgIFN0cmluZyByZXN1bHQg
PSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJzKTsKIAotICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGJ5dGVzKTsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBlbmQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihieXRlcyArIGxlbmd0aCk7Ci0gICAgY29u
c3QgdW5zaWduZWQgY2hhciogYWxpZ25lZEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihlbmQpICYgfihzaXplb2Yo
dWludHB0cl90KSAtIDEpKTsKLSAgICBVQ2hhciogZGVzdCA9IGNoYXJhY3RlcnM7CisgICAgY29u
c3QgdWludDhfdCogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnl0
ZXMpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGJ5dGVzICsgbGVuZ3RoKTsKKyAgICBjb25zdCB1aW50OF90KiBhbGlnbmVkRW5kID0g
YWxpZ25Ub01hY2hpbmVXb3JkKGVuZCk7CisgICAgVUNoYXIqIGRlc3RpbmF0aW9uID0gY2hhcmFj
dGVyczsKIAotICAgIHdoaWxlIChzcmMgPCBlbmQpIHsKLSAgICAgICAgaWYgKCpzcmMgPCAweDgw
KSB7CisgICAgd2hpbGUgKHNvdXJjZSA8IGVuZCkgeworICAgICAgICBpZiAoKnNvdXJjZSA8IDB4
ODApIHsKICAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgdmFsdWVzIDwgMHg4MCAobW9zdCBM
YXRpbi0xIHRleHQgd2lsbCBiZSBBU0NJSSkKLSAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgd2Un
cmUgYXQgYSBwcm9wZXJseSBhbGlnbmVkIGFkZHJlc3MsIHRoZW4gcmVhZCBmdWxsIENQVSB3b3Jk
cy4KLSAgICAgICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihzcmMpICYg
KHNpemVvZih1aW50cHRyX3QpIC0gMSkpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHNyYyA8
IGFsaWduZWRFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGNodW5rID0gKnJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnRwdHJfdCo+KHNyYyk7CisgICAgICAgICAgICBp
ZiAoaXNBbGlnbmVkVG9NYWNoaW5lV29yZChzb3VyY2UpKSB7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHNvdXJjZSA8IGFsaWduZWRFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgTWFjaGluZVdv
cmQgY2h1bmsgPSAqcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgTWFjaGluZVdvcmQqPihzb3Vy
Y2UpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaHVuayAmIE5vbkFTQ0lJTWFzazxzaXpl
b2YodWludHB0cl90KT46OnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuayAm
IE5vbkFTQ0lJTWFzazxzaXplb2YoTWFjaGluZVdvcmQpPjo6dmFsdWUoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gdXNlTG9va3VwVGFibGU7CiAKLSAgICAgICAgICAgICAgICAgICAg
VUNoYXJCeXRlRmlsbGVyPHNpemVvZih1aW50cHRyX3QpPjo6Y29weShkZXN0LCBzcmMpOwotCi0g
ICAgICAgICAgICAgICAgICAgIHNyYyArPSBzaXplb2YodWludHB0cl90KTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdCArPSBzaXplb2YodWludHB0cl90KTsKKyAgICAgICAgICAgICAgICAgICAg
VUNoYXJCeXRlRmlsbGVyPHNpemVvZihNYWNoaW5lV29yZCk+Ojpjb3B5KGRlc3RpbmF0aW9uLCBz
b3VyY2UpOworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc2l6ZW9mKE1hY2hpbmVXb3Jk
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gKz0gc2l6ZW9mKE1hY2hpbmVXb3Jk
KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoc3JjID09IGVuZCkK
KyAgICAgICAgICAgICAgICBpZiAoc291cmNlID09IGVuZCkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9ICpzcmM7CisgICAgICAg
ICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOwogICAgICAgICB9IGVsc2UgewogdXNlTG9va3Vw
VGFibGU6Ci0gICAgICAgICAgICAqZGVzdCA9IHRhYmxlWypzcmNdOworICAgICAgICAgICAgKmRl
c3RpbmF0aW9uID0gdGFibGVbKnNvdXJjZV07CiAgICAgICAgIH0KIAotICAgICAgICArK3NyYzsK
LSAgICAgICAgKytkZXN0OworICAgICAgICArK3NvdXJjZTsKKyAgICAgICAgKytkZXN0aW5hdGlv
bjsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAKaW5kZXggMzY5N2NkYy4uYjNjOTY2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjVVRGOC5o
IgogCisjaW5jbHVkZSAiVGV4dENvZGVjSGVscGVycy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3
dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgpAQCAtMzcsNTYgKzM4LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjb25zdCBpbnQgbm9uQ2hhcmFjdGVyID0gLTE7CiAKLS8vIEFzc3VtaW5n
IHRoYXQgYSBwb2ludGVyIGlzIHRoZSBzaXplIG9mIGEgIm1hY2hpbmUgd29yZCIsIHRoZW4KLS8v
IHVpbnRwdHJfdCBpcyBhbiBpbnRlZ2VyIHR5cGUgdGhhdCBpcyBhbHNvIGEgbWFjaGluZSB3b3Jk
LgotdHlwZWRlZiB1aW50cHRyX3QgTWFjaGluZVdvcmQ7Ci0KLS8vIFRoaXMgY29uc3RhbnQgaGFz
IHR5cGUgdWludHB0cl90IHNpbmNlIHdlIHdpbGwgdXNlIGl0IHRvIGFsaWduCi0vLyBwb2ludGVy
cy4gTm90IGJlY2F1c2UgTWFjaGluZVdvcmQgaXMgdWludHB0cl90LgotY29uc3QgdWludHB0cl90
IG1hY2hpbmVXb3JkQWxpZ25tZW50TWFzayA9IHNpemVvZihNYWNoaW5lV29yZCkgLSAxOwotCi10
ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4gc3RydWN0IE5vbkFTQ0lJTWFzazsKLXRlbXBsYXRlPD4gc3Ry
dWN0IE5vbkFTQ0lJTWFzazw0PiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIHZhbHVlKCkgeyByZXR1
cm4gMHg4MDgwODA4MFU7IH0KLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBOb25BU0NJSU1hc2s8OD4g
ewotICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUoKSB7IHJldHVybiAweDgwODA4
MDgwODA4MDgwODBVTEw7IH0KLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBzaXplPiBzdHJ1Y3QgVUNo
YXJCeXRlRmlsbGVyOwotdGVtcGxhdGU8PiBzdHJ1Y3QgVUNoYXJCeXRlRmlsbGVyPDQ+IHsKLSAg
ICBzdGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCogc291
cmNlKQotICAgIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07Ci0gICAgICAg
IGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzFdOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IHNv
dXJjZVsyXTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBzb3VyY2VbM107Ci0gICAgfQotfTsK
LXRlbXBsYXRlPD4gc3RydWN0IFVDaGFyQnl0ZUZpbGxlcjw4PiB7Ci0gICAgc3RhdGljIHZvaWQg
Y29weShVQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSkKLSAgICB7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwotICAgICAgICBkZXN0aW5hdGlvblsx
XSA9IHNvdXJjZVsxXTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBzb3VyY2VbMl07Ci0gICAg
ICAgIGRlc3RpbmF0aW9uWzNdID0gc291cmNlWzNdOwotICAgICAgICBkZXN0aW5hdGlvbls0XSA9
IHNvdXJjZVs0XTsKLSAgICAgICAgZGVzdGluYXRpb25bNV0gPSBzb3VyY2VbNV07Ci0gICAgICAg
IGRlc3RpbmF0aW9uWzZdID0gc291cmNlWzZdOwotICAgICAgICBkZXN0aW5hdGlvbls3XSA9IHNv
dXJjZVs3XTsKLSAgICB9Ci19OwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNBbGlnbmVkVG9NYWNo
aW5lV29yZChjb25zdCB2b2lkKiBwb2ludGVyKQotewotICAgIHJldHVybiAhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pihwb2ludGVyKSAmIG1hY2hpbmVXb3JkQWxpZ25tZW50TWFzayk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgVCogYWxpZ25Ub01hY2hpbmVX
b3JkKFQqIHBvaW50ZXIpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihwb2ludGVyKSAmIH5tYWNoaW5lV29yZEFsaWdubWVudE1h
c2spOwotfQotCiBQYXNzT3duUHRyPFRleHRDb2RlYz4gVGV4dENvZGVjVVRGODo6Y3JlYXRlKGNv
bnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQogewogICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgVGV4dENvZGVjVVRGOCk7Cg==
</data>
<flag name="review"
          id="74107"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82469</attachid>
            <date>2011-02-15 09:14:46 -0800</date>
            <delta_ts>2011-02-15 09:34:50 -0800</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-54446-v2.diff</filename>
            <type>text/plain</type>
            <size>16717</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4Y2RkYzMxLi4xNzhkY2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjkg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBTaGFy
ZSB0aGUgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IExhdGluLTEgYW5kIFVURi04IHRleHQgY29k
ZWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQ0
NgorCisgICAgICAgIE1vdmUgTWFjaGluZVdvcmQsIFVDaGFyQnl0ZUZpbGxlciBhbmQgdGhlIG90
aGVyIGhlbHBlciBmdW5jdGlvbnMKKyAgICAgICAgaW50byBUZXh0Q29kZWNBU0NJSUZhc3RQYXRo
Lmggd2hlcmUgdGhleSBjYW4gYmUgdXNlZCBieSBib3RoCisgICAgICAgIFRleHRDb2RlY1VURjgg
YW5kIFRleHRDb2RlY0xhdGluMS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNBU0NJSUZh
c3RQYXRoLmg6IEFkZGVkLgorICAgICAgICAoaXNBbGlnbmVkVG9NYWNoaW5lV29yZCk6CisgICAg
ICAgIChhbGlnblRvTWFjaGluZVdvcmQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENv
ZGVjTGF0aW4xLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZGVjb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwOgorCisyMDExLTAy
LTE1ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBSZW5hbWUgQ29sb3I6Om5hbWUoKSB0byBD
b2xvcjo6ZHJ0TmFtZSgpCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDQ2NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDdlNTgxZDYuLmFiMWEyNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yNjQ1LDYgKzI2NDUsNyBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWQzZDE2
NS4uN2E4NjhmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzM0NCw2ICszMzQ0LDcgQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWMuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNBU0NJ
SUZhc3RQYXRoLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggODgwYmFlMy4uYzk5MTRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIyNTMsNiArMjI1Myw3IEBA
IEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmggXAogICAg
IHBsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWMuaCBcCisgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNGYXN0UGF0aC5oIFwKICAgICBw
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VzZXJEZWZpbmVkLmggXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDdh
MDhhYWEuLmM1OTE5YTIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC0zMDI1Myw2ICszMDI1MywxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgog
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0Q29kZWNB
U0NJSUZhc3RQYXRoLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHRDb2RlY0lDVS5jcHAiCiAJCQkJCT4KIAkJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGYwNmRiYy4uYTdmOTE5OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjU3LDYg
KzY1Nyw3IEBACiAJCTI0RjU0RUFEMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hl
SG9zdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRG
NTRFQUIxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2
IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDJGNEQ4MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVy
ZUluZGljYXRvci5jcHAgKi87IH07CiAJCTI1NDJGNERCMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2Vy
R2VzdHVyZUluZGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjU0MkY0RDkxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjZF
OThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk4QTBGMTMwQTlGQ0Ew
MDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi87IH07CiAJCTI5NDg5RkM3MTJD
MDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0ODlGQzUxMkMwMEYwMzAwRDgzRjBG
IC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi87IH07CiAJCTI5QTgxMjJCMEZCQjlDMUQw
MDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTgxMjBEMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3Np
YmlsaXR5VGFibGUuaCAqLzsgfTsKIAkJMjlBODEyMkMwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vz
c2liaWxpdHlMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyOUE4MTIwRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUxpc3QuaCAqLzsg
fTsKQEAgLTY5OTUsNiArNjk5Niw3IEBACiAJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBB
cHBsaWNhdGlvbkNhY2hlSG9zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
cHBsaWNhdGlvbkNhY2hlSG9zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNTQy
RjREODExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNTQyRjREOTExNjZDMjVBMDBFODlBODYgLyog
VXNlckdlc3R1cmVJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VXNlckdlc3R1cmVJbmRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZF
OThBMEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTQ4OUZDNTEyQzAwRjAzMDBEODNGMEYgLyogQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjlBODEyMEQwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5VGFibGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEyMEUwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2li
aWxpdHlMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxp
dHlMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzU0Nyw2ICsxNzU0OSw3
IEBACiAJCQkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50Lmgg
Ki8sCiAJCQkJQjJDM0RBMDkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5jcHAgKi8sCiAJ
CQkJQjJDM0RBMEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oICovLAorCQkJCTI2RTk4
QTBGMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi8sCiAJCQkJ
QjJDM0RBMEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0lDVS5jcHAgKi8sCiAJCQkJQjJD
M0RBMEMwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0lDVS5oICovLAogCQkJCUIyQzNEQTBE
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNMYXRpbjEuY3BwICovLApAQCAtMjI0MTYsNiAr
MjI0MTksNyBAQAogCQkJCTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3NUNBMjhCMTMwMzY1RjgwMEU5OUFEOSAvKiBDcnlwdG8uaCBp
biBIZWFkZXJzICovLAogCQkJCTk3NUNBMkEyMTMwMzY3OUQwMEU5OUFEOSAvKiBKU0NyeXB0by5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMjZFOThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2Rl
Y0FTQ0lJRmFzdFBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0FTQ0lJRmFzdFBhdGguaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43Y2RlYzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmgKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dENvZGVjQVNDSUlGYXN0UGF0
aF9oCisjZGVmaW5lIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGhfaAorCisjaW5jbHVkZSA8c3RkaW50
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXNzdW1pbmcgdGhhdCBhIHBvaW50ZXIg
aXMgdGhlIHNpemUgb2YgYSAibWFjaGluZSB3b3JkIiwgdGhlbgorLy8gdWludHB0cl90IGlzIGFu
IGludGVnZXIgdHlwZSB0aGF0IGlzIGFsc28gYSBtYWNoaW5lIHdvcmQuCit0eXBlZGVmIHVpbnRw
dHJfdCBNYWNoaW5lV29yZDsKKworLy8gVGhpcyBjb25zdGFudCBoYXMgdHlwZSB1aW50cHRyX3Qg
c2luY2Ugd2Ugd2lsbCB1c2UgaXQgdG8gYWxpZ24KKy8vIHBvaW50ZXJzLiBOb3QgYmVjYXVzZSBN
YWNoaW5lV29yZCBpcyB1aW50cHRyX3QuCitjb25zdCB1aW50cHRyX3QgbWFjaGluZVdvcmRBbGln
bm1lbnRNYXNrID0gc2l6ZW9mKE1hY2hpbmVXb3JkKSAtIDE7CisKK3RlbXBsYXRlPHNpemVfdCBz
aXplPiBzdHJ1Y3QgTm9uQVNDSUlNYXNrOwordGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNr
PDQ+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWUoKSB7IHJldHVybiAweDgwODA4MDgwVTsg
fQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IE5vbkFTQ0lJTWFzazw4PiB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODA4MDgwODA4MFVMTDsg
fQorfTsKKwordGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI8ND4geworICAgIHN0YXRpYyB2b2lkIGNv
cHkoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90KiBzb3VyY2UpCisgICAgeworICAg
ICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0g
PSBzb3VyY2VbMV07CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlWzJdOworICAgICAg
ICBkZXN0aW5hdGlvblszXSA9IHNvdXJjZVszXTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgVUNoYXJCeXRlRmlsbGVyPDg+IHsKKyAgICBzdGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBkZXN0
aW5hdGlvbiwgY29uc3QgdWludDhfdCogc291cmNlKQorICAgIHsKKyAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBzb3VyY2VbMF07CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzFdOwor
ICAgICAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsyXTsKKyAgICAgICAgZGVzdGluYXRpb25b
M10gPSBzb3VyY2VbM107CisgICAgICAgIGRlc3RpbmF0aW9uWzRdID0gc291cmNlWzRdOworICAg
ICAgICBkZXN0aW5hdGlvbls1XSA9IHNvdXJjZVs1XTsKKyAgICAgICAgZGVzdGluYXRpb25bNl0g
PSBzb3VyY2VbNl07CisgICAgICAgIGRlc3RpbmF0aW9uWzddID0gc291cmNlWzddOworICAgIH0K
K307CisKK2lubGluZSBib29sIGlzQWxpZ25lZFRvTWFjaGluZVdvcmQoY29uc3Qgdm9pZCogcG9p
bnRlcikKK3sKKyAgICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocG9pbnRl
cikgJiBtYWNoaW5lV29yZEFsaWdubWVudE1hc2spOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgVCogYWxpZ25Ub01hY2hpbmVXb3JkKFQqIHBvaW50ZXIpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihwb2ludGVy
KSAmIH5tYWNoaW5lV29yZEFsaWdubWVudE1hc2spOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAppbmRleCAyYTIxN2M1Li4x
ODBiYjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0xhdGluMS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNM
YXRpbjEuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiVGV4dENvZGVjTGF0aW4xLmgi
CiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSAiVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgpAQCAtMTE2LDc2ICsxMTYsNDIgQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6
OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgcmVnaXN0
cmFyKCJVUy1BU0NJSSIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xhdGluMSwgMCk7
CiB9CiAKLXRlbXBsYXRlPHNpemVfdCBzaXplPiBzdHJ1Y3QgTm9uQVNDSUlNYXNrOwotdGVtcGxh
dGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNrPDQ+IHsKLSAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWUo
KSB7IHJldHVybiAweDgwODA4MDgwVTsgfQotfTsKLXRlbXBsYXRlPD4gc3RydWN0IE5vbkFTQ0lJ
TWFzazw4PiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSgpIHsgcmV0dXJu
IDB4ODA4MDgwODA4MDgwODA4MFVMTDsgfQotfTsKLQotdGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0
cnVjdCBVQ2hhckJ5dGVGaWxsZXI7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI8
ND4gewotICAgIHN0YXRpYyB2b2lkIGNvcHkoVUNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIHNyYykKLSAgICB7Ci0gICAgICAgIGRlc3RbMF0gPSBzcmNbMF07Ci0gICAgICAgIGRlc3Rb
MV0gPSBzcmNbMV07Ci0gICAgICAgIGRlc3RbMl0gPSBzcmNbMl07Ci0gICAgICAgIGRlc3RbM10g
PSBzcmNbM107Ci0gICAgfQotfTsKLXRlbXBsYXRlPD4gc3RydWN0IFVDaGFyQnl0ZUZpbGxlcjw4
PiB7Ci0gICAgc3RhdGljIHZvaWQgY29weShVQ2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hh
ciogc3JjKQotICAgIHsKLSAgICAgICAgZGVzdFswXSA9IHNyY1swXTsKLSAgICAgICAgZGVzdFsx
XSA9IHNyY1sxXTsKLSAgICAgICAgZGVzdFsyXSA9IHNyY1syXTsKLSAgICAgICAgZGVzdFszXSA9
IHNyY1szXTsKLSAgICAgICAgZGVzdFs0XSA9IHNyY1s0XTsKLSAgICAgICAgZGVzdFs1XSA9IHNy
Y1s1XTsKLSAgICAgICAgZGVzdFs2XSA9IHNyY1s2XTsKLSAgICAgICAgZGVzdFs3XSA9IHNyY1s3
XTsKLSAgICB9Ci19OwotCiBTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hh
ciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQogewogICAgIFVDaGFy
KiBjaGFyYWN0ZXJzOwogICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJzKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNy
YyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGJ5dGVzKTsKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBlbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihieXRlcyArIGxlbmd0aCk7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogYWxpZ25l
ZEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHJlaW50ZXJwcmV0
X2Nhc3Q8cHRyZGlmZl90PihlbmQpICYgfihzaXplb2YodWludHB0cl90KSAtIDEpKTsKLSAgICBV
Q2hhciogZGVzdCA9IGNoYXJhY3RlcnM7CisgICAgY29uc3QgdWludDhfdCogc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnl0ZXMpOworICAgIGNvbnN0IHVpbnQ4X3Qq
IGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ5dGVzICsgbGVuZ3RoKTsK
KyAgICBjb25zdCB1aW50OF90KiBhbGlnbmVkRW5kID0gYWxpZ25Ub01hY2hpbmVXb3JkKGVuZCk7
CisgICAgVUNoYXIqIGRlc3RpbmF0aW9uID0gY2hhcmFjdGVyczsKIAotICAgIHdoaWxlIChzcmMg
PCBlbmQpIHsKLSAgICAgICAgaWYgKCpzcmMgPCAweDgwKSB7Ci0gICAgICAgICAgICAvLyBGYXN0
IHBhdGggZm9yIHZhbHVlcyA8IDB4ODAgKG1vc3QgTGF0aW4tMSB0ZXh0IHdpbGwgYmUgQVNDSUkp
Ci0gICAgICAgICAgICAvLyBXYWl0IHVudGlsIHdlJ3JlIGF0IGEgcHJvcGVybHkgYWxpZ25lZCBh
ZGRyZXNzLCB0aGVuIHJlYWQgZnVsbCBDUFUgd29yZHMuCi0gICAgICAgICAgICBpZiAoIShyZWlu
dGVycHJldF9jYXN0PHB0cmRpZmZfdD4oc3JjKSAmIChzaXplb2YodWludHB0cl90KSAtIDEpKSkg
ewotICAgICAgICAgICAgICAgIHdoaWxlIChzcmMgPCBhbGlnbmVkRW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVpbnRwdHJfdCBjaHVuayA9ICpyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1
aW50cHRyX3QqPihzcmMpOworICAgIHdoaWxlIChzb3VyY2UgPCBlbmQpIHsKKyAgICAgICAgaWYg
KGlzQVNDSUkoKnNvdXJjZSkpIHsKKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgQVNDSUku
IE1vc3QgTGF0aW4tMSB0ZXh0IHdpbGwgYmUgQVNDSUkuCisgICAgICAgICAgICBpZiAoaXNBbGln
bmVkVG9NYWNoaW5lV29yZChzb3VyY2UpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJj
ZSA8IGFsaWduZWRFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgTWFjaGluZVdvcmQgY2h1bmsg
PSAqcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgTWFjaGluZVdvcmQqPihzb3VyY2UpOwogCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChjaHVuayAmIE5vbkFTQ0lJTWFzazxzaXplb2YodWludHB0
cl90KT46OnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuayAmIE5vbkFTQ0lJ
TWFzazxzaXplb2YoTWFjaGluZVdvcmQpPjo6dmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gdXNlTG9va3VwVGFibGU7CiAKLSAgICAgICAgICAgICAgICAgICAgVUNoYXJCeXRl
RmlsbGVyPHNpemVvZih1aW50cHRyX3QpPjo6Y29weShkZXN0LCBzcmMpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHNyYyArPSBzaXplb2YodWludHB0cl90KTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdCArPSBzaXplb2YodWludHB0cl90KTsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXJCeXRl
RmlsbGVyPHNpemVvZihNYWNoaW5lV29yZCk+Ojpjb3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UpOwor
ICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc2l6ZW9mKE1hY2hpbmVXb3JkKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb24gKz0gc2l6ZW9mKE1hY2hpbmVXb3JkKTsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoc3JjID09IGVuZCkKKyAgICAgICAg
ICAgICAgICBpZiAoc291cmNlID09IGVuZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9ICpzcmM7CisgICAgICAgICAgICAqZGVz
dGluYXRpb24gPSAqc291cmNlOwogICAgICAgICB9IGVsc2UgewogdXNlTG9va3VwVGFibGU6Ci0g
ICAgICAgICAgICAqZGVzdCA9IHRhYmxlWypzcmNdOworICAgICAgICAgICAgKmRlc3RpbmF0aW9u
ID0gdGFibGVbKnNvdXJjZV07CiAgICAgICAgIH0KIAotICAgICAgICArK3NyYzsKLSAgICAgICAg
KytkZXN0OworICAgICAgICArK3NvdXJjZTsKKyAgICAgICAgKytkZXN0aW5hdGlvbjsKICAgICB9
CiAKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjVVRGOC5jcHAKaW5kZXggMzY5N2NkYy4uYzM0NmIxYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjVVRGOC5oIgogCisjaW5j
bHVkZSAiVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYv
dW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgpAQCAtMzcsNTYgKzM4LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjb25zdCBpbnQgbm9uQ2hhcmFjdGVyID0gLTE7CiAKLS8vIEFzc3VtaW5nIHRo
YXQgYSBwb2ludGVyIGlzIHRoZSBzaXplIG9mIGEgIm1hY2hpbmUgd29yZCIsIHRoZW4KLS8vIHVp
bnRwdHJfdCBpcyBhbiBpbnRlZ2VyIHR5cGUgdGhhdCBpcyBhbHNvIGEgbWFjaGluZSB3b3JkLgot
dHlwZWRlZiB1aW50cHRyX3QgTWFjaGluZVdvcmQ7Ci0KLS8vIFRoaXMgY29uc3RhbnQgaGFzIHR5
cGUgdWludHB0cl90IHNpbmNlIHdlIHdpbGwgdXNlIGl0IHRvIGFsaWduCi0vLyBwb2ludGVycy4g
Tm90IGJlY2F1c2UgTWFjaGluZVdvcmQgaXMgdWludHB0cl90LgotY29uc3QgdWludHB0cl90IG1h
Y2hpbmVXb3JkQWxpZ25tZW50TWFzayA9IHNpemVvZihNYWNoaW5lV29yZCkgLSAxOwotCi10ZW1w
bGF0ZTxzaXplX3Qgc2l6ZT4gc3RydWN0IE5vbkFTQ0lJTWFzazsKLXRlbXBsYXRlPD4gc3RydWN0
IE5vbkFTQ0lJTWFzazw0PiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIHZhbHVlKCkgeyByZXR1cm4g
MHg4MDgwODA4MFU7IH0KLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBOb25BU0NJSU1hc2s8OD4gewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUoKSB7IHJldHVybiAweDgwODA4MDgw
ODA4MDgwODBVTEw7IH0KLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBzaXplPiBzdHJ1Y3QgVUNoYXJC
eXRlRmlsbGVyOwotdGVtcGxhdGU8PiBzdHJ1Y3QgVUNoYXJCeXRlRmlsbGVyPDQ+IHsKLSAgICBz
dGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCogc291cmNl
KQotICAgIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07Ci0gICAgICAgIGRl
c3RpbmF0aW9uWzFdID0gc291cmNlWzFdOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJj
ZVsyXTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBzb3VyY2VbM107Ci0gICAgfQotfTsKLXRl
bXBsYXRlPD4gc3RydWN0IFVDaGFyQnl0ZUZpbGxlcjw4PiB7Ci0gICAgc3RhdGljIHZvaWQgY29w
eShVQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSkKLSAgICB7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9
IHNvdXJjZVsxXTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBzb3VyY2VbMl07Ci0gICAgICAg
IGRlc3RpbmF0aW9uWzNdID0gc291cmNlWzNdOwotICAgICAgICBkZXN0aW5hdGlvbls0XSA9IHNv
dXJjZVs0XTsKLSAgICAgICAgZGVzdGluYXRpb25bNV0gPSBzb3VyY2VbNV07Ci0gICAgICAgIGRl
c3RpbmF0aW9uWzZdID0gc291cmNlWzZdOwotICAgICAgICBkZXN0aW5hdGlvbls3XSA9IHNvdXJj
ZVs3XTsKLSAgICB9Ci19OwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNBbGlnbmVkVG9NYWNoaW5l
V29yZChjb25zdCB2b2lkKiBwb2ludGVyKQotewotICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihwb2ludGVyKSAmIG1hY2hpbmVXb3JkQWxpZ25tZW50TWFzayk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgVCogYWxpZ25Ub01hY2hpbmVXb3Jk
KFQqIHBvaW50ZXIpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pihwb2ludGVyKSAmIH5tYWNoaW5lV29yZEFsaWdubWVudE1hc2sp
OwotfQotCiBQYXNzT3duUHRyPFRleHRDb2RlYz4gVGV4dENvZGVjVVRGODo6Y3JlYXRlKGNvbnN0
IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcg
VGV4dENvZGVjVVRGOCk7Cg==
</data>
<flag name="review"
          id="74143"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>