<?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>23295</bug_id>
          
          <creation_ts>2009-01-13 09:46:44 -0800</creation_ts>
          <short_desc>add Android platform-specific files to WebCore/page</short_desc>
          <delta_ts>2009-04-29 14:23:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Feng Qian">feng</reporter>
          <assigned_to name="Feng Qian">feng</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105508</commentid>
    <comment_count>0</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-13 09:46:44 -0800</bug_when>
    <thetext>Part of upstreaming Android port to WebKit, create a placeholder for newly added files. Will ask for review when it is ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105520</commentid>
    <comment_count>1</comment_count>
      <attachid>26673</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-13 10:05:14 -0800</bug_when>
    <thetext>Created attachment 26673
patch v1

Current files for reference, does not fully confirm to WebKit coding style yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105823</commentid>
    <comment_count>2</comment_count>
      <attachid>26738</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-14 17:14:27 -0800</bug_when>
    <thetext>Created attachment 26738
patch v2

Adding Android-specific files under WebCore/page/android. InspectorControllerAndroid.cpp is an empty stub of InspectorController. I feel there can be an empty InspectorController in WebCore for builds that does not support InspectorController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106082</commentid>
    <comment_count>3</comment_count>
      <attachid>26738</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-16 10:34:23 -0800</bug_when>
    <thetext>Comment on attachment 26738
patch v2

&gt; +        Add Android-specific files to the WebCore/page directory.
&gt; +	https://bugs.webkit.org/show_bug.cgi?id=23295

There&apos;s a tab in the ChangeLog here. Makes it slightly harder for the committer to land it.

&gt; +
&gt; +        * page/android/DragControllerAndroid.cpp: Added.
&gt; +        (WebCore::DragController::isCopyKeyDown):
&gt; +        (WebCore::DragController::dragOperation):
&gt; +        (WebCore::DragController::maxDragImageSize):

Even though prepare-ChangeLog adds all the function names for new files, I don&apos;t think they&apos;re all that helpful, especially if you don&apos;t comment on them individually. I suggest removing them from the ChangeLog before putting the patch up for review.

&gt; +DragOperation DragController::dragOperation(DragData* dragData)
&gt; +{
&gt; +    //FIXME: This logic is incomplete  
&gt; +    ASSERT(0);      

This is a bit weak. If it&apos;s not implemented, we normally call notImplemented(). An assertion is not typically how we indicate that code isn&apos;t done. We normally put spaces between the &quot;//&quot; and the &quot;FIXME&quot;.

&gt; +#define LOG_TAG &quot;WebCore&quot;
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;EventHandler.h&quot;

It&apos;s highly unusual that we&apos;d define anything before including &quot;config.h&quot;. Is this LOG_TAG thing something Android-specific?

&gt; +// This stub file was created to avoid building and linking in all the
&gt; +// Inspector codebase.

Ideally I&apos;d like someone more familiar with the inspector to comment on this. Why is this approach specific to Android? Aren&apos;t there other platforms that don&apos;t have an inspector? This doesn&apos;t seem like something that should be platform-specific.

r=me, but please consider these comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106371</commentid>
    <comment_count>4</comment_count>
      <attachid>26868</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-20 12:50:47 -0800</bug_when>
    <thetext>Created attachment 26868
patch v3

A new patch for commit with fixes suggested by Darin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106373</commentid>
    <comment_count>5</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-20 12:54:04 -0800</bug_when>
    <thetext>Thanks. See reply below.

(In reply to comment #3)
&gt; (From update of attachment 26738 [review])
&gt; &gt; +        Add Android-specific files to the WebCore/page directory.
&gt; &gt; +	https://bugs.webkit.org/show_bug.cgi?id=23295
&gt; 
&gt; There&apos;s a tab in the ChangeLog here. Makes it slightly harder for the committer
&gt; to land it.
&gt; 

Fixed

&gt; &gt; +
&gt; &gt; +        * page/android/DragControllerAndroid.cpp: Added.
&gt; &gt; +        (WebCore::DragController::isCopyKeyDown):
&gt; &gt; +        (WebCore::DragController::dragOperation):
&gt; &gt; +        (WebCore::DragController::maxDragImageSize):
&gt; 
&gt; Even though prepare-ChangeLog adds all the function names for new files, I
&gt; don&apos;t think they&apos;re all that helpful, especially if you don&apos;t comment on them
&gt; individually. I suggest removing them from the ChangeLog before putting the
&gt; patch up for review.
&gt; 

Fixed.

&gt; &gt; +DragOperation DragController::dragOperation(DragData* dragData)
&gt; &gt; +{
&gt; &gt; +    //FIXME: This logic is incomplete  
&gt; &gt; +    ASSERT(0);      
&gt; 
&gt; This is a bit weak. If it&apos;s not implemented, we normally call notImplemented().
&gt; An assertion is not typically how we indicate that code isn&apos;t done. We normally
&gt; put spaces between the &quot;//&quot; and the &quot;FIXME&quot;.

Changed to notImplemented(); and fixed space between // and FIXME


&gt; 
&gt; &gt; +#define LOG_TAG &quot;WebCore&quot;
&gt; &gt; +
&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +#include &quot;EventHandler.h&quot;
&gt; 
&gt; It&apos;s highly unusual that we&apos;d define anything before including &quot;config.h&quot;. Is
&gt; this LOG_TAG thing something Android-specific?

LOG_TAG is Android-specific flag. I leave it here for now, it is a common pattern used in Android files. Cary may know better if we can move it below &quot;config.h&quot;

&gt; 
&gt; &gt; +// This stub file was created to avoid building and linking in all the
&gt; &gt; +// Inspector codebase.
&gt; 
&gt; Ideally I&apos;d like someone more familiar with the inspector to comment on this.
&gt; Why is this approach specific to Android? Aren&apos;t there other platforms that
&gt; don&apos;t have an inspector? This doesn&apos;t seem like something that should be
&gt; platform-specific.

That&apos;s what I was wondering too. If there is a common solution for builds without inspector, Android should take it rather than creating this empty link stub.

&gt; 
&gt; r=me, but please consider these comments
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108468</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-02-05 11:47:26 -0800</bug_when>
    <thetext>Submitter updated the patch but didn&apos;t mark it for review.  Adding review request so this issue doesn&apos;t show up in the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109715</commentid>
    <comment_count>7</comment_count>
      <attachid>26738</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-02-13 11:43:02 -0800</bug_when>
    <thetext>Comment on attachment 26738
patch v2

Although this was r+, the later revision has not been reviewed and is causing this to show up in the list of pending commits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119344</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 14:23:38 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/page/android/DragControllerAndroid.cpp
	A	WebCore/page/android/EventHandlerAndroid.cpp
	A	WebCore/page/android/InspectorControllerAndroid.cpp
Committed r43011
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26673</attachid>
            <date>2009-01-13 10:05:14 -0800</date>
            <delta_ts>2009-01-14 17:14:27 -0800</delta_ts>
            <desc>patch v1</desc>
            <filename>23295path.txt</filename>
            <type>text/plain</type>
            <size>17099</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTg2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMDktMDEtMTMgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkLXNwZWNpZmljIGZpbGVzIHRvIHRoZSBXZWJDb3JlL3BhZ2UgZGlyZWN0b3J5LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTUKKwkKKyAg
ICAgICAgKiBlZGl0aW5nL2FuZHJvaWQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvYW5kcm9p
ZC9FZGl0b3JBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5l
d0dlbmVyYWxDbGlwYm9hcmQpOgorICAgICAgICAqIHBhZ2UvYW5kcm9pZDogQWRkZWQuCisgICAg
ICAgICogcGFnZS9hbmRyb2lkL0RyYWdDb250cm9sbGVyQW5kcm9pZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24pOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhZ0NvbnRyb2xsZXI6Om1heERyYWdJbWFnZVNpemUpOgorICAgICAgICAqIHBhZ2UvYW5k
cm9pZC9FdmVudEhhbmRsZXJBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OnRhYnNUb0FsbENvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJm
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VF
dmVudFRvU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVE
cmFnZ2luZ0NsaXBib2FyZCk6CisgICAgICAgICogcGFnZS9hbmRyb2lkL0luc3BlY3RvckNvbnRy
b2xsZXJBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2Vp
dmVDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkT3BlbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93
U2NyaXB0T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpzdGFydEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmVuZEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0
VGltaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1p
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlTW91c2VQ
cmVzc09uTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpmYWls
ZWRUb1BhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZFBhdXNlKToKKwogMjAwOS0wMS0xMyAgRGFyaW4gRmlzaGVyICA8ZGFyaW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9w
YWdlL2FuZHJvaWQvRHJhZ0NvbnRyb2xsZXJBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wYWdlL2FuZHJvaWQvRHJhZ0NvbnRyb2xsZXJBbmRyb2lkLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9p
ZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRyYWdDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24o
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK0RyYWdPcGVyYXRpb24gRHJhZ0NvbnRy
b2xsZXI6OmRyYWdPcGVyYXRpb24oRHJhZ0RhdGEqIGRyYWdEYXRhKQoreworICAgIC8vRklYTUU6
IFRoaXMgbG9naWMgaXMgaW5jb21wbGV0ZSAgCisgICAgQVNTRVJUKDApOyAgICAgIAorICAgIGlm
IChkcmFnRGF0YS0+Y29udGFpbnNVUkwoKSkKKyAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25D
b3B5OworCisgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7Cit9IAorCisvLyBmdW5jdGlvbnMg
bmV3IHRvIEp1bi0wNyB0aXAgb2YgdHJlZSBtZXJnZToKK2NvbnN0IGZsb2F0IERyYWdDb250cm9s
bGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDEuMGY7CitzdGF0aWMgSW50U2l6ZSBkdW1teTsKK2NvbnN0
IEludFNpemUmIERyYWdDb250cm9sbGVyOjptYXhEcmFnSW1hZ2VTaXplKCkgeyByZXR1cm4gZHVt
bXk7IH0KK2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gMDsK
K2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b21JbnNldCA9IDA7Citjb25z
dCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQgPSAwOworY29uc3QgaW50
IERyYWdDb250cm9sbGVyOjpNYXhPcmlnaW5hbEltYWdlQXJlYSA9IDA7CisKK30KSW5kZXg6IFdl
YkNvcmUvcGFnZS9hbmRyb2lkL0V2ZW50SGFuZGxlckFuZHJvaWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9hbmRyb2lkL0V2ZW50SGFuZGxlckFuZHJvaWQuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wYWdlL2FuZHJvaWQvRXZlbnRIYW5kbGVyQW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisjZGVmaW5lIExPR19UQUcgIldlYkNvcmUiCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKworI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3Vuc2lnbmVkIEV2ZW50SGFuZGxlcjo6c19hY2Nlc3NLZXlNb2RpZmllcnMgPSBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkFsdEtleTsKKworYm9vbCBFdmVudEhhbmRsZXI6OnRhYnNU
b0FsbENvbnRyb2xzKEtleWJvYXJkRXZlbnQqICkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKK3sKKyAgICBpZiAo
UGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWRGcmFtZShtX2ZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMmIGV2ZW50KQoreworICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBz
ZW5kIHRoZSBldmVudCB0by4KKyAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IGV2ZW50LnRhcmdl
dE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKSA6IDA7CisgICAgaWYgKCF0
YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNfY2FzdDxSZW5k
ZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdl
dCkKK3sKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQocmVuZGVyV2lkZ2V0
LT53aWRnZXQoKSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByb3V0ZSB0aGUg
bW91c2UgZG93biBldmVudCB0byB0aGUgbmF0aXZlIHdpZGdldHMsIGl0IHNlZW1zIGxpa2UgYQor
Ly8gd29yayBhcm91bmQgZm9yIHRoZSBNYWMgcGxhdGZvcm0gd2hpY2ggZG9lcyBub3Qgc3VwcG9y
dCBkb3VibGUgY2xpY2tzLCBidXQgYnJvd3NlcnMgZG8uCitib29sIEV2ZW50SGFuZGxlcjo6cGFz
c01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgLy8gcmV0dXJu
IGZhbHNlIHNvIHRoZSBub3JtYWwgcHJvcG9nYXRpb24gaGFuZGxlcyB0aGUgZXZlbnQKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXco
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgZm9yIG1vdXNlIGV2ZW50cyBieSBGcmFtZVZpZXc6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCgp
LgorLy8gSXQgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBldmVudHMgYXJlIHN5bmMnZWQgY29ycmVj
dGx5IGJldHdlZW4gZnJhbWVzLiBGb3IgZXhhbXBsZQorLy8gaWYgdGhlIHVzZXIgcHJlc3NlcyBk
b3duIGluIG9uZSBmcmFtZSBhbmQgdXAgaW4gYW5vdGhlciBmcmFtZSwgdGhpcyBmdW5jdGlvbiB3
aWxsCisvLyByZXR1cm5zIHRydWUsIGFuZCBwYXNzIHRoZSBldmVudCB0byB0aGUgY29ycmVjdCBm
cmFtZS4KK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQsIAorICAgIEZyYW1lKiBzdWJmcmFtZSwg
SGl0VGVzdFJlc3VsdCogaG92ZXJlZE5vZGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIHRvIHJvdXRlIHdoZWVsIGV2
ZW50cyB0byBjaGlsZCB3aWRnZXRzIHdoZW4gdGhleSBhcmUgUmVuZGVyV2lkZ2V0CisvLyBhcyB0
aGUgcGFyZW50IHVzdWFsbHkgZ2V0cyB3aGVlbCBldmVudC4gRG9uJ3QgaGF2ZSBhIG1vdXNlIHdp
dGggYSB3aGVlbCB0byBjb25maXJtCisvLyB0aGUgb3BlcmF0aW9uIG9mIHRoaXMgZnVuY3Rpb24u
Citib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChQbGF0Zm9ybVdoZWVs
RXZlbnQmICwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VQcmVzc0V2ZW50
VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJm
cmFtZSkKK3sKKyAgICByZXR1cm4gcGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3Vi
ZnJhbWUpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJm
cmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIAorICAgIEZyYW1lKiBzdWJm
cmFtZSwgSGl0VGVzdFJlc3VsdCogaG92ZXJlZE5vZGUpCit7CisgICAgcmV0dXJuIHBhc3NTdWJm
cmFtZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRs
ZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCit7CisgICAgcmV0dXJuIHBhc3NTdWJmcmFt
ZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZyYW1lKTsKK30KKworLy8gZnVuY3Rpb25zIG5ldyB0
byBKdW4tMDcgdGlwIG9mIHRyZWUgbWVyZ2U6CitjbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMgUmVm
Q291bnRlZDxDbGlwYm9hcmQ+IHt9OworCitQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5k
bGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIFBhc3NSZWZQdHI8
Q2xpcGJvYXJkPihOVUxMKTsgfQorCisvLyBuZXcgYXMgb2YgU1ZOIGNoYW5nZSAzNjI2OSwgU2Vw
dCA4LCAyMDA4Citjb25zdCBkb3VibGUgRXZlbnRIYW5kbGVyOjpUZXh0RHJhZ0RlbGF5ID0gMC4w
OworfQpJbmRleDogV2ViQ29yZS9wYWdlL2FuZHJvaWQvSW5zcGVjdG9yQ29udHJvbGxlckFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmRyb2lkL0luc3BlY3RvckNvbnRy
b2xsZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9hbmRyb2lkL0lu
c3BlY3RvckNvbnRyb2xsZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVj
dAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUg
IlByb2ZpbGUuaCIKKworLy8gVGhpcyBzdHViIGZpbGUgd2FzIGNyZWF0ZWQgdG8gYXZvaWQgYnVp
bGRpbmcgYW5kIGxpbmtpbmcgaW4gYWxsIHRoZQorLy8gSW5zcGVjdG9yIGNvZGViYXNlLiBJZiB5
b3Ugd291bGQgbGlrZSB0byBlbmFibGUgdGhlIEluc3BlY3RvciwgZG8gdGhlCisvLyBmb2xsb3dp
bmcgc3RlcHM6CisvLyAxLiBSZXBsYWNlIHRoaXMgZmlsZSBpbiBXZWJDb3JlL0FuZHJvaWQubWsg
d2l0aCB0aGUgY29tbW9uCisvLyAgICBpbXBsZW1lbnRhdGlvbiwgaWUgcGFnZS9JbnNlcGN0b3JD
b250cm9sbGVyLmNwcAorLy8gMi4gQWRkIHRoZSBKUyBBUEkgZmlsZXMgdG8gSmF2YVNjcmlwdENv
cmUvQW5kcm9pZC5tazoKKy8vID8gIEFQSS9KU0Jhc2UuY3BwIFwKKy8vICAgICAgQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5jcHAgXAorLy8gICAgICBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNw
cCBcCisvLyAgICAgIEFQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcCBcCisvLyAgICAgIEFQSS9KU0Ns
YXNzUmVmLmNwcCBcCisvLyAgICAgIEFQSS9KU0NvbnRleHRSZWYuY3BwIFwKKy8vICAgICAgQVBJ
L0pTT2JqZWN0UmVmLmNwcCBcCisvLyAgICAgIEFQSS9KU1N0cmluZ1JlZi5jcHAgXAorLy8gICAg
ICBBUEkvSlNWYWx1ZVJlZi5jcHAKKy8vIDMuIEFkZCB0aGUgZm9sbG93aW5nIExPQ0FMX0NfSU5D
TFVERVMgdG8gSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tazoKKy8vID8kKExPQ0FMX1BBVEgpL0FQ
SSBcCisvLyAgICAgICQoTE9DQUxfUEFUSCkvRm9yd2FyZGluZ0hlYWRlcnMgXAorLy8gICAgICAk
KExPQ0FMX1BBVEgpLy4uLy4uL1dlYktpdCBcCisvLyA0LiBSZWJ1aWxkIFdlYktpdAorLy8KKy8v
IE5vdGUsIGZvciBhIGZ1bmN0aW9uYWwgSW5zcGVjdG9yLCB5b3UgbXVzdCBpbXBsZW1lbnQgSW5z
cGVjdG9yQ2xpZW50QW5kcm9pZC4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgSW5z
cGVjdG9yUmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JSZXNvdXJjZT4gewor
fTsKKworc3RydWN0IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiB7Cit9OworCitJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKQorICAgIDogbV9z
dGFydFByb2ZpbGluZyh0aGlzLCBOVUxMKQoreworfQorCitJbnNwZWN0b3JDb250cm9sbGVyOjp+
SW5zcGVjdG9yQ29udHJvbGxlcigpIHt9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lu
ZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCkge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciopIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBEb2N1bWVudExv
YWRlciosIFJlc291cmNlUmVxdWVzdCBjb25zdCYpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OndpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIFJlc291
cmNlUmVxdWVzdCYsIFJlc291cmNlUmVzcG9uc2UgY29uc3QmKSB7fQordm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nLCBSZXNvdXJjZVJlc3BvbnNlIGNvbnN0Jikge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
LCBpbnQpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRpbmcoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJj
ZVJlcXVlc3QgY29uc3QmLCBSZXNvdXJjZVJlc3BvbnNlIGNvbnN0JiwgaW50KSB7fQordm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSopIHt9CisK
K3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291
cmNlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpBcmdMaXN0IGNvbnN0Jiwg
dW5zaWduZWQgaW50LCBTdHJpbmcgY29uc3QmKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlEKSB7fQorI2lmIEVOQUJMRShEQVRBQkFTRSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkT3BlbkRhdGFiYXNlKERhdGFiYXNlKiwgU3RyaW5nIGNvbnN0JiwgU3RyaW5nIGNvbnN0Jiwg
U3RyaW5nIGNvbnN0Jikge30KKyNlbmRpZgorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
aW5zcGVjdChOb2RlKikge30KK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93VmlzaWJs
ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2Zp
bGUoUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+LCB1bnNpZ25lZCBpbnQsIGNvbnN0IEpTQzo6VVN0
cmluZyYpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95
ZWQoKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1M
SHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBKU0M6OlVTdHJpbmcmIHNvdXJj
ZVN0cmluZykge30KKworICAgIC8vIG5ldyBhcyBvZiBTVk4gY2hhbmdlIDM2MjY5LCBTZXB0IDgs
IDIwMDgKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2Jq
ZWN0Q2xlYXJlZChGcmFtZSogZnJhbWUpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0
YXJ0R3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBKU0M6OkFyZ0xpc3QmIGFyZ3VtZW50cywgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuZEdyb3VwKE1l
c3NhZ2VTb3VyY2Ugc291cmNlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCkge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1pbmcoY29uc3Qg
SlNDOjpVU3RyaW5nJiB0aXRsZSkge30KK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRp
bWluZyhjb25zdCBKU0M6OlVTdHJpbmcmIHRpdGxlLCBkb3VibGUmIGVsYXBzZWQpIHsgcmV0dXJu
IGZhbHNlOyB9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvdW50KGNvbnN0IEpTQzo6VVN0
cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQp
IHt9CisKKyAgICAvLyBuZXcgYXMgb2YgU1ZOIGNoYW5nZSAzODA2NywgTm92IDUsIDIwMDgKK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpIHt9Cit2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSopIHt9Cit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBKU0M6OlVT
dHJpbmcmIGVycm9yTWVzc2FnZSkge30gICAgCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZFBhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUm
IHNvdXJjZSkge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGF1c2UoKSB7fQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26738</attachid>
            <date>2009-01-14 17:14:27 -0800</date>
            <delta_ts>2009-02-13 11:43:02 -0800</delta_ts>
            <desc>patch v2</desc>
            <filename>23295patch.txt</filename>
            <type>text/plain</type>
            <size>16569</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTkyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDktMDEtMTQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkLXNwZWNpZmljIGZpbGVzIHRvIHRoZSBXZWJDb3JlL3BhZ2UgZGlyZWN0b3J5LgorCWh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI5NQorCisgICAgICAgICog
cGFnZS9hbmRyb2lkOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL2FuZHJvaWQvRHJhZ0NvbnRyb2xs
ZXJBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6
aXNDb3B5S2V5RG93bik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6bWF4RHJhZ0ltYWdl
U2l6ZSk6CisgICAgICAgICogcGFnZS9hbmRyb2lkL0V2ZW50SGFuZGxlckFuZHJvaWQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50Vmlldyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRv
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2
ZW50VG9XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpldmVudEFjdGl2
YXRlZFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVF
dmVudFRvU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2hl
ZWxFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01v
dXNlUHJlc3NFdmVudFRvU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKToKKyAgICAgICAgKiBw
YWdlL2FuZHJvaWQvSW5zcGVjdG9yQ29udHJvbGxlckFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93U2NyaXB0
T2JqZWN0QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJhbWVEZXRhY2hl
ZEZyb21QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRk
TWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRPcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2li
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNl
UmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0R3JvdXApOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5kR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpoYW5kbGVNb3VzZVByZXNzT25Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGF1c2UpOgorCiAyMDA5LTAxLTE0ICBNaWNo
YWVsIE1vc3MgIDxtbW9zc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmRyb2lkL0RyYWdDb250cm9sbGVy
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29u
dHJvbGxlckFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIkRyYWdEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBEcmFnQ29udHJv
bGxlcjo6aXNDb3B5S2V5RG93bigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorRHJh
Z09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0Rh
dGEpCit7CisgICAgLy9GSVhNRTogVGhpcyBsb2dpYyBpcyBpbmNvbXBsZXRlICAKKyAgICBBU1NF
UlQoMCk7ICAgICAgCisgICAgaWYgKGRyYWdEYXRhLT5jb250YWluc1VSTCgpKQorICAgICAgICBy
ZXR1cm4gRHJhZ09wZXJhdGlvbkNvcHk7CisKKyAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsK
K30gCisKK2NvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDEuMGY7
CitzdGF0aWMgSW50U2l6ZSBkdW1teTsKK2NvbnN0IEludFNpemUmIERyYWdDb250cm9sbGVyOjpt
YXhEcmFnSW1hZ2VTaXplKCkgeyByZXR1cm4gZHVtbXk7IH0KK2NvbnN0IGludCBEcmFnQ29udHJv
bGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gMDsKK2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6
RHJhZ0ljb25Cb3R0b21JbnNldCA9IDA7Citjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkxpbmtE
cmFnQm9yZGVySW5zZXQgPSAwOworY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpNYXhPcmlnaW5h
bEltYWdlQXJlYSA9IDA7CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvYW5kcm9pZC9FdmVudEhhbmRsZXJBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvYW5kcm9pZC9FdmVudEhhbmRsZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGFnZS9hbmRyb2lkL0V2ZW50SGFuZGxlckFuZHJvaWQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBP
cGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFj
a0BrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworI2RlZmluZSBMT0dfVEFHICJXZWJDb3JlIgorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisKKyNpbmNsdWRlICJGb2N1c0Nv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3Vuc2lnbmVkIEV2ZW50SGFuZGxlcjo6c19hY2Nlc3NLZXlNb2RpZmll
cnMgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkFsdEtleTsKKworYm9vbCBFdmVudEhhbmRsZXI6
OnRhYnNUb0FsbENvbnRyb2xzKEtleWJvYXJkRXZlbnQqICkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKK3sKKyAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShtX2ZyYW1lKTsKK30KKworYm9vbCBFdmVudEhh
bmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQoreworICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmll
dyB0byBzZW5kIHRoZSBldmVudCB0by4KKyAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IGV2ZW50
LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKSA6IDA7CisgICAg
aWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNfY2Fz
dDxSZW5kZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQqIHJlbmRl
cldpZGdldCkKK3sKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQocmVuZGVy
V2lkZ2V0LT53aWRnZXQoKSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByb3V0
ZSB0aGUgbW91c2UgZG93biBldmVudCB0byB0aGUgbmF0aXZlIHdpZGdldHMsIGl0IHNlZW1zIGxp
a2UgYQorLy8gd29yayBhcm91bmQgZm9yIHRoZSBNYWMgcGxhdGZvcm0gd2hpY2ggZG9lcyBub3Qg
c3VwcG9ydCBkb3VibGUgY2xpY2tzLCBidXQgYnJvd3NlcnMgZG8uCitib29sIEV2ZW50SGFuZGxl
cjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiApCit7CisgICAgLy8gcmV0dXJu
IGZhbHNlIHNvIHRoZSBub3JtYWwgcHJvcG9nYXRpb24gaGFuZGxlcyB0aGUgZXZlbnQKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXco
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiApIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZv
ciBtb3VzZSBldmVudHMgYnkgRnJhbWVWaWV3OjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoKS4KKy8v
IEl0IGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgZXZlbnRzIGFyZSBzeW5jJ2VkIGNvcnJlY3RseSBi
ZXR3ZWVuIGZyYW1lcy4gRm9yIGV4YW1wbGUKKy8vIGlmIHRoZSB1c2VyIHByZXNzZXMgZG93biBp
biBvbmUgZnJhbWUgYW5kIHVwIGluIGFub3RoZXIgZnJhbWUsIHRoaXMgZnVuY3Rpb24gd2lsbAor
Ly8gcmV0dXJucyB0cnVlLCBhbmQgcGFzcyB0aGUgZXZlbnQgdG8gdGhlIGNvcnJlY3QgZnJhbWUu
Citib29sIEV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmICwgRnJhbWUqICwgSGl0VGVzdFJlc3VsdCogKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIGlzIGNh
bGxlZCB0byByb3V0ZSB3aGVlbCBldmVudHMgdG8gY2hpbGQgd2lkZ2V0cyB3aGVuIHRoZXkgYXJl
IFJlbmRlcldpZGdldAorLy8gYXMgdGhlIHBhcmVudCB1c3VhbGx5IGdldHMgd2hlZWwgZXZlbnQu
IERvbid0IGhhdmUgYSBtb3VzZSB3aXRoIGEgd2hlZWwgdG8gY29uZmlybQorLy8gdGhlIG9wZXJh
dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50
VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50JiAsIFdpZGdldCogKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFz
c01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYg
bWV2LCBGcmFtZSogc3ViZnJhbWUpCit7CisgICAgcmV0dXJuIHBhc3NTdWJmcmFtZUV2ZW50VG9T
dWJmcmFtZShtZXYsIHN1YmZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3Vz
ZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCAK
KyAgICBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqICkKK3sKKyAgICByZXR1cm4gcGFz
c1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUpOworfQorCitib29sIEV2ZW50
SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKK3sKKyAgICByZXR1cm4gcGFzc1N1
YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUpOworfQorCitjbGFzcyBDbGlwYm9h
cmQgOiBwdWJsaWMgUmVmQ291bnRlZDxDbGlwYm9hcmQ+IHsKK307CisKK1Bhc3NSZWZQdHI8Q2xp
cGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gUGFzc1JlZlB0cjxDbGlwYm9hcmQ+KDApOworfQorCitjb25zdCBkb3VibGUg
RXZlbnRIYW5kbGVyOjpUZXh0RHJhZ0RlbGF5ID0gMC4wOworCit9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wYWdlL2FuZHJvaWQvSW5zcGVjdG9yQ29udHJvbGxlckFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmRyb2lkL0luc3BlY3RvckNvbnRy
b2xsZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9hbmRyb2lkL0lu
c3BlY3RvckNvbnRyb2xsZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVj
dAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVk
ZSAiUHJvZmlsZS5oIgorCisvLyBUaGlzIHN0dWIgZmlsZSB3YXMgY3JlYXRlZCB0byBhdm9pZCBi
dWlsZGluZyBhbmQgbGlua2luZyBpbiBhbGwgdGhlCisvLyBJbnNwZWN0b3IgY29kZWJhc2UuIElm
IHlvdSB3b3VsZCBsaWtlIHRvIGVuYWJsZSB0aGUgSW5zcGVjdG9yLCBkbyB0aGUKKy8vIGZvbGxv
d2luZyBzdGVwczoKKy8vIDEuIFJlcGxhY2UgdGhpcyBmaWxlIGluIFdlYkNvcmUvQW5kcm9pZC5t
ayB3aXRoIHRoZSBjb21tb24KKy8vICAgIGltcGxlbWVudGF0aW9uLCBpZSBwYWdlL0luc2VwY3Rv
ckNvbnRyb2xsZXIuY3BwCisvLyAyLiBBZGQgdGhlIEpTIEFQSSBmaWxlcyB0byBKYXZhU2NyaXB0
Q29yZS9BbmRyb2lkLm1rOgorLy8gPyAgQVBJL0pTQmFzZS5jcHAgXAorLy8gICAgICBBUEkvSlND
YWxsYmFja0NvbnN0cnVjdG9yLmNwcCBcCisvLyAgICAgIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24u
Y3BwIFwKKy8vICAgICAgQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwIFwKKy8vICAgICAgQVBJL0pT
Q2xhc3NSZWYuY3BwIFwKKy8vICAgICAgQVBJL0pTQ29udGV4dFJlZi5jcHAgXAorLy8gICAgICBB
UEkvSlNPYmplY3RSZWYuY3BwIFwKKy8vICAgICAgQVBJL0pTU3RyaW5nUmVmLmNwcCBcCisvLyAg
ICAgIEFQSS9KU1ZhbHVlUmVmLmNwcAorLy8gMy4gQWRkIHRoZSBmb2xsb3dpbmcgTE9DQUxfQ19J
TkNMVURFUyB0byBKYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rOgorLy8gPyQoTE9DQUxfUEFUSCkv
QVBJIFwKKy8vICAgICAgJChMT0NBTF9QQVRIKS9Gb3J3YXJkaW5nSGVhZGVycyBcCisvLyAgICAg
ICQoTE9DQUxfUEFUSCkvLi4vLi4vV2ViS2l0IFwKKy8vIDQuIFJlYnVpbGQgV2ViS2l0CisvLwor
Ly8gTm90ZSwgZm9yIGEgZnVuY3Rpb25hbCBJbnNwZWN0b3IsIHlvdSBtdXN0IGltcGxlbWVudCBJ
bnNwZWN0b3JDbGllbnRBbmRyb2lkLgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBJ
bnNwZWN0b3JSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclJlc291cmNlPiB7
Cit9OworCitzdHJ1Y3QgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IHsKK307CisKK0luc3BlY3RvckNvbnRyb2xs
ZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSosIEluc3BlY3RvckNsaWVudCopCisgICAgOiBt
X3N0YXJ0UHJvZmlsaW5nKHRoaXMsIDApCit7Cit9CisKK0luc3BlY3RvckNvbnRyb2xsZXI6On5J
bnNwZWN0b3JDb250cm9sbGVyKCkge30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5k
b3dTY3JpcHRPYmplY3RBdmFpbGFibGUoKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKikge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIERvY3VtZW50TG9h
ZGVyKiwgUmVzb3VyY2VSZXF1ZXN0IGNvbnN0Jikge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUmVzb3VyY2VSZXNwb25zZSBjb25zdCYpIHt9Cit2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmRpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcsIFJlc291cmNlUmVzcG9uc2UgY29uc3QmKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcs
IGludCkge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZGluZyhEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIFJlc291cmNl
UmVxdWVzdCBjb25zdCYsIFJlc291cmNlUmVzcG9uc2UgY29uc3QmLCBpbnQpIHt9Cit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50KEZyYW1lKikge30KKwor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkFyZ0xpc3QgY29uc3QmLCB1
bnNpZ25lZCBpbnQsIFN0cmluZyBjb25zdCYpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
SUQpIHt9CisjaWYgRU5BQkxFKERBVEFCQVNFKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqLCBTdHJpbmcgY29uc3QmLCBTdHJpbmcgY29uc3QmLCBT
dHJpbmcgY29uc3QmKSB7fQorI2VuZGlmCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpp
bnNwZWN0KE5vZGUqKSB7fQorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dWaXNpYmxl
KCkgeyByZXR1cm4gZmFsc2U7IH0KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmls
ZShQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4sIHVuc2lnbmVkIGludCwgY29uc3QgSlNDOjpVU3Ry
aW5nJikge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZCgpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVkQnlYTUxI
dHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEpTQzo6VVN0cmluZyYgc291cmNl
U3RyaW5nKSB7fQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1Nj
cmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZyYW1lKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmRH
cm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltaW5n
KGNvbnN0IEpTQzo6VVN0cmluZyYgdGl0bGUpIHt9Citib29sIEluc3BlY3RvckNvbnRyb2xsZXI6
OnN0b3BUaW1pbmcoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSwgZG91YmxlJiBlbGFwc2VkKSB7
IHJldHVybiBmYWxzZTsgfQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb3VudChjb25zdCBK
U0M6OlVTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlEKSB7fQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKSB7fQor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYW5kbGVNb3VzZVByZXNzT25Ob2RlKE5vZGUqKSB7
fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmYWlsZWRUb1BhcnNlU291cmNlKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGlu
ZSwgY29uc3QgSlNDOjpVU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHt9ICAgIAordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZFBhdXNlKCkge30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26868</attachid>
            <date>2009-01-20 12:50:47 -0800</date>
            <delta_ts>2009-03-30 10:20:44 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>23295patch.txt</filename>
            <type>text/plain</type>
            <size>13972</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTkyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDEtMTQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkLXNwZWNpZmljIGZpbGVzIHRvIHRoZSBXZWJDb3JlL3BhZ2UgZGlyZWN0b3J5LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTUKKworICAg
ICAgICAqIHBhZ2UvYW5kcm9pZDogQWRkZWQuCisgICAgICAgICogcGFnZS9hbmRyb2lkL0RyYWdD
b250cm9sbGVyQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvYW5kcm9pZC9FdmVu
dEhhbmRsZXJBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgICogcGFnZS9hbmRyb2lkL0luc3Bl
Y3RvckNvbnRyb2xsZXJBbmRyb2lkLmNwcDogQWRkZWQuCisKIDIwMDktMDEtMTQgIE1pY2hhZWwg
TW9zcyAgPG1tb3NzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmRyb2lkL0RyYWdDb250cm9sbGVyQW5kcm9pZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuZHJvaWQvRHJhZ0NvbnRyb2xsZXJBbmRy
b2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9hbmRyb2lkL0RyYWdDb250cm9s
bGVyQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAi
RHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKyAgICAKK0RyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdP
cGVyYXRpb24oRHJhZ0RhdGEqIGRyYWdEYXRhKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGxvZ2lj
IGlzIGluY29tcGxldGUKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChkcmFnRGF0YS0+
Y29udGFpbnNVUkwoKSkKKyAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5OworCisgICBy
ZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7Cit9IAorCitjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxl
cjo6RHJhZ0ltYWdlQWxwaGEgPSAxLjBmOworc3RhdGljIEludFNpemUgZHVtbXk7Citjb25zdCBJ
bnRTaXplJiBEcmFnQ29udHJvbGxlcjo6bWF4RHJhZ0ltYWdlU2l6ZSgpIHsgcmV0dXJuIGR1bW15
OyB9Citjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uUmlnaHRJbnNldCA9IDA7Citj
b25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tSW5zZXQgPSAwOworY29uc3Qg
aW50IERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gMDsKK2NvbnN0IGludCBE
cmFnQ29udHJvbGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAwOworCit9ICAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL2FuZHJvaWQvRXZlbnRIYW5kbGVyQW5kcm9p
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuZHJvaWQvRXZlbnRIYW5kbGVyQW5k
cm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvYW5kcm9pZC9FdmVudEhhbmRs
ZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0
IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNkZWZpbmUgTE9HX1RB
RyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxl
ci5oIgorCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJXaWRnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1bnNpZ25lZCBFdmVudEhh
bmRsZXI6OnNfYWNjZXNzS2V5TW9kaWZpZXJzID0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpBbHRL
ZXk7CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxDb250cm9scyhLZXlib2FyZEV2ZW50
KiApIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRXZlbnRIYW5kbGVyOjpm
b2N1c0RvY3VtZW50VmlldygpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCkpCisgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9m
cmFtZSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRU
b1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKK3sKKyAg
ICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCisgICAgUmVu
ZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2Rl
KCktPnJlbmRlcmVyKCkgOiAwOworICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gcGFzc01vdXNlRG93
bkV2ZW50VG9XaWRnZXQoc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4odGFyZ2V0KS0+d2lkZ2V0
KCkpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9X
aWRnZXQoUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQpCit7CisgICAgcmV0dXJuIHBhc3NNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOworfQorCisvLyBUaGlz
IGZ1bmN0aW9uIGlzIHVzZWQgdG8gcm91dGUgdGhlIG1vdXNlIGRvd24gZXZlbnQgdG8gdGhlIG5h
dGl2ZSB3aWRnZXRzLCBpdCBzZWVtcyBsaWtlIGEKKy8vIHdvcmsgYXJvdW5kIGZvciB0aGUgTWFj
IHBsYXRmb3JtIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgZG91YmxlIGNsaWNrcywgYnV0IGJyb3dz
ZXJzIGRvLgorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdp
ZGdldCogKQoreworICAgIC8vIHJldHVybiBmYWxzZSBzbyB0aGUgbm9ybWFsIHByb3BvZ2F0aW9u
IGhhbmRsZXMgdGhlIGV2ZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEV2ZW50SGFu
ZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgbW91c2UgZXZlbnRzIGJ5IEZyYW1lVmlldzo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KCkuCisvLyBJdCBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGV2ZW50
cyBhcmUgc3luYydlZCBjb3JyZWN0bHkgYmV0d2VlbiBmcmFtZXMuIEZvciBleGFtcGxlCisvLyBp
ZiB0aGUgdXNlciBwcmVzc2VzIGRvd24gaW4gb25lIGZyYW1lIGFuZCB1cCBpbiBhbm90aGVyIGZy
YW1lLCB0aGlzIGZ1bmN0aW9uIHdpbGwKKy8vIHJldHVybnMgdHJ1ZSwgYW5kIHBhc3MgdGhlIGV2
ZW50IHRvIHRoZSBjb3JyZWN0IGZyYW1lLgorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFt
ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiAsIEZyYW1lKiAs
IEhpdFRlc3RSZXN1bHQqICkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworLy8gVGhpcyBpcyBjYWxsZWQgdG8gcm91dGUgd2hlZWwgZXZlbnRzIHRvIGNo
aWxkIHdpZGdldHMgd2hlbiB0aGV5IGFyZSBSZW5kZXJXaWRnZXQKKy8vIGFzIHRoZSBwYXJlbnQg
dXN1YWxseSBnZXRzIHdoZWVsIGV2ZW50LiBEb24ndCBoYXZlIGEgbW91c2Ugd2l0aCBhIHdoZWVs
IHRvIGNvbmZpcm0KKy8vIHRoZSBvcGVyYXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KK2Jvb2wgRXZl
bnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgLCBX
aWRnZXQqICkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQoreworICAgIHJl
dHVybiBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSk7Cit9CisKK2Jv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgCisgICAgRnJhbWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVz
dWx0KiApCit7CisgICAgcmV0dXJuIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1
YmZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRv
U3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJh
bWUpCit7CisgICAgcmV0dXJuIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZy
YW1lKTsKK30KKworY2xhc3MgQ2xpcGJvYXJkIDogcHVibGljIFJlZkNvdW50ZWQ8Q2xpcGJvYXJk
PiB7Cit9OworCitQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFn
Z2luZ0NsaXBib2FyZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Q2xpcGJvYXJk
PigwKTsKK30KKworY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4dERyYWdEZWxheSA9IDAu
MDsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmRyb2lk
L0luc3BlY3RvckNvbnRyb2xsZXJBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvYW5kcm9pZC9JbnNwZWN0b3JDb250cm9sbGVyQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BhZ2UvYW5kcm9pZC9JbnNwZWN0b3JDb250cm9sbGVyQW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRoZSBB
bmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlByb2ZpbGUuaCIKKworLy8gVGhpcyBzdHViIGZp
bGUgd2FzIGNyZWF0ZWQgdG8gYXZvaWQgYnVpbGRpbmcgYW5kIGxpbmtpbmcgaW4gYWxsIHRoZQor
Ly8gSW5zcGVjdG9yIGNvZGViYXNlLiBJZiB5b3Ugd291bGQgbGlrZSB0byBlbmFibGUgdGhlIElu
c3BlY3RvciwgZG8gdGhlCisvLyBmb2xsb3dpbmcgc3RlcHM6CisvLyAxLiBSZXBsYWNlIHRoaXMg
ZmlsZSBpbiBXZWJDb3JlL0FuZHJvaWQubWsgd2l0aCB0aGUgY29tbW9uCisvLyAgICBpbXBsZW1l
bnRhdGlvbiwgaWUgcGFnZS9JbnNlcGN0b3JDb250cm9sbGVyLmNwcAorLy8gMi4gQWRkIHRoZSBK
UyBBUEkgZmlsZXMgdG8gSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tazoKKy8vID8gIEFQSS9KU0Jh
c2UuY3BwIFwKKy8vICAgICAgQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgXAorLy8gICAg
ICBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBcCisvLyAgICAgIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmNwcCBcCisvLyAgICAgIEFQSS9KU0NsYXNzUmVmLmNwcCBcCisvLyAgICAgIEFQSS9KU0Nv
bnRleHRSZWYuY3BwIFwKKy8vICAgICAgQVBJL0pTT2JqZWN0UmVmLmNwcCBcCisvLyAgICAgIEFQ
SS9KU1N0cmluZ1JlZi5jcHAgXAorLy8gICAgICBBUEkvSlNWYWx1ZVJlZi5jcHAKKy8vIDMuIEFk
ZCB0aGUgZm9sbG93aW5nIExPQ0FMX0NfSU5DTFVERVMgdG8gSmF2YVNjcmlwdENvcmUvQW5kcm9p
ZC5tazoKKy8vID8kKExPQ0FMX1BBVEgpL0FQSSBcCisvLyAgICAgICQoTE9DQUxfUEFUSCkvRm9y
d2FyZGluZ0hlYWRlcnMgXAorLy8gICAgICAkKExPQ0FMX1BBVEgpLy4uLy4uL1dlYktpdCBcCisv
LyA0LiBSZWJ1aWxkIFdlYktpdAorLy8KKy8vIE5vdGUsIGZvciBhIGZ1bmN0aW9uYWwgSW5zcGVj
dG9yLCB5b3UgbXVzdCBpbXBsZW1lbnQgSW5zcGVjdG9yQ2xpZW50QW5kcm9pZC4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgSW5zcGVjdG9yUmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnNwZWN0b3JSZXNvdXJjZT4geworfTsKKworc3RydWN0IEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiB7
Cit9OworCitJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqLCBJ
bnNwZWN0b3JDbGllbnQqKQorICAgIDogbV9zdGFydFByb2ZpbGluZyh0aGlzLCAwKQoreworfQor
CitJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcigpIHt9CisKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCkge30KK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciopIHt9
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1
bnNpZ25lZCBsb25nLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCBjb25zdCYpIHt9
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcsIFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlUmVzcG9uc2UgY29u
c3QmKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJlc3BvbnNlIGNvbnN0Jikge30K
K3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1l
bnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBpbnQpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSB7fQor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUo
RG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QgY29uc3QmLCBSZXNvdXJjZVJlc3BvbnNl
IGNvbnN0JiwgaW50KSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmcmFtZURldGFjaGVk
RnJvbVBhcmVudChGcmFtZSopIHt9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkTWVz
c2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpBcmdMaXN0IGNvbnN0JiwgdW5zaWduZWQgaW50LCBTdHJpbmcgY29uc3QmKSB7fQor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKSB7fQorI2lmIEVOQUJMRShEQVRBQkFTRSkKK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkT3BlbkRhdGFiYXNlKERhdGFiYXNlKiwgU3RyaW5n
IGNvbnN0JiwgU3RyaW5nIGNvbnN0JiwgU3RyaW5nIGNvbnN0Jikge30KKyNlbmRpZgorYm9vbCBJ
bnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdChOb2RlKikge30KK2Jvb2wgSW5zcGVjdG9y
Q29udHJvbGxlcjo6d2luZG93VmlzaWJsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGUoUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+LCB1bnNp
Z25lZCBpbnQsIGNvbnN0IEpTQzo6VVN0cmluZyYpIHt9Cit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKSB7fQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBKU0M6OlVTdHJpbmcmIHNvdXJjZVN0cmluZykge30KKwordm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkg
e30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRHcm91cChNZXNzYWdlU291cmNlIHNv
dXJjZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJndW1lbnRz
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkge30KK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5kR3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSB7fQordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzdGFydFRpbWluZyhjb25zdCBKU0M6OlVTdHJpbmcmIHRpdGxlKSB7fQor
Ym9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltaW5nKGNvbnN0IEpTQzo6VVN0cmluZyYg
dGl0bGUsIGRvdWJsZSYgZWxhcHNlZCkgeyByZXR1cm4gZmFsc2U7IH0KK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6Y291bnQoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGlu
ZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkge30KKwordm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5z
aWduZWQgbW9kaWZpZXJGbGFncykge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxl
TW91c2VQcmVzc09uTm9kZShOb2RlKikge30KK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZmFp
bGVkVG9QYXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VD
b2RlJiBzb3VyY2UsIGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNZXNz
YWdlKSB7fSAgICAKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlKSB7fQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSgpIHt9CisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>
<flag name="review"
          id="13205"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>