<?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>73118</bug_id>
          
          <creation_ts>2011-11-25 02:16:57 -0800</creation_ts>
          <short_desc>Upstream BlackBerry porting of platform/image-decoders</short_desc>
          <delta_ts>2011-11-29 00:10:51 -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>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73144</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Sean Wang">xuewen.ok</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>charles.wei</cc>
    
    <cc>dbates</cc>
    
    <cc>leo.yang</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>509049</commentid>
    <comment_count>0</comment_count>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2011-11-25 02:16:57 -0800</bug_when>
    <thetext>Blackberry&apos;s implementation of platform/image-decoders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509058</commentid>
    <comment_count>1</comment_count>
      <attachid>116587</attachid>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2011-11-25 02:39:02 -0800</bug_when>
    <thetext>Created attachment 116587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509374</commentid>
    <comment_count>2</comment_count>
      <attachid>116587</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-26 11:03:12 -0800</bug_when>
    <thetext>Comment on attachment 116587
Patch

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

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:24
&gt; +/**
&gt; + * Implementation notes:
&gt; + *
&gt; + * Current implementation provides the source image size without doing a full
&gt; + * decode. It seems that libimg does not support partial decoding.
&gt; + */

Please use C++-style comments.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:35
&gt; +static bool      s_initialized = false;

Remove the spaces between &quot;bool&quot; and &quot;s_initialized&quot;. We don&apos;t need to explicitly initialize s_initialized. s_initialized will be zero-initialized and hence false because it is a static variable. We should also move this declaration into libInit() since it is the only function that makes use of this variable.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:53
&gt; +    ImageReader(const char* data, size_t dataSize) :
&gt; +        m_data(data), m_size(dataSize), m_width(0), m_height(0) { libInit(); }

This should be written:

ImageReader(const char* data, size_t dataSize)
    : m_data(data)
    , m_size(dataSize)
    , m_width(0)
    , m_height(0)
{
    libInit();
}

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:59
&gt; +    int decode(size_t width, size_t height, ImageFrame* theFrame);

The argument name &quot;theFrame&quot; doesn&apos;t add any additional value to this signature that cannot be inferred from its datatype. Please remove it.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:62
&gt; +

Remove this empty line. The &quot;private:&quot; and its different indentation level sufficiently demarcates this part of the class declaration. I don&apos;t feel that this empty line further improves the readability of this class.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:120
&gt; +int ImageReader::decode(size_t width, size_t height, ImageFrame* theFrame)

I suggest renaming theFrame to aFrame or imageFrame or frame. The &quot;the&quot; in &quot;theFrame&quot; implies that there is only one such ImageFrame object, which isn&apos;t the case.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:132
&gt; +    _uint8* buf = reinterpret_cast&lt;_uint8*&gt;(malloc(stride * height));

buf =&gt; buffer

Can we use OwnArrayPtr here? Then we can remove the free(buf) calls since OwnArrayPtr will deallocate the array on destruction.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:216
&gt; +    // Check to see if it&apos;s already decoded. TODO: Could size change

TODO =&gt; FIXME

Also, the FIXME should be written on its own line to make it easier to spot.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.h:37
&gt; +    // This class decodes the JPEG image format.

This comment doesn&apos;t say anything more than what can be inferred from the name of this class. Either improve this comment or remove it.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.h:47
&gt; +        virtual ImageFrame* frameBufferAtIndex(size_t index);

The argument name &quot;index&quot; doesn&apos;t add any additional value to this signature that cannot be inferred from the name of this method. Please remove it.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.h:49
&gt; +        virtual void setData(SharedBuffer* data, bool allDataReceived);

The argument name &quot;data&quot; doesn&apos;t add any additional value to this signature that cannot be inferred from the name of this method. Please remove it.

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.h:52
&gt; +        ImageReader* m_reader;

We should use an OwnPtr for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509558</commentid>
    <comment_count>3</comment_count>
      <attachid>116696</attachid>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2011-11-27 21:33:48 -0800</bug_when>
    <thetext>Created attachment 116696
The fixed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509560</commentid>
    <comment_count>4</comment_count>
      <attachid>116696</attachid>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2011-11-27 21:35:38 -0800</bug_when>
    <thetext>Comment on attachment 116696
The fixed patch.

make some change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509561</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-27 21:36:38 -0800</bug_when>
    <thetext>Attachment 116696 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509562</commentid>
    <comment_count>6</comment_count>
      <attachid>116697</attachid>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2011-11-27 22:15:34 -0800</bug_when>
    <thetext>Created attachment 116697
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509620</commentid>
    <comment_count>7</comment_count>
      <attachid>116697</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-28 00:44:58 -0800</bug_when>
    <thetext>Comment on attachment 116697
Patch 2

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

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:135
&gt; +    _uint8* buffer = reinterpret_cast&lt;_uint8*&gt;(malloc(stride * height));

Can we use OwnArrayPtr here? Then we can remove the &quot;free(buffer)&quot; calls throughout this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510407</commentid>
    <comment_count>8</comment_count>
      <attachid>116870</attachid>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2011-11-28 19:22:46 -0800</bug_when>
    <thetext>Created attachment 116870
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510461</commentid>
    <comment_count>9</comment_count>
      <attachid>116870</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-28 21:10:34 -0800</bug_when>
    <thetext>Comment on attachment 116870
Patch 3

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

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:135
&gt; +    int stride = ((width * 3) + 3) &amp; ~3;

This line is a bit complicated. The 3 in the sub-expression &quot;width * 3&quot; refers to the number of color components in a stride: RGB, where as the other 3s in this line are part of a bitwise trick to ensure that the stride is a multiple of 2. If possible, it would be nice to emphasize the meaning for the first &apos;3&apos; and/or query libimg for the number of color components for the image format IMG_FMT_RGB888.

Nit: I suggest adding an inline comment here to explain that we ensure that the stride is a multiple of 2. I take it there are some performance implications to using a multiple of 2. It would be great if we could document the reason we make the stride a multiple of 2 in such a comment.

Also, the inner parentheses aren&apos;t necessary since multiplication has a higher precedence than addition.

One way to write this line would be:

const int ColorComponents = 3;
int stride = (ColorComponents * width + 3) &amp; ~3; // Use a multiple of 2 bytes to improve performance

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:155
&gt; +            aFrame-&gt;setRGBA(i, j, *(curPtr), *(curPtr + 1), *(curPtr + 2), 255);

Nit: I would write this as:

aFrame-&gt;setRGBA(i, j, curPtr[0], curPtr[1], curPtr[2], 255);

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.cpp:237
&gt; +}

Missing inline comment // namespace WebCore

(this file is longer than JPEGImageDecoder.h and hence having such an inline comment helps demarcate this curly brace as the end of namespace WebCore)

&gt; Source/WebCore/platform/image-decoders/blackberry/JPEGImageDecoder.h:55
&gt; +#endif

Nit: This is a short file. That being said, it&apos;s convention to put an inline comment here with the name of the #ifndef, // JPEGImageDecoder_h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510504</commentid>
    <comment_count>10</comment_count>
      <attachid>116898</attachid>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2011-11-28 22:29:03 -0800</bug_when>
    <thetext>Created attachment 116898
Patch 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510535</commentid>
    <comment_count>11</comment_count>
      <attachid>116898</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-28 23:38:25 -0800</bug_when>
    <thetext>Comment on attachment 116898
Patch 4

Thank you Sean for updating the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510550</commentid>
    <comment_count>12</comment_count>
      <attachid>116898</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-29 00:10:46 -0800</bug_when>
    <thetext>Comment on attachment 116898
Patch 4

Clearing flags on attachment: 116898

Committed r101336: &lt;http://trac.webkit.org/changeset/101336&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510551</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-29 00:10:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116587</attachid>
            <date>2011-11-25 02:39:02 -0800</date>
            <delta_ts>2011-11-27 21:33:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Upstream-BlackBerry-porting-of-platform-image-decode.patch</filename>
            <type>text/plain</type>
            <size>13111</size>
            <attacher name="Sean Wang">xuewen.ok</attacher>
            
              <data encoding="base64">RnJvbSAwMWEyMDY4NTFjZWM4MTVmM2U2ZjM0Y2E5MjNkZmFhNTJkODY1OGRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZWFuIFdhbmcgPFh1ZXdlbi5XYW5nQHRvcmNobW9iaWxlLmNv
bS5jbj4KRGF0ZTogRnJpLCAyNSBOb3YgMjAxMSAxODozNjozNCArMDgwMApTdWJqZWN0OiBbUEFU
Q0hdIFVwc3RyZWFtIEJsYWNrQmVycnkgcG9ydGluZyBvZiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cwogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTE4CgpSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIGNhbid0IGJlIGJ1aWx0IHll
dCwgbm8gdGVzdCBjYXNlcy4KClRoZSBpbml0aWFsIGF1dGhvciBpcyBEYXZpZCBUYXB1c2thIDxk
dGFwdXNrYUByaW0uY29tPi4KVGhlIG1haW4gY29udHJpYnV0b3JzIGFyZToKICAgIEdlb3JnZSBX
cmlnaHQgPGd3cmlnaHRAcmltLmNvbT4KICAgIFNjb3R0IENhbWVyb24gPHNjY2FtZXJvbkByaW0u
Y29tPgogICAgTmltYSBHaGFuYXZhdGlhbiA8bmdoYW5hdmF0aWFuQHJpbS5jb20+CgoqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IEFkZGVk
LgooV2ViQ29yZTo6bGliSW5pdCk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6SW1hZ2VSZWFkZXIp
OgooV2ViQ29yZTo6SW1hZ2VSZWFkZXI6On5JbWFnZVJlYWRlcik6CihXZWJDb3JlOjppbWdEZWNv
ZGVTZXR1cCk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6dXBkYXRlRGF0YSk6CihXZWJDb3JlOjpJ
bWFnZVJlYWRlcjo6c2V0U2l6ZSk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6c2l6ZUV4dHJhY3Qp
OgooV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OmRlY29kZSk6CihXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKToKKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6On5KUEVH
SW1hZ2VEZWNvZGVyKToKKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnNldERhdGEpOgooV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKFdlYkNvcmU6OkpQRUdJ
bWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CiogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgooV2ViQ29yZTo6SlBFR0lt
YWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgooV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rl
cjo6c3VwcG9ydHNBbHBoYSk6Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDMzICsrKwogLi4uL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVy
cnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAgfCAgMjUwICsrKysrKysrKysrKysrKysrKysrCiAuLi4v
aW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmggICB8ICAgNTggKysr
KysKIDMgZmlsZXMgY2hhbmdlZCwgMzQxIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
YmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVj
b2Rlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU2YzMwMDAuLjEyYzhiMDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxMS0xMS0yNSAgU2VhbiBXYW5nICA8WHVld2VuLldhbmdAdG9yY2htb2Jp
bGUuY29tLmNuPgorCisgICAgICAgIFVwc3RyZWFtIEJsYWNrQmVycnkgcG9ydGluZyBvZiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzMxMTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbml0aWFsIHVwc3RyZWFtLCBjYW4ndCBiZSBidWlsdCB5ZXQsIG5vIHRlc3Qg
Y2FzZXMuCisKKyAgICAgICAgVGhlIGluaXRpYWwgYXV0aG9yIGlzIERhdmlkIFRhcHVza2EgPGR0
YXB1c2thQHJpbS5jb20+LgorICAgICAgICBUaGUgbWFpbiBjb250cmlidXRvcnMgYXJlOgorICAg
ICAgICAgICAgR2VvcmdlIFdyaWdodCA8Z3dyaWdodEByaW0uY29tPgorICAgICAgICAgICAgU2Nv
dHQgQ2FtZXJvbiA8c2NjYW1lcm9uQHJpbS5jb20+CisgICAgICAgICAgICBOaW1hIEdoYW5hdmF0
aWFuIDxuZ2hhbmF2YXRpYW5AcmltLmNvbT4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6bGliSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJlYWRlcjo6SW1hZ2VS
ZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VSZWFkZXI6On5JbWFnZVJlYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjppbWdEZWNvZGVTZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVJlYWRlcjo6dXBkYXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJlYWRlcjo6c2V0
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJlYWRlcjo6c2l6ZUV4dHJhY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpK
UEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpQ
RUdJbWFnZURlY29kZXI6On5KUEVHSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpQ
RUdJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c3VwcG9ydHNBbHBoYSk6CisKIDIwMTEtMTEtMjQgIEtlbnRh
cm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluaXRpYWxpemUgZ2xv
YmFsIHZhcmlhYmxlcyBkdXJpbmcgSURMUGFyc2VyIG9iamVjdCBjcmVhdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVH
SW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWQyN2FiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAg
LTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworLyoqCisgKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAqCisgKiBDdXJyZW50IGltcGxl
bWVudGF0aW9uIHByb3ZpZGVzIHRoZSBzb3VyY2UgaW1hZ2Ugc2l6ZSB3aXRob3V0IGRvaW5nIGEg
ZnVsbAorICogZGVjb2RlLiBJdCBzZWVtcyB0aGF0IGxpYmltZyBkb2VzIG5vdCBzdXBwb3J0IHBh
cnRpYWwgZGVjb2RpbmcuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKUEVH
SW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGltZy9pbWcu
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
aW1nX2xpYl90IHNfaWxpYjsKK3N0YXRpYyBib29sICAgICAgc19pbml0aWFsaXplZCA9IGZhbHNl
OworCitzdGF0aWMgaW5saW5lIGludCBsaWJJbml0KCkKK3sKKyAgICBpZiAoc19pbml0aWFsaXpl
ZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaW1nX2xpYl9hdHRhY2goJnNfaWxpYikg
IT0gSU1HX0VSUl9PSykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBhdHRhY2ggdG8g
bGliaW1nLiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNfaW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgIHJldHVybiAwOworfQorCitjbGFzcyBJbWFnZVJlYWRlciB7CitwdWJsaWM6
CisgICAgSW1hZ2VSZWFkZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFTaXplKSA6Cisg
ICAgICAgIG1fZGF0YShkYXRhKSwgbV9zaXplKGRhdGFTaXplKSwgbV93aWR0aCgwKSwgbV9oZWln
aHQoMCkgeyBsaWJJbml0KCk7IH0KKyAgICB+SW1hZ2VSZWFkZXIoKSB7IH0KKworICAgIHZvaWQg
dXBkYXRlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpOworICAgIGludCBz
ZXRTaXplKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCk7CisgICAgaW50IHNpemVFeHRyYWN0
KHNpemVfdCYgd2lkdGgsIHNpemVfdCYgaGVpZ2h0KTsKKyAgICBpbnQgZGVjb2RlKHNpemVfdCB3
aWR0aCwgc2l6ZV90IGhlaWdodCwgSW1hZ2VGcmFtZSogdGhlRnJhbWUpOworCitwcml2YXRlOgor
CisgICAgY29uc3QgY2hhciogbV9kYXRhOworICAgIHNpemVfdCBtX3NpemU7CisgICAgc2l6ZV90
IG1fd2lkdGg7CisgICAgc2l6ZV90IG1faGVpZ2h0OworfTsKKworLy8gRnVuY3Rpb24gdG8gZ2V0
IHRoZSBvcmlnaW5hbCBzaXplIG9mIGFuIGltYWdlCitzdGF0aWMgaW50IGltZ0RlY29kZVNldHVw
KF9VaW50cHRydCBkYXRhLCBpbWdfdCogaW1nLCB1bnNpZ25lZCBmbGFncykKK3sKKyAgICBJbWFn
ZVJlYWRlciogcmVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbWFnZVJlYWRlcio+KGRhdGEpOwor
CisgICAgaWYgKChpbWctPmZsYWdzICYgKElNR19XIHwgSU1HX0gpKSA9PSAoSU1HX1cgfCBJTUdf
SCkpCisgICAgICAgIHJlYWRlci0+c2V0U2l6ZShpbWctPncsIGltZy0+aCk7CisKKyAgICAvLyBB
bHdheXM6IHdhbnQgdG8gc3RvcCBwcm9jZXNzaW5nIHdoZXRoZXIgZ2V0IGEgc2l6ZSBvciBub3Qu
CisgICAgcmV0dXJuIElNR19FUlJfSU5UUjsKK30KKwordm9pZCBJbWFnZVJlYWRlcjo6dXBkYXRl
RGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCit7CisgICAgbV9kYXRhID0g
ZGF0YTsKKyAgICBtX3NpemUgPSBkYXRhU2l6ZTsKK30KKworaW50IEltYWdlUmVhZGVyOjpzZXRT
aXplKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKK3sKKyAgICBtX3dpZHRoID0gd2lkdGg7
CisgICAgbV9oZWlnaHQgPSBoZWlnaHQ7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBJbWFnZVJl
YWRlcjo6c2l6ZUV4dHJhY3Qoc2l6ZV90JiB3aWR0aCwgc2l6ZV90JiBoZWlnaHQpCit7CisgICAg
aW1nX2RlY29kZV9jYWxsb3V0c190IGNhbGxvdXRzOworICAgIGltZ190IGltZzsKKyAgICBpb19z
dHJlYW1fdCogaW9zdHJlYW0gPSBpb19vcGVuKElPX01FTSwgSU9fUkVBRCwgbV9zaXplLCBtX2Rh
dGEpOworICAgIGlmICghaW9zdHJlYW0pCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1lbXNl
dCgmaW1nLCAwLCBzaXplb2YoaW1nKSk7CisgICAgbWVtc2V0KCZjYWxsb3V0cywgMCwgc2l6ZW9m
KGNhbGxvdXRzKSk7CisgICAgY2FsbG91dHMuc2V0dXBfZiA9IGltZ0RlY29kZVNldHVwOworICAg
IGNhbGxvdXRzLmRhdGEgPSByZWludGVycHJldF9jYXN0PF9VaW50cHRydD4odGhpcyk7CisKKyAg
ICBpbnQgcmMgPSBpbWdfbG9hZChzX2lsaWIsIGlvc3RyZWFtLCAmY2FsbG91dHMsICZpbWcpOwor
ICAgIGlvX2Nsb3NlKGlvc3RyZWFtKTsKKyAgICBpZiAocmMgIT0gSU1HX0VSUl9JTlRSKQorICAg
ICAgICByZXR1cm4gLTE7CisgICAgaWYgKCFtX3dpZHRoIHx8ICFtX2hlaWdodCkKKyAgICAgICAg
cmV0dXJuIC0xOworCisgICAgd2lkdGggPSBtX3dpZHRoOworICAgIGhlaWdodCA9IG1faGVpZ2h0
OworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBJbWFnZVJlYWRlcjo6ZGVjb2RlKHNpemVfdCB3
aWR0aCwgc2l6ZV90IGhlaWdodCwgSW1hZ2VGcmFtZSogdGhlRnJhbWUpCit7CisgICAgaWYgKGxp
YkluaXQoKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaW1nX3QgaW1nOworICAg
IG1lbXNldCgmaW1nLCAwLCBzaXplb2YoaW1nKSk7CisgICAgaW1nLmZvcm1hdCA9IElNR19GTVRf
UkdCODg4OworICAgIGltZy53ID0gd2lkdGg7CisgICAgaW1nLmggPSBoZWlnaHQ7CisKKyAgICBp
bnQgc3RyaWRlID0gKCh3aWR0aCAqIDMpICsgMykgJiB+MzsKKyAgICBfdWludDgqIGJ1ZiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8X3VpbnQ4Kj4obWFsbG9jKHN0cmlkZSAqIGhlaWdodCkpOworICAgIGlm
ICghYnVmKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaW1nLmFjY2Vzcy5kaXJlY3QuZGF0YSA9
IGJ1ZjsKKyAgICBpbWcuYWNjZXNzLmRpcmVjdC5zdHJpZGUgPSBzdHJpZGU7CisgICAgaW1nLmZs
YWdzID0gSU1HX1cgfCBJTUdfSCB8IElNR19ESVJFQ1QgfCBJTUdfRk9STUFUOworCisgICAgaW9f
c3RyZWFtX3QqIGlvc3RyZWFtID0gaW9fb3BlbihJT19NRU0sIElPX1JFQUQsIG1fc2l6ZSwgbV9k
YXRhKTsKKyAgICBpZiAoIWlvc3RyZWFtKSB7CisgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH0KKworICAgIGludCByYyA9IGltZ19sb2FkX3Jlc2l6ZShzX2lsaWIs
IGlvc3RyZWFtLCAwLCAmaW1nKTsKKyAgICBpb19jbG9zZShpb3N0cmVhbSk7CisgICAgaWYgKHJj
ICE9IElNR19FUlJfT0spIHsKKyAgICAgICAgZnJlZShidWYpOworICAgICAgICByZXR1cm4gLTE7
CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGhlaWdodDsgaisrKSB7Cisg
ICAgICAgIF91aW50OCogY3VyUHRyID0gYnVmICsgaiAqIHN0cmlkZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICAgICAgICAgIHRoZUZyYW1lLT5z
ZXRSR0JBKGksIGosICooY3VyUHRyKSwgKihjdXJQdHIgKyAxKSwgKihjdXJQdHIgKyAyKSwgMjU1
KTsKKyAgICAgICAgICAgIGN1clB0ciArPSAzOworICAgICAgICB9CisgICAgfQorICAgIGZyZWUo
YnVmKTsKKyAgICByZXR1cm4gMDsKK30KKworSlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVj
b2RlcihJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKKyAgICA6IEltYWdlRGVjb2RlcihhbHBo
YU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCisgICAgLCBtX3JlYWRlcigwKQor
eworfQorCitKUEVHSW1hZ2VEZWNvZGVyOjp+SlBFR0ltYWdlRGVjb2RlcigpCit7CisgICAgZGVs
ZXRlIG1fcmVhZGVyOworfQorCit2b2lkIEpQRUdJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBJbWFnZURlY29kZXI6
OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGlmIChtX3JlYWRlcikKKyAg
ICAgICAgbV9yZWFkZXItPnVwZGF0ZURhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgp
KTsKK30KKworYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQoreworICAg
IGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSkgeworICAgICAgICBpZiAoIW1f
cmVhZGVyKSB7CisgICAgICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgICAgIG1fcmVh
ZGVyID0gbmV3IEltYWdlUmVhZGVyKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Cisg
ICAgICAgICAgICBpZiAoIW1fcmVhZGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBzaXplX3Qgd2lkdGgsIGhlaWdodDsKKworICAgICAgICBpZiAo
bV9yZWFkZXItPnNpemVFeHRyYWN0KHdpZHRoLCBoZWlnaHQpID09IC0xKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK0ltYWdlRnJhbWUqIEpQRUdJbWFnZURlY29kZXI6OmZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFpc0FsbERhdGFSZWNl
aXZlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbmRleCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKKyAgICAgICAg
bV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKworICAgIEltYWdlRnJhbWUmIGZyYW1lID0g
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxy
ZWFkeSBkZWNvZGVkLiBUT0RPOiBDb3VsZCBzaXplIGNoYW5nZQorICAgIC8vIGJldHdlZW4gY2Fs
bHMgdG8gdGhpcyBtZXRob2Q/CisgICAgaWYgKGZyYW1lLnN0YXR1cygpID09IEltYWdlRnJhbWU6
OkZyYW1lQ29tcGxldGUpCisgICAgICAgIHJldHVybiAmZnJhbWU7CisKKyAgICBpZiAoZnJhbWUu
c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgeworICAgICAgICBpZiAoIXNpemUo
KS53aWR0aCgpIHx8ICFzaXplKCkuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXNTaXpl
QXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFmcmFtZS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7
CisgICAgICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CisgICAgICAgIGZyYW1lLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwor
ICAgICAgICAvLyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBp
bWFnZS4KKyAgICAgICAgZnJhbWUuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBzaXplKCkpKTsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVhZGVyKSB7CisgICAgICAgIHNl
dEZhaWxlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAobV9yZWFkZXIt
PmRlY29kZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAmZnJhbWUpID09IC0xKSB7
CisgICAgICAgIHNldEZhaWxlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBm
cmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgcmV0dXJuICZm
cmFtZTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGY5YmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQ
RUdJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlBFR0ltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIEpQ
RUdJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlUmVhZGVy
OworCisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBKUEVHIGltYWdlIGZvcm1hdC4KK2Ns
YXNzIEpQRUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEpQRUdJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFn
ZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAgICB2aXJ0dWFsIH5K
UEVHSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCisgICAgICAgIHZp
cnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImpwZyI7IH0K
KyAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmly
dHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEltYWdlUmVhZGVyKiBtX3JlYWRl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKLS0gCjEuNy41LjQK
Cg==
</data>
<flag name="review"
          id="115790"
          type_id="1"
          status="-"
          setter="dbates"
    />
    <flag name="commit-queue"
          id="115791"
          type_id="3"
          status="-"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116696</attachid>
            <date>2011-11-27 21:33:48 -0800</date>
            <delta_ts>2011-11-27 22:15:34 -0800</delta_ts>
            <desc>The fixed patch.</desc>
            <filename>0001-Upstream-BlackBerry-porting-of-platform-image-decode.patch</filename>
            <type>text/plain</type>
            <size>12913</size>
            <attacher name="Sean Wang">xuewen.ok</attacher>
            
              <data encoding="base64">RnJvbSA0NWE3YTc0NzY0OWY5YjBlN2JlNDg3YTczODg3ZDAzMzczNWY3MTIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZWFuIFdhbmcgPFh1ZXdlbi5XYW5nQHRvcmNobW9iaWxlLmNv
bS5jbj4KRGF0ZTogTW9uLCAyOCBOb3YgMjAxMSAxMjowMTo0NSArMDgwMApTdWJqZWN0OiBbUEFU
Q0hdIFVwc3RyZWFtIEJsYWNrQmVycnkgcG9ydGluZyBvZiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cwogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTE4CgpSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIGNhbid0IGJlIGJ1aWx0IHll
dCwgbm8gdGVzdCBjYXNlcy4KClRoZSBpbml0aWFsIGF1dGhvciBpcyBEYXZpZCBUYXB1c2thIDxk
dGFwdXNrYUByaW0uY29tPi4KVGhlIG1haW4gY29udHJpYnV0b3JzIGFyZToKICAgIEdlb3JnZSBX
cmlnaHQgPGd3cmlnaHRAcmltLmNvbT4KICAgIFNjb3R0IENhbWVyb24gPHNjY2FtZXJvbkByaW0u
Y29tPgogICAgTmltYSBHaGFuYXZhdGlhbiA8bmdoYW5hdmF0aWFuQHJpbS5jb20+CgoqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IEFkZGVk
LgooV2ViQ29yZTo6bGliSW5pdCk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6SW1hZ2VSZWFkZXIp
OgooV2ViQ29yZTo6SW1hZ2VSZWFkZXI6On5JbWFnZVJlYWRlcik6CihXZWJDb3JlOjppbWdEZWNv
ZGVTZXR1cCk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6dXBkYXRlRGF0YSk6CihXZWJDb3JlOjpJ
bWFnZVJlYWRlcjo6c2V0U2l6ZSk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6c2l6ZUV4dHJhY3Qp
OgooV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OmRlY29kZSk6CihXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKToKKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnNldERh
dGEpOgooV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKFdlYkNv
cmU6OkpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CiogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgooV2ViQ29y
ZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgooV2ViQ29yZTo6SlBFR0lt
YWdlRGVjb2Rlcjo6c3VwcG9ydHNBbHBoYSk6Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsrKwogLi4uL2ltYWdlLWRlY29kZXJz
L2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAgfCAgMjQ5ICsrKysrKysrKysrKysrKysr
KysrCiAuLi4vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmggICB8
ICAgNTYgKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMzM3IGluc2VydGlvbnMoKyksIDAgZGVsZXRp
b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBF
R0ltYWdlRGVjb2Rlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU2YzMwMDAuLmRlZmQ4ZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMS0xMS0yNyAgU2VhbiBXYW5nICA8WHVld2VuLldhbmdA
dG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFVwc3RyZWFtIEJsYWNrQmVycnkgcG9ydGlu
ZyBvZiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxMTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtLCBjYW4ndCBiZSBidWlsdCB5ZXQs
IG5vIHRlc3QgY2FzZXMuCisKKyAgICAgICAgVGhlIGluaXRpYWwgYXV0aG9yIGlzIERhdmlkIFRh
cHVza2EgPGR0YXB1c2thQHJpbS5jb20+LgorICAgICAgICBUaGUgbWFpbiBjb250cmlidXRvcnMg
YXJlOgorICAgICAgICAgICAgR2VvcmdlIFdyaWdodCA8Z3dyaWdodEByaW0uY29tPgorICAgICAg
ICAgICAgU2NvdHQgQ2FtZXJvbiA8c2NjYW1lcm9uQHJpbS5jb20+CisgICAgICAgICAgICBOaW1h
IEdoYW5hdmF0aWFuIDxuZ2hhbmF2YXRpYW5AcmltLmNvbT4KKworICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6bGliSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJlYWRl
cjo6SW1hZ2VSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VSZWFkZXI6On5JbWFnZVJl
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjppbWdEZWNvZGVTZXR1cCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVJlYWRlcjo6dXBkYXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJl
YWRlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJlYWRlcjo6c2l6ZUV4dHJh
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlBF
R0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJ
bWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c3VwcG9ydHNBbHBoYSk6CisKIDIwMTEtMTEt
MjQgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluaXRp
YWxpemUgZ2xvYmFsIHZhcmlhYmxlcyBkdXJpbmcgSURMUGFyc2VyIG9iamVjdCBjcmVhdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2ti
ZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2ZTY4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rl
ci5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6CisvLyBDdXJyZW50IGltcGxl
bWVudGF0aW9uIHByb3ZpZGVzIHRoZSBzb3VyY2UgaW1hZ2Ugc2l6ZSB3aXRob3V0IGRvaW5nIGEg
ZnVsbAorLy8gZGVjb2RlLiBJdCBzZWVtcyB0aGF0IGxpYmltZyBkb2VzIG5vdCBzdXBwb3J0IHBh
cnRpYWwgZGVjb2RpbmcuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKUEVHSW1h
Z2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGltZy9pbWcuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbWdfbGliX3Qgc19pbGliOworCitzdGF0aWMgaW5s
aW5lIGludCBsaWJJbml0KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBzX2luaXRpYWxpemVkOworICAg
IGlmIChzX2luaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbWdfbGli
X2F0dGFjaCgmc19pbGliKSAhPSBJTUdfRVJSX09LKSB7CisgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGF0dGFjaCB0byBsaWJpbWcuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cisg
ICAgc19pbml0aWFsaXplZCA9IHRydWU7CisgICAgcmV0dXJuIDA7Cit9CisKK2NsYXNzIEltYWdl
UmVhZGVyIHsKK3B1YmxpYzoKKyAgICBJbWFnZVJlYWRlcihjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgZGF0YVNpemUpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgICAgICwgbV9zaXplKGRh
dGFTaXplKQorICAgICAgICAsIG1fd2lkdGgoMCkKKyAgICAgICAgLCBtX2hlaWdodCgwKQorICAg
IHsKKyAgICAgICAgbGliSW5pdCgpOworICAgIH0KKyAgICB+SW1hZ2VSZWFkZXIoKSB7IH0KKwor
ICAgIHZvaWQgdXBkYXRlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpOwor
ICAgIGludCBzZXRTaXplKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCk7CisgICAgaW50IHNp
emVFeHRyYWN0KHNpemVfdCYgd2lkdGgsIHNpemVfdCYgaGVpZ2h0KTsKKyAgICBpbnQgZGVjb2Rl
KHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgSW1hZ2VGcmFtZSopOworCitwcml2YXRlOgor
ICAgIGNvbnN0IGNoYXIqIG1fZGF0YTsKKyAgICBzaXplX3QgbV9zaXplOworICAgIHNpemVfdCBt
X3dpZHRoOworICAgIHNpemVfdCBtX2hlaWdodDsKK307CisKKy8vIEZ1bmN0aW9uIHRvIGdldCB0
aGUgb3JpZ2luYWwgc2l6ZSBvZiBhbiBpbWFnZQorc3RhdGljIGludCBpbWdEZWNvZGVTZXR1cChf
VWludHB0cnQgZGF0YSwgaW1nX3QqIGltZywgdW5zaWduZWQgZmxhZ3MpCit7CisgICAgSW1hZ2VS
ZWFkZXIqIHJlYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2VSZWFkZXIqPihkYXRhKTsKKwor
ICAgIGlmICgoaW1nLT5mbGFncyAmIChJTUdfVyB8IElNR19IKSkgPT0gKElNR19XIHwgSU1HX0gp
KQorICAgICAgICByZWFkZXItPnNldFNpemUoaW1nLT53LCBpbWctPmgpOworCisgICAgLy8gQWx3
YXlzOiB3YW50IHRvIHN0b3AgcHJvY2Vzc2luZyB3aGV0aGVyIGdldCBhIHNpemUgb3Igbm90Lgor
ICAgIHJldHVybiBJTUdfRVJSX0lOVFI7Cit9CisKK3ZvaWQgSW1hZ2VSZWFkZXI6OnVwZGF0ZURh
dGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQoreworICAgIG1fZGF0YSA9IGRh
dGE7CisgICAgbV9zaXplID0gZGF0YVNpemU7Cit9CisKK2ludCBJbWFnZVJlYWRlcjo6c2V0U2l6
ZShzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpCit7CisgICAgbV93aWR0aCA9IHdpZHRoOwor
ICAgIG1faGVpZ2h0ID0gaGVpZ2h0OworICAgIHJldHVybiAwOworfQorCitpbnQgSW1hZ2VSZWFk
ZXI6OnNpemVFeHRyYWN0KHNpemVfdCYgd2lkdGgsIHNpemVfdCYgaGVpZ2h0KQoreworICAgIGlt
Z19kZWNvZGVfY2FsbG91dHNfdCBjYWxsb3V0czsKKyAgICBpbWdfdCBpbWc7CisgICAgaW9fc3Ry
ZWFtX3QqIGlvc3RyZWFtID0gaW9fb3BlbihJT19NRU0sIElPX1JFQUQsIG1fc2l6ZSwgbV9kYXRh
KTsKKyAgICBpZiAoIWlvc3RyZWFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtZW1zZXQo
JmltZywgMCwgc2l6ZW9mKGltZykpOworICAgIG1lbXNldCgmY2FsbG91dHMsIDAsIHNpemVvZihj
YWxsb3V0cykpOworICAgIGNhbGxvdXRzLnNldHVwX2YgPSBpbWdEZWNvZGVTZXR1cDsKKyAgICBj
YWxsb3V0cy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxfVWludHB0cnQ+KHRoaXMpOworCisgICAg
aW50IHJjID0gaW1nX2xvYWQoc19pbGliLCBpb3N0cmVhbSwgJmNhbGxvdXRzLCAmaW1nKTsKKyAg
ICBpb19jbG9zZShpb3N0cmVhbSk7CisgICAgaWYgKHJjICE9IElNR19FUlJfSU5UUikKKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQpCisgICAgICAgIHJl
dHVybiAtMTsKKworICAgIHdpZHRoID0gbV93aWR0aDsKKyAgICBoZWlnaHQgPSBtX2hlaWdodDsK
KworICAgIHJldHVybiAwOworfQorCitpbnQgSW1hZ2VSZWFkZXI6OmRlY29kZShzaXplX3Qgd2lk
dGgsIHNpemVfdCBoZWlnaHQsIEltYWdlRnJhbWUqIGFGcmFtZSkKK3sKKyAgICBpZiAobGliSW5p
dCgpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpbWdfdCBpbWc7CisgICAgbWVt
c2V0KCZpbWcsIDAsIHNpemVvZihpbWcpKTsKKyAgICBpbWcuZm9ybWF0ID0gSU1HX0ZNVF9SR0I4
ODg7CisgICAgaW1nLncgPSB3aWR0aDsKKyAgICBpbWcuaCA9IGhlaWdodDsKKworICAgIGludCBz
dHJpZGUgPSAoKHdpZHRoICogMykgKyAzKSAmIH4zOworICAgIF91aW50OCogYnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDxfdWludDgqPihtYWxsb2Moc3RyaWRlICogaGVpZ2h0KSk7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpbWcuYWNjZXNzLmRpcmVjdC5kYXRh
ID0gYnVmZmVyOworICAgIGltZy5hY2Nlc3MuZGlyZWN0LnN0cmlkZSA9IHN0cmlkZTsKKyAgICBp
bWcuZmxhZ3MgPSBJTUdfVyB8IElNR19IIHwgSU1HX0RJUkVDVCB8IElNR19GT1JNQVQ7CisKKyAg
ICBpb19zdHJlYW1fdCogaW9zdHJlYW0gPSBpb19vcGVuKElPX01FTSwgSU9fUkVBRCwgbV9zaXpl
LCBtX2RhdGEpOworICAgIGlmICghaW9zdHJlYW0pIHsKKyAgICAgICAgZnJlZShidWZmZXIpOwor
ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaW50IHJjID0gaW1nX2xvYWRfcmVzaXpl
KHNfaWxpYiwgaW9zdHJlYW0sIDAsICZpbWcpOworICAgIGlvX2Nsb3NlKGlvc3RyZWFtKTsKKyAg
ICBpZiAocmMgIT0gSU1HX0VSUl9PSykgeworICAgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICAg
IHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaGVpZ2h0
OyBqKyspIHsKKyAgICAgICAgX3VpbnQ4KiBjdXJQdHIgPSBidWZmZXIgKyBqICogc3RyaWRlOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2lkdGg7IGkrKykgeworICAgICAgICAg
ICAgYUZyYW1lLT5zZXRSR0JBKGksIGosICooY3VyUHRyKSwgKihjdXJQdHIgKyAxKSwgKihjdXJQ
dHIgKyAyKSwgMjU1KTsKKyAgICAgICAgICAgIGN1clB0ciArPSAzOworICAgICAgICB9CisgICAg
fQorICAgIGZyZWUoYnVmZmVyKTsKKyAgICByZXR1cm4gMDsKK30KKworSlBFR0ltYWdlRGVjb2Rl
cjo6SlBFR0ltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlU291cmNlOjpHYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKKyAgICA6IElt
YWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCit7Cit9
CisKK3ZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBh
bGxEYXRhUmVjZWl2ZWQpOworCisgICAgaWYgKG1fcmVhZGVyKQorICAgICAgICBtX3JlYWRlci0+
dXBkYXRlRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOworfQorCitib29sIEpQ
RUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCit7CisgICAgaWYgKCFJbWFnZURlY29k
ZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIGlmICghbV9yZWFkZXIpIHsKKyAgICAg
ICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICAgICAgbV9yZWFkZXIgPSBhZG9wdFB0cihu
ZXcgSW1hZ2VSZWFkZXIobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSk7CisgICAgICAg
ICAgICBpZiAoIW1fcmVhZGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBzaXplX3Qgd2lkdGgsIGhlaWdodDsKKworICAgICAgICBpZiAobV9yZWFk
ZXItPnNpemVFeHRyYWN0KHdpZHRoLCBoZWlnaHQpID09IC0xKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoIXNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXpl
QXZhaWxhYmxlKCk7Cit9CisKK0ltYWdlRnJhbWUqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFpc0FsbERhdGFSZWNlaXZlZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKKyAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKworICAgIEltYWdlRnJhbWUmIGZyYW1lID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdOworCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxyZWFkeSBk
ZWNvZGVkLgorICAgIC8vIEZJWE1FOiBDb3VsZCBzaXplIGNoYW5nZQorICAgIC8vIGJldHdlZW4g
Y2FsbHMgdG8gdGhpcyBtZXRob2Q/CisgICAgaWYgKGZyYW1lLnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lQ29tcGxldGUpCisgICAgICAgIHJldHVybiAmZnJhbWU7CisKKyAgICBpZiAoZnJh
bWUuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgeworICAgICAgICBpZiAoIXNp
emUoKS53aWR0aCgpIHx8ICFzaXplKCkuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXNT
aXplQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFmcmFtZS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkp
KSB7CisgICAgICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgICAgIGZyYW1lLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwp
OworICAgICAgICAvLyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGly
ZSBpbWFnZS4KKyAgICAgICAgZnJhbWUuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBzaXplKCkpKTsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVhZGVyKSB7CisgICAgICAg
IHNldEZhaWxlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAobV9yZWFk
ZXItPmRlY29kZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAmZnJhbWUpID09IC0x
KSB7CisgICAgICAgIHNldEZhaWxlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBmcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgcmV0dXJu
ICZmcmFtZTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwM2JmMGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5
L0pQRUdJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlBFR0ltYWdlRGVjb2Rlcl9oCisjZGVmaW5l
IEpQRUdJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlUmVh
ZGVyOworCitjbGFzcyBKUEVHSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7Cisg
ICAgcHVibGljOgorICAgICAgICBKUEVHSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU9w
dGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKworICAgICAg
ICAvLyBJbWFnZURlY29kZXIKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNp
b24oKSBjb25zdCB7IHJldHVybiAianBnIjsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXpl
QXZhaWxhYmxlKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1
ZmZlciosIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFdU
Rjo6T3duUHRyPEltYWdlUmVhZGVyPiBtX3JlYWRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="115930"
          type_id="1"
          status="-"
          setter="xuewen.ok"
    />
    <flag name="commit-queue"
          id="115931"
          type_id="3"
          status="-"
          setter="xuewen.ok"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116697</attachid>
            <date>2011-11-27 22:15:34 -0800</date>
            <delta_ts>2011-11-28 19:22:46 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>0001-Upstream-BlackBerry-porting-of-platform-image-decode.patch</filename>
            <type>text/plain</type>
            <size>12804</size>
            <attacher name="Sean Wang">xuewen.ok</attacher>
            
              <data encoding="base64">RnJvbSA5OGQyMTdkYjkzMWM1MGEzOWNjNDY1ZDE4ZTZhNjIzMzFlYzQwOTY4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZWFuIFdhbmcgPFh1ZXdlbi5XYW5nQHRvcmNobW9iaWxlLmNv
bS5jbj4KRGF0ZTogTW9uLCAyOCBOb3YgMjAxMSAxMjowMTo0NSArMDgwMApTdWJqZWN0OiBbUEFU
Q0hdIFVwc3RyZWFtIEJsYWNrQmVycnkgcG9ydGluZyBvZiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cwogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTE4CgpSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIGNhbid0IGJlIGJ1aWx0IHll
dCwgbm8gdGVzdCBjYXNlcy4KClRoZSBpbml0aWFsIGF1dGhvciBpcyBEYXZpZCBUYXB1c2thIDxk
dGFwdXNrYUByaW0uY29tPi4KVGhlIG1haW4gY29udHJpYnV0b3JzIGFyZToKICAgIEdlb3JnZSBX
cmlnaHQgPGd3cmlnaHRAcmltLmNvbT4KICAgIFNjb3R0IENhbWVyb24gPHNjY2FtZXJvbkByaW0u
Y29tPgogICAgTmltYSBHaGFuYXZhdGlhbiA8bmdoYW5hdmF0aWFuQHJpbS5jb20+CgoqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IEFkZGVk
LgooV2ViQ29yZTo6bGliSW5pdCk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6SW1hZ2VSZWFkZXIp
OgooV2ViQ29yZTo6aW1nRGVjb2RlU2V0dXApOgooV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OnVwZGF0
ZURhdGEpOgooV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OnNldFNpemUpOgooV2ViQ29yZTo6SW1hZ2VS
ZWFkZXI6OnNpemVFeHRyYWN0KToKKFdlYkNvcmU6OkltYWdlUmVhZGVyOjpkZWNvZGUpOgooV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2Rlcik6CihXZWJDb3JlOjpKUEVH
SW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmlzU2l6
ZUF2YWlsYWJsZSk6CihXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgoqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rl
ci5oOiBBZGRlZC4KKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9u
KToKKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnN1cHBvcnRzQWxwaGEpOgotLS0KIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArKysK
IC4uLi9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuY3BwIHwgIDI0
OCArKysrKysrKysrKysrKysrKysrKwogLi4uL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBF
R0ltYWdlRGVjb2Rlci5oICAgfCAgIDU2ICsrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMzNSBpbnNl
cnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NmMzMDAw
Li4yZGRkYzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMTEtMjcgIFNlYW4g
V2FuZyAgPFh1ZXdlbi5XYW5nQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBVcHN0cmVh
bSBCbGFja0JlcnJ5IHBvcnRpbmcgb2YgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTE4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwg
Y2FuJ3QgYmUgYnVpbHQgeWV0LCBubyB0ZXN0IGNhc2VzLgorCisgICAgICAgIFRoZSBpbml0aWFs
IGF1dGhvciBpcyBEYXZpZCBUYXB1c2thIDxkdGFwdXNrYUByaW0uY29tPi4KKyAgICAgICAgVGhl
IG1haW4gY29udHJpYnV0b3JzIGFyZToKKyAgICAgICAgICAgIEdlb3JnZSBXcmlnaHQgPGd3cmln
aHRAcmltLmNvbT4KKyAgICAgICAgICAgIFNjb3R0IENhbWVyb24gPHNjY2FtZXJvbkByaW0uY29t
PgorICAgICAgICAgICAgTmltYSBHaGFuYXZhdGlhbiA8bmdoYW5hdmF0aWFuQHJpbS5jb20+CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURl
Y29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpYkluaXQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VSZWFkZXI6OkltYWdlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlt
Z0RlY29kZVNldHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUmVhZGVyOjp1cGRhdGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUmVhZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlUmVhZGVyOjpzaXplRXh0cmFjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OkpQ
RUdJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJ
bWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVy
OjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVy
OjpzdXBwb3J0c0FscGhhKToKKwogMjAxMS0xMS0yNCAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5pdGlhbGl6ZSBnbG9iYWwgdmFyaWFibGVzIGR1cmlu
ZyBJRExQYXJzZXIgb2JqZWN0IGNyZWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1h
Z2VEZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQwMjhk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvLyBJbXBsZW1lbnRh
dGlvbiBub3RlczoKKy8vIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgdGhlIHNvdXJj
ZSBpbWFnZSBzaXplIHdpdGhvdXQgZG9pbmcgYSBmdWxsCisvLyBkZWNvZGUuIEl0IHNlZW1zIHRo
YXQgbGliaW1nIGRvZXMgbm90IHN1cHBvcnQgcGFydGlhbCBkZWNvZGluZy4KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUgPGVy
cm5vLmg+CisjaW5jbHVkZSA8aW1nL2ltZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlt
Z19saWJfdCBzX2lsaWI7CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpYkluaXQoKQoreworICAgIHN0
YXRpYyBib29sIHNfaW5pdGlhbGl6ZWQ7CisgICAgaWYgKHNfaW5pdGlhbGl6ZWQpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGltZ19saWJfYXR0YWNoKCZzX2lsaWIpICE9IElNR19FUlJf
T0spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gYXR0YWNoIHRvIGxpYmltZy4iKTsK
KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzX2luaXRpYWxpemVkID0gdHJ1ZTsKKyAg
ICByZXR1cm4gMDsKK30KKworY2xhc3MgSW1hZ2VSZWFkZXIgeworcHVibGljOgorICAgIEltYWdl
UmVhZGVyKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKKyAgICAgICAgOiBtX2Rh
dGEoZGF0YSkKKyAgICAgICAgLCBtX3NpemUoZGF0YVNpemUpCisgICAgICAgICwgbV93aWR0aCgw
KQorICAgICAgICAsIG1faGVpZ2h0KDApCisgICAgeworICAgICAgICBsaWJJbml0KCk7CisgICAg
fQorCisgICAgdm9pZCB1cGRhdGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhU2l6
ZSk7CisgICAgaW50IHNldFNpemUoc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0KTsKKyAgICBp
bnQgc2l6ZUV4dHJhY3Qoc2l6ZV90JiB3aWR0aCwgc2l6ZV90JiBoZWlnaHQpOworICAgIGludCBk
ZWNvZGUoc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBJbWFnZUZyYW1lKik7CisKK3ByaXZh
dGU6CisgICAgY29uc3QgY2hhciogbV9kYXRhOworICAgIHNpemVfdCBtX3NpemU7CisgICAgc2l6
ZV90IG1fd2lkdGg7CisgICAgc2l6ZV90IG1faGVpZ2h0OworfTsKKworLy8gRnVuY3Rpb24gdG8g
Z2V0IHRoZSBvcmlnaW5hbCBzaXplIG9mIGFuIGltYWdlCitzdGF0aWMgaW50IGltZ0RlY29kZVNl
dHVwKF9VaW50cHRydCBkYXRhLCBpbWdfdCogaW1nLCB1bnNpZ25lZCBmbGFncykKK3sKKyAgICBJ
bWFnZVJlYWRlciogcmVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbWFnZVJlYWRlcio+KGRhdGEp
OworCisgICAgaWYgKChpbWctPmZsYWdzICYgKElNR19XIHwgSU1HX0gpKSA9PSAoSU1HX1cgfCBJ
TUdfSCkpCisgICAgICAgIHJlYWRlci0+c2V0U2l6ZShpbWctPncsIGltZy0+aCk7CisKKyAgICAv
LyBBbHdheXM6IHdhbnQgdG8gc3RvcCBwcm9jZXNzaW5nIHdoZXRoZXIgZ2V0IGEgc2l6ZSBvciBu
b3QuCisgICAgcmV0dXJuIElNR19FUlJfSU5UUjsKK30KKwordm9pZCBJbWFnZVJlYWRlcjo6dXBk
YXRlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCit7CisgICAgbV9kYXRh
ID0gZGF0YTsKKyAgICBtX3NpemUgPSBkYXRhU2l6ZTsKK30KKworaW50IEltYWdlUmVhZGVyOjpz
ZXRTaXplKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKK3sKKyAgICBtX3dpZHRoID0gd2lk
dGg7CisgICAgbV9oZWlnaHQgPSBoZWlnaHQ7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBJbWFn
ZVJlYWRlcjo6c2l6ZUV4dHJhY3Qoc2l6ZV90JiB3aWR0aCwgc2l6ZV90JiBoZWlnaHQpCit7Cisg
ICAgaW1nX2RlY29kZV9jYWxsb3V0c190IGNhbGxvdXRzOworICAgIGltZ190IGltZzsKKyAgICBp
b19zdHJlYW1fdCogaW9zdHJlYW0gPSBpb19vcGVuKElPX01FTSwgSU9fUkVBRCwgbV9zaXplLCBt
X2RhdGEpOworICAgIGlmICghaW9zdHJlYW0pCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1l
bXNldCgmaW1nLCAwLCBzaXplb2YoaW1nKSk7CisgICAgbWVtc2V0KCZjYWxsb3V0cywgMCwgc2l6
ZW9mKGNhbGxvdXRzKSk7CisgICAgY2FsbG91dHMuc2V0dXBfZiA9IGltZ0RlY29kZVNldHVwOwor
ICAgIGNhbGxvdXRzLmRhdGEgPSByZWludGVycHJldF9jYXN0PF9VaW50cHRydD4odGhpcyk7CisK
KyAgICBpbnQgcmMgPSBpbWdfbG9hZChzX2lsaWIsIGlvc3RyZWFtLCAmY2FsbG91dHMsICZpbWcp
OworICAgIGlvX2Nsb3NlKGlvc3RyZWFtKTsKKyAgICBpZiAocmMgIT0gSU1HX0VSUl9JTlRSKQor
ICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCFtX3dpZHRoIHx8ICFtX2hlaWdodCkKKyAgICAg
ICAgcmV0dXJuIC0xOworCisgICAgd2lkdGggPSBtX3dpZHRoOworICAgIGhlaWdodCA9IG1faGVp
Z2h0OworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBJbWFnZVJlYWRlcjo6ZGVjb2RlKHNpemVf
dCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgSW1hZ2VGcmFtZSogYUZyYW1lKQoreworICAgIGlmIChs
aWJJbml0KCkgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGltZ190IGltZzsKKyAg
ICBtZW1zZXQoJmltZywgMCwgc2l6ZW9mKGltZykpOworICAgIGltZy5mb3JtYXQgPSBJTUdfRk1U
X1JHQjg4ODsKKyAgICBpbWcudyA9IHdpZHRoOworICAgIGltZy5oID0gaGVpZ2h0OworCisgICAg
aW50IHN0cmlkZSA9ICgod2lkdGggKiAzKSArIDMpICYgfjM7CisgICAgX3VpbnQ4KiBidWZmZXIg
PSByZWludGVycHJldF9jYXN0PF91aW50OCo+KG1hbGxvYyhzdHJpZGUgKiBoZWlnaHQpKTsKKyAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGltZy5hY2Nlc3MuZGlyZWN0
LmRhdGEgPSBidWZmZXI7CisgICAgaW1nLmFjY2Vzcy5kaXJlY3Quc3RyaWRlID0gc3RyaWRlOwor
ICAgIGltZy5mbGFncyA9IElNR19XIHwgSU1HX0ggfCBJTUdfRElSRUNUIHwgSU1HX0ZPUk1BVDsK
KworICAgIGlvX3N0cmVhbV90KiBpb3N0cmVhbSA9IGlvX29wZW4oSU9fTUVNLCBJT19SRUFELCBt
X3NpemUsIG1fZGF0YSk7CisgICAgaWYgKCFpb3N0cmVhbSkgeworICAgICAgICBmcmVlKGJ1ZmZl
cik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpbnQgcmMgPSBpbWdfbG9hZF9y
ZXNpemUoc19pbGliLCBpb3N0cmVhbSwgMCwgJmltZyk7CisgICAgaW9fY2xvc2UoaW9zdHJlYW0p
OworICAgIGlmIChyYyAhPSBJTUdfRVJSX09LKSB7CisgICAgICAgIGZyZWUoYnVmZmVyKTsKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBo
ZWlnaHQ7IGorKykgeworICAgICAgICBfdWludDgqIGN1clB0ciA9IGJ1ZmZlciArIGogKiBzdHJp
ZGU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CisgICAg
ICAgICAgICBhRnJhbWUtPnNldFJHQkEoaSwgaiwgKihjdXJQdHIpLCAqKGN1clB0ciArIDEpLCAq
KGN1clB0ciArIDIpLCAyNTUpOworICAgICAgICAgICAgY3VyUHRyICs9IDM7CisgICAgICAgIH0K
KyAgICB9CisgICAgZnJlZShidWZmZXIpOworICAgIHJldHVybiAwOworfQorCitKUEVHSW1hZ2VE
ZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9w
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTb3VyY2U6Okdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQorICAg
IDogSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikK
K3sKK30KKwordm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKGRh
dGEsIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBpZiAobV9yZWFkZXIpCisgICAgICAgIG1fcmVh
ZGVyLT51cGRhdGVEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Cit9CisKK2Jv
b2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKCFtX3JlYWRlcikgewor
ICAgICAgICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgICAgICBtX3JlYWRlciA9IGFkb3B0
UHRyKG5ldyBJbWFnZVJlYWRlcihtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpKTsKKyAg
ICAgICAgICAgIGlmICghbV9yZWFkZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHNpemVfdCB3aWR0aCwgaGVpZ2h0OworCisgICAgICAgIGlmICht
X3JlYWRlci0+c2l6ZUV4dHJhY3Qod2lkdGgsIGhlaWdodCkgPT0gLTEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKTsKK30KKworSW1hZ2VGcmFtZSogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIWlzQWxsRGF0YVJlY2Vp
dmVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGluZGV4KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQorICAgICAgICBt
X2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOworCisgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgaXQncyBhbHJl
YWR5IGRlY29kZWQuCisgICAgLy8gRklYTUU6IENvdWxkIHNpemUgY2hhbmdlCisgICAgLy8gYmV0
d2VlbiBjYWxscyB0byB0aGlzIG1ldGhvZD8KKyAgICBpZiAoZnJhbWUuc3RhdHVzKCkgPT0gSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuICZmcmFtZTsKKworICAgIGlm
IChmcmFtZS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CisgICAgICAgIGlm
ICghc2l6ZSgpLndpZHRoKCkgfHwgIXNpemUoKS5oZWlnaHQoKSkgeworICAgICAgICAgICAgaWYg
KCFpc1NpemVBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIWZyYW1lLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWln
aHQoKSkpIHsKKyAgICAgICAgICAgIHNldEZhaWxlZCgpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICAgICAgZnJhbWUuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFy
dGlhbCk7CisgICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUg
ZW50aXJlIGltYWdlLgorICAgICAgICBmcmFtZS5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0
KEludFBvaW50KCksIHNpemUoKSkpOworICAgIH0KKworICAgIGlmICghbV9yZWFkZXIpIHsKKyAg
ICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICht
X3JlYWRlci0+ZGVjb2RlKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksICZmcmFtZSkg
PT0gLTEpIHsKKyAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIGZyYW1lLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBy
ZXR1cm4gJmZyYW1lOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNv
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAzYmYwZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNr
YmVycnkvSlBFR0ltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKUEVHSW1hZ2VEZWNvZGVyX2gKKyNk
ZWZpbmUgSlBFR0ltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VSZWFkZXI7CisKK2NsYXNzIEpQRUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpQRUdJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFs
cGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworCisg
ICAgICAgIC8vIEltYWdlRGVjb2RlcgorICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJqcGciOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1NpemVBdmFpbGFibGUoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxwaGEoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hh
cmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgV1RGOjpPd25QdHI8SW1hZ2VSZWFkZXI+IG1fcmVhZGVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKwotLSAKMS43LjUuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116870</attachid>
            <date>2011-11-28 19:22:46 -0800</date>
            <delta_ts>2011-11-28 22:29:03 -0800</delta_ts>
            <desc>Patch 3</desc>
            <filename>0001-Upstream-BlackBerry-porting-of-platform-image-decode.patch</filename>
            <type>text/plain</type>
            <size>12700</size>
            <attacher name="Sean Wang">xuewen.ok</attacher>
            
              <data encoding="base64">RnJvbSBhMGQzZTZhOGFlOTE4MmIxNjVlOWE0MzlkMWY2OTU4YmRlNDQ0YWUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZWFuIFdhbmcgPFh1ZXdlbi5XYW5nQHRvcmNobW9iaWxlLmNv
bS5jbj4KRGF0ZTogVHVlLCAyOSBOb3YgMjAxMSAxMToxNjozMSArMDgwMApTdWJqZWN0OiBbUEFU
Q0hdIFVwc3RyZWFtIEJsYWNrQmVycnkgcG9ydGluZyBvZiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cwogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTE4CgpSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIGNhbid0IGJlIGJ1aWx0IHll
dCwgbm8gdGVzdCBjYXNlcy4KClRoZSBpbml0aWFsIGF1dGhvciBpcyBEYXZpZCBUYXB1c2thIDxk
dGFwdXNrYUByaW0uY29tPi4KVGhlIG1haW4gY29udHJpYnV0b3JzIGFyZToKICAgIEdlb3JnZSBX
cmlnaHQgPGd3cmlnaHRAcmltLmNvbT4KICAgIFNjb3R0IENhbWVyb24gPHNjY2FtZXJvbkByaW0u
Y29tPgogICAgTmltYSBHaGFuYXZhdGlhbiA8bmdoYW5hdmF0aWFuQHJpbS5jb20+CgoqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IEFkZGVk
LgooV2ViQ29yZTo6bGliSW5pdCk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6SW1hZ2VSZWFkZXIp
OgooV2ViQ29yZTo6aW1nRGVjb2RlU2V0dXApOgooV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OnVwZGF0
ZURhdGEpOgooV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OnNldFNpemUpOgooV2ViQ29yZTo6SW1hZ2VS
ZWFkZXI6OnNpemVFeHRyYWN0KToKKFdlYkNvcmU6OkltYWdlUmVhZGVyOjpkZWNvZGUpOgooV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2Rlcik6CihXZWJDb3JlOjpKUEVH
SW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmlzU2l6
ZUF2YWlsYWJsZSk6CihXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgoqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rl
ci5oOiBBZGRlZC4KKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9u
KToKKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnN1cHBvcnRzQWxwaGEpOgotLS0KIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArKysK
IC4uLi9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuY3BwIHwgIDIz
OCArKysrKysrKysrKysrKysrKysrKwogLi4uL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBF
R0ltYWdlRGVjb2Rlci5oICAgfCAgIDU2ICsrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNl
cnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NmMzMDAw
Li5iZDMwNWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMTEtMjggIFNlYW4g
V2FuZyAgPFh1ZXdlbi5XYW5nQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBVcHN0cmVh
bSBCbGFja0JlcnJ5IHBvcnRpbmcgb2YgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTE4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwg
Y2FuJ3QgYmUgYnVpbHQgeWV0LCBubyB0ZXN0IGNhc2VzLgorCisgICAgICAgIFRoZSBpbml0aWFs
IGF1dGhvciBpcyBEYXZpZCBUYXB1c2thIDxkdGFwdXNrYUByaW0uY29tPi4KKyAgICAgICAgVGhl
IG1haW4gY29udHJpYnV0b3JzIGFyZToKKyAgICAgICAgICAgIEdlb3JnZSBXcmlnaHQgPGd3cmln
aHRAcmltLmNvbT4KKyAgICAgICAgICAgIFNjb3R0IENhbWVyb24gPHNjY2FtZXJvbkByaW0uY29t
PgorICAgICAgICAgICAgTmltYSBHaGFuYXZhdGlhbiA8bmdoYW5hdmF0aWFuQHJpbS5jb20+CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURl
Y29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpYkluaXQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VSZWFkZXI6OkltYWdlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlt
Z0RlY29kZVNldHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUmVhZGVyOjp1cGRhdGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUmVhZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlUmVhZGVyOjpzaXplRXh0cmFjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OkpQ
RUdJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJ
bWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVy
OjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVy
OjpzdXBwb3J0c0FscGhhKToKKwogMjAxMS0xMS0yNCAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5pdGlhbGl6ZSBnbG9iYWwgdmFyaWFibGVzIGR1cmlu
ZyBJRExQYXJzZXIgb2JqZWN0IGNyZWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1h
Z2VEZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTM4YmZh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtMCwwICsxLDIzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvLyBJbXBsZW1lbnRh
dGlvbiBub3RlczoKKy8vIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgdGhlIHNvdXJj
ZSBpbWFnZSBzaXplIHdpdGhvdXQgZG9pbmcgYSBmdWxsCisvLyBkZWNvZGUuIEl0IHNlZW1zIHRo
YXQgbGliaW1nIGRvZXMgbm90IHN1cHBvcnQgcGFydGlhbCBkZWNvZGluZy4KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUgPGVy
cm5vLmg+CisjaW5jbHVkZSA8aW1nL2ltZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGltZ19saWJfdCBzX2lsaWI7CisKK3N0YXRpYyBp
bmxpbmUgaW50IGxpYkluaXQoKQoreworICAgIHN0YXRpYyBib29sIHNfaW5pdGlhbGl6ZWQ7Cisg
ICAgaWYgKHNfaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGltZ19s
aWJfYXR0YWNoKCZzX2lsaWIpICE9IElNR19FUlJfT0spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gYXR0YWNoIHRvIGxpYmltZy4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K
KyAgICBzX2luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICByZXR1cm4gMDsKK30KKworY2xhc3MgSW1h
Z2VSZWFkZXIgeworcHVibGljOgorICAgIEltYWdlUmVhZGVyKGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBkYXRhU2l6ZSkKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3NpemUo
ZGF0YVNpemUpCisgICAgICAgICwgbV93aWR0aCgwKQorICAgICAgICAsIG1faGVpZ2h0KDApCisg
ICAgeworICAgICAgICBsaWJJbml0KCk7CisgICAgfQorCisgICAgdm9pZCB1cGRhdGVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSk7CisgICAgaW50IHNldFNpemUoc2l6ZV90
IHdpZHRoLCBzaXplX3QgaGVpZ2h0KTsKKyAgICBpbnQgc2l6ZUV4dHJhY3Qoc2l6ZV90JiB3aWR0
aCwgc2l6ZV90JiBoZWlnaHQpOworICAgIGludCBkZWNvZGUoc2l6ZV90IHdpZHRoLCBzaXplX3Qg
aGVpZ2h0LCBJbWFnZUZyYW1lKik7CisKK3ByaXZhdGU6CisgICAgY29uc3QgY2hhciogbV9kYXRh
OworICAgIHNpemVfdCBtX3NpemU7CisgICAgc2l6ZV90IG1fd2lkdGg7CisgICAgc2l6ZV90IG1f
aGVpZ2h0OworfTsKKworLy8gRnVuY3Rpb24gdG8gZ2V0IHRoZSBvcmlnaW5hbCBzaXplIG9mIGFu
IGltYWdlCitzdGF0aWMgaW50IGltZ0RlY29kZVNldHVwKF9VaW50cHRydCBkYXRhLCBpbWdfdCog
aW1nLCB1bnNpZ25lZCBmbGFncykKK3sKKyAgICBJbWFnZVJlYWRlciogcmVhZGVyID0gcmVpbnRl
cnByZXRfY2FzdDxJbWFnZVJlYWRlcio+KGRhdGEpOworCisgICAgaWYgKChpbWctPmZsYWdzICYg
KElNR19XIHwgSU1HX0gpKSA9PSAoSU1HX1cgfCBJTUdfSCkpCisgICAgICAgIHJlYWRlci0+c2V0
U2l6ZShpbWctPncsIGltZy0+aCk7CisKKyAgICAvLyBBbHdheXM6IHdhbnQgdG8gc3RvcCBwcm9j
ZXNzaW5nIHdoZXRoZXIgZ2V0IGEgc2l6ZSBvciBub3QuCisgICAgcmV0dXJuIElNR19FUlJfSU5U
UjsKK30KKwordm9pZCBJbWFnZVJlYWRlcjo6dXBkYXRlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3QgZGF0YVNpemUpCit7CisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBtX3NpemUgPSBkYXRh
U2l6ZTsKK30KKworaW50IEltYWdlUmVhZGVyOjpzZXRTaXplKHNpemVfdCB3aWR0aCwgc2l6ZV90
IGhlaWdodCkKK3sKKyAgICBtX3dpZHRoID0gd2lkdGg7CisgICAgbV9oZWlnaHQgPSBoZWlnaHQ7
CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBJbWFnZVJlYWRlcjo6c2l6ZUV4dHJhY3Qoc2l6ZV90
JiB3aWR0aCwgc2l6ZV90JiBoZWlnaHQpCit7CisgICAgaW1nX2RlY29kZV9jYWxsb3V0c190IGNh
bGxvdXRzOworICAgIGltZ190IGltZzsKKyAgICBpb19zdHJlYW1fdCogaW9zdHJlYW0gPSBpb19v
cGVuKElPX01FTSwgSU9fUkVBRCwgbV9zaXplLCBtX2RhdGEpOworICAgIGlmICghaW9zdHJlYW0p
CisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1lbXNldCgmaW1nLCAwLCBzaXplb2YoaW1nKSk7
CisgICAgbWVtc2V0KCZjYWxsb3V0cywgMCwgc2l6ZW9mKGNhbGxvdXRzKSk7CisgICAgY2FsbG91
dHMuc2V0dXBfZiA9IGltZ0RlY29kZVNldHVwOworICAgIGNhbGxvdXRzLmRhdGEgPSByZWludGVy
cHJldF9jYXN0PF9VaW50cHRydD4odGhpcyk7CisKKyAgICBpbnQgcmMgPSBpbWdfbG9hZChzX2ls
aWIsIGlvc3RyZWFtLCAmY2FsbG91dHMsICZpbWcpOworICAgIGlvX2Nsb3NlKGlvc3RyZWFtKTsK
KyAgICBpZiAocmMgIT0gSU1HX0VSUl9JTlRSKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYg
KCFtX3dpZHRoIHx8ICFtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgd2lkdGgg
PSBtX3dpZHRoOworICAgIGhlaWdodCA9IG1faGVpZ2h0OworCisgICAgcmV0dXJuIDA7Cit9CisK
K2ludCBJbWFnZVJlYWRlcjo6ZGVjb2RlKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgSW1h
Z2VGcmFtZSogYUZyYW1lKQoreworICAgIGlmIChsaWJJbml0KCkgPT0gLTEpCisgICAgICAgIHJl
dHVybiAtMTsKKworICAgIGltZ190IGltZzsKKyAgICBtZW1zZXQoJmltZywgMCwgc2l6ZW9mKGlt
ZykpOworICAgIGltZy5mb3JtYXQgPSBJTUdfRk1UX1JHQjg4ODsKKyAgICBpbWcudyA9IHdpZHRo
OworICAgIGltZy5oID0gaGVpZ2h0OworCisgICAgaW50IHN0cmlkZSA9ICgod2lkdGggKiAzKSAr
IDMpICYgfjM7CisgICAgT3duQXJyYXlQdHI8X3VpbnQ4PiBidWZmZXIgPSBhZG9wdEFycmF5UHRy
KG5ldyBfdWludDhbc3RyaWRlICogaGVpZ2h0XSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBpbWcuYWNjZXNzLmRpcmVjdC5kYXRhID0gYnVmZmVyLmdldCgpOwor
ICAgIGltZy5hY2Nlc3MuZGlyZWN0LnN0cmlkZSA9IHN0cmlkZTsKKyAgICBpbWcuZmxhZ3MgPSBJ
TUdfVyB8IElNR19IIHwgSU1HX0RJUkVDVCB8IElNR19GT1JNQVQ7CisKKyAgICBpb19zdHJlYW1f
dCogaW9zdHJlYW0gPSBpb19vcGVuKElPX01FTSwgSU9fUkVBRCwgbV9zaXplLCBtX2RhdGEpOwor
ICAgIGlmICghaW9zdHJlYW0pCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGludCByYyA9IGlt
Z19sb2FkX3Jlc2l6ZShzX2lsaWIsIGlvc3RyZWFtLCAwLCAmaW1nKTsKKyAgICBpb19jbG9zZShp
b3N0cmVhbSk7CisgICAgaWYgKHJjICE9IElNR19FUlJfT0spCisgICAgICAgIHJldHVybiAtMTsK
KworICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykgeworICAgICAgICBf
dWludDgqIGN1clB0ciA9IGJ1ZmZlci5nZXQoKSArIGogKiBzdHJpZGU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CisgICAgICAgICAgICBhRnJhbWUtPnNl
dFJHQkEoaSwgaiwgKihjdXJQdHIpLCAqKGN1clB0ciArIDEpLCAqKGN1clB0ciArIDIpLCAyNTUp
OworICAgICAgICAgICAgY3VyUHRyICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKK0pQRUdJbWFnZURlY29kZXI6OkpQRUdJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6
OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCisgICAgOiBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKQoreworfQorCit2b2lkIEpQRUdJbWFnZURlY29kZXI6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBJbWFn
ZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGlmIChtX3Jl
YWRlcikKKyAgICAgICAgbV9yZWFkZXItPnVwZGF0ZURhdGEobV9kYXRhLT5kYXRhKCksIG1fZGF0
YS0+c2l6ZSgpKTsKK30KKworYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUo
KQoreworICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSkgeworICAgICAg
ICBpZiAoIW1fcmVhZGVyKSB7CisgICAgICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAg
ICAgIG1fcmVhZGVyID0gYWRvcHRQdHIobmV3IEltYWdlUmVhZGVyKG1fZGF0YS0+ZGF0YSgpLCBt
X2RhdGEtPnNpemUoKSkpOworICAgICAgICAgICAgaWYgKCFtX3JlYWRlcikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZV90IHdpZHRoLCBoZWln
aHQ7CisKKyAgICAgICAgaWYgKG1fcmVhZGVyLT5zaXplRXh0cmFjdCh3aWR0aCwgaGVpZ2h0KSA9
PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFzZXRTaXplKHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOworfQorCitJbWFnZUZyYW1lKiBK
UEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAg
IGlmICghaXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
aW5kZXgpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5p
c0VtcHR5KCkpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisKKyAgICBJ
bWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKworICAgIC8vIENoZWNr
IHRvIHNlZSBpZiBpdCdzIGFscmVhZHkgZGVjb2RlZC4KKyAgICAvLyBGSVhNRTogQ291bGQgc2l6
ZSBjaGFuZ2UgYmV0d2VlbiBjYWxscyB0byB0aGlzIG1ldGhvZD8KKyAgICBpZiAoZnJhbWUuc3Rh
dHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuICZmcmFt
ZTsKKworICAgIGlmIChmcmFtZS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7
CisgICAgICAgIGlmICghc2l6ZSgpLndpZHRoKCkgfHwgIXNpemUoKS5oZWlnaHQoKSkgeworICAg
ICAgICAgICAgaWYgKCFpc1NpemVBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZyYW1lLnNldFNpemUoc2l6ZSgpLndpZHRoKCks
IHNpemUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgICAgIHNldEZhaWxlZCgpOworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZnJhbWUuc2V0U3RhdHVzKEltYWdlRnJh
bWU6OkZyYW1lUGFydGlhbCk7CisgICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5
cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgorICAgICAgICBmcmFtZS5zZXRPcmlnaW5hbEZyYW1l
UmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOworICAgIH0KKworICAgIGlmICghbV9y
ZWFkZXIgfHwgbV9yZWFkZXItPmRlY29kZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgp
LCAmZnJhbWUpID09IC0xKSB7CisgICAgICAgIHNldEZhaWxlZCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBmcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0
ZSk7CisgICAgcmV0dXJuICZmcmFtZTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBF
R0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwM2Jm
MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlBFR0ltYWdlRGVj
b2Rlcl9oCisjZGVmaW5lIEpQRUdJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEltYWdlUmVhZGVyOworCitjbGFzcyBKUEVHSW1hZ2VEZWNvZGVyIDogcHVibGljIElt
YWdlRGVjb2RlciB7CisgICAgcHVibGljOgorICAgICAgICBKUEVHSW1hZ2VEZWNvZGVyKEltYWdl
U291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKTsKKworICAgICAgICAvLyBJbWFnZURlY29kZXIKKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAianBnIjsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0FscGhhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIEltYWdlRnJh
bWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIFdURjo6T3duUHRyPEltYWdlUmVhZGVyPiBtX3JlYWRlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="116150"
          type_id="1"
          status="-"
          setter="dbates"
    />
    <flag name="commit-queue"
          id="116151"
          type_id="3"
          status="-"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116898</attachid>
            <date>2011-11-28 22:29:03 -0800</date>
            <delta_ts>2011-11-29 00:10:46 -0800</delta_ts>
            <desc>Patch 4</desc>
            <filename>0001-Upstream-BlackBerry-porting-of-platform-image-decode.patch</filename>
            <type>text/plain</type>
            <size>12514</size>
            <attacher name="Sean Wang">xuewen.ok</attacher>
            
              <data encoding="base64">RnJvbSAwNTI4ZWNiZWFjODYwODViMTc0YTBkOTg0YmUwMWE0YTgzZGE4MDY0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZWFuIFdhbmcgPFh1ZXdlbi5XYW5nQHRvcmNobW9iaWxlLmNv
bS5jbj4KRGF0ZTogVHVlLCAyOSBOb3YgMjAxMSAxMToxNjozMSArMDgwMApTdWJqZWN0OiBbUEFU
Q0hdIFVwc3RyZWFtIEJsYWNrQmVycnkgcG9ydGluZyBvZiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cwogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTE4CgpSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIGNhbid0IGJlIGJ1aWx0IHll
dCwgbm8gdGVzdCBjYXNlcy4KClRoZSBpbml0aWFsIGF1dGhvciBpcyBEYXZpZCBUYXB1c2thIDxk
dGFwdXNrYUByaW0uY29tPi4KCiogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9K
UEVHSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQuCihXZWJDb3JlOjpsaWJJbml0KToKKFdlYkNvcmU6
OkltYWdlUmVhZGVyOjpJbWFnZVJlYWRlcik6CihXZWJDb3JlOjppbWdEZWNvZGVTZXR1cCk6CihX
ZWJDb3JlOjpJbWFnZVJlYWRlcjo6dXBkYXRlRGF0YSk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6
c2V0U2l6ZSk6CihXZWJDb3JlOjpJbWFnZVJlYWRlcjo6c2l6ZUV4dHJhY3QpOgooV2ViQ29yZTo6
SW1hZ2VSZWFkZXI6OmRlY29kZSk6CihXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1h
Z2VEZWNvZGVyKToKKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnNldERhdGEpOgooV2ViQ29y
ZTo6SlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKFdlYkNvcmU6OkpQRUdJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CiogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
YmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgooV2ViQ29yZTo6SlBFR0ltYWdl
RGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgooV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
c3VwcG9ydHNBbHBoYSk6Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDI3ICsrKwogLi4uL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkv
SlBFR0ltYWdlRGVjb2Rlci5jcHAgfCAgMjQwICsrKysrKysrKysrKysrKysrKysrCiAuLi4vaW1h
Z2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmggICB8ICAgNTYgKysrKysK
IDMgZmlsZXMgY2hhbmdlZCwgMzIzIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxh
Y2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rl
ci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDU2YzMwMDAuLjA5YjQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzMCBAQAorMjAxMS0xMS0yOCAgU2VhbiBXYW5nICA8WHVld2VuLldhbmdAdG9yY2htb2JpbGUu
Y29tLmNuPgorCisgICAgICAgIFVwc3RyZWFtIEJsYWNrQmVycnkgcG9ydGluZyBvZiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzMxMTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbml0aWFsIHVwc3RyZWFtLCBjYW4ndCBiZSBidWlsdCB5ZXQsIG5vIHRlc3QgY2Fz
ZXMuCisKKyAgICAgICAgVGhlIGluaXRpYWwgYXV0aG9yIGlzIERhdmlkIFRhcHVza2EgPGR0YXB1
c2thQHJpbS5jb20+LgorCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2ti
ZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpsaWJJ
bml0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUmVhZGVyOjpJbWFnZVJlYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjppbWdEZWNvZGVTZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJl
YWRlcjo6dXBkYXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJlYWRlcjo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJlYWRlcjo6c2l6ZUV4dHJhY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVH
SW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJ
bWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6
OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
YmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SlBFR0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SlBFR0ltYWdlRGVjb2Rlcjo6c3VwcG9ydHNBbHBoYSk6CisKIDIwMTEtMTEtMjQgIEtlbnRhcm8g
SGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluaXRpYWxpemUgZ2xvYmFs
IHZhcmlhYmxlcyBkdXJpbmcgSURMUGFyc2VyIG9iamVjdCBjcmVhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1h
Z2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Js
YWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNmE2NWU2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTAs
MCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6CisvLyBDdXJyZW50IGltcGxlbWVudGF0aW9uIHBy
b3ZpZGVzIHRoZSBzb3VyY2UgaW1hZ2Ugc2l6ZSB3aXRob3V0IGRvaW5nIGEgZnVsbAorLy8gZGVj
b2RlLiBJdCBzZWVtcyB0aGF0IGxpYmltZyBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpYWwgZGVjb2Rp
bmcuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgi
CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGltZy9pbWcuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbWdfbGliX3Qgc19p
bGliOworCitzdGF0aWMgaW5saW5lIGludCBsaWJJbml0KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBz
X2luaXRpYWxpemVkOworICAgIGlmIChzX2luaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmIChpbWdfbGliX2F0dGFjaCgmc19pbGliKSAhPSBJTUdfRVJSX09LKSB7CisgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGF0dGFjaCB0byBsaWJpbWcuIik7CisgICAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisgICAgc19pbml0aWFsaXplZCA9IHRydWU7CisgICAgcmV0dXJuIDA7
Cit9CisKK2NsYXNzIEltYWdlUmVhZGVyIHsKK3B1YmxpYzoKKyAgICBJbWFnZVJlYWRlcihjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisg
ICAgICAgICwgbV9zaXplKGRhdGFTaXplKQorICAgICAgICAsIG1fd2lkdGgoMCkKKyAgICAgICAg
LCBtX2hlaWdodCgwKQorICAgIHsKKyAgICAgICAgbGliSW5pdCgpOworICAgIH0KKworICAgIHZv
aWQgdXBkYXRlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpOworICAgIGlu
dCBzZXRTaXplKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCk7CisgICAgaW50IHNpemVFeHRy
YWN0KHNpemVfdCYgd2lkdGgsIHNpemVfdCYgaGVpZ2h0KTsKKyAgICBpbnQgZGVjb2RlKHNpemVf
dCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgSW1hZ2VGcmFtZSopOworCitwcml2YXRlOgorICAgIGNv
bnN0IGNoYXIqIG1fZGF0YTsKKyAgICBzaXplX3QgbV9zaXplOworICAgIHNpemVfdCBtX3dpZHRo
OworICAgIHNpemVfdCBtX2hlaWdodDsKK307CisKKy8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgb3Jp
Z2luYWwgc2l6ZSBvZiBhbiBpbWFnZQorc3RhdGljIGludCBpbWdEZWNvZGVTZXR1cChfVWludHB0
cnQgZGF0YSwgaW1nX3QqIGltZywgdW5zaWduZWQgZmxhZ3MpCit7CisgICAgSW1hZ2VSZWFkZXIq
IHJlYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2VSZWFkZXIqPihkYXRhKTsKKworICAgIGlm
ICgoaW1nLT5mbGFncyAmIChJTUdfVyB8IElNR19IKSkgPT0gKElNR19XIHwgSU1HX0gpKQorICAg
ICAgICByZWFkZXItPnNldFNpemUoaW1nLT53LCBpbWctPmgpOworCisgICAgLy8gQWx3YXlzOiB3
YW50IHRvIHN0b3AgcHJvY2Vzc2luZyB3aGV0aGVyIGdldCBhIHNpemUgb3Igbm90LgorICAgIHJl
dHVybiBJTUdfRVJSX0lOVFI7Cit9CisKK3ZvaWQgSW1hZ2VSZWFkZXI6OnVwZGF0ZURhdGEoY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQoreworICAgIG1fZGF0YSA9IGRhdGE7Cisg
ICAgbV9zaXplID0gZGF0YVNpemU7Cit9CisKK2ludCBJbWFnZVJlYWRlcjo6c2V0U2l6ZShzaXpl
X3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpCit7CisgICAgbV93aWR0aCA9IHdpZHRoOworICAgIG1f
aGVpZ2h0ID0gaGVpZ2h0OworICAgIHJldHVybiAwOworfQorCitpbnQgSW1hZ2VSZWFkZXI6OnNp
emVFeHRyYWN0KHNpemVfdCYgd2lkdGgsIHNpemVfdCYgaGVpZ2h0KQoreworICAgIGltZ19kZWNv
ZGVfY2FsbG91dHNfdCBjYWxsb3V0czsKKyAgICBpbWdfdCBpbWc7CisgICAgaW9fc3RyZWFtX3Qq
IGlvc3RyZWFtID0gaW9fb3BlbihJT19NRU0sIElPX1JFQUQsIG1fc2l6ZSwgbV9kYXRhKTsKKyAg
ICBpZiAoIWlvc3RyZWFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtZW1zZXQoJmltZywg
MCwgc2l6ZW9mKGltZykpOworICAgIG1lbXNldCgmY2FsbG91dHMsIDAsIHNpemVvZihjYWxsb3V0
cykpOworICAgIGNhbGxvdXRzLnNldHVwX2YgPSBpbWdEZWNvZGVTZXR1cDsKKyAgICBjYWxsb3V0
cy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxfVWludHB0cnQ+KHRoaXMpOworCisgICAgaW50IHJj
ID0gaW1nX2xvYWQoc19pbGliLCBpb3N0cmVhbSwgJmNhbGxvdXRzLCAmaW1nKTsKKyAgICBpb19j
bG9zZShpb3N0cmVhbSk7CisgICAgaWYgKHJjICE9IElNR19FUlJfSU5UUikKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQpCisgICAgICAgIHJldHVybiAt
MTsKKworICAgIHdpZHRoID0gbV93aWR0aDsKKyAgICBoZWlnaHQgPSBtX2hlaWdodDsKKworICAg
IHJldHVybiAwOworfQorCitpbnQgSW1hZ2VSZWFkZXI6OmRlY29kZShzaXplX3Qgd2lkdGgsIHNp
emVfdCBoZWlnaHQsIEltYWdlRnJhbWUqIGFGcmFtZSkKK3sKKyAgICBpZiAobGliSW5pdCgpID09
IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpbWdfdCBpbWc7CisgICAgbWVtc2V0KCZp
bWcsIDAsIHNpemVvZihpbWcpKTsKKyAgICBpbWcuZm9ybWF0ID0gSU1HX0ZNVF9SR0I4ODg7Cisg
ICAgaW1nLncgPSB3aWR0aDsKKyAgICBpbWcuaCA9IGhlaWdodDsKKworICAgIGNvbnN0IGludCBD
b2xvckNvbXBvbmVudHMgPSAzOworICAgIC8vIFVzZSBhIG11bHRpcGxlIG9mIDIgYnl0ZXMgdG8g
aW1wcm92ZSBwZXJmb3JtYW5jZQorICAgIGludCBzdHJpZGUgPSAoQ29sb3JDb21wb25lbnRzICog
d2lkdGggKyAzKSAmIH4zOworICAgIE93bkFycmF5UHRyPF91aW50OD4gYnVmZmVyID0gYWRvcHRB
cnJheVB0cihuZXcgX3VpbnQ4W3N0cmlkZSAqIGhlaWdodF0pOworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm4gLTE7CisgICAgaW1nLmFjY2Vzcy5kaXJlY3QuZGF0YSA9IGJ1ZmZlci5n
ZXQoKTsKKyAgICBpbWcuYWNjZXNzLmRpcmVjdC5zdHJpZGUgPSBzdHJpZGU7CisgICAgaW1nLmZs
YWdzID0gSU1HX1cgfCBJTUdfSCB8IElNR19ESVJFQ1QgfCBJTUdfRk9STUFUOworCisgICAgaW9f
c3RyZWFtX3QqIGlvc3RyZWFtID0gaW9fb3BlbihJT19NRU0sIElPX1JFQUQsIG1fc2l6ZSwgbV9k
YXRhKTsKKyAgICBpZiAoIWlvc3RyZWFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpbnQg
cmMgPSBpbWdfbG9hZF9yZXNpemUoc19pbGliLCBpb3N0cmVhbSwgMCwgJmltZyk7CisgICAgaW9f
Y2xvc2UoaW9zdHJlYW0pOworICAgIGlmIChyYyAhPSBJTUdfRVJSX09LKQorICAgICAgICByZXR1
cm4gLTE7CisKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHsKKyAg
ICAgICAgX3VpbnQ4KiBjdXJQdHIgPSBidWZmZXIuZ2V0KCkgKyBqICogc3RyaWRlOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2lkdGg7IGkrKykgeworICAgICAgICAgICAgYUZy
YW1lLT5zZXRSR0JBKGksIGosIGN1clB0clswXSwgY3VyUHRyWzFdLCBjdXJQdHJbMl0sIDI1NSk7
CisgICAgICAgICAgICBjdXJQdHIgKz0gMzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKworSlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6
QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKKyAgICA6IEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pCit7Cit9CisKK3ZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0
YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEltYWdl
RGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgaWYgKG1fcmVh
ZGVyKQorICAgICAgICBtX3JlYWRlci0+dXBkYXRlRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRh
LT5zaXplKCkpOworfQorCitib29sIEpQRUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
Cit7CisgICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAg
IGlmICghbV9yZWFkZXIpIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICAg
ICAgbV9yZWFkZXIgPSBhZG9wdFB0cihuZXcgSW1hZ2VSZWFkZXIobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+c2l6ZSgpKSk7CisgICAgICAgICAgICBpZiAoIW1fcmVhZGVyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBzaXplX3Qgd2lkdGgsIGhlaWdo
dDsKKworICAgICAgICBpZiAobV9yZWFkZXItPnNpemVFeHRyYWN0KHdpZHRoLCBoZWlnaHQpID09
IC0xKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXNldFNpemUod2lk
dGgsIGhlaWdodCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK0ltYWdlRnJhbWUqIEpQ
RUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAg
aWYgKCFpc0FsbERhdGFSZWNlaXZlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChp
bmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKworICAgIElt
YWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworCisgICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIGl0J3MgYWxyZWFkeSBkZWNvZGVkLgorICAgIC8vIEZJWE1FOiBDb3VsZCBzaXpl
IGNoYW5nZSBiZXR3ZWVuIGNhbGxzIHRvIHRoaXMgbWV0aG9kPworICAgIGlmIChmcmFtZS5zdGF0
dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgICAgICByZXR1cm4gJmZyYW1l
OworCisgICAgaWYgKGZyYW1lLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsK
KyAgICAgICAgaWYgKCFzaXplKCkud2lkdGgoKSB8fCAhc2l6ZSgpLmhlaWdodCgpKSB7CisgICAg
ICAgICAgICBpZiAoIWlzU2l6ZUF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgICAgIGlmICghZnJhbWUuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwg
c2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFt
ZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlz
IGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCisgICAgICAgIGZyYW1lLnNldE9yaWdpbmFsRnJhbWVS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CisgICAgfQorCisgICAgaWYgKCFtX3Jl
YWRlciB8fCBtX3JlYWRlci0+ZGVjb2RlKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCks
ICZmcmFtZSkgPT0gLTEpIHsKKyAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGZyYW1lLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRl
KTsKKyAgICByZXR1cm4gJmZyYW1lOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVy
cnkvSlBFR0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjU0NGRmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5oCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBKUEVHSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUgSlBFR0ltYWdlRGVjb2Rlcl9oCisK
KyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VSZWFkZXI7CisKK2NsYXNzIEpQRUdJbWFn
ZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpQ
RUdJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworCisgICAgICAgIC8vIEltYWdlRGVjb2RlcgorICAg
ICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJq
cGciOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKKyAgICAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
ICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCk7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgV1RGOjpPd25QdHI8SW1hZ2VSZWFkZXI+
IG1fcmVhZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSlBF
R0ltYWdlRGVjb2Rlcl9oCisKLS0gCjEuNy41LjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>