<?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>90398</bug_id>
          
          <creation_ts>2012-07-02 13:41:17 -0700</creation_ts>
          <short_desc>Add AudioFIFO class and simplify AudioPullFIFO</short_desc>
          <delta_ts>2012-07-03 16:41:10 -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>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond Toy">rtoy</reporter>
          <assigned_to name="Raymond Toy">rtoy</assigned_to>
          <cc>crogers</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>661693</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-07-02 13:41:17 -0700</bug_when>
    <thetext>Add AudioPushFIFO class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661700</commentid>
    <comment_count>1</comment_count>
      <attachid>150470</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-07-02 13:52:28 -0700</bug_when>
    <thetext>Created attachment 150470
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662452</commentid>
    <comment_count>2</comment_count>
      <attachid>150470</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-07-03 13:23:32 -0700</bug_when>
    <thetext>Comment on attachment 150470
Patch

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

Looks pretty good - I assume you&apos;ve tested this in the chromium port (which is the only port using it right now)?

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests; existing tests cover changes.

Just remove this line, because this statement isn&apos;t true.  Or say:

No new tests.  This code will be used in audio back-end implementation.

&gt; Source/WebCore/WebCore.gypi:3265
&gt; +            &apos;platform/audio/AudioPushFIFO.h&apos;,

This file is not needed

&gt; Source/WebCore/platform/audio/AudioFIFO.h:38
&gt; +    // Create a FIFO large enough to hold |fifoLength| frames of data of |nubmerOfChannels| channels.

typo: nubmerOfChannels

&gt; Source/WebCore/platform/audio/AudioFIFO.h:42
&gt; +    void push(const AudioBus* source);

nit: WebKit-style - can remove &quot;source&quot;

&gt; Source/WebCore/platform/audio/AudioFIFO.h:46
&gt; +    void pull(AudioBus* destination, size_t framesToConsume);

This method is exactly the same as AudioPullFIFO::consume()

We should have consistent naming, so either call this consume() or rename the other one pull()

&gt; Source/WebCore/platform/audio/AudioPushFIFO.h:37
&gt; +    // Just inherit everything from AudioFIFO.

It looks like it&apos;s not worth creating the class AudioPushFIFO if it&apos;s exactly the same as AudioFIFO :)
We can just use an AudioFIFO object directly, so no need for this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662469</commentid>
    <comment_count>3</comment_count>
      <attachid>150667</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-07-03 14:05:40 -0700</bug_when>
    <thetext>Created attachment 150667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662471</commentid>
    <comment_count>4</comment_count>
      <attachid>150470</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-07-03 14:08:13 -0700</bug_when>
    <thetext>Comment on attachment 150470
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        No new tests; existing tests cover changes.
&gt; 
&gt; Just remove this line, because this statement isn&apos;t true.  Or say:
&gt; 
&gt; No new tests.  This code will be used in audio back-end implementation.

Actually since AudioPullFIFO uses AudioFIFO, AudioFIFO will get tested.

&gt;&gt; Source/WebCore/WebCore.gypi:3265
&gt;&gt; +            &apos;platform/audio/AudioPushFIFO.h&apos;,
&gt; 
&gt; This file is not needed

Removed.

&gt;&gt; Source/WebCore/platform/audio/AudioFIFO.h:38
&gt;&gt; +    // Create a FIFO large enough to hold |fifoLength| frames of data of |nubmerOfChannels| channels.
&gt; 
&gt; typo: nubmerOfChannels

Fixed.

&gt;&gt; Source/WebCore/platform/audio/AudioFIFO.h:42
&gt;&gt; +    void push(const AudioBus* source);
&gt; 
&gt; nit: WebKit-style - can remove &quot;source&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/audio/AudioFIFO.h:46
&gt;&gt; +    void pull(AudioBus* destination, size_t framesToConsume);
&gt; 
&gt; This method is exactly the same as AudioPullFIFO::consume()
&gt; 
&gt; We should have consistent naming, so either call this consume() or rename the other one pull()

Renamed to consume().

&gt;&gt; Source/WebCore/platform/audio/AudioPushFIFO.h:37
&gt;&gt; +    // Just inherit everything from AudioFIFO.
&gt; 
&gt; It looks like it&apos;s not worth creating the class AudioPushFIFO if it&apos;s exactly the same as AudioFIFO :)
&gt; We can just use an AudioFIFO object directly, so no need for this file

Ok.  I wasn&apos;t sure if you still wanted an AudioPushFIFO class or not.  File removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662473</commentid>
    <comment_count>5</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-07-03 14:09:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 150470 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150470&amp;action=review
&gt; 
&gt; Looks pretty good - I assume you&apos;ve tested this in the chromium port (which is the only port using it right now)?

Yes, I ran the layout tests and a bunch of demos with chromium.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests; existing tests cover changes.
&gt; 
&gt; Just remove this line, because this statement isn&apos;t true.  Or say:
&gt; 
&gt; No new tests.  This code will be used in audio back-end implementation.
&gt; 
&gt; &gt; Source/WebCore/WebCore.gypi:3265
&gt; &gt; +            &apos;platform/audio/AudioPushFIFO.h&apos;,
&gt; 
&gt; This file is not needed
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioFIFO.h:38
&gt; &gt; +    // Create a FIFO large enough to hold |fifoLength| frames of data of |nubmerOfChannels| channels.
&gt; 
&gt; typo: nubmerOfChannels
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioFIFO.h:42
&gt; &gt; +    void push(const AudioBus* source);
&gt; 
&gt; nit: WebKit-style - can remove &quot;source&quot;
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioFIFO.h:46
&gt; &gt; +    void pull(AudioBus* destination, size_t framesToConsume);
&gt; 
&gt; This method is exactly the same as AudioPullFIFO::consume()
&gt; 
&gt; We should have consistent naming, so either call this consume() or rename the other one pull()
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioPushFIFO.h:37
&gt; &gt; +    // Just inherit everything from AudioFIFO.
&gt; 
&gt; It looks like it&apos;s not worth creating the class AudioPushFIFO if it&apos;s exactly the same as AudioFIFO :)
&gt; We can just use an AudioFIFO object directly, so no need for this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662476</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-07-03 14:18:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 150470 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150470&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:8
&gt; &gt;&gt; +        No new tests; existing tests cover changes.
&gt; &gt; 
&gt; &gt; Just remove this line, because this statement isn&apos;t true.  Or say:
&gt; &gt; 
&gt; &gt; No new tests.  This code will be used in audio back-end implementation.
&gt; 
&gt; Actually since AudioPullFIFO uses AudioFIFO, AudioFIFO will get tested.

Are you sure - which of our tests calls into AudioFIFO code?

Looks good otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662482</commentid>
    <comment_count>7</comment_count>
      <attachid>150670</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-07-03 14:33:04 -0700</bug_when>
    <thetext>Created attachment 150670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662485</commentid>
    <comment_count>8</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-07-03 14:34:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 150470 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150470&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/ChangeLog:8
&gt; &gt; &gt;&gt; +        No new tests; existing tests cover changes.
&gt; &gt; &gt; 
&gt; &gt; &gt; Just remove this line, because this statement isn&apos;t true.  Or say:
&gt; &gt; &gt; 
&gt; &gt; &gt; No new tests.  This code will be used in audio back-end implementation.
&gt; &gt; 
&gt; &gt; Actually since AudioPullFIFO uses AudioFIFO, AudioFIFO will get tested.
&gt; 
&gt; Are you sure - which of our tests calls into AudioFIFO code?

I was thinking of the demos.  The layout tests don&apos;t use the fifo.

New patch uploaded, correcting the ChangeLog comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662534</commentid>
    <comment_count>9</comment_count>
      <attachid>150670</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-07-03 15:52:28 -0700</bug_when>
    <thetext>Comment on attachment 150670
Patch

Looks good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662567</commentid>
    <comment_count>10</comment_count>
      <attachid>150670</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-03 16:41:05 -0700</bug_when>
    <thetext>Comment on attachment 150670
Patch

Clearing flags on attachment: 150670

Committed r121810: &lt;http://trac.webkit.org/changeset/121810&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662568</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-03 16:41:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150470</attachid>
            <date>2012-07-02 13:52:28 -0700</date>
            <delta_ts>2012-07-03 14:08:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90398-20120702135227.patch</filename>
            <type>text/plain</type>
            <size>21179</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzVmOGRkYzdhZDc1NTZi
MWM4YjFiMmI4OWY4YWI1Y2ExNTkyNjYyZC4uYjU0ZjMzYWNkMWE1NGI3MjdmZWU1M2NkMDdhNTM1
YmVkYTg0YmIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA3LTAyICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgQXVkaW9QdXNoRklGTyBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAz
OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHM7IGV4aXN0aW5nIHRlc3RzIGNvdmVyIGNoYW5nZXMuCisKKyAgICAgICAgQWRkIEF1
ZGlvUHVzaEZJRk8gY2xhc3MgdG8gaW1wbGVtZW50IGEgcHVzaCBGSUZPLiAgU2ltcGxpZnkKKyAg
ICAgICAgaW1wbGVtZW50YXRpb24gb2YgQXVkaW9QdXNoRklGTyBhbmQgQXVkaW9QdWxsRklGTyBi
eSBtb3ZpbmcKKyAgICAgICAgY29tbW9uIGNvZGUgdG8gQXVkaW9GSUZPLgorICAgICAgICAKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBuZXcgZmlsZXMuCisgICAgICAgIAorICAgICAgICBO
ZXcgQXVkaW9QdXNoRklGTyBjbGFzcworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVz
aEZJRk8uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEF1ZGlvUHVzaEZJ
Rk8pOgorCisgICAgICAgIE5ldyBjbGFzcyBob2xkaW5nIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBv
ZiBBdWRpb1B1bGxGSUZPIGFuZCBBdWRpb1B1bGxGSUZPLgorICAgICAgICAqIHBsYXRmb3JtL2F1
ZGlvL0F1ZGlvRklGTy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0ZJRk86OkF1ZGlvRklGTyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZJRk86
OnB1bGwpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GSUZPOjpwdXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRklGTzo6ZmluZFdyYXBMZW5ndGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9BdWRpb0ZJRk8uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9QdWxsRklGTy5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBdWRpb0ZJ
Rk8pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GSUZPOjpmcmFtZXNJbkZpZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9GSUZPOjp1cGRhdGVJbmRleCk6CisgICAgICAgIAorICAgICAgICBV
c2UgQXVkaW9GSUZPCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9QdWxsRklGTy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1B1bGxGSUZPOjpBdWRpb1B1bGxGSUZPKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvUHVsbEZJRk86OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9QdWxsRklGTzo6ZmlsbEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVk
aW9QdWxsRklGTy5oOgorICAgICAgICAoQXVkaW9QdWxsRklGTyk6CisKIDIwMTItMDctMDEgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTIxNjM1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZlNGEwOTViN2QyMjc4
ZDJiZTlmNWE3MDBiMWFkZjBlOTA5MmI2OTMuLmY4OWZmNWQwODAzNjBjYWRmODdlNWJhNzM0YThm
NTU4MTM2N2Q4YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyNTYsMTAgKzMyNTYsMTMgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb24uaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vYXVkaW8vQXVkaW9GSUZPLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vYXVkaW8vQXVkaW9GSUZPLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
RmlsZVJlYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9BdWRpb1Byb2Nlc3Nv
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxGSUZPLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vQXVkaW9QdWxsRklGTy5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9hdWRpby9BdWRpb1B1c2hGSUZPLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8v
QXVkaW9SZXNhbXBsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNh
bXBsZXJLZXJuZWwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0F1ZGlvRklGTy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0ZJ
Rk8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVkNTE2NWQ4NzBhMGYyMzUyZGI5NmUwOTM1YTdmNWFiYjIzZTMz
MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRp
b0ZJRk8uY3BwCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvRklGTy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0F1ZGlvRklGTzo6QXVkaW9GSUZPKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMsIHNpemVfdCBmaWZvTGVuZ3RoKQorICAgIDogbV9maWZvQXVkaW9CdXMobnVtYmVyT2ZDaGFu
bmVscywgZmlmb0xlbmd0aCkKKyAgICAsIG1fZmlmb0xlbmd0aChmaWZvTGVuZ3RoKQorICAgICwg
bV9mcmFtZXNJbkZpZm8oMCkKKyAgICAsIG1fcmVhZEluZGV4KDApCisgICAgLCBtX3dyaXRlSW5k
ZXgoMCkKK3sKK30KKwordm9pZCBBdWRpb0ZJRk86OnB1bGwoQXVkaW9CdXMqIGRlc3RpbmF0aW9u
LCBzaXplX3QgZnJhbWVzVG9Db25zdW1lKQoreworICAgIGJvb2wgaXNHb29kID0gZGVzdGluYXRp
b24gJiYgKGZyYW1lc1RvQ29uc3VtZSA8PSBtX2ZpZm9MZW5ndGgpICYmIGZyYW1lc1RvQ29uc3Vt
ZSA8PSBtX2ZyYW1lc0luRmlmbzsKKyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAoIWlzR29v
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ29weSB0aGUgcmVxdWVzdGVkIG51bWJlciBv
ZiBzYW1wbGVzIHRvIHRoZSBkZXN0aW5hdGlvbi4KKworICAgIHNpemVfdCBwYXJ0MUxlbmd0aDsK
KyAgICBzaXplX3QgcGFydDJMZW5ndGg7CisgICAgZmluZFdyYXBMZW5ndGhzKG1fcmVhZEluZGV4
LCBmcmFtZXNUb0NvbnN1bWUsIHBhcnQxTGVuZ3RoLCBwYXJ0Mkxlbmd0aCk7CisKKyAgICBzaXpl
X3QgbnVtYmVyT2ZDaGFubmVscyA9IG1fZmlmb0F1ZGlvQnVzLm51bWJlck9mQ2hhbm5lbHMoKTsK
KworICAgIGZvciAoc2l6ZV90IGNoYW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJl
ck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KSB7CisgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlv
bkRhdGEgPSBkZXN0aW5hdGlvbi0+Y2hhbm5lbChjaGFubmVsSW5kZXgpLT5tdXRhYmxlRGF0YSgp
OworICAgICAgICBjb25zdCBmbG9hdCogc291cmNlRGF0YSA9IG1fZmlmb0F1ZGlvQnVzLmNoYW5u
ZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOworCisgICAgICAgIGJvb2wgaXNDb3B5R29vZCA9ICgo
bV9yZWFkSW5kZXggPCBtX2ZpZm9MZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiAobV9yZWFkSW5kZXggKyBwYXJ0MUxlbmd0aCkgPD0gbV9maWZvTGVuZ3RoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAocGFydDFMZW5ndGggPD0gZGVzdGluYXRpb24tPmxlbmd0aCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBhcnQxTGVuZ3RoICsgcGFydDJMZW5n
dGgpIDw9IGRlc3RpbmF0aW9uLT5sZW5ndGgoKSk7CisgICAgICAgIEFTU0VSVChpc0NvcHlHb29k
KTsKKyAgICAgICAgaWYgKCFpc0NvcHlHb29kKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEsIHNvdXJjZURhdGEgKyBtX3JlYWRJbmRleCwgcGFy
dDFMZW5ndGggKiBzaXplb2YoKnNvdXJjZURhdGEpKTsKKyAgICAgICAgLy8gSGFuZGxlIHdyYXAg
YXJvdW5kIG9mIHRoZSBGSUZPLCBpZiBuZWVkZWQuCisgICAgICAgIGlmIChwYXJ0Mkxlbmd0aCkK
KyAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEgKyBwYXJ0MUxlbmd0aCwgc291cmNl
RGF0YSwgcGFydDJMZW5ndGggKiBzaXplb2YoKnNvdXJjZURhdGEpKTsKKyAgICB9CisgICAgbV9y
ZWFkSW5kZXggPSB1cGRhdGVJbmRleChtX3JlYWRJbmRleCwgZnJhbWVzVG9Db25zdW1lKTsKKyAg
ICBBU1NFUlQobV9mcmFtZXNJbkZpZm8gPj0gZnJhbWVzVG9Db25zdW1lKTsKKyAgICBtX2ZyYW1l
c0luRmlmbyAtPSBmcmFtZXNUb0NvbnN1bWU7Cit9CisKK3ZvaWQgQXVkaW9GSUZPOjpwdXNoKGNv
bnN0IEF1ZGlvQnVzKiBzb3VyY2VCdXMpCit7CisgICAgLy8gQ29weSB0aGUgc291cmNlQnVzIGlu
dG8gdGhlIEZJRk8gYnVmZmVyLgorCisgICAgc2l6ZV90IHNvdXJjZUxlbmd0aCA9IHNvdXJjZUJ1
cy0+bGVuZ3RoKCk7CisKKyAgICBib29sIGlzR29vZCA9IHNvdXJjZUJ1cyAmJiAobV9mcmFtZXNJ
bkZpZm8gKyBzb3VyY2VMZW5ndGggPD0gbV9maWZvTGVuZ3RoKTsKKyAgICBpZiAoIWlzR29vZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IHBhcnQxTGVuZ3RoOworICAgIHNpemVfdCBw
YXJ0Mkxlbmd0aDsKKyAgICBmaW5kV3JhcExlbmd0aHMobV9yZWFkSW5kZXgsIHNvdXJjZUxlbmd0
aCwgcGFydDFMZW5ndGgsIHBhcnQyTGVuZ3RoKTsKKworICAgIHNpemVfdCBudW1iZXJPZkNoYW5u
ZWxzID0gbV9maWZvQXVkaW9CdXMubnVtYmVyT2ZDaGFubmVscygpOworCisgICAgZm9yIChzaXpl
X3QgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFubmVsczsgKytj
aGFubmVsSW5kZXgpIHsKKyAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gbV9maWZvQXVkaW9C
dXMuY2hhbm5lbChjaGFubmVsSW5kZXgpLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBjb25zdCBm
bG9hdCogc291cmNlID0gc291cmNlQnVzLT5jaGFubmVsKGNoYW5uZWxJbmRleCktPmRhdGEoKTsK
KworICAgICAgICBib29sIGlzQ29weUdvb2QgPSAoKG1fd3JpdGVJbmRleCA8IG1fZmlmb0xlbmd0
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtX3dyaXRlSW5kZXggKyBwYXJ0MUxl
bmd0aCkgPD0gbV9maWZvTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwYXJ0
Mkxlbmd0aCA8IG1fZmlmb0xlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcGFy
dDFMZW5ndGggKyBwYXJ0Mkxlbmd0aCA8PSBzb3VyY2VMZW5ndGgpOworICAgICAgICBBU1NFUlQo
aXNDb3B5R29vZCk7CisgICAgICAgIGlmICghaXNDb3B5R29vZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBtX3dyaXRlSW5kZXgsIHNvdXJjZSwg
cGFydDFMZW5ndGggKiBzaXplb2YoKmRlc3RpbmF0aW9uKSk7CisKKyAgICAgICAgLy8gSGFuZGxl
IHdyYXAgYXJvdW5kIG9mIHRoZSBGSUZPLCBpZiBuZWVkZWQuCisgICAgICAgIGlmIChwYXJ0Mkxl
bmd0aCkKKyAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlICsgcGFydDFMZW5n
dGgsIHBhcnQyTGVuZ3RoICogc2l6ZW9mKCpkZXN0aW5hdGlvbikpOworICAgIH0KKyAgICAgICAg
CisgICAgbV9mcmFtZXNJbkZpZm8gKz0gc291cmNlTGVuZ3RoOworICAgIEFTU0VSVChtX2ZyYW1l
c0luRmlmbyA8PSBtX2ZpZm9MZW5ndGgpOworICAgIG1fd3JpdGVJbmRleCA9IHVwZGF0ZUluZGV4
KG1fd3JpdGVJbmRleCwgc291cmNlTGVuZ3RoKTsKK30KKwordm9pZCBBdWRpb0ZJRk86OmZpbmRX
cmFwTGVuZ3RocyhzaXplX3QgaW5kZXgsIHNpemVfdCBzaXplLCBzaXplX3QmIHBhcnQxTGVuZ3Ro
LCBzaXplX3QmIHBhcnQyTGVuZ3RoKQoreworICAgIEFTU0VSVChpbmRleCA8IG1fZmlmb0xlbmd0
aCAmJiBzaXplIDw9IG1fZmlmb0xlbmd0aCk7CisgICAgaWYgKGluZGV4IDwgbV9maWZvTGVuZ3Ro
ICYmIHNpemUgPD0gbV9maWZvTGVuZ3RoKSB7CisgICAgICAgIGlmIChpbmRleCArIHNpemUgPiBt
X2ZpZm9MZW5ndGgpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gd3JhcC4gRmlndXJlIG91dCB0
aGUgbGVuZ3RoIG9mIGVhY2ggcGllY2UuCisgICAgICAgICAgICBwYXJ0MUxlbmd0aCA9IG1fZmlm
b0xlbmd0aCAtIGluZGV4OworICAgICAgICAgICAgcGFydDJMZW5ndGggPSBzaXplIC0gcGFydDFM
ZW5ndGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBObyB3cmFwIG5lZWRlZC4K
KyAgICAgICAgICAgIHBhcnQxTGVuZ3RoID0gc2l6ZTsKKyAgICAgICAgICAgIHBhcnQyTGVuZ3Ro
ID0gMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEludmFsaWQgdmFsdWVz
IGZvciBpbmRleCBvciBzaXplLiBTZXQgdGhlIHBhcnQgbGVuZ3RocyB0byB6ZXJvIHNvIG5vdGhp
bmcgaXMgY29waWVkLgorICAgICAgICBwYXJ0MUxlbmd0aCA9IDA7CisgICAgICAgIHBhcnQyTGVu
Z3RoID0gMDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9BdWRpb0ZJRk8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRklG
Ty5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNjOWNjMTFlMGVhNDZlZTUyNjA4ZjEyYTIyMjAzMzc5YzgyODIwZWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0ZJ
Rk8uaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0ZJRk9faAorI2RlZmluZSBBdWRp
b0ZJRk9faAorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBdWRpb0ZJRk8geworcHVibGljOgorICAgIC8vIENyZWF0ZSBhIEZJRk8gbGFyZ2Ug
ZW5vdWdoIHRvIGhvbGQgfGZpZm9MZW5ndGh8IGZyYW1lcyBvZiBkYXRhIG9mIHxudWJtZXJPZkNo
YW5uZWxzfCBjaGFubmVscy4KKyAgICBBdWRpb0ZJRk8odW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IGZpZm9MZW5ndGgpOworCisgICAgLy8gUHVzaCB0aGUgZGF0YSBmcm9tIHxzb3Vy
Y2V8IGludG8gdGhlIEZJRk8uCisgICAgdm9pZCBwdXNoKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2Up
OworCisgICAgLy8gUHVsbCB8ZnJhbWVzVG9Db25zdW1lfCBmcmFtZXMgb2YgZGF0YSBmcm9tIHRo
ZSBGSUZPIGFuZCBwdXQgdGhlbSBpbiB8ZGVzdGluYXRpb258LiBUaGUKKyAgICAvLyBjb3JyZXNw
b25kaW5nIGZyYW1lcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBGSUZPLgorICAgIHZvaWQgcHVsbChB
dWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb0NvbnN1bWUpOworCisgICAgLy8g
TnVtYmVyIG9mIGZyYW1lcyBvZiBkYXRhIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB0aGUgRklGTy4K
KyAgICBzaXplX3QgZnJhbWVzSW5GaWZvKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZXNJbkZpZm87
IH0KKworcHJpdmF0ZToKKyAgICAvLyBVcGRhdGUgdGhlIEZJRk8gaW5kZXggYnkgdGhlIHN0ZXAs
IHdpdGggYXBwcm9wcmlhdGUgd3JhcHBpbmcgYXJvdW5kIHRoZSBlbmRwb2ludC4KKyAgICBpbnQg
dXBkYXRlSW5kZXgoaW50IGluZGV4LCBpbnQgc3RlcCkgeyByZXR1cm4gKGluZGV4ICsgc3RlcCkg
JSBtX2ZpZm9MZW5ndGg7IH0KKworICAgIHZvaWQgZmluZFdyYXBMZW5ndGhzKHNpemVfdCBpbmRl
eCwgc2l6ZV90IHByb3ZpZGVyU2l6ZSwgc2l6ZV90JiBwYXJ0MUxlbmd0aCwgc2l6ZV90JiBwYXJ0
Mkxlbmd0aCk7CisgICAgCisgICAgLy8gVGhlIEZJRk8gaXRzZWxmLiBJbiByZWFsaXR5LCB0aGUg
RklGTyBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4KKyAgICBBdWRpb0J1cyBtX2ZpZm9BdWRpb0J1czsK
KworICAgIC8vIFRoZSB0b3RhbCBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIEZJRk8uCisgICAgc2l6
ZV90IG1fZmlmb0xlbmd0aDsKKworICAgIC8vIFRoZSBudW1iZXIgb2YgYWN0dWFsIGVsZW1lbnRz
IGluIHRoZSBGSUZPCisgICAgc2l6ZV90IG1fZnJhbWVzSW5GaWZvOworCisgICAgLy8gV2hlcmUg
dG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBGSUZPLgorICAgIHNpemVfdCBtX3JlYWRJbmRleDsK
KworICAgIC8vIFdoZXJlIHRvIHN0YXJ0IHdyaXRpbmcgdG8gdGhlIEZJRk8uCisgICAgc2l6ZV90
IG1fd3JpdGVJbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEF1ZGlvRklGTy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9B
dWRpb1B1bGxGSUZPLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVs
bEZJRk8uY3BwCmluZGV4IDAzZTg5ZGViYTc2Mjk5OGM2ZjlkNWMxMzkxZTNhNzg3MDdlY2FkZjUu
LmE0OWQ1YWYwNTc1ZTRlMDQ3Y2E0MjgzOTEwMTRmMGJkZjc5OGU1ZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwCkBAIC0zNiwxMSArMzYs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEF1ZGlvUHVsbEZJRk86OkF1ZGlvUHVsbEZJRk8o
QXVkaW9Tb3VyY2VQcm92aWRlciYgYXVkaW9Qcm92aWRlciwgdW5zaWduZWQgbnVtYmVyT2ZDaGFu
bmVscywgc2l6ZV90IGZpZm9MZW5ndGgsIHNpemVfdCBwcm92aWRlclNpemUpCiAgICAgOiBtX3By
b3ZpZGVyKGF1ZGlvUHJvdmlkZXIpCi0gICAgLCBtX2ZpZm9BdWRpb0J1cyhudW1iZXJPZkNoYW5u
ZWxzLCBmaWZvTGVuZ3RoKQotICAgICwgbV9maWZvTGVuZ3RoKGZpZm9MZW5ndGgpCi0gICAgLCBt
X2ZyYW1lc0luRmlmbygwKQotICAgICwgbV9yZWFkSW5kZXgoMCkKLSAgICAsIG1fd3JpdGVJbmRl
eCgwKQorICAgICwgbV9maWZvKG51bWJlck9mQ2hhbm5lbHMsIGZpZm9MZW5ndGgpCiAgICAgLCBt
X3Byb3ZpZGVyU2l6ZShwcm92aWRlclNpemUpCiAgICAgLCBtX3RlbXBCdXMobnVtYmVyT2ZDaGFu
bmVscywgcHJvdmlkZXJTaXplKQogewpAQCAtNDgsNjQgKzQ0LDE1IEBAIEF1ZGlvUHVsbEZJRk86
OkF1ZGlvUHVsbEZJRk8oQXVkaW9Tb3VyY2VQcm92aWRlciYgYXVkaW9Qcm92aWRlciwgdW5zaWdu
ZWQgbnVtYmVyCiAKIHZvaWQgQXVkaW9QdWxsRklGTzo6Y29uc3VtZShBdWRpb0J1cyogZGVzdGlu
YXRpb24sIHNpemVfdCBmcmFtZXNUb0NvbnN1bWUpCiB7Ci0gICAgYm9vbCBpc0dvb2QgPSBkZXN0
aW5hdGlvbiAmJiAoZnJhbWVzVG9Db25zdW1lIDw9IG1fZmlmb0xlbmd0aCk7Ci0gICAgQVNTRVJU
KGlzR29vZCk7Ci0gICAgaWYgKCFpc0dvb2QpCisgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKGZyYW1lc1RvQ29uc3VtZSA+IG1fZnJhbWVzSW5GaWZvKSB7
CisgICAgaWYgKGZyYW1lc1RvQ29uc3VtZSA+IG1fZmlmby5mcmFtZXNJbkZpZm8oKSkgewogICAg
ICAgICAvLyBXZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhIGluIHRoZSBGSUZPIHRvIGZ1bGZpbGwg
dGhlIHJlcXVlc3QuIEFzayBmb3IgbW9yZSBkYXRhLgotICAgICAgICBmaWxsQnVmZmVyKGZyYW1l
c1RvQ29uc3VtZSAtIG1fZnJhbWVzSW5GaWZvKTsKKyAgICAgICAgZmlsbEJ1ZmZlcihmcmFtZXNU
b0NvbnN1bWUgLSBtX2ZpZm8uZnJhbWVzSW5GaWZvKCkpOwogICAgIH0KIAotICAgIC8vIFdlIGhh
dmUgZW5vdWdoIGRhdGEgbm93LiBDb3B5IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHNhbXBsZXMg
dG8gdGhlIGRlc3RpbmF0aW9uLgotCi0gICAgc2l6ZV90IHBhcnQxTGVuZ3RoOwotICAgIHNpemVf
dCBwYXJ0Mkxlbmd0aDsKLSAgICBmaW5kV3JhcExlbmd0aHMobV9yZWFkSW5kZXgsIGZyYW1lc1Rv
Q29uc3VtZSwgcGFydDFMZW5ndGgsIHBhcnQyTGVuZ3RoKTsKLQotICAgIHNpemVfdCBudW1iZXJP
ZkNoYW5uZWxzID0gbV9maWZvQXVkaW9CdXMubnVtYmVyT2ZDaGFubmVscygpOwotCi0gICAgZm9y
IChzaXplX3QgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFubmVs
czsgKytjaGFubmVsSW5kZXgpIHsKLSAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uRGF0YSA9IGRl
c3RpbmF0aW9uLT5jaGFubmVsKGNoYW5uZWxJbmRleCktPm11dGFibGVEYXRhKCk7Ci0gICAgICAg
IGNvbnN0IGZsb2F0KiBzb3VyY2VEYXRhID0gbV9maWZvQXVkaW9CdXMuY2hhbm5lbChjaGFubmVs
SW5kZXgpLT5kYXRhKCk7Ci0KLSAgICAgICAgYm9vbCBpc0NvcHlHb29kID0gKChtX3JlYWRJbmRl
eCA8IG1fZmlmb0xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtX3JlYWRJ
bmRleCArIHBhcnQxTGVuZ3RoKSA8PSBtX2ZpZm9MZW5ndGgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIChwYXJ0MUxlbmd0aCA8PSBkZXN0aW5hdGlvbi0+bGVuZ3RoKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAocGFydDFMZW5ndGggKyBwYXJ0Mkxlbmd0aCkgPD0gZGVz
dGluYXRpb24tPmxlbmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKGlzQ29weUdvb2QpOwotICAgICAg
ICBpZiAoIWlzQ29weUdvb2QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbWVtY3B5
KGRlc3RpbmF0aW9uRGF0YSwgc291cmNlRGF0YSArIG1fcmVhZEluZGV4LCBwYXJ0MUxlbmd0aCAq
IHNpemVvZigqc291cmNlRGF0YSkpOwotICAgICAgICAvLyBIYW5kbGUgd3JhcCBhcm91bmQgb2Yg
dGhlIEZJRk8sIGlmIG5lZWRlZC4KLSAgICAgICAgaWYgKHBhcnQyTGVuZ3RoID4gMCkKLSAgICAg
ICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEgKyBwYXJ0MUxlbmd0aCwgc291cmNlRGF0YSwg
cGFydDJMZW5ndGggKiBzaXplb2YoKnNvdXJjZURhdGEpKTsKLSAgICB9Ci0gICAgbV9yZWFkSW5k
ZXggPSB1cGRhdGVJbmRleChtX3JlYWRJbmRleCwgZnJhbWVzVG9Db25zdW1lKTsKLSAgICBtX2Zy
YW1lc0luRmlmbyAtPSBmcmFtZXNUb0NvbnN1bWU7Ci0gICAgQVNTRVJUKG1fZnJhbWVzSW5GaWZv
ID49IDApOwotfQotCi12b2lkIEF1ZGlvUHVsbEZJRk86OmZpbmRXcmFwTGVuZ3RocyhzaXplX3Qg
aW5kZXgsIHNpemVfdCBzaXplLCBzaXplX3QmIHBhcnQxTGVuZ3RoLCBzaXplX3QmIHBhcnQyTGVu
Z3RoKQotewotICAgIEFTU0VSVChpbmRleCA8IG1fZmlmb0xlbmd0aCAmJiBzaXplIDw9IG1fZmlm
b0xlbmd0aCk7Ci0gICAgaWYgKGluZGV4IDwgbV9maWZvTGVuZ3RoICYmIHNpemUgPD0gbV9maWZv
TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpbmRleCArIHNpemUgPiBtX2ZpZm9MZW5ndGgpIHsKLSAg
ICAgICAgICAgIC8vIE5lZWQgdG8gd3JhcC4gRmlndXJlIG91dCB0aGUgbGVuZ3RoIG9mIGVhY2gg
cGllY2UuCi0gICAgICAgICAgICBwYXJ0MUxlbmd0aCA9IG1fZmlmb0xlbmd0aCAtIGluZGV4Owot
ICAgICAgICAgICAgcGFydDJMZW5ndGggPSBzaXplIC0gcGFydDFMZW5ndGg7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBObyB3cmFwIG5lZWRlZC4KLSAgICAgICAgICAgIHBhcnQx
TGVuZ3RoID0gc2l6ZTsKLSAgICAgICAgICAgIHBhcnQyTGVuZ3RoID0gMDsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEludmFsaWQgdmFsdWVzIGZvciBpbmRleCBvciBzaXpl
LiBTZXQgdGhlIHBhcnQgbGVuZ3RocyB0byB6ZXJvIHNvIG5vdGhpbmcgaXMgY29waWVkLgotICAg
ICAgICBwYXJ0MUxlbmd0aCA9IDA7Ci0gICAgICAgIHBhcnQyTGVuZ3RoID0gMDsKLSAgICB9Cisg
ICAgbV9maWZvLnB1bGwoZGVzdGluYXRpb24sIGZyYW1lc1RvQ29uc3VtZSk7CiB9CiAKIHZvaWQg
QXVkaW9QdWxsRklGTzo6ZmlsbEJ1ZmZlcihzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCkBAIC0xMTcs
MzQgKzY0LDggQEAgdm9pZCBBdWRpb1B1bGxGSUZPOjpmaWxsQnVmZmVyKHNpemVfdCBudW1iZXJP
ZkZyYW1lcykKICAgICB3aGlsZSAoZnJhbWVzUHJvdmlkZWQgPCBudW1iZXJPZkZyYW1lcykgewog
ICAgICAgICBtX3Byb3ZpZGVyLnByb3ZpZGVJbnB1dCgmbV90ZW1wQnVzLCBtX3Byb3ZpZGVyU2l6
ZSk7CiAKLSAgICAgICAgc2l6ZV90IHBhcnQxTGVuZ3RoOwotICAgICAgICBzaXplX3QgcGFydDJM
ZW5ndGg7Ci0gICAgICAgIGZpbmRXcmFwTGVuZ3RocyhtX3dyaXRlSW5kZXgsIG1fcHJvdmlkZXJT
aXplLCBwYXJ0MUxlbmd0aCwgcGFydDJMZW5ndGgpOwotCi0gICAgICAgIHNpemVfdCBudW1iZXJP
ZkNoYW5uZWxzID0gbV9maWZvQXVkaW9CdXMubnVtYmVyT2ZDaGFubmVscygpOwotICAgICAgICAK
LSAgICAgICAgZm9yIChzaXplX3QgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVt
YmVyT2ZDaGFubmVsczsgKytjaGFubmVsSW5kZXgpIHsKLSAgICAgICAgICAgIGZsb2F0KiBkZXN0
aW5hdGlvbiA9IG1fZmlmb0F1ZGlvQnVzLmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+bXV0YWJsZURh
dGEoKTsKLSAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBtX3RlbXBCdXMuY2hhbm5l
bChjaGFubmVsSW5kZXgpLT5kYXRhKCk7Ci0KLSAgICAgICAgICAgIGJvb2wgaXNDb3B5R29vZCA9
IChwYXJ0MUxlbmd0aCA8PSBtX3Byb3ZpZGVyU2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIChwYXJ0MUxlbmd0aCArIHBhcnQyTGVuZ3RoKSA8PSBtX3Byb3ZpZGVyU2l6ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtX3dyaXRlSW5kZXggPCBtX2ZpZm9M
ZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1fd3JpdGVJbmRleCAr
IHBhcnQxTGVuZ3RoKSA8PSBtX2ZpZm9MZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBwYXJ0Mkxlbmd0aCA8IG1fZmlmb0xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQo
aXNDb3B5R29vZCk7Ci0gICAgICAgICAgICBpZiAoIWlzQ29weUdvb2QpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBtX3dyaXRlSW5k
ZXgsIHNvdXJjZSwgcGFydDFMZW5ndGggKiBzaXplb2YoKmRlc3RpbmF0aW9uKSk7Ci0gICAgICAg
ICAgICAvLyBIYW5kbGUgd3JhcCBhcm91bmQgb2YgdGhlIEZJRk8sIGlmIG5lZWRlZC4KLSAgICAg
ICAgICAgIGlmIChwYXJ0Mkxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgbWVtY3B5KGRlc3Rp
bmF0aW9uLCBzb3VyY2UgKyBwYXJ0MUxlbmd0aCwgcGFydDJMZW5ndGggKiBzaXplb2YoKmRlc3Rp
bmF0aW9uKSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9maWZvLnB1c2goJm1fdGVtcEJ1cyk7CiAK
LSAgICAgICAgbV9mcmFtZXNJbkZpZm8gKz0gbV9wcm92aWRlclNpemU7Ci0gICAgICAgIEFTU0VS
VChtX2ZyYW1lc0luRmlmbyA8PSBtX2ZpZm9MZW5ndGgpOwotICAgICAgICBtX3dyaXRlSW5kZXgg
PSB1cGRhdGVJbmRleChtX3dyaXRlSW5kZXgsIG1fcHJvdmlkZXJTaXplKTsKICAgICAgICAgZnJh
bWVzUHJvdmlkZWQgKz0gbV9wcm92aWRlclNpemU7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9QdWxsRklGTy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9QdWxsRklGTy5oCmluZGV4IGZhYzE5YjlkMWY5OGE0ZTA1
YWYzMGZiNzljZWFmOWFlMzY2NWJhMzEuLjMzMjY5YWUyOGMyZmE3N2QwYzVmNjBmMmFhYjYzNWVm
NTliMDY1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
UHVsbEZJRk8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxG
SUZPLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgQXVkaW9QdWxsRklGT19oCiAKICNpbmNs
dWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvRklGTy5oIgogI2luY2x1ZGUgIkF1ZGlv
U291cmNlUHJvdmlkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTIsMzEgKzUzLDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnN1bWUoQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXpl
X3QgZnJhbWVzVG9Db25zdW1lKTsKIAogcHJpdmF0ZToKLSAgICAvLyBVcGRhdGUgdGhlIEZJRk8g
aW5kZXggYnkgdGhlIHN0ZXAsIHdpdGggYXBwcm9wcmlhdGUgd3JhcHBpbmcgYXJvdW5kIHRoZSBl
bmRwb2ludC4KLSAgICBpbnQgdXBkYXRlSW5kZXgoaW50IGluZGV4LCBpbnQgc3RlcCkgeyByZXR1
cm4gKGluZGV4ICsgc3RlcCkgJSBtX2ZpZm9MZW5ndGg7IH0KLQotICAgIHZvaWQgZmluZFdyYXBM
ZW5ndGhzKHNpemVfdCBpbmRleCwgc2l6ZV90IHByb3ZpZGVyU2l6ZSwgc2l6ZV90JiBwYXJ0MUxl
bmd0aCwgc2l6ZV90JiBwYXJ0Mkxlbmd0aCk7Ci0gICAgCiAgICAgLy8gRmlsbCB0aGUgRklGTyBi
dWZmZXIgd2l0aCBhdCBsZWFzdCB8bnVtYmVyT2ZGcmFtZXN8IG1vcmUgZGF0YS4KICAgICB2b2lk
IGZpbGxCdWZmZXIoc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKIAogICAgIC8vIFRoZSBwcm92aWRl
ciBvZiB0aGUgZGF0YSBpbiBvdXIgRklGTy4KICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyJiBtX3By
b3ZpZGVyOwogCi0gICAgLy8gVGhlIEZJRk8gaXRzZWxmLiBJbiByZWFsaXR5LCB0aGUgRklGTyBp
cyBhIGNpcmN1bGFyIGJ1ZmZlci4KLSAgICBBdWRpb0J1cyBtX2ZpZm9BdWRpb0J1czsKLQotICAg
IC8vIFRoZSB0b3RhbCBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIEZJRk8uCi0gICAgc2l6ZV90IG1f
Zmlmb0xlbmd0aDsKLQotICAgIC8vIFRoZSBudW1iZXIgb2YgYWN0dWFsIGVsZW1lbnRzIGluIHRo
ZSBGSUZPCi0gICAgc2l6ZV90IG1fZnJhbWVzSW5GaWZvOwotCi0gICAgLy8gV2hlcmUgdG8gc3Rh
cnQgcmVhZGluZyBmcm9tIHRoZSBGSUZPLgotICAgIHNpemVfdCBtX3JlYWRJbmRleDsKLQotICAg
IC8vIFdoZXJlIHRvIHN0YXJ0IHdyaXRpbmcgdG8gdGhlIEZJRk8uCi0gICAgc2l6ZV90IG1fd3Jp
dGVJbmRleDsKKyAgICAvLyBUaGUgYWN0dWFsIEZJRk8KKyAgICBBdWRpb0ZJRk8gbV9maWZvOwog
CiAgICAgLy8gTnVtYmVyIG9mIGZyYW1lcyBvZiBkYXRhIHRoYXQgdGhlIHByb3ZpZGVyIHdpbGwg
cHJvZHVjZSBwZXIgY2FsbC4KICAgICB1bnNpZ25lZCBpbnQgbV9wcm92aWRlclNpemU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1B1c2hGSUZPLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1B1c2hGSUZPLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzBhMjVlZWJlYjRmZDcyNjliZDBmNGZjMmNiMWE4NGM2YjA4MTA0OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVzaEZJRk8uaApAQCAtMCww
ICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBBdWRpb1B1c2hGSUZPX2gKKyNkZWZpbmUgQXVkaW9QdXNoRklG
T19oCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEF1ZGlvUHVzaEZJRk8gOiBwdWJsaWMgQXVkaW9GSUZPIHsKKyAgICAvLyBKdXN0IGluaGVy
aXQgZXZlcnl0aGluZyBmcm9tIEF1ZGlvRklGTy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEF1ZGlvUHVzaEZJRk8uaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150667</attachid>
            <date>2012-07-03 14:05:40 -0700</date>
            <delta_ts>2012-07-03 14:33:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90398-20120703140539.patch</filename>
            <type>text/plain</type>
            <size>18736</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzZmQ0NmJmMDk3MWFi
N2M4MDEwYjFkNDllYmZhNWEwMTMxZTFlNC4uOWZmNzdmOGE0MTQ3NWY4YWUxYjQ1ZWQ2YzRjMGUw
NTBlNDk3MTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTA3LTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgQXVkaW9GSUZPIGNsYXNz
IGFuZCBzaW1wbGlmeSBBdWRpb1B1bGxGSUZPCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDM5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gQ2hhbmdlcyB0byBBdWRpb1B1bGxGSUZP
IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsCisgICAgICAgIHdoaWNoIHdpbGwgYWxzbyB0ZXN0
IEF1ZGlvRklGTy4KKworICAgICAgICBBZGQgQXVkaW9GSUZPIGNsYXNzIHRvIGltcGxlbWVudCBt
YWluIHBhcnRzIG9mIEZJRk8uICBTaW1wbGlmeQorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBB
dWRpb1B1c2hGSUZPIGJ5IHVzaW5nIEF1ZGlvRklGTy4KKyAgICAgICAgCisgICAgICAgICogV2Vi
Q29yZS5neXBpOiBBZGQgbmV3IGZpbGVzLgorCisgICAgICAgIE5ldyBBdWRpb0ZJRk8gY2xhc3MK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0ZJRk8uY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxGSUZPLmNwcC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GSUZPOjpBdWRpb0ZJRk8pOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9GSUZPOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
RklGTzo6cHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZJRk86OmZpbmRXcmFwTGVuZ3Ro
cyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9GSUZPLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uaC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQXVkaW9GSUZPKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRklG
Tzo6ZnJhbWVzSW5GaWZvKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRklGTzo6dXBkYXRlSW5k
ZXgpOgorCisgICAgICAgIFVzZSBBdWRpb0ZJRk8KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9B
dWRpb1B1bGxGSUZPLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUHVsbEZJRk86OkF1ZGlv
UHVsbEZJRk8pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QdWxsRklGTzo6Y29uc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1B1bGxGSUZPOjpmaWxsQnVmZmVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxGSUZPLmg6CisgICAgICAgIChBdWRpb1B1bGxGSUZPKToK
KwogMjAxMi0wNy0wMiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1RleHR1cmVNYXBwZXJdIFRoZSBUZXh0dXJlTWFwcGVyIHNob3VsZCBzdXBwb3J0
IGVkZ2UtZGlzdGFuY2UgYW50aS1hbnRpYWxpYXNpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhYjdh
NDUxZjIxNTE2NTJmMzY4M2RiNGIwOWE2NmNmMDUzNWE3NDcwLi5jNWFmY2JjMjBjMTVlMmIwYTc1
NDU1NjQxZmZjNjNmODVjOGQwN2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjU5LDYgKzMyNTks
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29y
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNz
b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vQXVkaW9EZXN0aW5hdGlvbi5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9BdWRpb0ZJRk8uY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9hdWRpby9BdWRpb0ZJRk8uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVk
aW8vQXVkaW9GaWxlUmVhZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
UHJvY2Vzc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8u
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRklG
Ty5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0ZJRk8uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ2ZWUyNDFmNGM4ZjhiYTQ4MDEwM2I5NjhlMzc4ZDU1ODZiMWE5ODIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0ZJRk8uY3BwCkBA
IC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKworI2luY2x1ZGUgIkF1ZGlvRklGTy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0F1ZGlvRklGTzo6QXVkaW9GSUZPKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBm
aWZvTGVuZ3RoKQorICAgIDogbV9maWZvQXVkaW9CdXMobnVtYmVyT2ZDaGFubmVscywgZmlmb0xl
bmd0aCkKKyAgICAsIG1fZmlmb0xlbmd0aChmaWZvTGVuZ3RoKQorICAgICwgbV9mcmFtZXNJbkZp
Zm8oMCkKKyAgICAsIG1fcmVhZEluZGV4KDApCisgICAgLCBtX3dyaXRlSW5kZXgoMCkKK3sKK30K
Kwordm9pZCBBdWRpb0ZJRk86OmNvbnN1bWUoQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3Qg
ZnJhbWVzVG9Db25zdW1lKQoreworICAgIGJvb2wgaXNHb29kID0gZGVzdGluYXRpb24gJiYgKGZy
YW1lc1RvQ29uc3VtZSA8PSBtX2ZpZm9MZW5ndGgpICYmIChmcmFtZXNUb0NvbnN1bWUgPD0gbV9m
cmFtZXNJbkZpZm8pICYmIChkZXN0aW5hdGlvbi0+bGVuZ3RoKCkgPj0gZnJhbWVzVG9Db25zdW1l
KTsKKyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAoIWlzR29vZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQ29weSB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBzYW1wbGVzIHRvIHRoZSBk
ZXN0aW5hdGlvbi4KKworICAgIHNpemVfdCBwYXJ0MUxlbmd0aDsKKyAgICBzaXplX3QgcGFydDJM
ZW5ndGg7CisgICAgZmluZFdyYXBMZW5ndGhzKG1fcmVhZEluZGV4LCBmcmFtZXNUb0NvbnN1bWUs
IHBhcnQxTGVuZ3RoLCBwYXJ0Mkxlbmd0aCk7CisKKyAgICBzaXplX3QgbnVtYmVyT2ZDaGFubmVs
cyA9IG1fZmlmb0F1ZGlvQnVzLm51bWJlck9mQ2hhbm5lbHMoKTsKKworICAgIGZvciAoc2l6ZV90
IGNoYW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hh
bm5lbEluZGV4KSB7CisgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkRhdGEgPSBkZXN0aW5hdGlv
bi0+Y2hhbm5lbChjaGFubmVsSW5kZXgpLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBjb25zdCBm
bG9hdCogc291cmNlRGF0YSA9IG1fZmlmb0F1ZGlvQnVzLmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+
ZGF0YSgpOworCisgICAgICAgIGJvb2wgaXNDb3B5R29vZCA9ICgobV9yZWFkSW5kZXggPCBtX2Zp
Zm9MZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobV9yZWFkSW5kZXggKyBw
YXJ0MUxlbmd0aCkgPD0gbV9maWZvTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiAocGFydDFMZW5ndGggPD0gZGVzdGluYXRpb24tPmxlbmd0aCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgKHBhcnQxTGVuZ3RoICsgcGFydDJMZW5ndGgpIDw9IGRlc3RpbmF0aW9u
LT5sZW5ndGgoKSk7CisgICAgICAgIEFTU0VSVChpc0NvcHlHb29kKTsKKyAgICAgICAgaWYgKCFp
c0NvcHlHb29kKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvbkRhdGEsIHNvdXJjZURhdGEgKyBtX3JlYWRJbmRleCwgcGFydDFMZW5ndGggKiBzaXplb2Yo
KnNvdXJjZURhdGEpKTsKKyAgICAgICAgLy8gSGFuZGxlIHdyYXAgYXJvdW5kIG9mIHRoZSBGSUZP
LCBpZiBuZWVkZWQuCisgICAgICAgIGlmIChwYXJ0Mkxlbmd0aCkKKyAgICAgICAgICAgIG1lbWNw
eShkZXN0aW5hdGlvbkRhdGEgKyBwYXJ0MUxlbmd0aCwgc291cmNlRGF0YSwgcGFydDJMZW5ndGgg
KiBzaXplb2YoKnNvdXJjZURhdGEpKTsKKyAgICB9CisgICAgbV9yZWFkSW5kZXggPSB1cGRhdGVJ
bmRleChtX3JlYWRJbmRleCwgZnJhbWVzVG9Db25zdW1lKTsKKyAgICBBU1NFUlQobV9mcmFtZXNJ
bkZpZm8gPj0gZnJhbWVzVG9Db25zdW1lKTsKKyAgICBtX2ZyYW1lc0luRmlmbyAtPSBmcmFtZXNU
b0NvbnN1bWU7Cit9CisKK3ZvaWQgQXVkaW9GSUZPOjpwdXNoKGNvbnN0IEF1ZGlvQnVzKiBzb3Vy
Y2VCdXMpCit7CisgICAgLy8gQ29weSB0aGUgc291cmNlQnVzIGludG8gdGhlIEZJRk8gYnVmZmVy
LgorCisgICAgYm9vbCBpc0dvb2QgPSBzb3VyY2VCdXMgJiYgKG1fZnJhbWVzSW5GaWZvICsgc291
cmNlQnVzLT5sZW5ndGgoKSA8PSBtX2ZpZm9MZW5ndGgpOworICAgIGlmICghaXNHb29kKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzaXplX3Qgc291cmNlTGVuZ3RoID0gc291cmNlQnVzLT5sZW5n
dGgoKTsKKyAgICBzaXplX3QgcGFydDFMZW5ndGg7CisgICAgc2l6ZV90IHBhcnQyTGVuZ3RoOwor
ICAgIGZpbmRXcmFwTGVuZ3RocyhtX3JlYWRJbmRleCwgc291cmNlTGVuZ3RoLCBwYXJ0MUxlbmd0
aCwgcGFydDJMZW5ndGgpOworCisgICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBtX2ZpZm9B
dWRpb0J1cy5udW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICBmb3IgKHNpemVfdCBjaGFubmVsSW5k
ZXggPSAwOyBjaGFubmVsSW5kZXggPCBudW1iZXJPZkNoYW5uZWxzOyArK2NoYW5uZWxJbmRleCkg
eworICAgICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBtX2ZpZm9BdWRpb0J1cy5jaGFubmVsKGNo
YW5uZWxJbmRleCktPm11dGFibGVEYXRhKCk7CisgICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2Ug
PSBzb3VyY2VCdXMtPmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOworCisgICAgICAgIGJv
b2wgaXNDb3B5R29vZCA9ICgobV93cml0ZUluZGV4IDwgbV9maWZvTGVuZ3RoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgKG1fd3JpdGVJbmRleCArIHBhcnQxTGVuZ3RoKSA8PSBtX2Zp
Zm9MZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBhcnQyTGVuZ3RoIDwgbV9m
aWZvTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwYXJ0MUxlbmd0aCArIHBh
cnQyTGVuZ3RoIDw9IHNvdXJjZUxlbmd0aCk7CisgICAgICAgIEFTU0VSVChpc0NvcHlHb29kKTsK
KyAgICAgICAgaWYgKCFpc0NvcHlHb29kKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IG1lbWNweShkZXN0aW5hdGlvbiArIG1fd3JpdGVJbmRleCwgc291cmNlLCBwYXJ0MUxlbmd0aCAq
IHNpemVvZigqZGVzdGluYXRpb24pKTsKKworICAgICAgICAvLyBIYW5kbGUgd3JhcCBhcm91bmQg
b2YgdGhlIEZJRk8sIGlmIG5lZWRlZC4KKyAgICAgICAgaWYgKHBhcnQyTGVuZ3RoKQorICAgICAg
ICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UgKyBwYXJ0MUxlbmd0aCwgcGFydDJMZW5n
dGggKiBzaXplb2YoKmRlc3RpbmF0aW9uKSk7CisgICAgfQorICAgICAgICAKKyAgICBtX2ZyYW1l
c0luRmlmbyArPSBzb3VyY2VMZW5ndGg7CisgICAgQVNTRVJUKG1fZnJhbWVzSW5GaWZvIDw9IG1f
Zmlmb0xlbmd0aCk7CisgICAgbV93cml0ZUluZGV4ID0gdXBkYXRlSW5kZXgobV93cml0ZUluZGV4
LCBzb3VyY2VMZW5ndGgpOworfQorCit2b2lkIEF1ZGlvRklGTzo6ZmluZFdyYXBMZW5ndGhzKHNp
emVfdCBpbmRleCwgc2l6ZV90IHNpemUsIHNpemVfdCYgcGFydDFMZW5ndGgsIHNpemVfdCYgcGFy
dDJMZW5ndGgpCit7CisgICAgQVNTRVJUKGluZGV4IDwgbV9maWZvTGVuZ3RoICYmIHNpemUgPD0g
bV9maWZvTGVuZ3RoKTsKKyAgICBpZiAoaW5kZXggPCBtX2ZpZm9MZW5ndGggJiYgc2l6ZSA8PSBt
X2ZpZm9MZW5ndGgpIHsKKyAgICAgICAgaWYgKGluZGV4ICsgc2l6ZSA+IG1fZmlmb0xlbmd0aCkg
eworICAgICAgICAgICAgLy8gTmVlZCB0byB3cmFwLiBGaWd1cmUgb3V0IHRoZSBsZW5ndGggb2Yg
ZWFjaCBwaWVjZS4KKyAgICAgICAgICAgIHBhcnQxTGVuZ3RoID0gbV9maWZvTGVuZ3RoIC0gaW5k
ZXg7CisgICAgICAgICAgICBwYXJ0Mkxlbmd0aCA9IHNpemUgLSBwYXJ0MUxlbmd0aDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIHdyYXAgbmVlZGVkLgorICAgICAgICAgICAg
cGFydDFMZW5ndGggPSBzaXplOworICAgICAgICAgICAgcGFydDJMZW5ndGggPSAwOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW52YWxpZCB2YWx1ZXMgZm9yIGluZGV4IG9y
IHNpemUuIFNldCB0aGUgcGFydCBsZW5ndGhzIHRvIHplcm8gc28gbm90aGluZyBpcyBjb3BpZWQu
CisgICAgICAgIHBhcnQxTGVuZ3RoID0gMDsKKyAgICAgICAgcGFydDJMZW5ndGggPSAwOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRklG
Ty5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9GSUZPLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjUyNmYyMmU2MGE2NGM2Y2ZiZDEzMTlmMzQ1MmI2ZWM4OTQ4MDBlYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRklGTy5oCkBAIC0wLDAg
KzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEF1ZGlvRklGT19oCisjZGVmaW5lIEF1ZGlvRklGT19oCisKKyNp
bmNsdWRlICJBdWRpb0J1cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlv
RklGTyB7CitwdWJsaWM6CisgICAgLy8gQ3JlYXRlIGEgRklGTyBsYXJnZSBlbm91Z2ggdG8gaG9s
ZCB8Zmlmb0xlbmd0aHwgZnJhbWVzIG9mIGRhdGEgb2YgfG51bWJlck9mQ2hhbm5lbHN8IGNoYW5u
ZWxzLgorICAgIEF1ZGlvRklGTyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgZmlm
b0xlbmd0aCk7CisKKyAgICAvLyBQdXNoIHRoZSBkYXRhIGZyb20gdGhlIGJ1cyBpbnRvIHRoZSBG
SUZPLgorICAgIHZvaWQgcHVzaChjb25zdCBBdWRpb0J1cyopOworCisgICAgLy8gQ29uc3VtZSB8
ZnJhbWVzVG9Db25zdW1lfCBmcmFtZXMgb2YgZGF0YSBmcm9tIHRoZSBGSUZPIGFuZCBwdXQgdGhl
bSBpbiB8ZGVzdGluYXRpb258LiBUaGUKKyAgICAvLyBjb3JyZXNwb25kaW5nIGZyYW1lcyBhcmUg
cmVtb3ZlZCBmcm9tIHRoZSBGSUZPLgorICAgIHZvaWQgY29uc3VtZShBdWRpb0J1cyogZGVzdGlu
YXRpb24sIHNpemVfdCBmcmFtZXNUb0NvbnN1bWUpOworCisgICAgLy8gTnVtYmVyIG9mIGZyYW1l
cyBvZiBkYXRhIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB0aGUgRklGTy4KKyAgICBzaXplX3QgZnJh
bWVzSW5GaWZvKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZXNJbkZpZm87IH0KKworcHJpdmF0ZToK
KyAgICAvLyBVcGRhdGUgdGhlIEZJRk8gaW5kZXggYnkgdGhlIHN0ZXAsIHdpdGggYXBwcm9wcmlh
dGUgd3JhcHBpbmcgYXJvdW5kIHRoZSBlbmRwb2ludC4KKyAgICBpbnQgdXBkYXRlSW5kZXgoaW50
IGluZGV4LCBpbnQgc3RlcCkgeyByZXR1cm4gKGluZGV4ICsgc3RlcCkgJSBtX2ZpZm9MZW5ndGg7
IH0KKworICAgIHZvaWQgZmluZFdyYXBMZW5ndGhzKHNpemVfdCBpbmRleCwgc2l6ZV90IHByb3Zp
ZGVyU2l6ZSwgc2l6ZV90JiBwYXJ0MUxlbmd0aCwgc2l6ZV90JiBwYXJ0Mkxlbmd0aCk7CisgICAg
CisgICAgLy8gVGhlIEZJRk8gaXRzZWxmLiBJbiByZWFsaXR5LCB0aGUgRklGTyBpcyBhIGNpcmN1
bGFyIGJ1ZmZlci4KKyAgICBBdWRpb0J1cyBtX2ZpZm9BdWRpb0J1czsKKworICAgIC8vIFRoZSB0
b3RhbCBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIEZJRk8uCisgICAgc2l6ZV90IG1fZmlmb0xlbmd0
aDsKKworICAgIC8vIFRoZSBudW1iZXIgb2YgYWN0dWFsIGVsZW1lbnRzIGluIHRoZSBGSUZPCisg
ICAgc2l6ZV90IG1fZnJhbWVzSW5GaWZvOworCisgICAgLy8gV2hlcmUgdG8gc3RhcnQgcmVhZGlu
ZyBmcm9tIHRoZSBGSUZPLgorICAgIHNpemVfdCBtX3JlYWRJbmRleDsKKworICAgIC8vIFdoZXJl
IHRvIHN0YXJ0IHdyaXRpbmcgdG8gdGhlIEZJRk8uCisgICAgc2l6ZV90IG1fd3JpdGVJbmRleDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRklGTy5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxGSUZPLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwCmluZGV4
IDAzZTg5ZGViYTc2Mjk5OGM2ZjlkNWMxMzkxZTNhNzg3MDdlY2FkZjUuLjI2MTE1NjcwOWY1OGQ4
ODc3MjkxNmFhODViNzMwZTFiMjMxYjY0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwCkBAIC0zNiwxMSArMzYsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEF1ZGlvUHVsbEZJRk86OkF1ZGlvUHVsbEZJRk8oQXVkaW9Tb3VyY2VQcm92
aWRlciYgYXVkaW9Qcm92aWRlciwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGZp
Zm9MZW5ndGgsIHNpemVfdCBwcm92aWRlclNpemUpCiAgICAgOiBtX3Byb3ZpZGVyKGF1ZGlvUHJv
dmlkZXIpCi0gICAgLCBtX2ZpZm9BdWRpb0J1cyhudW1iZXJPZkNoYW5uZWxzLCBmaWZvTGVuZ3Ro
KQotICAgICwgbV9maWZvTGVuZ3RoKGZpZm9MZW5ndGgpCi0gICAgLCBtX2ZyYW1lc0luRmlmbygw
KQotICAgICwgbV9yZWFkSW5kZXgoMCkKLSAgICAsIG1fd3JpdGVJbmRleCgwKQorICAgICwgbV9m
aWZvKG51bWJlck9mQ2hhbm5lbHMsIGZpZm9MZW5ndGgpCiAgICAgLCBtX3Byb3ZpZGVyU2l6ZShw
cm92aWRlclNpemUpCiAgICAgLCBtX3RlbXBCdXMobnVtYmVyT2ZDaGFubmVscywgcHJvdmlkZXJT
aXplKQogewpAQCAtNDgsNjQgKzQ0LDE1IEBAIEF1ZGlvUHVsbEZJRk86OkF1ZGlvUHVsbEZJRk8o
QXVkaW9Tb3VyY2VQcm92aWRlciYgYXVkaW9Qcm92aWRlciwgdW5zaWduZWQgbnVtYmVyCiAKIHZv
aWQgQXVkaW9QdWxsRklGTzo6Y29uc3VtZShBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBm
cmFtZXNUb0NvbnN1bWUpCiB7Ci0gICAgYm9vbCBpc0dvb2QgPSBkZXN0aW5hdGlvbiAmJiAoZnJh
bWVzVG9Db25zdW1lIDw9IG1fZmlmb0xlbmd0aCk7Ci0gICAgQVNTRVJUKGlzR29vZCk7Ci0gICAg
aWYgKCFpc0dvb2QpCisgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKGZyYW1lc1RvQ29uc3VtZSA+IG1fZnJhbWVzSW5GaWZvKSB7CisgICAgaWYgKGZyYW1l
c1RvQ29uc3VtZSA+IG1fZmlmby5mcmFtZXNJbkZpZm8oKSkgewogICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIGVub3VnaCBkYXRhIGluIHRoZSBGSUZPIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIEFz
ayBmb3IgbW9yZSBkYXRhLgotICAgICAgICBmaWxsQnVmZmVyKGZyYW1lc1RvQ29uc3VtZSAtIG1f
ZnJhbWVzSW5GaWZvKTsKKyAgICAgICAgZmlsbEJ1ZmZlcihmcmFtZXNUb0NvbnN1bWUgLSBtX2Zp
Zm8uZnJhbWVzSW5GaWZvKCkpOwogICAgIH0KIAotICAgIC8vIFdlIGhhdmUgZW5vdWdoIGRhdGEg
bm93LiBDb3B5IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHNhbXBsZXMgdG8gdGhlIGRlc3RpbmF0
aW9uLgotCi0gICAgc2l6ZV90IHBhcnQxTGVuZ3RoOwotICAgIHNpemVfdCBwYXJ0Mkxlbmd0aDsK
LSAgICBmaW5kV3JhcExlbmd0aHMobV9yZWFkSW5kZXgsIGZyYW1lc1RvQ29uc3VtZSwgcGFydDFM
ZW5ndGgsIHBhcnQyTGVuZ3RoKTsKLQotICAgIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzID0gbV9m
aWZvQXVkaW9CdXMubnVtYmVyT2ZDaGFubmVscygpOwotCi0gICAgZm9yIChzaXplX3QgY2hhbm5l
bEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFubmVsczsgKytjaGFubmVsSW5k
ZXgpIHsKLSAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uRGF0YSA9IGRlc3RpbmF0aW9uLT5jaGFu
bmVsKGNoYW5uZWxJbmRleCktPm11dGFibGVEYXRhKCk7Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBz
b3VyY2VEYXRhID0gbV9maWZvQXVkaW9CdXMuY2hhbm5lbChjaGFubmVsSW5kZXgpLT5kYXRhKCk7
Ci0KLSAgICAgICAgYm9vbCBpc0NvcHlHb29kID0gKChtX3JlYWRJbmRleCA8IG1fZmlmb0xlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtX3JlYWRJbmRleCArIHBhcnQxTGVu
Z3RoKSA8PSBtX2ZpZm9MZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwYXJ0
MUxlbmd0aCA8PSBkZXN0aW5hdGlvbi0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAocGFydDFMZW5ndGggKyBwYXJ0Mkxlbmd0aCkgPD0gZGVzdGluYXRpb24tPmxlbmd0
aCgpKTsKLSAgICAgICAgQVNTRVJUKGlzQ29weUdvb2QpOwotICAgICAgICBpZiAoIWlzQ29weUdv
b2QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uRGF0
YSwgc291cmNlRGF0YSArIG1fcmVhZEluZGV4LCBwYXJ0MUxlbmd0aCAqIHNpemVvZigqc291cmNl
RGF0YSkpOwotICAgICAgICAvLyBIYW5kbGUgd3JhcCBhcm91bmQgb2YgdGhlIEZJRk8sIGlmIG5l
ZWRlZC4KLSAgICAgICAgaWYgKHBhcnQyTGVuZ3RoID4gMCkKLSAgICAgICAgICAgIG1lbWNweShk
ZXN0aW5hdGlvbkRhdGEgKyBwYXJ0MUxlbmd0aCwgc291cmNlRGF0YSwgcGFydDJMZW5ndGggKiBz
aXplb2YoKnNvdXJjZURhdGEpKTsKLSAgICB9Ci0gICAgbV9yZWFkSW5kZXggPSB1cGRhdGVJbmRl
eChtX3JlYWRJbmRleCwgZnJhbWVzVG9Db25zdW1lKTsKLSAgICBtX2ZyYW1lc0luRmlmbyAtPSBm
cmFtZXNUb0NvbnN1bWU7Ci0gICAgQVNTRVJUKG1fZnJhbWVzSW5GaWZvID49IDApOwotfQotCi12
b2lkIEF1ZGlvUHVsbEZJRk86OmZpbmRXcmFwTGVuZ3RocyhzaXplX3QgaW5kZXgsIHNpemVfdCBz
aXplLCBzaXplX3QmIHBhcnQxTGVuZ3RoLCBzaXplX3QmIHBhcnQyTGVuZ3RoKQotewotICAgIEFT
U0VSVChpbmRleCA8IG1fZmlmb0xlbmd0aCAmJiBzaXplIDw9IG1fZmlmb0xlbmd0aCk7Ci0gICAg
aWYgKGluZGV4IDwgbV9maWZvTGVuZ3RoICYmIHNpemUgPD0gbV9maWZvTGVuZ3RoKSB7Ci0gICAg
ICAgIGlmIChpbmRleCArIHNpemUgPiBtX2ZpZm9MZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIE5l
ZWQgdG8gd3JhcC4gRmlndXJlIG91dCB0aGUgbGVuZ3RoIG9mIGVhY2ggcGllY2UuCi0gICAgICAg
ICAgICBwYXJ0MUxlbmd0aCA9IG1fZmlmb0xlbmd0aCAtIGluZGV4OwotICAgICAgICAgICAgcGFy
dDJMZW5ndGggPSBzaXplIC0gcGFydDFMZW5ndGg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBObyB3cmFwIG5lZWRlZC4KLSAgICAgICAgICAgIHBhcnQxTGVuZ3RoID0gc2l6ZTsK
LSAgICAgICAgICAgIHBhcnQyTGVuZ3RoID0gMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIEludmFsaWQgdmFsdWVzIGZvciBpbmRleCBvciBzaXplLiBTZXQgdGhlIHBhcnQg
bGVuZ3RocyB0byB6ZXJvIHNvIG5vdGhpbmcgaXMgY29waWVkLgotICAgICAgICBwYXJ0MUxlbmd0
aCA9IDA7Ci0gICAgICAgIHBhcnQyTGVuZ3RoID0gMDsKLSAgICB9CisgICAgbV9maWZvLmNvbnN1
bWUoZGVzdGluYXRpb24sIGZyYW1lc1RvQ29uc3VtZSk7CiB9CiAKIHZvaWQgQXVkaW9QdWxsRklG
Tzo6ZmlsbEJ1ZmZlcihzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCkBAIC0xMTcsMzQgKzY0LDggQEAg
dm9pZCBBdWRpb1B1bGxGSUZPOjpmaWxsQnVmZmVyKHNpemVfdCBudW1iZXJPZkZyYW1lcykKICAg
ICB3aGlsZSAoZnJhbWVzUHJvdmlkZWQgPCBudW1iZXJPZkZyYW1lcykgewogICAgICAgICBtX3By
b3ZpZGVyLnByb3ZpZGVJbnB1dCgmbV90ZW1wQnVzLCBtX3Byb3ZpZGVyU2l6ZSk7CiAKLSAgICAg
ICAgc2l6ZV90IHBhcnQxTGVuZ3RoOwotICAgICAgICBzaXplX3QgcGFydDJMZW5ndGg7Ci0gICAg
ICAgIGZpbmRXcmFwTGVuZ3RocyhtX3dyaXRlSW5kZXgsIG1fcHJvdmlkZXJTaXplLCBwYXJ0MUxl
bmd0aCwgcGFydDJMZW5ndGgpOwotCi0gICAgICAgIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzID0g
bV9maWZvQXVkaW9CdXMubnVtYmVyT2ZDaGFubmVscygpOwotICAgICAgICAKLSAgICAgICAgZm9y
IChzaXplX3QgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFubmVs
czsgKytjaGFubmVsSW5kZXgpIHsKLSAgICAgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbiA9IG1f
Zmlmb0F1ZGlvQnVzLmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+bXV0YWJsZURhdGEoKTsKLSAgICAg
ICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBtX3RlbXBCdXMuY2hhbm5lbChjaGFubmVsSW5k
ZXgpLT5kYXRhKCk7Ci0KLSAgICAgICAgICAgIGJvb2wgaXNDb3B5R29vZCA9IChwYXJ0MUxlbmd0
aCA8PSBtX3Byb3ZpZGVyU2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChw
YXJ0MUxlbmd0aCArIHBhcnQyTGVuZ3RoKSA8PSBtX3Byb3ZpZGVyU2l6ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIChtX3dyaXRlSW5kZXggPCBtX2ZpZm9MZW5ndGgpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1fd3JpdGVJbmRleCArIHBhcnQxTGVuZ3Ro
KSA8PSBtX2ZpZm9MZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwYXJ0
Mkxlbmd0aCA8IG1fZmlmb0xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNDb3B5R29vZCk7
Ci0gICAgICAgICAgICBpZiAoIWlzQ29weUdvb2QpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBtX3dyaXRlSW5kZXgsIHNvdXJjZSwg
cGFydDFMZW5ndGggKiBzaXplb2YoKmRlc3RpbmF0aW9uKSk7Ci0gICAgICAgICAgICAvLyBIYW5k
bGUgd3JhcCBhcm91bmQgb2YgdGhlIEZJRk8sIGlmIG5lZWRlZC4KLSAgICAgICAgICAgIGlmIChw
YXJ0Mkxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3Vy
Y2UgKyBwYXJ0MUxlbmd0aCwgcGFydDJMZW5ndGggKiBzaXplb2YoKmRlc3RpbmF0aW9uKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgbV9maWZvLnB1c2goJm1fdGVtcEJ1cyk7CiAKLSAgICAgICAgbV9m
cmFtZXNJbkZpZm8gKz0gbV9wcm92aWRlclNpemU7Ci0gICAgICAgIEFTU0VSVChtX2ZyYW1lc0lu
RmlmbyA8PSBtX2ZpZm9MZW5ndGgpOwotICAgICAgICBtX3dyaXRlSW5kZXggPSB1cGRhdGVJbmRl
eChtX3dyaXRlSW5kZXgsIG1fcHJvdmlkZXJTaXplKTsKICAgICAgICAgZnJhbWVzUHJvdmlkZWQg
Kz0gbV9wcm92aWRlclNpemU7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vQXVkaW9QdWxsRklGTy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9QdWxsRklGTy5oCmluZGV4IGZhYzE5YjlkMWY5OGE0ZTA1YWYzMGZiNzljZWFm
OWFlMzY2NWJhMzEuLjMzMjY5YWUyOGMyZmE3N2QwYzVmNjBmMmFhYjYzNWVmNTliMDY1NDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxGSUZPLmgKQEAgLTMw
LDYgKzMwLDcgQEAKICNkZWZpbmUgQXVkaW9QdWxsRklGT19oCiAKICNpbmNsdWRlICJBdWRpb0J1
cy5oIgorI2luY2x1ZGUgIkF1ZGlvRklGTy5oIgogI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlk
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTIsMzEgKzUzLDE0IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbnN1bWUoQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9D
b25zdW1lKTsKIAogcHJpdmF0ZToKLSAgICAvLyBVcGRhdGUgdGhlIEZJRk8gaW5kZXggYnkgdGhl
IHN0ZXAsIHdpdGggYXBwcm9wcmlhdGUgd3JhcHBpbmcgYXJvdW5kIHRoZSBlbmRwb2ludC4KLSAg
ICBpbnQgdXBkYXRlSW5kZXgoaW50IGluZGV4LCBpbnQgc3RlcCkgeyByZXR1cm4gKGluZGV4ICsg
c3RlcCkgJSBtX2ZpZm9MZW5ndGg7IH0KLQotICAgIHZvaWQgZmluZFdyYXBMZW5ndGhzKHNpemVf
dCBpbmRleCwgc2l6ZV90IHByb3ZpZGVyU2l6ZSwgc2l6ZV90JiBwYXJ0MUxlbmd0aCwgc2l6ZV90
JiBwYXJ0Mkxlbmd0aCk7Ci0gICAgCiAgICAgLy8gRmlsbCB0aGUgRklGTyBidWZmZXIgd2l0aCBh
dCBsZWFzdCB8bnVtYmVyT2ZGcmFtZXN8IG1vcmUgZGF0YS4KICAgICB2b2lkIGZpbGxCdWZmZXIo
c2l6ZV90IG51bWJlck9mRnJhbWVzKTsKIAogICAgIC8vIFRoZSBwcm92aWRlciBvZiB0aGUgZGF0
YSBpbiBvdXIgRklGTy4KICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyJiBtX3Byb3ZpZGVyOwogCi0g
ICAgLy8gVGhlIEZJRk8gaXRzZWxmLiBJbiByZWFsaXR5LCB0aGUgRklGTyBpcyBhIGNpcmN1bGFy
IGJ1ZmZlci4KLSAgICBBdWRpb0J1cyBtX2ZpZm9BdWRpb0J1czsKLQotICAgIC8vIFRoZSB0b3Rh
bCBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIEZJRk8uCi0gICAgc2l6ZV90IG1fZmlmb0xlbmd0aDsK
LQotICAgIC8vIFRoZSBudW1iZXIgb2YgYWN0dWFsIGVsZW1lbnRzIGluIHRoZSBGSUZPCi0gICAg
c2l6ZV90IG1fZnJhbWVzSW5GaWZvOwotCi0gICAgLy8gV2hlcmUgdG8gc3RhcnQgcmVhZGluZyBm
cm9tIHRoZSBGSUZPLgotICAgIHNpemVfdCBtX3JlYWRJbmRleDsKLQotICAgIC8vIFdoZXJlIHRv
IHN0YXJ0IHdyaXRpbmcgdG8gdGhlIEZJRk8uCi0gICAgc2l6ZV90IG1fd3JpdGVJbmRleDsKKyAg
ICAvLyBUaGUgYWN0dWFsIEZJRk8KKyAgICBBdWRpb0ZJRk8gbV9maWZvOwogCiAgICAgLy8gTnVt
YmVyIG9mIGZyYW1lcyBvZiBkYXRhIHRoYXQgdGhlIHByb3ZpZGVyIHdpbGwgcHJvZHVjZSBwZXIg
Y2FsbC4KICAgICB1bnNpZ25lZCBpbnQgbV9wcm92aWRlclNpemU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150670</attachid>
            <date>2012-07-03 14:33:04 -0700</date>
            <delta_ts>2012-07-03 16:41:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90398-20120703143303.patch</filename>
            <type>text/plain</type>
            <size>18700</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzZmQ0NmJmMDk3MWFi
N2M4MDEwYjFkNDllYmZhNWEwMTMxZTFlNC4uMzMzOTZjZmFmNGIwMDA5M2IwNzc5NjA2OTZhNmE2
NWYxZTkxMDA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgQXVkaW9GSUZPIGNsYXNz
IGFuZCBzaW1wbGlmeSBBdWRpb1B1bGxGSUZPCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDM5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBjb2RlIHdpbGwgYmUgdXNlZCBp
biBhdWRpbyBiYWNrLWVuZCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBBZGQgQXVkaW9GSUZP
IGNsYXNzIHRvIGltcGxlbWVudCBtYWluIHBhcnRzIG9mIEZJRk8uICBTaW1wbGlmeQorICAgICAg
ICBpbXBsZW1lbnRhdGlvbiBvZiBBdWRpb1B1c2hGSUZPIGJ5IHVzaW5nIEF1ZGlvRklGTy4KKyAg
ICAgICAgCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGQgbmV3IGZpbGVzLgorCisgICAgICAg
IE5ldyBBdWRpb0ZJRk8gY2xhc3MKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0ZJRk8u
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxG
SUZPLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GSUZP
OjpBdWRpb0ZJRk8pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GSUZPOjpjb25zdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvRklGTzo6cHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0ZJRk86OmZpbmRXcmFwTGVuZ3Rocyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9G
SUZPLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVs
bEZJRk8uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQXVkaW9GSUZPKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRklGTzo6ZnJhbWVzSW5GaWZvKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRklGTzo6dXBkYXRlSW5kZXgpOgorCisgICAgICAgIFVzZSBBdWRpb0ZJRk8KKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxGSUZPLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvUHVsbEZJRk86OkF1ZGlvUHVsbEZJRk8pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Q
dWxsRklGTzo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1B1bGxGSUZPOjpmaWxs
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb1B1bGxGSUZPLmg6CisgICAg
ICAgIChBdWRpb1B1bGxGSUZPKToKKwogMjAxMi0wNy0wMiAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1RleHR1cmVNYXBwZXJdIFRoZSBUZXh0dXJl
TWFwcGVyIHNob3VsZCBzdXBwb3J0IGVkZ2UtZGlzdGFuY2UgYW50aS1hbnRpYWxpYXNpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBhYjdhNDUxZjIxNTE2NTJmMzY4M2RiNGIwOWE2NmNmMDUzNWE3NDcw
Li5jNWFmY2JjMjBjMTVlMmIwYTc1NDU1NjQxZmZjNjNmODVjOGQwN2MxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zMjU5LDYgKzMyNTksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0F1
ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8v
QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8v
QXVkaW9EZXN0aW5hdGlvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9BdWRpb0ZJ
Rk8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9BdWRpb0ZJRk8uaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vYXVkaW8vQXVkaW9GaWxlUmVhZGVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHJvY2Vzc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0F1ZGlvRklGTy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb0ZJRk8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ZWUyNDFmNGM4ZjhiYTQ4MDEwM2I5NjhlMzc4
ZDU1ODZiMWE5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9BdWRpb0ZJRk8uY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvRklGTy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvRklGTzo6QXVkaW9GSUZPKHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMsIHNpemVfdCBmaWZvTGVuZ3RoKQorICAgIDogbV9maWZvQXVkaW9CdXMobnVt
YmVyT2ZDaGFubmVscywgZmlmb0xlbmd0aCkKKyAgICAsIG1fZmlmb0xlbmd0aChmaWZvTGVuZ3Ro
KQorICAgICwgbV9mcmFtZXNJbkZpZm8oMCkKKyAgICAsIG1fcmVhZEluZGV4KDApCisgICAgLCBt
X3dyaXRlSW5kZXgoMCkKK3sKK30KKwordm9pZCBBdWRpb0ZJRk86OmNvbnN1bWUoQXVkaW9CdXMq
IGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Db25zdW1lKQoreworICAgIGJvb2wgaXNHb29k
ID0gZGVzdGluYXRpb24gJiYgKGZyYW1lc1RvQ29uc3VtZSA8PSBtX2ZpZm9MZW5ndGgpICYmIChm
cmFtZXNUb0NvbnN1bWUgPD0gbV9mcmFtZXNJbkZpZm8pICYmIChkZXN0aW5hdGlvbi0+bGVuZ3Ro
KCkgPj0gZnJhbWVzVG9Db25zdW1lKTsKKyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAoIWlz
R29vZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ29weSB0aGUgcmVxdWVzdGVkIG51bWJl
ciBvZiBzYW1wbGVzIHRvIHRoZSBkZXN0aW5hdGlvbi4KKworICAgIHNpemVfdCBwYXJ0MUxlbmd0
aDsKKyAgICBzaXplX3QgcGFydDJMZW5ndGg7CisgICAgZmluZFdyYXBMZW5ndGhzKG1fcmVhZElu
ZGV4LCBmcmFtZXNUb0NvbnN1bWUsIHBhcnQxTGVuZ3RoLCBwYXJ0Mkxlbmd0aCk7CisKKyAgICBz
aXplX3QgbnVtYmVyT2ZDaGFubmVscyA9IG1fZmlmb0F1ZGlvQnVzLm51bWJlck9mQ2hhbm5lbHMo
KTsKKworICAgIGZvciAoc2l6ZV90IGNoYW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51
bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KSB7CisgICAgICAgIGZsb2F0KiBkZXN0aW5h
dGlvbkRhdGEgPSBkZXN0aW5hdGlvbi0+Y2hhbm5lbChjaGFubmVsSW5kZXgpLT5tdXRhYmxlRGF0
YSgpOworICAgICAgICBjb25zdCBmbG9hdCogc291cmNlRGF0YSA9IG1fZmlmb0F1ZGlvQnVzLmNo
YW5uZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOworCisgICAgICAgIGJvb2wgaXNDb3B5R29vZCA9
ICgobV9yZWFkSW5kZXggPCBtX2ZpZm9MZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiAobV9yZWFkSW5kZXggKyBwYXJ0MUxlbmd0aCkgPD0gbV9maWZvTGVuZ3RoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAocGFydDFMZW5ndGggPD0gZGVzdGluYXRpb24tPmxlbmd0
aCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBhcnQxTGVuZ3RoICsgcGFydDJM
ZW5ndGgpIDw9IGRlc3RpbmF0aW9uLT5sZW5ndGgoKSk7CisgICAgICAgIEFTU0VSVChpc0NvcHlH
b29kKTsKKyAgICAgICAgaWYgKCFpc0NvcHlHb29kKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEsIHNvdXJjZURhdGEgKyBtX3JlYWRJbmRleCwg
cGFydDFMZW5ndGggKiBzaXplb2YoKnNvdXJjZURhdGEpKTsKKyAgICAgICAgLy8gSGFuZGxlIHdy
YXAgYXJvdW5kIG9mIHRoZSBGSUZPLCBpZiBuZWVkZWQuCisgICAgICAgIGlmIChwYXJ0Mkxlbmd0
aCkKKyAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEgKyBwYXJ0MUxlbmd0aCwgc291
cmNlRGF0YSwgcGFydDJMZW5ndGggKiBzaXplb2YoKnNvdXJjZURhdGEpKTsKKyAgICB9CisgICAg
bV9yZWFkSW5kZXggPSB1cGRhdGVJbmRleChtX3JlYWRJbmRleCwgZnJhbWVzVG9Db25zdW1lKTsK
KyAgICBBU1NFUlQobV9mcmFtZXNJbkZpZm8gPj0gZnJhbWVzVG9Db25zdW1lKTsKKyAgICBtX2Zy
YW1lc0luRmlmbyAtPSBmcmFtZXNUb0NvbnN1bWU7Cit9CisKK3ZvaWQgQXVkaW9GSUZPOjpwdXNo
KGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2VCdXMpCit7CisgICAgLy8gQ29weSB0aGUgc291cmNlQnVz
IGludG8gdGhlIEZJRk8gYnVmZmVyLgorCisgICAgYm9vbCBpc0dvb2QgPSBzb3VyY2VCdXMgJiYg
KG1fZnJhbWVzSW5GaWZvICsgc291cmNlQnVzLT5sZW5ndGgoKSA8PSBtX2ZpZm9MZW5ndGgpOwor
ICAgIGlmICghaXNHb29kKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qgc291cmNlTGVu
Z3RoID0gc291cmNlQnVzLT5sZW5ndGgoKTsKKyAgICBzaXplX3QgcGFydDFMZW5ndGg7CisgICAg
c2l6ZV90IHBhcnQyTGVuZ3RoOworICAgIGZpbmRXcmFwTGVuZ3RocyhtX3JlYWRJbmRleCwgc291
cmNlTGVuZ3RoLCBwYXJ0MUxlbmd0aCwgcGFydDJMZW5ndGgpOworCisgICAgc2l6ZV90IG51bWJl
ck9mQ2hhbm5lbHMgPSBtX2ZpZm9BdWRpb0J1cy5udW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICBm
b3IgKHNpemVfdCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5kZXggPCBudW1iZXJPZkNoYW5u
ZWxzOyArK2NoYW5uZWxJbmRleCkgeworICAgICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBtX2Zp
Zm9BdWRpb0J1cy5jaGFubmVsKGNoYW5uZWxJbmRleCktPm11dGFibGVEYXRhKCk7CisgICAgICAg
IGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBzb3VyY2VCdXMtPmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+
ZGF0YSgpOworCisgICAgICAgIGJvb2wgaXNDb3B5R29vZCA9ICgobV93cml0ZUluZGV4IDwgbV9m
aWZvTGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1fd3JpdGVJbmRleCAr
IHBhcnQxTGVuZ3RoKSA8PSBtX2ZpZm9MZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHBhcnQyTGVuZ3RoIDwgbV9maWZvTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiBwYXJ0MUxlbmd0aCArIHBhcnQyTGVuZ3RoIDw9IHNvdXJjZUxlbmd0aCk7CisgICAgICAg
IEFTU0VSVChpc0NvcHlHb29kKTsKKyAgICAgICAgaWYgKCFpc0NvcHlHb29kKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiArIG1fd3JpdGVJbmRleCwg
c291cmNlLCBwYXJ0MUxlbmd0aCAqIHNpemVvZigqZGVzdGluYXRpb24pKTsKKworICAgICAgICAv
LyBIYW5kbGUgd3JhcCBhcm91bmQgb2YgdGhlIEZJRk8sIGlmIG5lZWRlZC4KKyAgICAgICAgaWYg
KHBhcnQyTGVuZ3RoKQorICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UgKyBw
YXJ0MUxlbmd0aCwgcGFydDJMZW5ndGggKiBzaXplb2YoKmRlc3RpbmF0aW9uKSk7CisgICAgfQor
ICAgICAgICAKKyAgICBtX2ZyYW1lc0luRmlmbyArPSBzb3VyY2VMZW5ndGg7CisgICAgQVNTRVJU
KG1fZnJhbWVzSW5GaWZvIDw9IG1fZmlmb0xlbmd0aCk7CisgICAgbV93cml0ZUluZGV4ID0gdXBk
YXRlSW5kZXgobV93cml0ZUluZGV4LCBzb3VyY2VMZW5ndGgpOworfQorCit2b2lkIEF1ZGlvRklG
Tzo6ZmluZFdyYXBMZW5ndGhzKHNpemVfdCBpbmRleCwgc2l6ZV90IHNpemUsIHNpemVfdCYgcGFy
dDFMZW5ndGgsIHNpemVfdCYgcGFydDJMZW5ndGgpCit7CisgICAgQVNTRVJUKGluZGV4IDwgbV9m
aWZvTGVuZ3RoICYmIHNpemUgPD0gbV9maWZvTGVuZ3RoKTsKKyAgICBpZiAoaW5kZXggPCBtX2Zp
Zm9MZW5ndGggJiYgc2l6ZSA8PSBtX2ZpZm9MZW5ndGgpIHsKKyAgICAgICAgaWYgKGluZGV4ICsg
c2l6ZSA+IG1fZmlmb0xlbmd0aCkgeworICAgICAgICAgICAgLy8gTmVlZCB0byB3cmFwLiBGaWd1
cmUgb3V0IHRoZSBsZW5ndGggb2YgZWFjaCBwaWVjZS4KKyAgICAgICAgICAgIHBhcnQxTGVuZ3Ro
ID0gbV9maWZvTGVuZ3RoIC0gaW5kZXg7CisgICAgICAgICAgICBwYXJ0Mkxlbmd0aCA9IHNpemUg
LSBwYXJ0MUxlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIHdyYXAg
bmVlZGVkLgorICAgICAgICAgICAgcGFydDFMZW5ndGggPSBzaXplOworICAgICAgICAgICAgcGFy
dDJMZW5ndGggPSAwOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW52YWxp
ZCB2YWx1ZXMgZm9yIGluZGV4IG9yIHNpemUuIFNldCB0aGUgcGFydCBsZW5ndGhzIHRvIHplcm8g
c28gbm90aGluZyBpcyBjb3BpZWQuCisgICAgICAgIHBhcnQxTGVuZ3RoID0gMDsKKyAgICAgICAg
cGFydDJMZW5ndGggPSAwOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0F1ZGlvRklGTy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9GSUZPLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjUyNmYyMmU2MGE2NGM2Y2ZiZDEzMTlmMzQ1MmI2ZWM4
OTQ4MDBlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvRklGTy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvRklGT19oCisjZGVm
aW5lIEF1ZGlvRklGT19oCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEF1ZGlvRklGTyB7CitwdWJsaWM6CisgICAgLy8gQ3JlYXRlIGEgRklG
TyBsYXJnZSBlbm91Z2ggdG8gaG9sZCB8Zmlmb0xlbmd0aHwgZnJhbWVzIG9mIGRhdGEgb2YgfG51
bWJlck9mQ2hhbm5lbHN8IGNoYW5uZWxzLgorICAgIEF1ZGlvRklGTyh1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzLCBzaXplX3QgZmlmb0xlbmd0aCk7CisKKyAgICAvLyBQdXNoIHRoZSBkYXRhIGZy
b20gdGhlIGJ1cyBpbnRvIHRoZSBGSUZPLgorICAgIHZvaWQgcHVzaChjb25zdCBBdWRpb0J1cyop
OworCisgICAgLy8gQ29uc3VtZSB8ZnJhbWVzVG9Db25zdW1lfCBmcmFtZXMgb2YgZGF0YSBmcm9t
IHRoZSBGSUZPIGFuZCBwdXQgdGhlbSBpbiB8ZGVzdGluYXRpb258LiBUaGUKKyAgICAvLyBjb3Jy
ZXNwb25kaW5nIGZyYW1lcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBGSUZPLgorICAgIHZvaWQgY29u
c3VtZShBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb0NvbnN1bWUpOworCisg
ICAgLy8gTnVtYmVyIG9mIGZyYW1lcyBvZiBkYXRhIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB0aGUg
RklGTy4KKyAgICBzaXplX3QgZnJhbWVzSW5GaWZvKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZXNJ
bkZpZm87IH0KKworcHJpdmF0ZToKKyAgICAvLyBVcGRhdGUgdGhlIEZJRk8gaW5kZXggYnkgdGhl
IHN0ZXAsIHdpdGggYXBwcm9wcmlhdGUgd3JhcHBpbmcgYXJvdW5kIHRoZSBlbmRwb2ludC4KKyAg
ICBpbnQgdXBkYXRlSW5kZXgoaW50IGluZGV4LCBpbnQgc3RlcCkgeyByZXR1cm4gKGluZGV4ICsg
c3RlcCkgJSBtX2ZpZm9MZW5ndGg7IH0KKworICAgIHZvaWQgZmluZFdyYXBMZW5ndGhzKHNpemVf
dCBpbmRleCwgc2l6ZV90IHByb3ZpZGVyU2l6ZSwgc2l6ZV90JiBwYXJ0MUxlbmd0aCwgc2l6ZV90
JiBwYXJ0Mkxlbmd0aCk7CisgICAgCisgICAgLy8gVGhlIEZJRk8gaXRzZWxmLiBJbiByZWFsaXR5
LCB0aGUgRklGTyBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4KKyAgICBBdWRpb0J1cyBtX2ZpZm9BdWRp
b0J1czsKKworICAgIC8vIFRoZSB0b3RhbCBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIEZJRk8uCisg
ICAgc2l6ZV90IG1fZmlmb0xlbmd0aDsKKworICAgIC8vIFRoZSBudW1iZXIgb2YgYWN0dWFsIGVs
ZW1lbnRzIGluIHRoZSBGSUZPCisgICAgc2l6ZV90IG1fZnJhbWVzSW5GaWZvOworCisgICAgLy8g
V2hlcmUgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBGSUZPLgorICAgIHNpemVfdCBtX3JlYWRJ
bmRleDsKKworICAgIC8vIFdoZXJlIHRvIHN0YXJ0IHdyaXRpbmcgdG8gdGhlIEZJRk8uCisgICAg
c2l6ZV90IG1fd3JpdGVJbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEF1ZGlvRklGTy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9BdWRpb1B1bGxGSUZPLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1
ZGlvUHVsbEZJRk8uY3BwCmluZGV4IDAzZTg5ZGViYTc2Mjk5OGM2ZjlkNWMxMzkxZTNhNzg3MDdl
Y2FkZjUuLjI2MTE1NjcwOWY1OGQ4ODc3MjkxNmFhODViNzMwZTFiMjMxYjY0ZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHVsbEZJRk8uY3BwCkBAIC0zNiwx
MSArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEF1ZGlvUHVsbEZJRk86OkF1ZGlvUHVs
bEZJRk8oQXVkaW9Tb3VyY2VQcm92aWRlciYgYXVkaW9Qcm92aWRlciwgdW5zaWduZWQgbnVtYmVy
T2ZDaGFubmVscywgc2l6ZV90IGZpZm9MZW5ndGgsIHNpemVfdCBwcm92aWRlclNpemUpCiAgICAg
OiBtX3Byb3ZpZGVyKGF1ZGlvUHJvdmlkZXIpCi0gICAgLCBtX2ZpZm9BdWRpb0J1cyhudW1iZXJP
ZkNoYW5uZWxzLCBmaWZvTGVuZ3RoKQotICAgICwgbV9maWZvTGVuZ3RoKGZpZm9MZW5ndGgpCi0g
ICAgLCBtX2ZyYW1lc0luRmlmbygwKQotICAgICwgbV9yZWFkSW5kZXgoMCkKLSAgICAsIG1fd3Jp
dGVJbmRleCgwKQorICAgICwgbV9maWZvKG51bWJlck9mQ2hhbm5lbHMsIGZpZm9MZW5ndGgpCiAg
ICAgLCBtX3Byb3ZpZGVyU2l6ZShwcm92aWRlclNpemUpCiAgICAgLCBtX3RlbXBCdXMobnVtYmVy
T2ZDaGFubmVscywgcHJvdmlkZXJTaXplKQogewpAQCAtNDgsNjQgKzQ0LDE1IEBAIEF1ZGlvUHVs
bEZJRk86OkF1ZGlvUHVsbEZJRk8oQXVkaW9Tb3VyY2VQcm92aWRlciYgYXVkaW9Qcm92aWRlciwg
dW5zaWduZWQgbnVtYmVyCiAKIHZvaWQgQXVkaW9QdWxsRklGTzo6Y29uc3VtZShBdWRpb0J1cyog
ZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb0NvbnN1bWUpCiB7Ci0gICAgYm9vbCBpc0dvb2Qg
PSBkZXN0aW5hdGlvbiAmJiAoZnJhbWVzVG9Db25zdW1lIDw9IG1fZmlmb0xlbmd0aCk7Ci0gICAg
QVNTRVJUKGlzR29vZCk7Ci0gICAgaWYgKCFpc0dvb2QpCisgICAgaWYgKCFkZXN0aW5hdGlvbikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZyYW1lc1RvQ29uc3VtZSA+IG1fZnJhbWVzSW5G
aWZvKSB7CisgICAgaWYgKGZyYW1lc1RvQ29uc3VtZSA+IG1fZmlmby5mcmFtZXNJbkZpZm8oKSkg
ewogICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhIGluIHRoZSBGSUZPIHRvIGZ1
bGZpbGwgdGhlIHJlcXVlc3QuIEFzayBmb3IgbW9yZSBkYXRhLgotICAgICAgICBmaWxsQnVmZmVy
KGZyYW1lc1RvQ29uc3VtZSAtIG1fZnJhbWVzSW5GaWZvKTsKKyAgICAgICAgZmlsbEJ1ZmZlcihm
cmFtZXNUb0NvbnN1bWUgLSBtX2ZpZm8uZnJhbWVzSW5GaWZvKCkpOwogICAgIH0KIAotICAgIC8v
IFdlIGhhdmUgZW5vdWdoIGRhdGEgbm93LiBDb3B5IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHNh
bXBsZXMgdG8gdGhlIGRlc3RpbmF0aW9uLgotCi0gICAgc2l6ZV90IHBhcnQxTGVuZ3RoOwotICAg
IHNpemVfdCBwYXJ0Mkxlbmd0aDsKLSAgICBmaW5kV3JhcExlbmd0aHMobV9yZWFkSW5kZXgsIGZy
YW1lc1RvQ29uc3VtZSwgcGFydDFMZW5ndGgsIHBhcnQyTGVuZ3RoKTsKLQotICAgIHNpemVfdCBu
dW1iZXJPZkNoYW5uZWxzID0gbV9maWZvQXVkaW9CdXMubnVtYmVyT2ZDaGFubmVscygpOwotCi0g
ICAgZm9yIChzaXplX3QgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZD
aGFubmVsczsgKytjaGFubmVsSW5kZXgpIHsKLSAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uRGF0
YSA9IGRlc3RpbmF0aW9uLT5jaGFubmVsKGNoYW5uZWxJbmRleCktPm11dGFibGVEYXRhKCk7Ci0g
ICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VEYXRhID0gbV9maWZvQXVkaW9CdXMuY2hhbm5lbChj
aGFubmVsSW5kZXgpLT5kYXRhKCk7Ci0KLSAgICAgICAgYm9vbCBpc0NvcHlHb29kID0gKChtX3Jl
YWRJbmRleCA8IG1fZmlmb0xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICht
X3JlYWRJbmRleCArIHBhcnQxTGVuZ3RoKSA8PSBtX2ZpZm9MZW5ndGgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIChwYXJ0MUxlbmd0aCA8PSBkZXN0aW5hdGlvbi0+bGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocGFydDFMZW5ndGggKyBwYXJ0Mkxlbmd0aCkg
PD0gZGVzdGluYXRpb24tPmxlbmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKGlzQ29weUdvb2QpOwot
ICAgICAgICBpZiAoIWlzQ29weUdvb2QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
bWVtY3B5KGRlc3RpbmF0aW9uRGF0YSwgc291cmNlRGF0YSArIG1fcmVhZEluZGV4LCBwYXJ0MUxl
bmd0aCAqIHNpemVvZigqc291cmNlRGF0YSkpOwotICAgICAgICAvLyBIYW5kbGUgd3JhcCBhcm91
bmQgb2YgdGhlIEZJRk8sIGlmIG5lZWRlZC4KLSAgICAgICAgaWYgKHBhcnQyTGVuZ3RoID4gMCkK
LSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEgKyBwYXJ0MUxlbmd0aCwgc291cmNl
RGF0YSwgcGFydDJMZW5ndGggKiBzaXplb2YoKnNvdXJjZURhdGEpKTsKLSAgICB9Ci0gICAgbV9y
ZWFkSW5kZXggPSB1cGRhdGVJbmRleChtX3JlYWRJbmRleCwgZnJhbWVzVG9Db25zdW1lKTsKLSAg
ICBtX2ZyYW1lc0luRmlmbyAtPSBmcmFtZXNUb0NvbnN1bWU7Ci0gICAgQVNTRVJUKG1fZnJhbWVz
SW5GaWZvID49IDApOwotfQotCi12b2lkIEF1ZGlvUHVsbEZJRk86OmZpbmRXcmFwTGVuZ3Rocyhz
aXplX3QgaW5kZXgsIHNpemVfdCBzaXplLCBzaXplX3QmIHBhcnQxTGVuZ3RoLCBzaXplX3QmIHBh
cnQyTGVuZ3RoKQotewotICAgIEFTU0VSVChpbmRleCA8IG1fZmlmb0xlbmd0aCAmJiBzaXplIDw9
IG1fZmlmb0xlbmd0aCk7Ci0gICAgaWYgKGluZGV4IDwgbV9maWZvTGVuZ3RoICYmIHNpemUgPD0g
bV9maWZvTGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpbmRleCArIHNpemUgPiBtX2ZpZm9MZW5ndGgp
IHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gd3JhcC4gRmlndXJlIG91dCB0aGUgbGVuZ3RoIG9m
IGVhY2ggcGllY2UuCi0gICAgICAgICAgICBwYXJ0MUxlbmd0aCA9IG1fZmlmb0xlbmd0aCAtIGlu
ZGV4OwotICAgICAgICAgICAgcGFydDJMZW5ndGggPSBzaXplIC0gcGFydDFMZW5ndGg7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBObyB3cmFwIG5lZWRlZC4KLSAgICAgICAgICAg
IHBhcnQxTGVuZ3RoID0gc2l6ZTsKLSAgICAgICAgICAgIHBhcnQyTGVuZ3RoID0gMDsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEludmFsaWQgdmFsdWVzIGZvciBpbmRleCBv
ciBzaXplLiBTZXQgdGhlIHBhcnQgbGVuZ3RocyB0byB6ZXJvIHNvIG5vdGhpbmcgaXMgY29waWVk
LgotICAgICAgICBwYXJ0MUxlbmd0aCA9IDA7Ci0gICAgICAgIHBhcnQyTGVuZ3RoID0gMDsKLSAg
ICB9CisgICAgbV9maWZvLmNvbnN1bWUoZGVzdGluYXRpb24sIGZyYW1lc1RvQ29uc3VtZSk7CiB9
CiAKIHZvaWQgQXVkaW9QdWxsRklGTzo6ZmlsbEJ1ZmZlcihzaXplX3QgbnVtYmVyT2ZGcmFtZXMp
CkBAIC0xMTcsMzQgKzY0LDggQEAgdm9pZCBBdWRpb1B1bGxGSUZPOjpmaWxsQnVmZmVyKHNpemVf
dCBudW1iZXJPZkZyYW1lcykKICAgICB3aGlsZSAoZnJhbWVzUHJvdmlkZWQgPCBudW1iZXJPZkZy
YW1lcykgewogICAgICAgICBtX3Byb3ZpZGVyLnByb3ZpZGVJbnB1dCgmbV90ZW1wQnVzLCBtX3By
b3ZpZGVyU2l6ZSk7CiAKLSAgICAgICAgc2l6ZV90IHBhcnQxTGVuZ3RoOwotICAgICAgICBzaXpl
X3QgcGFydDJMZW5ndGg7Ci0gICAgICAgIGZpbmRXcmFwTGVuZ3RocyhtX3dyaXRlSW5kZXgsIG1f
cHJvdmlkZXJTaXplLCBwYXJ0MUxlbmd0aCwgcGFydDJMZW5ndGgpOwotCi0gICAgICAgIHNpemVf
dCBudW1iZXJPZkNoYW5uZWxzID0gbV9maWZvQXVkaW9CdXMubnVtYmVyT2ZDaGFubmVscygpOwot
ICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbElu
ZGV4IDwgbnVtYmVyT2ZDaGFubmVsczsgKytjaGFubmVsSW5kZXgpIHsKLSAgICAgICAgICAgIGZs
b2F0KiBkZXN0aW5hdGlvbiA9IG1fZmlmb0F1ZGlvQnVzLmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+
bXV0YWJsZURhdGEoKTsKLSAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBtX3RlbXBC
dXMuY2hhbm5lbChjaGFubmVsSW5kZXgpLT5kYXRhKCk7Ci0KLSAgICAgICAgICAgIGJvb2wgaXND
b3B5R29vZCA9IChwYXJ0MUxlbmd0aCA8PSBtX3Byb3ZpZGVyU2l6ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIChwYXJ0MUxlbmd0aCArIHBhcnQyTGVuZ3RoKSA8PSBtX3Byb3Zp
ZGVyU2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtX3dyaXRlSW5kZXgg
PCBtX2ZpZm9MZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1fd3Jp
dGVJbmRleCArIHBhcnQxTGVuZ3RoKSA8PSBtX2ZpZm9MZW5ndGgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBwYXJ0Mkxlbmd0aCA8IG1fZmlmb0xlbmd0aCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoaXNDb3B5R29vZCk7Ci0gICAgICAgICAgICBpZiAoIWlzQ29weUdvb2QpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBt
X3dyaXRlSW5kZXgsIHNvdXJjZSwgcGFydDFMZW5ndGggKiBzaXplb2YoKmRlc3RpbmF0aW9uKSk7
Ci0gICAgICAgICAgICAvLyBIYW5kbGUgd3JhcCBhcm91bmQgb2YgdGhlIEZJRk8sIGlmIG5lZWRl
ZC4KLSAgICAgICAgICAgIGlmIChwYXJ0Mkxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UgKyBwYXJ0MUxlbmd0aCwgcGFydDJMZW5ndGggKiBzaXpl
b2YoKmRlc3RpbmF0aW9uKSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9maWZvLnB1c2goJm1fdGVt
cEJ1cyk7CiAKLSAgICAgICAgbV9mcmFtZXNJbkZpZm8gKz0gbV9wcm92aWRlclNpemU7Ci0gICAg
ICAgIEFTU0VSVChtX2ZyYW1lc0luRmlmbyA8PSBtX2ZpZm9MZW5ndGgpOwotICAgICAgICBtX3dy
aXRlSW5kZXggPSB1cGRhdGVJbmRleChtX3dyaXRlSW5kZXgsIG1fcHJvdmlkZXJTaXplKTsKICAg
ICAgICAgZnJhbWVzUHJvdmlkZWQgKz0gbV9wcm92aWRlclNpemU7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9QdWxsRklGTy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9QdWxsRklGTy5oCmluZGV4IGZhYzE5Yjlk
MWY5OGE0ZTA1YWYzMGZiNzljZWFmOWFlMzY2NWJhMzEuLjMzMjY5YWUyOGMyZmE3N2QwYzVmNjBm
MmFhYjYzNWVmNTliMDY1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0F1ZGlvUHVsbEZJRk8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9B
dWRpb1B1bGxGSUZPLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgQXVkaW9QdWxsRklGT19o
CiAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvRklGTy5oIgogI2luY2x1
ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTIs
MzEgKzUzLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnN1bWUoQXVkaW9CdXMqIGRlc3RpbmF0
aW9uLCBzaXplX3QgZnJhbWVzVG9Db25zdW1lKTsKIAogcHJpdmF0ZToKLSAgICAvLyBVcGRhdGUg
dGhlIEZJRk8gaW5kZXggYnkgdGhlIHN0ZXAsIHdpdGggYXBwcm9wcmlhdGUgd3JhcHBpbmcgYXJv
dW5kIHRoZSBlbmRwb2ludC4KLSAgICBpbnQgdXBkYXRlSW5kZXgoaW50IGluZGV4LCBpbnQgc3Rl
cCkgeyByZXR1cm4gKGluZGV4ICsgc3RlcCkgJSBtX2ZpZm9MZW5ndGg7IH0KLQotICAgIHZvaWQg
ZmluZFdyYXBMZW5ndGhzKHNpemVfdCBpbmRleCwgc2l6ZV90IHByb3ZpZGVyU2l6ZSwgc2l6ZV90
JiBwYXJ0MUxlbmd0aCwgc2l6ZV90JiBwYXJ0Mkxlbmd0aCk7Ci0gICAgCiAgICAgLy8gRmlsbCB0
aGUgRklGTyBidWZmZXIgd2l0aCBhdCBsZWFzdCB8bnVtYmVyT2ZGcmFtZXN8IG1vcmUgZGF0YS4K
ICAgICB2b2lkIGZpbGxCdWZmZXIoc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKIAogICAgIC8vIFRo
ZSBwcm92aWRlciBvZiB0aGUgZGF0YSBpbiBvdXIgRklGTy4KICAgICBBdWRpb1NvdXJjZVByb3Zp
ZGVyJiBtX3Byb3ZpZGVyOwogCi0gICAgLy8gVGhlIEZJRk8gaXRzZWxmLiBJbiByZWFsaXR5LCB0
aGUgRklGTyBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4KLSAgICBBdWRpb0J1cyBtX2ZpZm9BdWRpb0J1
czsKLQotICAgIC8vIFRoZSB0b3RhbCBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIEZJRk8uCi0gICAg
c2l6ZV90IG1fZmlmb0xlbmd0aDsKLQotICAgIC8vIFRoZSBudW1iZXIgb2YgYWN0dWFsIGVsZW1l
bnRzIGluIHRoZSBGSUZPCi0gICAgc2l6ZV90IG1fZnJhbWVzSW5GaWZvOwotCi0gICAgLy8gV2hl
cmUgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBGSUZPLgotICAgIHNpemVfdCBtX3JlYWRJbmRl
eDsKLQotICAgIC8vIFdoZXJlIHRvIHN0YXJ0IHdyaXRpbmcgdG8gdGhlIEZJRk8uCi0gICAgc2l6
ZV90IG1fd3JpdGVJbmRleDsKKyAgICAvLyBUaGUgYWN0dWFsIEZJRk8KKyAgICBBdWRpb0ZJRk8g
bV9maWZvOwogCiAgICAgLy8gTnVtYmVyIG9mIGZyYW1lcyBvZiBkYXRhIHRoYXQgdGhlIHByb3Zp
ZGVyIHdpbGwgcHJvZHVjZSBwZXIgY2FsbC4KICAgICB1bnNpZ25lZCBpbnQgbV9wcm92aWRlclNp
emU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>