<?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>90063</bug_id>
          
          <creation_ts>2012-06-27 04:50:59 -0700</creation_ts>
          <short_desc>[EFL] Move BatteryClientEfl from WebKit to WebCore</short_desc>
          <delta_ts>2012-07-03 22:50:06 -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>WebKit EFL</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>
          
          <blocked>90069</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kihong.kwon</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>658538</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-06-27 04:50:59 -0700</bug_when>
    <thetext>We should move the BatteryClientEfl class from WebKit/efl/WebCoreSupport to WebCore/platform/efl to that it can be reused for WebKit2.
This will avoid code duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658557</commentid>
    <comment_count>1</comment_count>
      <attachid>149735</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-06-27 05:38:11 -0700</bug_when>
    <thetext>Created attachment 149735
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658561</commentid>
    <comment_count>2</comment_count>
      <attachid>149736</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-06-27 06:01:46 -0700</bug_when>
    <thetext>Created attachment 149736
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659032</commentid>
    <comment_count>3</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-27 17:59:43 -0700</bug_when>
    <thetext>If there is no interaction with user(or application), I think we can move this from WebKit layer to WebCore. But, if there is need to interaction with user, we can&apos;t move it.

CC&apos;ing Kihong. kihong, how do you think about this ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659104</commentid>
    <comment_count>4</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-06-27 19:30:06 -0700</bug_when>
    <thetext>I am not sure about this.
Although we don&apos;t need interaction with user(browser or email application) for this because we used edbus library, I don&apos;t know how other ports implement this.

IMHO, if we want to apply this, we need to arrange implementation with other ports.
Some ports are already written batteryClientXXX in the WebKit, and I am not sure about their needs exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659108</commentid>
    <comment_count>5</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-27 19:36:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I am not sure about this.
&gt; Although we don&apos;t need interaction with user(browser or email application) for this because we used edbus library, I don&apos;t know how other ports implement this.
&gt; 
&gt; IMHO, if we want to apply this, we need to arrange implementation with other ports.
&gt; Some ports are already written batteryClientXXX in the WebKit, and I am not sure about their needs exactly.

If EFL port doesn&apos;t interact with user, I think we can move this from WebKit to WebCore layer. Other ports will decide this issue according to its port implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659148</commentid>
    <comment_count>6</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-06-27 21:21:15 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; I am not sure about this.
&gt; &gt; Although we don&apos;t need interaction with user(browser or email application) for this because we used edbus library, I don&apos;t know how other ports implement this.
&gt; &gt; 
&gt; &gt; IMHO, if we want to apply this, we need to arrange implementation with other ports.
&gt; &gt; Some ports are already written batteryClientXXX in the WebKit, and I am not sure about their needs exactly.
&gt; 
&gt; If EFL port doesn&apos;t interact with user, I think we can move this from WebKit to WebCore layer. Other ports will decide this issue according to its port implementation.

If we use EFL on the other OS, maybe we need to re-move this under WebKit.
But, if you don&apos;t mind about this, I don&apos;t have a problem with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659192</commentid>
    <comment_count>7</comment_count>
      <attachid>149736</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-06-27 22:19:54 -0700</bug_when>
    <thetext>Comment on attachment 149736
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Move BatteryClientEfl class from WebKit to WebCore
&gt; +        so that it can be reused in WebKit2.

The clients are really supposed to be implemented on the API side (thus WebKit) so in a way it is sad to move it to WebCore for sharing and not to a Source/WebKitShared directory or similar. Anyway we did the same for Qt. I am just wondering whether it is the time to discuss this and figuring out the right way of doing this; sharing WebKit API side code across API ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659233</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-27 23:06:15 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 149736 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149736&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Move BatteryClientEfl class from WebKit to WebCore
&gt; &gt; +        so that it can be reused in WebKit2.
&gt; 
&gt; The clients are really supposed to be implemented on the API side (thus WebKit) so in a way it is sad to move it to WebCore for sharing and not to a Source/WebKitShared directory or similar. Anyway we did the same for Qt. I am just wondering whether it is the time to discuss this and figuring out the right way of doing this; sharing WebKit API side code across API ports.

I&apos;m not actually sure why APIs like these go through the WebKit layer when it&apos;s clearly something that&apos;s delivered by the underlying platform.

That said, for WebKit2 there appears often to be a need to delegate things over to the UIProcess to retain the sandbox protection, so for that WebKit seems like a more fitting place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659241</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-06-27 23:13:31 -0700</bug_when>
    <thetext>
&gt; &gt; The clients are really supposed to be implemented on the API side (thus WebKit) so in a way it is sad to move it to WebCore for sharing and not to a Source/WebKitShared directory or similar. Anyway we did the same for Qt. I am just wondering whether it is the time to discuss this and figuring out the right way of doing this; sharing WebKit API side code across API ports.
&gt; 
&gt; I&apos;m not actually sure why APIs like these go through the WebKit layer when it&apos;s clearly something that&apos;s delivered by the underlying platform.
&gt; 
&gt; That said, for WebKit2 there appears often to be a need to delegate things over to the UIProcess to retain the sandbox protection, so for that WebKit seems like a more fitting place.


Client are meant to be implemented as part of the API layer (WebKit/). For some ports this might not make sense if they don&apos;t allow embedders any API to modify this, but it does make sense in the case of WebKit2.

So basically what we need is a shared (wk1 + wk2) WebCoreSupport. I am OK with moving this to WebCore for now though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659297</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-28 00:30:31 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; So basically what we need is a shared (wk1 + wk2) WebCoreSupport. I am OK with moving this to WebCore for now though.

I really like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659302</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-06-28 00:37:52 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; So basically what we need is a shared (wk1 + wk2) WebCoreSupport. I am OK with moving this to WebCore for now though.
&gt; 
&gt; I really like that.

+1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661230</commentid>
    <comment_count>12</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-01 19:20:16 -0700</bug_when>
    <thetext>I agree to land this patch for EFL WK1 and WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661388</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-02 04:10:39 -0700</bug_when>
    <thetext>Can we land this patch first? If we decide to do refactoring, we can move it again later. In the meantime, this allows us to reuse the code in WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662668</commentid>
    <comment_count>14</comment_count>
      <attachid>149736</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-03 22:50:00 -0700</bug_when>
    <thetext>Comment on attachment 149736
Patch

Clearing flags on attachment: 149736

Committed r121828: &lt;http://trac.webkit.org/changeset/121828&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662669</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-03 22:50:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149735</attachid>
            <date>2012-06-27 05:38:11 -0700</date>
            <delta_ts>2012-06-27 06:01:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>90063_batteryclient_move.patch</filename>
            <type>text/plain</type>
            <size>21788</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ODU2Y2ExLi42YzY4YmJkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTItMDYtMjcgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXSBNb3ZlIEJhdHRlcnlDbGllbnRFZmwgZnJvbSBXZWJLaXQg
dG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTAwNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEJhdHRlcnlDbGllbnRFZmwgY2xhc3MgZnJvbSBXZWJLaXQgdG8gV2ViQ29yZQorICAg
ICAgICBzbyB0aGF0IGl0IGNhbiBiZSByZXVzZWQgaW4gV2ViS2l0Mi4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwu
Y3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50
RWZsOjpCYXR0ZXJ5Q2xpZW50RWZsKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRF
Zmw6OnNldENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6
c3RhcnRVcGRhdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzdG9w
VXBkYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6YmF0dGVyeUNv
bnRyb2xsZXJEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6
c2V0QmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjp0
aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OmdldEJhdHRl
cnlTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVy
eUNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL0JhdHRlcnlDbGllbnRFZmwuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRF
ZmwuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNsaWVudEVmbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjp+QmF0dGVyeUNsaWVudEVmbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5U3RhdHVzKToKKwogMjAx
Mi0wNi0yNiAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtQbGF0Zm9ybV0gQ2hhbmdlIGltcGxlbWVudGF0aW9uIG9mIExvY2FsZUlDVSBjbGFzcyB0byBz
dXBwb3J0IG1vcmUgVURhdGVGb3JtYXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDIy
YWYwZTYuLjIyMWM4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yMiw2ICsyMiw3
IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwYWdlL2VmbC9EcmFnQ29udHJvbGxl
ckVmbC5jcHAKICAgcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcAogICBwbGF0Zm9ybS9DdXJz
b3IuY3BwCisgIHBsYXRmb3JtL2VmbC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcAogICBwbGF0Zm9ybS9l
ZmwvQ2xpcGJvYXJkRWZsLmNwcAogICBwbGF0Zm9ybS9lZmwvQ29sb3JDaG9vc2VyRWZsLmNwcAog
ICBwbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQmF0dGVyeUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQmF0dGVyeUNsaWVudEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTdmNGI5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgorCisjaWYgRU5B
QkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1
ZGUgPEVfVWtpdC5oPgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0ZXJ5Q2xpZW50RWZsKCkKKyAgICA6IG1fY29udHJvbGxl
cigwKQorICAgICwgbV90aW1lcih0aGlzLCAmQmF0dGVyeUNsaWVudEVmbDo6dGltZXJGaXJlZCkK
KyAgICAsIG1fYmF0dGVyeVN0YXR1c1JlZnJlc2hJbnRlcnZhbCgxLjApCit7Cit9CisKK0JhdHRl
cnlTdGF0dXMqIEJhdHRlcnlDbGllbnRFZmw6OmJhdHRlcnlTdGF0dXMoKSBjb25zdAoreworICAg
IHJldHVybiBtX2JhdHRlcnlTdGF0dXMuZ2V0KCk7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVm
bDo6c2V0Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxlciogY29udHJvbGxlcikKK3sKKyAgICBt
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworfQorCit2b2lkIEJhdHRlcnlDbGllbnRFZmw6OnN0
YXJ0VXBkYXRpbmcoKQoreworICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghZV9kYnVzX2luaXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFlX3VraXRfaW5pdCgpKSB7CisgICAgICAgIGVfZGJ1c19zaHV0ZG93bigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV90aW1lci5zdGFydFJlcGVhdGluZyhtX2JhdHRlcnlT
dGF0dXNSZWZyZXNoSW50ZXJ2YWwpOworfQorCit2b2lkIEJhdHRlcnlDbGllbnRFZmw6OnN0b3BV
cGRhdGluZygpCit7CisgICAgbV90aW1lci5zdG9wKCk7CisgICAgZV91a2l0X3NodXRkb3duKCk7
CisgICAgZV9kYnVzX3NodXRkb3duKCk7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVmbDo6YmF0
dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lk
IEJhdHRlcnlDbGllbnRFZmw6OnNldEJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKK3sKKyAg
ICBtX2JhdHRlcnlTdGF0dXMgPSBiYXR0ZXJ5U3RhdHVzOworICAgIG1fY29udHJvbGxlci0+ZGlk
Q2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudFR5cGUsIG1fYmF0dGVyeVN0YXR1cyk7Cit9CisKK3Zv
aWQgQmF0dGVyeUNsaWVudEVmbDo6dGltZXJGaXJlZChUaW1lcjxCYXR0ZXJ5Q2xpZW50RWZsPiog
dGltZXIpCit7CisgICAgQVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fdGltZXIpOwor
ICAgIEVfREJ1c19Db25uZWN0aW9uKiBlZGJ1c0Nvbm5lY3Rpb24gPSBlX2RidXNfYnVzX2dldChE
QlVTX0JVU19TWVNURU0pOworICAgIGlmIChlZGJ1c0Nvbm5lY3Rpb24pCisgICAgICAgIGVfdXBv
d2VyX2dldF9hbGxfZGV2aWNlcyhlZGJ1c0Nvbm5lY3Rpb24sIGdldEJhdHRlcnlTdGF0dXMsIHN0
YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVmbDo6Z2V0
QmF0dGVyeVN0YXR1cyh2b2lkKiBkYXRhLCB2b2lkKiByZXBseURhdGEsIERCdXNFcnJvciogZEJ1
c0Vycm9yKQoreworICAgIEVfVWtpdF9HZXRfQWxsX0RldmljZXNfUmV0dXJuKiBldWtpdERldmlj
ZU5hbWVzID0gc3RhdGljX2Nhc3Q8RV9Va2l0X0dldF9BbGxfRGV2aWNlc19SZXR1cm4qPihyZXBs
eURhdGEpOworICAgIGlmICghZXVraXREZXZpY2VOYW1lcyB8fCAhZXVraXREZXZpY2VOYW1lcy0+
c3RyaW5ncyB8fCBkYnVzX2Vycm9yX2lzX3NldChkQnVzRXJyb3IpKSB7CisgICAgICAgICBkYnVz
X2Vycm9yX2ZyZWUoZEJ1c0Vycm9yKTsKKyAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBF
X0RCdXNfQ29ubmVjdGlvbiogZWRidXNDb25uZWN0aW9uID0gZV9kYnVzX2J1c19nZXQoREJVU19C
VVNfU1lTVEVNKTsKKyAgICBFaW5hX0xpc3QqIGxpc3Q7CisgICAgdm9pZCogZGV2aWNlTmFtZTsK
KyAgICBFSU5BX0xJU1RfRk9SRUFDSChldWtpdERldmljZU5hbWVzLT5zdHJpbmdzLCBsaXN0LCBk
ZXZpY2VOYW1lKQorICAgICAgICBlX3Vwb3dlcl9nZXRfYWxsX3Byb3BlcnRpZXMoZWRidXNDb25u
ZWN0aW9uLCBzdGF0aWNfY2FzdDxjaGFyKj4oZGV2aWNlTmFtZSksIHNldEJhdHRlcnlDbGllbnQs
IGRhdGEpOworfQorCit2b2lkIEJhdHRlcnlDbGllbnRFZmw6OnNldEJhdHRlcnlDbGllbnQodm9p
ZCogZGF0YSwgdm9pZCogcmVwbHlEYXRhLCBEQnVzRXJyb3IqIGRCdXNFcnJvcikKK3sKKyAgICBF
X1VraXRfR2V0X0FsbF9Qcm9wZXJ0aWVzX1JldHVybiogZXVraXRQcm9wZXJ0eU5hbWVzID0gc3Rh
dGljX2Nhc3Q8RV9Va2l0X0dldF9BbGxfUHJvcGVydGllc19SZXR1cm4qPihyZXBseURhdGEpOwor
CisgICAgaWYgKCFldWtpdFByb3BlcnR5TmFtZXMgfHwgZGJ1c19lcnJvcl9pc19zZXQoZEJ1c0Vy
cm9yKSkgeworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoZEJ1c0Vycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghZXVraXRQcm9wZXJ0eU5hbWVzLT5wcm9wZXJ0aWVzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBFX1VraXRfUHJvcGVydHkqIHByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8RV9Va2l0X1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQoZXVraXRQcm9wZXJ0eU5hbWVz
LT5wcm9wZXJ0aWVzLCAiVHlwZSIpKTsKKyAgICBpZiAoIXByb3BlcnR5IHx8IHByb3BlcnR5LT52
YWwudSAhPSBFX1VQT1dFUl9TT1VSQ0VfQkFUVEVSWSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QmF0dGVyeUNsaWVudEVmbCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8QmF0dGVyeUNsaWVudEVmbCo+
KGRhdGEpOworICAgIEJhdHRlcnlTdGF0dXMqIGNsaWVudEJhdHRlcnlTdGF0dXMgPSBjbGllbnQt
PmJhdHRlcnlTdGF0dXMoKTsKKyAgICBib29sIGNoYXJnaW5nID0gZmFsc2U7CisgICAgYm9vbCBj
aGFyZ2luZ0NoYW5nZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhcmdpbmdTdGF0
ZSA9IDA7CisKKyAgICBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0PEVfVWtpdF9Qcm9wZXJ0eSo+KGVp
bmFfaGFzaF9maW5kKGV1a2l0UHJvcGVydHlOYW1lcy0+cHJvcGVydGllcywgIlN0YXRlIikpOwor
ICAgIGlmICghcHJvcGVydHkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNsaWVudEJhdHRl
cnlTdGF0dXMgfHwgY2hhcmdpbmdTdGF0ZSAhPSBwcm9wZXJ0eS0+dmFsLnUpIHsKKyAgICAgICAg
Y2hhcmdpbmdDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgY2hhcmdpbmdTdGF0ZSA9IHByb3BlcnR5
LT52YWwudTsKKyAgICAgICAgKGNoYXJnaW5nU3RhdGUgPT0gRV9VUE9XRVJfU1RBVEVfRlVMTCB8
fCBjaGFyZ2luZ1N0YXRlID09IEVfVVBPV0VSX1NUQVRFX0NIQVJHSU5HKSA/IGNoYXJnaW5nID0g
dHJ1ZSA6IGNoYXJnaW5nID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIGNoYXJnaW5nID0g
Y2xpZW50QmF0dGVyeVN0YXR1cy0+Y2hhcmdpbmcoKTsKKworICAgIGJvb2wgY2hhcmdpbmdUaW1l
Q2hhbmdlZCA9IGZhbHNlOworICAgIGJvb2wgZGlzY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IGZhbHNl
OworICAgIGRvdWJsZSBjaGFyZ2luZ1RpbWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OmluZmluaXR5KCk7CisgICAgZG91YmxlIGRpc2NoYXJnaW5nVGltZSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKworICAgIGlmIChjaGFyZ2luZykgeworICAgICAg
ICBpZiAoIWNsaWVudEJhdHRlcnlTdGF0dXMgfHwgY2xpZW50QmF0dGVyeVN0YXR1cy0+ZGlzY2hh
cmdpbmdUaW1lKCkgIT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQor
ICAgICAgICAgICAgZGlzY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIGRpc2No
YXJnaW5nVGltZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAg
ICAgICAgcHJvcGVydHkgPSBzdGF0aWNfY2FzdDxFX1VraXRfUHJvcGVydHkqPihlaW5hX2hhc2hf
ZmluZChldWtpdFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMsICJUaW1lVG9GdWxsIikpOworICAg
ICAgICBpZiAoIXByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWNs
aWVudEJhdHRlcnlTdGF0dXMgfHwgY2xpZW50QmF0dGVyeVN0YXR1cy0+Y2hhcmdpbmdUaW1lKCkg
IT0gcHJvcGVydHktPnZhbC54KQorICAgICAgICAgICAgY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IHRy
dWU7CisgICAgICAgIGNoYXJnaW5nVGltZSA9IHByb3BlcnR5LT52YWwueDsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoIWNsaWVudEJhdHRlcnlTdGF0dXMgfHwgY2xpZW50QmF0dGVyeVN0YXR1
cy0+Y2hhcmdpbmdUaW1lKCkgIT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpKQorICAgICAgICAgICAgY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIGNo
YXJnaW5nVGltZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAg
ICAgICAgcHJvcGVydHkgPSBzdGF0aWNfY2FzdDxFX1VraXRfUHJvcGVydHkqPihlaW5hX2hhc2hf
ZmluZChldWtpdFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMsICJUaW1lVG9FbXB0eSIpKTsKKyAg
ICAgICAgaWYgKCFwcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFj
bGllbnRCYXR0ZXJ5U3RhdHVzIHx8IGNsaWVudEJhdHRlcnlTdGF0dXMtPmRpc2NoYXJnaW5nVGlt
ZSgpICE9IHByb3BlcnR5LT52YWwueCkKKyAgICAgICAgICAgIGRpc2NoYXJnaW5nVGltZUNoYW5n
ZWQgPSB0cnVlOworICAgICAgICBkaXNjaGFyZ2luZ1RpbWUgPSBwcm9wZXJ0eS0+dmFsLng7Cisg
ICAgfQorCisgICAgZG91YmxlIGxldmVsID0gMDsKKyAgICBib29sIGxldmVsQ2hhbmdlZCA9IGZh
bHNlOworCisgICAgcHJvcGVydHkgPSBzdGF0aWNfY2FzdDxFX1VraXRfUHJvcGVydHkqPihlaW5h
X2hhc2hfZmluZChldWtpdFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMsICJQZXJjZW50YWdlIikp
OworICAgIGlmICghcHJvcGVydHkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNsaWVudEJh
dHRlcnlTdGF0dXMgfHwgY2xpZW50QmF0dGVyeVN0YXR1cy0+bGV2ZWwoKSAhPSBwcm9wZXJ0eS0+
dmFsLmQpCisgICAgICAgIGxldmVsQ2hhbmdlZCA9IHRydWU7CisgICAgbGV2ZWwgPSBwcm9wZXJ0
eS0+dmFsLmQ7CisKKyAgICBXVEY6OlJlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVz
ID0gQmF0dGVyeVN0YXR1czo6Y3JlYXRlKGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJn
aW5nVGltZSwgbGV2ZWwpOworICAgIGlmIChjaGFyZ2luZ0NoYW5nZWQpCisgICAgICAgIGNsaWVu
dC0+c2V0QmF0dGVyeVN0YXR1cyhldmVudE5hbWVzKCkuY2hhcmdpbmdjaGFuZ2VFdmVudCwgYmF0
dGVyeVN0YXR1cyk7CisgICAgaWYgKGNoYXJnaW5nVGltZUNoYW5nZWQpCisgICAgICAgIGNsaWVu
dC0+c2V0QmF0dGVyeVN0YXR1cyhldmVudE5hbWVzKCkuY2hhcmdpbmd0aW1lY2hhbmdlRXZlbnQs
IGJhdHRlcnlTdGF0dXMpOworICAgIGlmIChkaXNjaGFyZ2luZ1RpbWVDaGFuZ2VkKQorICAgICAg
ICBjbGllbnQtPnNldEJhdHRlcnlTdGF0dXMoZXZlbnROYW1lcygpLmRpc2NoYXJnaW5ndGltZWNo
YW5nZUV2ZW50LCBiYXR0ZXJ5U3RhdHVzKTsKKyAgICBpZiAobGV2ZWxDaGFuZ2VkKQorICAgICAg
ICBjbGllbnQtPnNldEJhdHRlcnlTdGF0dXMoZXZlbnROYW1lcygpLmxldmVsY2hhbmdlRXZlbnQs
IGJhdHRlcnlTdGF0dXMpOworfQorCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQmF0dGVyeUNsaWVudEVmbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0JhdHRlcnlDbGllbnRFZmwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzYzZjg3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0JhdHRlcnlDbGllbnRFZmwuaApAQCAtMCwwICsx
LDY0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgQmF0dGVyeUNsaWVudEVmbF9oCisjZGVmaW5lIEJhdHRlcnlDbGll
bnRFZmxfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVy
eUNsaWVudC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IERCdXNFcnJvciBEQnVzRXJyb3I7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeUNvbnRyb2xsZXI7CitjbGFzcyBCYXR0ZXJ5
U3RhdHVzOworCitjbGFzcyBCYXR0ZXJ5Q2xpZW50RWZsIDogcHVibGljIEJhdHRlcnlDbGllbnQg
eworcHVibGljOgorICAgIEJhdHRlcnlDbGllbnRFZmwoKTsKKyAgICB+QmF0dGVyeUNsaWVudEVm
bCgpIHsgfTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlDb250cm9s
bGVyKik7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RvcFVwZGF0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVz
dHJveWVkKCk7CisKKyAgICB2b2lkIHNldEJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworICAgIEJhdHRlcnlTdGF0
dXMqIGJhdHRlcnlTdGF0dXMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHRpbWVyRmly
ZWQoVGltZXI8QmF0dGVyeUNsaWVudEVmbD4qKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRCYXR0ZXJ5
U3RhdHVzKHZvaWQqIGRhdGEsIHZvaWQqIHJlcGx5RGF0YSwgREJ1c0Vycm9yKik7CisgICAgc3Rh
dGljIHZvaWQgc2V0QmF0dGVyeUNsaWVudCh2b2lkKiBkYXRhLCB2b2lkKiByZXBseURhdGEsIERC
dXNFcnJvciopOworCisgICAgQmF0dGVyeUNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKKyAgICBU
aW1lcjxCYXR0ZXJ5Q2xpZW50RWZsPiBtX3RpbWVyOworICAgIFJlZlB0cjxCYXR0ZXJ5U3RhdHVz
PiBtX2JhdHRlcnlTdGF0dXM7CisgICAgY29uc3QgZG91YmxlIG1fYmF0dGVyeVN0YXR1c1JlZnJl
c2hJbnRlcnZhbDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NUQVRVUykK
KyNlbmRpZiAvLyBCYXR0ZXJ5Q2xpZW50RWZsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmMzk5YWZhLi44ZDg2
NzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTI3ICBDaHJpc3RvcGhlIER1
bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CisKKyAgICAgICAgW0VGTF0gTW92ZSBC
YXR0ZXJ5Q2xpZW50RWZsIGZyb20gV2ViS2l0IHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMDYzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBCYXR0ZXJ5Q2xpZW50RWZsIGNsYXNz
IGZyb20gV2ViS2l0IHRvIFdlYkNvcmUKKyAgICAgICAgc28gdGhhdCBpdCBjYW4gYmUgcmV1c2Vk
IGluIFdlYktpdDIuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKwogMjAxMi0wNi0y
NiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAg
W1F0XVtXaW5dIFN5bWJvbHMgYXJlIG5vdCBleHBvcnRlZCBpbiBRdFdlYktpdDUuZGxsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCBlMWE5OWUyLi5iM2NmMjIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTE2MSw3ICsxNjEsNiBAQCBFTkRJRiAoKQogCiBJRiAoRU5BQkxFX0JBVFRF
UllfU1RBVFVTKQogICAgIExJU1QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTICR7
V0VCQ09SRV9ESVJ9L01vZHVsZXMvYmF0dGVyeSkKLSAgICBMSVNUKEFQUEVORCBXZWJLaXRfU09V
UkNFUyBlZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHApCiBFTkRJRiAoKQog
CiBJRiAoRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTEyYzE0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJhdHRl
cnlDbGllbnRFZmwuaCIKLQotI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKLQotI2luY2x1ZGUg
IkJhdHRlcnlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
PGxpbWl0cz4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1CYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0
ZXJ5Q2xpZW50RWZsKCkKLSAgICA6IG1fY29udHJvbGxlcigwKQotICAgICwgbV90aW1lcih0aGlz
LCAmQmF0dGVyeUNsaWVudEVmbDo6dGltZXJGaXJlZCkKLSAgICAsIG1fYmF0dGVyeVN0YXR1c1Jl
ZnJlc2hJbnRlcnZhbCgxLjApCi17Ci19Ci0KLXZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c2V0Q29u
dHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxlciogY29udHJvbGxlcikKLXsKLSAgICBtX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotfQotCi12b2lkIEJhdHRlcnlDbGllbnRFZmw6OnN0YXJ0VXBkYXRp
bmcoKQotewotICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghZV9kYnVzX2luaXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFlX3Vr
aXRfaW5pdCgpKSB7Ci0gICAgICAgIGVfZGJ1c19zaHV0ZG93bigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV90aW1lci5zdGFydFJlcGVhdGluZyhtX2JhdHRlcnlTdGF0dXNSZWZy
ZXNoSW50ZXJ2YWwpOwotfQotCi12b2lkIEJhdHRlcnlDbGllbnRFZmw6OnN0b3BVcGRhdGluZygp
Ci17Ci0gICAgbV90aW1lci5zdG9wKCk7Ci0gICAgZV91a2l0X3NodXRkb3duKCk7Ci0gICAgZV9k
YnVzX3NodXRkb3duKCk7Ci19Ci0KLXZvaWQgQmF0dGVyeUNsaWVudEVmbDo6YmF0dGVyeUNvbnRy
b2xsZXJEZXN0cm95ZWQoKQotewotICAgIGRlbGV0ZSB0aGlzOwotfQotCi12b2lkIEJhdHRlcnlD
bGllbnRFZmw6OnNldEJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKLXsKLSAgICBtX2JhdHRl
cnlTdGF0dXMgPSBiYXR0ZXJ5U3RhdHVzOwotICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQmF0
dGVyeVN0YXR1cyhldmVudFR5cGUsIG1fYmF0dGVyeVN0YXR1cyk7Ci19Ci0KLXZvaWQgQmF0dGVy
eUNsaWVudEVmbDo6dGltZXJGaXJlZChUaW1lcjxCYXR0ZXJ5Q2xpZW50RWZsPiogdGltZXIpCi17
Ci0gICAgQVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fdGltZXIpOwotICAgIEVfREJ1
c19Db25uZWN0aW9uKiBlZGJ1c0Nvbm5lY3Rpb24gPSBlX2RidXNfYnVzX2dldChEQlVTX0JVU19T
WVNURU0pOwotICAgIGlmIChlZGJ1c0Nvbm5lY3Rpb24pCi0gICAgICAgIGVfdXBvd2VyX2dldF9h
bGxfZGV2aWNlcyhlZGJ1c0Nvbm5lY3Rpb24sIGdldEJhdHRlcnlTdGF0dXMsIHN0YXRpY19jYXN0
PHZvaWQqPih0aGlzKSk7Ci19Ci0KLXZvaWQgQmF0dGVyeUNsaWVudEVmbDo6Z2V0QmF0dGVyeVN0
YXR1cyh2b2lkKiBkYXRhLCB2b2lkKiByZXBseURhdGEsIERCdXNFcnJvciogZEJ1c0Vycm9yKQot
ewotICAgIEVfVWtpdF9HZXRfQWxsX0RldmljZXNfUmV0dXJuKiBldWtpdERldmljZU5hbWVzID0g
c3RhdGljX2Nhc3Q8RV9Va2l0X0dldF9BbGxfRGV2aWNlc19SZXR1cm4qPihyZXBseURhdGEpOwot
ICAgIGlmICghZXVraXREZXZpY2VOYW1lcyB8fCAhZXVraXREZXZpY2VOYW1lcy0+c3RyaW5ncyB8
fCBkYnVzX2Vycm9yX2lzX3NldChkQnVzRXJyb3IpKSB7Ci0gICAgICAgICBkYnVzX2Vycm9yX2Zy
ZWUoZEJ1c0Vycm9yKTsKLSAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBFX0RCdXNfQ29u
bmVjdGlvbiogZWRidXNDb25uZWN0aW9uID0gZV9kYnVzX2J1c19nZXQoREJVU19CVVNfU1lTVEVN
KTsKLSAgICBFaW5hX0xpc3QqIGxpc3Q7Ci0gICAgdm9pZCogZGV2aWNlTmFtZTsKLSAgICBFSU5B
X0xJU1RfRk9SRUFDSChldWtpdERldmljZU5hbWVzLT5zdHJpbmdzLCBsaXN0LCBkZXZpY2VOYW1l
KQotICAgICAgICBlX3Vwb3dlcl9nZXRfYWxsX3Byb3BlcnRpZXMoZWRidXNDb25uZWN0aW9uLCBz
dGF0aWNfY2FzdDxjaGFyKj4oZGV2aWNlTmFtZSksIHNldEJhdHRlcnlDbGllbnQsIGRhdGEpOwot
fQotCi12b2lkIEJhdHRlcnlDbGllbnRFZmw6OnNldEJhdHRlcnlDbGllbnQodm9pZCogZGF0YSwg
dm9pZCogcmVwbHlEYXRhLCBEQnVzRXJyb3IqIGRCdXNFcnJvcikKLXsKLSAgICBFX1VraXRfR2V0
X0FsbF9Qcm9wZXJ0aWVzX1JldHVybiogZXVraXRQcm9wZXJ0eU5hbWVzID0gc3RhdGljX2Nhc3Q8
RV9Va2l0X0dldF9BbGxfUHJvcGVydGllc19SZXR1cm4qPihyZXBseURhdGEpOwotCi0gICAgaWYg
KCFldWtpdFByb3BlcnR5TmFtZXMgfHwgZGJ1c19lcnJvcl9pc19zZXQoZEJ1c0Vycm9yKSkgewot
ICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoZEJ1c0Vycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghZXVraXRQcm9wZXJ0eU5hbWVzLT5wcm9wZXJ0aWVzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBFX1VraXRfUHJvcGVydHkqIHByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8RV9V
a2l0X1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQoZXVraXRQcm9wZXJ0eU5hbWVzLT5wcm9wZXJ0
aWVzLCAiVHlwZSIpKTsKLSAgICBpZiAoIXByb3BlcnR5IHx8IHByb3BlcnR5LT52YWwudSAhPSBF
X1VQT1dFUl9TT1VSQ0VfQkFUVEVSWSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQmF0dGVyeUNs
aWVudEVmbCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8QmF0dGVyeUNsaWVudEVmbCo+KGRhdGEpOwot
ICAgIEJhdHRlcnlTdGF0dXMqIGNsaWVudEJhdHRlcnlTdGF0dXMgPSBjbGllbnQtPmJhdHRlcnlT
dGF0dXMoKTsKLSAgICBib29sIGNoYXJnaW5nID0gZmFsc2U7Ci0gICAgYm9vbCBjaGFyZ2luZ0No
YW5nZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgdW5zaWduZWQgY2hhcmdpbmdTdGF0ZSA9IDA7Ci0K
LSAgICBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0PEVfVWtpdF9Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9m
aW5kKGV1a2l0UHJvcGVydHlOYW1lcy0+cHJvcGVydGllcywgIlN0YXRlIikpOwotICAgIGlmICgh
cHJvcGVydHkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWNsaWVudEJhdHRlcnlTdGF0dXMg
fHwgY2hhcmdpbmdTdGF0ZSAhPSBwcm9wZXJ0eS0+dmFsLnUpIHsKLSAgICAgICAgY2hhcmdpbmdD
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgY2hhcmdpbmdTdGF0ZSA9IHByb3BlcnR5LT52YWwudTsK
LSAgICAgICAgKGNoYXJnaW5nU3RhdGUgPT0gRV9VUE9XRVJfU1RBVEVfRlVMTCB8fCBjaGFyZ2lu
Z1N0YXRlID09IEVfVVBPV0VSX1NUQVRFX0NIQVJHSU5HKSA/IGNoYXJnaW5nID0gdHJ1ZSA6IGNo
YXJnaW5nID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNoYXJnaW5nID0gY2xpZW50QmF0
dGVyeVN0YXR1cy0+Y2hhcmdpbmcoKTsKLQotICAgIGJvb2wgY2hhcmdpbmdUaW1lQ2hhbmdlZCA9
IGZhbHNlOwotICAgIGJvb2wgZGlzY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IGZhbHNlOwotICAgIGRv
dWJsZSBjaGFyZ2luZ1RpbWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5
KCk7Ci0gICAgZG91YmxlIGRpc2NoYXJnaW5nVGltZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKTsKLQotICAgIGlmIChjaGFyZ2luZykgewotICAgICAgICBpZiAoIWNs
aWVudEJhdHRlcnlTdGF0dXMgfHwgY2xpZW50QmF0dGVyeVN0YXR1cy0+ZGlzY2hhcmdpbmdUaW1l
KCkgIT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQotICAgICAgICAg
ICAgZGlzY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIGRpc2NoYXJnaW5nVGlt
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgcHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxFX1VraXRfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChldWtp
dFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMsICJUaW1lVG9GdWxsIikpOwotICAgICAgICBpZiAo
IXByb3BlcnR5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWNsaWVudEJhdHRl
cnlTdGF0dXMgfHwgY2xpZW50QmF0dGVyeVN0YXR1cy0+Y2hhcmdpbmdUaW1lKCkgIT0gcHJvcGVy
dHktPnZhbC54KQotICAgICAgICAgICAgY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgIGNoYXJnaW5nVGltZSA9IHByb3BlcnR5LT52YWwueDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoIWNsaWVudEJhdHRlcnlTdGF0dXMgfHwgY2xpZW50QmF0dGVyeVN0YXR1cy0+Y2hhcmdp
bmdUaW1lKCkgIT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQotICAg
ICAgICAgICAgY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIGNoYXJnaW5nVGlt
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgcHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxFX1VraXRfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChldWtp
dFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMsICJUaW1lVG9FbXB0eSIpKTsKLSAgICAgICAgaWYg
KCFwcm9wZXJ0eSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFjbGllbnRCYXR0
ZXJ5U3RhdHVzIHx8IGNsaWVudEJhdHRlcnlTdGF0dXMtPmRpc2NoYXJnaW5nVGltZSgpICE9IHBy
b3BlcnR5LT52YWwueCkKLSAgICAgICAgICAgIGRpc2NoYXJnaW5nVGltZUNoYW5nZWQgPSB0cnVl
OwotICAgICAgICBkaXNjaGFyZ2luZ1RpbWUgPSBwcm9wZXJ0eS0+dmFsLng7Ci0gICAgfQotCi0g
ICAgZG91YmxlIGxldmVsID0gMDsKLSAgICBib29sIGxldmVsQ2hhbmdlZCA9IGZhbHNlOwotCi0g
ICAgcHJvcGVydHkgPSBzdGF0aWNfY2FzdDxFX1VraXRfUHJvcGVydHkqPihlaW5hX2hhc2hfZmlu
ZChldWtpdFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMsICJQZXJjZW50YWdlIikpOwotICAgIGlm
ICghcHJvcGVydHkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWNsaWVudEJhdHRlcnlTdGF0
dXMgfHwgY2xpZW50QmF0dGVyeVN0YXR1cy0+bGV2ZWwoKSAhPSBwcm9wZXJ0eS0+dmFsLmQpCi0g
ICAgICAgIGxldmVsQ2hhbmdlZCA9IHRydWU7Ci0gICAgbGV2ZWwgPSBwcm9wZXJ0eS0+dmFsLmQ7
Ci0KLSAgICBXVEY6OlJlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzID0gQmF0dGVy
eVN0YXR1czo6Y3JlYXRlKGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwg
bGV2ZWwpOwotICAgIGlmIChjaGFyZ2luZ0NoYW5nZWQpCi0gICAgICAgIGNsaWVudC0+c2V0QmF0
dGVyeVN0YXR1cyhldmVudE5hbWVzKCkuY2hhcmdpbmdjaGFuZ2VFdmVudCwgYmF0dGVyeVN0YXR1
cyk7Ci0gICAgaWYgKGNoYXJnaW5nVGltZUNoYW5nZWQpCi0gICAgICAgIGNsaWVudC0+c2V0QmF0
dGVyeVN0YXR1cyhldmVudE5hbWVzKCkuY2hhcmdpbmd0aW1lY2hhbmdlRXZlbnQsIGJhdHRlcnlT
dGF0dXMpOwotICAgIGlmIChkaXNjaGFyZ2luZ1RpbWVDaGFuZ2VkKQotICAgICAgICBjbGllbnQt
PnNldEJhdHRlcnlTdGF0dXMoZXZlbnROYW1lcygpLmRpc2NoYXJnaW5ndGltZWNoYW5nZUV2ZW50
LCBiYXR0ZXJ5U3RhdHVzKTsKLSAgICBpZiAobGV2ZWxDaGFuZ2VkKQotICAgICAgICBjbGllbnQt
PnNldEJhdHRlcnlTdGF0dXMoZXZlbnROYW1lcygpLmxldmVsY2hhbmdlRXZlbnQsIGJhdHRlcnlT
dGF0dXMpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUwotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmggYi9T
b3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNDdkNzAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcwotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEJhdHRlcnlDbGllbnRFZmxfaAotI2RlZmluZSBC
YXR0ZXJ5Q2xpZW50RWZsX2gKLQotI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKLQotI2luY2x1
ZGUgIkJhdHRlcnlDbGllbnQuaCIKLSNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgiCi0jaW5jbHVk
ZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxFX1VraXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCYXR0ZXJ5Q29udHJv
bGxlcjsKLWNsYXNzIEJhdHRlcnlTdGF0dXM7Ci0KLWNsYXNzIEJhdHRlcnlDbGllbnRFZmwgOiBw
dWJsaWMgQmF0dGVyeUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgQmF0dGVyeUNsaWVudEVmbCgpOwot
ICAgIH5CYXR0ZXJ5Q2xpZW50RWZsKCkgeyB9OwotCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRy
b2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGlu
ZygpOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKLQotICAgIHZvaWQgc2V0QmF0dGVyeVN0YXR1
cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVz
Pik7Ci0gICAgQmF0dGVyeVN0YXR1cyogYmF0dGVyeVN0YXR1cygpIHsgcmV0dXJuIG1fYmF0dGVy
eVN0YXR1cy5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxC
YXR0ZXJ5Q2xpZW50RWZsPiopOwotICAgIHN0YXRpYyB2b2lkIGdldEJhdHRlcnlTdGF0dXModm9p
ZCogZGF0YSwgdm9pZCogcmVwbHlEYXRhLCBEQnVzRXJyb3IqKTsKLSAgICBzdGF0aWMgdm9pZCBz
ZXRCYXR0ZXJ5Q2xpZW50KHZvaWQqIGRhdGEsIHZvaWQqIHJlcGx5RGF0YSwgREJ1c0Vycm9yKik7
Ci0KLSAgICBCYXR0ZXJ5Q29udHJvbGxlciogbV9jb250cm9sbGVyOwotICAgIFRpbWVyPEJhdHRl
cnlDbGllbnRFZmw+IG1fdGltZXI7Ci0gICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IG1fYmF0dGVy
eVN0YXR1czsKLSAgICBjb25zdCBkb3VibGUgbV9iYXR0ZXJ5U3RhdHVzUmVmcmVzaEludGVydmFs
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKLSNlbmRpZiAvLyBCYXR0ZXJ5
Q2xpZW50RWZsX2gKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149736</attachid>
            <date>2012-06-27 06:01:46 -0700</date>
            <delta_ts>2012-07-03 22:50:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>90063_batteryclient_move.patch</filename>
            <type>text/plain</type>
            <size>21766</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ODU2Y2ExLi42YzY4YmJkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTItMDYtMjcgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXSBNb3ZlIEJhdHRlcnlDbGllbnRFZmwgZnJvbSBXZWJLaXQg
dG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTAwNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEJhdHRlcnlDbGllbnRFZmwgY2xhc3MgZnJvbSBXZWJLaXQgdG8gV2ViQ29yZQorICAg
ICAgICBzbyB0aGF0IGl0IGNhbiBiZSByZXVzZWQgaW4gV2ViS2l0Mi4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwu
Y3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50
RWZsOjpCYXR0ZXJ5Q2xpZW50RWZsKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRF
Zmw6OnNldENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6
c3RhcnRVcGRhdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzdG9w
VXBkYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6YmF0dGVyeUNv
bnRyb2xsZXJEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6
c2V0QmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjp0
aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OmdldEJhdHRl
cnlTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVy
eUNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL0JhdHRlcnlDbGllbnRFZmwuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRF
ZmwuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNsaWVudEVmbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjp+QmF0dGVyeUNsaWVudEVmbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5U3RhdHVzKToKKwogMjAx
Mi0wNi0yNiAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtQbGF0Zm9ybV0gQ2hhbmdlIGltcGxlbWVudGF0aW9uIG9mIExvY2FsZUlDVSBjbGFzcyB0byBz
dXBwb3J0IG1vcmUgVURhdGVGb3JtYXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDIy
YWYwZTYuLjIyMWM4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yMiw2ICsyMiw3
IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwYWdlL2VmbC9EcmFnQ29udHJvbGxl
ckVmbC5jcHAKICAgcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcAogICBwbGF0Zm9ybS9DdXJz
b3IuY3BwCisgIHBsYXRmb3JtL2VmbC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcAogICBwbGF0Zm9ybS9l
ZmwvQ2xpcGJvYXJkRWZsLmNwcAogICBwbGF0Zm9ybS9lZmwvQ29sb3JDaG9vc2VyRWZsLmNwcAog
ICBwbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQmF0dGVyeUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQmF0dGVyeUNsaWVudEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTY2NWIzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgorCisjaWYgRU5B
QkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSA8RV9Va2l0Lmg+CisjaW5jbHVkZSA8bGlt
aXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRlcnlDbGllbnRFZmw6OkJhdHRlcnlD
bGllbnRFZmwoKQorICAgIDogbV9jb250cm9sbGVyKDApCisgICAgLCBtX3RpbWVyKHRoaXMsICZC
YXR0ZXJ5Q2xpZW50RWZsOjp0aW1lckZpcmVkKQorICAgICwgbV9iYXR0ZXJ5U3RhdHVzUmVmcmVz
aEludGVydmFsKDEuMCkKK3sKK30KKworQmF0dGVyeVN0YXR1cyogQmF0dGVyeUNsaWVudEVmbDo6
YmF0dGVyeVN0YXR1cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmF0dGVyeVN0YXR1cy5nZXQo
KTsKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRDb250cm9sbGVyKEJhdHRlcnlDb250
cm9sbGVyKiBjb250cm9sbGVyKQoreworICAgIG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cit9
CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c3RhcnRVcGRhdGluZygpCit7CisgICAgaWYgKG1f
dGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFlX2RidXNfaW5p
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWVfdWtpdF9pbml0KCkpIHsKKyAgICAg
ICAgZV9kYnVzX3NodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Rp
bWVyLnN0YXJ0UmVwZWF0aW5nKG1fYmF0dGVyeVN0YXR1c1JlZnJlc2hJbnRlcnZhbCk7Cit9CisK
K3ZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c3RvcFVwZGF0aW5nKCkKK3sKKyAgICBtX3RpbWVyLnN0
b3AoKTsKKyAgICBlX3VraXRfc2h1dGRvd24oKTsKKyAgICBlX2RidXNfc2h1dGRvd24oKTsKK30K
Kwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpCit7
CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVy
eVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5
U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIG1fYmF0dGVyeVN0YXR1cyA9IGJhdHRlcnlT
dGF0dXM7CisgICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGV2ZW50VHlw
ZSwgbV9iYXR0ZXJ5U3RhdHVzKTsKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjp0aW1lckZp
cmVkKFRpbWVyPEJhdHRlcnlDbGllbnRFZmw+KiB0aW1lcikKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KHRpbWVyLCB0aW1lciA9PSAmbV90aW1lcik7CisgICAgRV9EQnVzX0Nvbm5lY3Rpb24qIGVkYnVz
Q29ubmVjdGlvbiA9IGVfZGJ1c19idXNfZ2V0KERCVVNfQlVTX1NZU1RFTSk7CisgICAgaWYgKGVk
YnVzQ29ubmVjdGlvbikKKyAgICAgICAgZV91cG93ZXJfZ2V0X2FsbF9kZXZpY2VzKGVkYnVzQ29u
bmVjdGlvbiwgZ2V0QmF0dGVyeVN0YXR1cywgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpKTsKK30K
Kwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpnZXRCYXR0ZXJ5U3RhdHVzKHZvaWQqIGRhdGEsIHZv
aWQqIHJlcGx5RGF0YSwgREJ1c0Vycm9yKiBkQnVzRXJyb3IpCit7CisgICAgRV9Va2l0X0dldF9B
bGxfRGV2aWNlc19SZXR1cm4qIGV1a2l0RGV2aWNlTmFtZXMgPSBzdGF0aWNfY2FzdDxFX1VraXRf
R2V0X0FsbF9EZXZpY2VzX1JldHVybio+KHJlcGx5RGF0YSk7CisgICAgaWYgKCFldWtpdERldmlj
ZU5hbWVzIHx8ICFldWtpdERldmljZU5hbWVzLT5zdHJpbmdzIHx8IGRidXNfZXJyb3JfaXNfc2V0
KGRCdXNFcnJvcikpIHsKKyAgICAgICAgIGRidXNfZXJyb3JfZnJlZShkQnVzRXJyb3IpOworICAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVfREJ1c19Db25uZWN0aW9uKiBlZGJ1c0Nvbm5l
Y3Rpb24gPSBlX2RidXNfYnVzX2dldChEQlVTX0JVU19TWVNURU0pOworICAgIEVpbmFfTGlzdCog
bGlzdDsKKyAgICB2b2lkKiBkZXZpY2VOYW1lOworICAgIEVJTkFfTElTVF9GT1JFQUNIKGV1a2l0
RGV2aWNlTmFtZXMtPnN0cmluZ3MsIGxpc3QsIGRldmljZU5hbWUpCisgICAgICAgIGVfdXBvd2Vy
X2dldF9hbGxfcHJvcGVydGllcyhlZGJ1c0Nvbm5lY3Rpb24sIHN0YXRpY19jYXN0PGNoYXIqPihk
ZXZpY2VOYW1lKSwgc2V0QmF0dGVyeUNsaWVudCwgZGF0YSk7Cit9CisKK3ZvaWQgQmF0dGVyeUNs
aWVudEVmbDo6c2V0QmF0dGVyeUNsaWVudCh2b2lkKiBkYXRhLCB2b2lkKiByZXBseURhdGEsIERC
dXNFcnJvciogZEJ1c0Vycm9yKQoreworICAgIEVfVWtpdF9HZXRfQWxsX1Byb3BlcnRpZXNfUmV0
dXJuKiBldWtpdFByb3BlcnR5TmFtZXMgPSBzdGF0aWNfY2FzdDxFX1VraXRfR2V0X0FsbF9Qcm9w
ZXJ0aWVzX1JldHVybio+KHJlcGx5RGF0YSk7CisKKyAgICBpZiAoIWV1a2l0UHJvcGVydHlOYW1l
cyB8fCBkYnVzX2Vycm9yX2lzX3NldChkQnVzRXJyb3IpKSB7CisgICAgICAgIGRidXNfZXJyb3Jf
ZnJlZShkQnVzRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFldWtp
dFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEVfVWtp
dF9Qcm9wZXJ0eSogcHJvcGVydHkgPSBzdGF0aWNfY2FzdDxFX1VraXRfUHJvcGVydHkqPihlaW5h
X2hhc2hfZmluZChldWtpdFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMsICJUeXBlIikpOworICAg
IGlmICghcHJvcGVydHkgfHwgcHJvcGVydHktPnZhbC51ICE9IEVfVVBPV0VSX1NPVVJDRV9CQVRU
RVJZKQorICAgICAgICByZXR1cm47CisKKyAgICBCYXR0ZXJ5Q2xpZW50RWZsKiBjbGllbnQgPSBz
dGF0aWNfY2FzdDxCYXR0ZXJ5Q2xpZW50RWZsKj4oZGF0YSk7CisgICAgQmF0dGVyeVN0YXR1cyog
Y2xpZW50QmF0dGVyeVN0YXR1cyA9IGNsaWVudC0+YmF0dGVyeVN0YXR1cygpOworICAgIGJvb2wg
Y2hhcmdpbmcgPSBmYWxzZTsKKyAgICBib29sIGNoYXJnaW5nQ2hhbmdlZCA9IGZhbHNlOworICAg
IHN0YXRpYyB1bnNpZ25lZCBjaGFyZ2luZ1N0YXRlID0gMDsKKworICAgIHByb3BlcnR5ID0gc3Rh
dGljX2Nhc3Q8RV9Va2l0X1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQoZXVraXRQcm9wZXJ0eU5h
bWVzLT5wcm9wZXJ0aWVzLCAiU3RhdGUiKSk7CisgICAgaWYgKCFwcm9wZXJ0eSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghY2xpZW50QmF0dGVyeVN0YXR1cyB8fCBjaGFyZ2luZ1N0YXRlICE9
IHByb3BlcnR5LT52YWwudSkgeworICAgICAgICBjaGFyZ2luZ0NoYW5nZWQgPSB0cnVlOworICAg
ICAgICBjaGFyZ2luZ1N0YXRlID0gcHJvcGVydHktPnZhbC51OworICAgICAgICAoY2hhcmdpbmdT
dGF0ZSA9PSBFX1VQT1dFUl9TVEFURV9GVUxMIHx8IGNoYXJnaW5nU3RhdGUgPT0gRV9VUE9XRVJf
U1RBVEVfQ0hBUkdJTkcpID8gY2hhcmdpbmcgPSB0cnVlIDogY2hhcmdpbmcgPSBmYWxzZTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgY2hhcmdpbmcgPSBjbGllbnRCYXR0ZXJ5U3RhdHVzLT5jaGFyZ2lu
ZygpOworCisgICAgYm9vbCBjaGFyZ2luZ1RpbWVDaGFuZ2VkID0gZmFsc2U7CisgICAgYm9vbCBk
aXNjaGFyZ2luZ1RpbWVDaGFuZ2VkID0gZmFsc2U7CisgICAgZG91YmxlIGNoYXJnaW5nVGltZSA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICBkb3VibGUgZGlz
Y2hhcmdpbmdUaW1lID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwor
CisgICAgaWYgKGNoYXJnaW5nKSB7CisgICAgICAgIGlmICghY2xpZW50QmF0dGVyeVN0YXR1cyB8
fCBjbGllbnRCYXR0ZXJ5U3RhdHVzLT5kaXNjaGFyZ2luZ1RpbWUoKSAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCisgICAgICAgICAgICBkaXNjaGFyZ2luZ1RpbWVD
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgZGlzY2hhcmdpbmdUaW1lID0gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgICAgICBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PEVfVWtpdF9Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKGV1a2l0UHJvcGVydHlOYW1lcy0+cHJv
cGVydGllcywgIlRpbWVUb0Z1bGwiKSk7CisgICAgICAgIGlmICghcHJvcGVydHkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICghY2xpZW50QmF0dGVyeVN0YXR1cyB8fCBjbGllbnRC
YXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZ1RpbWUoKSAhPSBwcm9wZXJ0eS0+dmFsLngpCisgICAgICAg
ICAgICBjaGFyZ2luZ1RpbWVDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgY2hhcmdpbmdUaW1lID0g
cHJvcGVydHktPnZhbC54OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY2xpZW50QmF0dGVy
eVN0YXR1cyB8fCBjbGllbnRCYXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZ1RpbWUoKSAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCisgICAgICAgICAgICBjaGFyZ2luZ1Rp
bWVDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgY2hhcmdpbmdUaW1lID0gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgICAgICBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PEVfVWtpdF9Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKGV1a2l0UHJvcGVydHlOYW1lcy0+cHJv
cGVydGllcywgIlRpbWVUb0VtcHR5IikpOworICAgICAgICBpZiAoIXByb3BlcnR5KQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWNsaWVudEJhdHRlcnlTdGF0dXMgfHwgY2xpZW50
QmF0dGVyeVN0YXR1cy0+ZGlzY2hhcmdpbmdUaW1lKCkgIT0gcHJvcGVydHktPnZhbC54KQorICAg
ICAgICAgICAgZGlzY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIGRpc2NoYXJn
aW5nVGltZSA9IHByb3BlcnR5LT52YWwueDsKKyAgICB9CisKKyAgICBkb3VibGUgbGV2ZWwgPSAw
OworICAgIGJvb2wgbGV2ZWxDaGFuZ2VkID0gZmFsc2U7CisKKyAgICBwcm9wZXJ0eSA9IHN0YXRp
Y19jYXN0PEVfVWtpdF9Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKGV1a2l0UHJvcGVydHlOYW1l
cy0+cHJvcGVydGllcywgIlBlcmNlbnRhZ2UiKSk7CisgICAgaWYgKCFwcm9wZXJ0eSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghY2xpZW50QmF0dGVyeVN0YXR1cyB8fCBjbGllbnRCYXR0ZXJ5
U3RhdHVzLT5sZXZlbCgpICE9IHByb3BlcnR5LT52YWwuZCkKKyAgICAgICAgbGV2ZWxDaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICBsZXZlbCA9IHByb3BlcnR5LT52YWwuZDsKKworICAgIFdURjo6UmVmUHRy
PEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMgPSBCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoY2hh
cmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7CisgICAgaWYgKGNo
YXJnaW5nQ2hhbmdlZCkKKyAgICAgICAgY2xpZW50LT5zZXRCYXR0ZXJ5U3RhdHVzKGV2ZW50TmFt
ZXMoKS5jaGFyZ2luZ2NoYW5nZUV2ZW50LCBiYXR0ZXJ5U3RhdHVzKTsKKyAgICBpZiAoY2hhcmdp
bmdUaW1lQ2hhbmdlZCkKKyAgICAgICAgY2xpZW50LT5zZXRCYXR0ZXJ5U3RhdHVzKGV2ZW50TmFt
ZXMoKS5jaGFyZ2luZ3RpbWVjaGFuZ2VFdmVudCwgYmF0dGVyeVN0YXR1cyk7CisgICAgaWYgKGRp
c2NoYXJnaW5nVGltZUNoYW5nZWQpCisgICAgICAgIGNsaWVudC0+c2V0QmF0dGVyeVN0YXR1cyhl
dmVudE5hbWVzKCkuZGlzY2hhcmdpbmd0aW1lY2hhbmdlRXZlbnQsIGJhdHRlcnlTdGF0dXMpOwor
ICAgIGlmIChsZXZlbENoYW5nZWQpCisgICAgICAgIGNsaWVudC0+c2V0QmF0dGVyeVN0YXR1cyhl
dmVudE5hbWVzKCkubGV2ZWxjaGFuZ2VFdmVudCwgYmF0dGVyeVN0YXR1cyk7Cit9CisKK30KKwor
I2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9CYXR0ZXJ5Q2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvQmF0dGVyeUNsaWVudEVmbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmE5ZjE1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
QmF0dGVyeUNsaWVudEVmbC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5Q2xp
ZW50RWZsX2gKKyNkZWZpbmUgQmF0dGVyeUNsaWVudEVmbF9oCisKKyNpZiBFTkFCTEUoQkFUVEVS
WV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50LmgiCisjaW5jbHVkZSAiQmF0dGVy
eVN0YXR1cy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IERCdXNFcnJvciBEQnVzRXJyb3I7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeUNvbnRyb2xsZXI7CisKK2NsYXNzIEJhdHRl
cnlDbGllbnRFZmwgOiBwdWJsaWMgQmF0dGVyeUNsaWVudCB7CitwdWJsaWM6CisgICAgQmF0dGVy
eUNsaWVudEVmbCgpOworICAgIH5CYXR0ZXJ5Q2xpZW50RWZsKCkgeyB9OworCisgICAgdmlydHVh
bCB2b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRVcGRhdGluZygpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZvaWQg
c2V0QmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxCYXR0ZXJ5U3RhdHVzPik7CisgICAgQmF0dGVyeVN0YXR1cyogYmF0dGVyeVN0YXR1cygpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxCYXR0ZXJ5Q2xpZW50
RWZsPiopOworICAgIHN0YXRpYyB2b2lkIGdldEJhdHRlcnlTdGF0dXModm9pZCogZGF0YSwgdm9p
ZCogcmVwbHlEYXRhLCBEQnVzRXJyb3IqKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRCYXR0ZXJ5Q2xp
ZW50KHZvaWQqIGRhdGEsIHZvaWQqIHJlcGx5RGF0YSwgREJ1c0Vycm9yKik7CisKKyAgICBCYXR0
ZXJ5Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIFRpbWVyPEJhdHRlcnlDbGllbnRFZmw+
IG1fdGltZXI7CisgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IG1fYmF0dGVyeVN0YXR1czsKKyAg
ICBjb25zdCBkb3VibGUgbV9iYXR0ZXJ5U3RhdHVzUmVmcmVzaEludGVydmFsOworfTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorI2VuZGlmIC8vIEJhdHRlcnlDbGll
bnRFZmxfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYzOTlhZmEuLjhkODY3MmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTItMDYtMjcgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6
QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXSBNb3ZlIEJhdHRlcnlDbGllbnRFZmwgZnJvbSBX
ZWJLaXQgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTAwNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNb3ZlIEJhdHRlcnlDbGllbnRFZmwgY2xhc3MgZnJvbSBXZWJLaXQgdG8gV2ViQ29y
ZQorICAgICAgICBzbyB0aGF0IGl0IGNhbiBiZSByZXVzZWQgaW4gV2ViS2l0Mi4KKworICAgICAg
ICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorCiAyMDEyLTA2LTI2ICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dpbl0gU3ltYm9scyBhcmUg
bm90IGV4cG9ydGVkIGluIFF0V2ViS2l0NS5kbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IGUxYTk5ZTIuLmIzY2YyMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwu
Y21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTYxLDcgKzE2
MSw2IEBAIEVORElGICgpCiAKIElGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCiAgICAgTElTVChB
UFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9i
YXR0ZXJ5KQotICAgIExJU1QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTIGVmbC9XZWJDb3JlU3VwcG9y
dC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcCkKIEVORElGICgpCiAKIElGIChFTkFCTEVfUkVHSVNURVJf
UFJPVE9DT0xfSEFORExFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDJlMTJjMTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
QmF0dGVyeUNsaWVudEVmbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgotCi0jaWYg
RU5BQkxFKEJBVFRFUllfU1RBVFVTKQotCi0jaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSA8bGltaXRzPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUJhdHRlcnlDbGllbnRFZmw6OkJhdHRlcnlDbGllbnRFZmwoKQotICAgIDog
bV9jb250cm9sbGVyKDApCi0gICAgLCBtX3RpbWVyKHRoaXMsICZCYXR0ZXJ5Q2xpZW50RWZsOjp0
aW1lckZpcmVkKQotICAgICwgbV9iYXR0ZXJ5U3RhdHVzUmVmcmVzaEludGVydmFsKDEuMCkKLXsK
LX0KLQotdm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRDb250cm9sbGVyKEJhdHRlcnlDb250cm9s
bGVyKiBjb250cm9sbGVyKQotewotICAgIG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci19Ci0K
LXZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c3RhcnRVcGRhdGluZygpCi17Ci0gICAgaWYgKG1fdGlt
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFlX2RidXNfaW5pdCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWVfdWtpdF9pbml0KCkpIHsKLSAgICAgICAg
ZV9kYnVzX3NodXRkb3duKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3RpbWVy
LnN0YXJ0UmVwZWF0aW5nKG1fYmF0dGVyeVN0YXR1c1JlZnJlc2hJbnRlcnZhbCk7Ci19Ci0KLXZv
aWQgQmF0dGVyeUNsaWVudEVmbDo6c3RvcFVwZGF0aW5nKCkKLXsKLSAgICBtX3RpbWVyLnN0b3Ao
KTsKLSAgICBlX3VraXRfc2h1dGRvd24oKTsKLSAgICBlX2RidXNfc2h1dGRvd24oKTsKLX0KLQot
dm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpCi17Ci0g
ICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVyeVN0
YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3Rh
dHVzPiBiYXR0ZXJ5U3RhdHVzKQotewotICAgIG1fYmF0dGVyeVN0YXR1cyA9IGJhdHRlcnlTdGF0
dXM7Ci0gICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGV2ZW50VHlwZSwg
bV9iYXR0ZXJ5U3RhdHVzKTsKLX0KLQotdm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjp0aW1lckZpcmVk
KFRpbWVyPEJhdHRlcnlDbGllbnRFZmw+KiB0aW1lcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHRp
bWVyLCB0aW1lciA9PSAmbV90aW1lcik7Ci0gICAgRV9EQnVzX0Nvbm5lY3Rpb24qIGVkYnVzQ29u
bmVjdGlvbiA9IGVfZGJ1c19idXNfZ2V0KERCVVNfQlVTX1NZU1RFTSk7Ci0gICAgaWYgKGVkYnVz
Q29ubmVjdGlvbikKLSAgICAgICAgZV91cG93ZXJfZ2V0X2FsbF9kZXZpY2VzKGVkYnVzQ29ubmVj
dGlvbiwgZ2V0QmF0dGVyeVN0YXR1cywgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpKTsKLX0KLQot
dm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpnZXRCYXR0ZXJ5U3RhdHVzKHZvaWQqIGRhdGEsIHZvaWQq
IHJlcGx5RGF0YSwgREJ1c0Vycm9yKiBkQnVzRXJyb3IpCi17Ci0gICAgRV9Va2l0X0dldF9BbGxf
RGV2aWNlc19SZXR1cm4qIGV1a2l0RGV2aWNlTmFtZXMgPSBzdGF0aWNfY2FzdDxFX1VraXRfR2V0
X0FsbF9EZXZpY2VzX1JldHVybio+KHJlcGx5RGF0YSk7Ci0gICAgaWYgKCFldWtpdERldmljZU5h
bWVzIHx8ICFldWtpdERldmljZU5hbWVzLT5zdHJpbmdzIHx8IGRidXNfZXJyb3JfaXNfc2V0KGRC
dXNFcnJvcikpIHsKLSAgICAgICAgIGRidXNfZXJyb3JfZnJlZShkQnVzRXJyb3IpOwotICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEVfREJ1c19Db25uZWN0aW9uKiBlZGJ1c0Nvbm5lY3Rp
b24gPSBlX2RidXNfYnVzX2dldChEQlVTX0JVU19TWVNURU0pOwotICAgIEVpbmFfTGlzdCogbGlz
dDsKLSAgICB2b2lkKiBkZXZpY2VOYW1lOwotICAgIEVJTkFfTElTVF9GT1JFQUNIKGV1a2l0RGV2
aWNlTmFtZXMtPnN0cmluZ3MsIGxpc3QsIGRldmljZU5hbWUpCi0gICAgICAgIGVfdXBvd2VyX2dl
dF9hbGxfcHJvcGVydGllcyhlZGJ1c0Nvbm5lY3Rpb24sIHN0YXRpY19jYXN0PGNoYXIqPihkZXZp
Y2VOYW1lKSwgc2V0QmF0dGVyeUNsaWVudCwgZGF0YSk7Ci19Ci0KLXZvaWQgQmF0dGVyeUNsaWVu
dEVmbDo6c2V0QmF0dGVyeUNsaWVudCh2b2lkKiBkYXRhLCB2b2lkKiByZXBseURhdGEsIERCdXNF
cnJvciogZEJ1c0Vycm9yKQotewotICAgIEVfVWtpdF9HZXRfQWxsX1Byb3BlcnRpZXNfUmV0dXJu
KiBldWtpdFByb3BlcnR5TmFtZXMgPSBzdGF0aWNfY2FzdDxFX1VraXRfR2V0X0FsbF9Qcm9wZXJ0
aWVzX1JldHVybio+KHJlcGx5RGF0YSk7Ci0KLSAgICBpZiAoIWV1a2l0UHJvcGVydHlOYW1lcyB8
fCBkYnVzX2Vycm9yX2lzX3NldChkQnVzRXJyb3IpKSB7Ci0gICAgICAgIGRidXNfZXJyb3JfZnJl
ZShkQnVzRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFldWtpdFBy
b3BlcnR5TmFtZXMtPnByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVfVWtpdF9Q
cm9wZXJ0eSogcHJvcGVydHkgPSBzdGF0aWNfY2FzdDxFX1VraXRfUHJvcGVydHkqPihlaW5hX2hh
c2hfZmluZChldWtpdFByb3BlcnR5TmFtZXMtPnByb3BlcnRpZXMsICJUeXBlIikpOwotICAgIGlm
ICghcHJvcGVydHkgfHwgcHJvcGVydHktPnZhbC51ICE9IEVfVVBPV0VSX1NPVVJDRV9CQVRURVJZ
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBCYXR0ZXJ5Q2xpZW50RWZsKiBjbGllbnQgPSBzdGF0
aWNfY2FzdDxCYXR0ZXJ5Q2xpZW50RWZsKj4oZGF0YSk7Ci0gICAgQmF0dGVyeVN0YXR1cyogY2xp
ZW50QmF0dGVyeVN0YXR1cyA9IGNsaWVudC0+YmF0dGVyeVN0YXR1cygpOwotICAgIGJvb2wgY2hh
cmdpbmcgPSBmYWxzZTsKLSAgICBib29sIGNoYXJnaW5nQ2hhbmdlZCA9IGZhbHNlOwotICAgIHN0
YXRpYyB1bnNpZ25lZCBjaGFyZ2luZ1N0YXRlID0gMDsKLQotICAgIHByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8RV9Va2l0X1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQoZXVraXRQcm9wZXJ0eU5hbWVz
LT5wcm9wZXJ0aWVzLCAiU3RhdGUiKSk7Ci0gICAgaWYgKCFwcm9wZXJ0eSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghY2xpZW50QmF0dGVyeVN0YXR1cyB8fCBjaGFyZ2luZ1N0YXRlICE9IHBy
b3BlcnR5LT52YWwudSkgewotICAgICAgICBjaGFyZ2luZ0NoYW5nZWQgPSB0cnVlOwotICAgICAg
ICBjaGFyZ2luZ1N0YXRlID0gcHJvcGVydHktPnZhbC51OwotICAgICAgICAoY2hhcmdpbmdTdGF0
ZSA9PSBFX1VQT1dFUl9TVEFURV9GVUxMIHx8IGNoYXJnaW5nU3RhdGUgPT0gRV9VUE9XRVJfU1RB
VEVfQ0hBUkdJTkcpID8gY2hhcmdpbmcgPSB0cnVlIDogY2hhcmdpbmcgPSBmYWxzZTsKLSAgICB9
IGVsc2UKLSAgICAgICAgY2hhcmdpbmcgPSBjbGllbnRCYXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZygp
OwotCi0gICAgYm9vbCBjaGFyZ2luZ1RpbWVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgYm9vbCBkaXNj
aGFyZ2luZ1RpbWVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgZG91YmxlIGNoYXJnaW5nVGltZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICBkb3VibGUgZGlzY2hh
cmdpbmdUaW1lID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotCi0g
ICAgaWYgKGNoYXJnaW5nKSB7Ci0gICAgICAgIGlmICghY2xpZW50QmF0dGVyeVN0YXR1cyB8fCBj
bGllbnRCYXR0ZXJ5U3RhdHVzLT5kaXNjaGFyZ2luZ1RpbWUoKSAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OmluZmluaXR5KCkpCi0gICAgICAgICAgICBkaXNjaGFyZ2luZ1RpbWVDaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgZGlzY2hhcmdpbmdUaW1lID0gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgICAgICBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0PEVf
VWtpdF9Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKGV1a2l0UHJvcGVydHlOYW1lcy0+cHJvcGVy
dGllcywgIlRpbWVUb0Z1bGwiKSk7Ci0gICAgICAgIGlmICghcHJvcGVydHkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmICghY2xpZW50QmF0dGVyeVN0YXR1cyB8fCBjbGllbnRCYXR0
ZXJ5U3RhdHVzLT5jaGFyZ2luZ1RpbWUoKSAhPSBwcm9wZXJ0eS0+dmFsLngpCi0gICAgICAgICAg
ICBjaGFyZ2luZ1RpbWVDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgY2hhcmdpbmdUaW1lID0gcHJv
cGVydHktPnZhbC54OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY2xpZW50QmF0dGVyeVN0
YXR1cyB8fCBjbGllbnRCYXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZ1RpbWUoKSAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCi0gICAgICAgICAgICBjaGFyZ2luZ1RpbWVD
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgY2hhcmdpbmdUaW1lID0gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgICAgICBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0PEVf
VWtpdF9Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKGV1a2l0UHJvcGVydHlOYW1lcy0+cHJvcGVy
dGllcywgIlRpbWVUb0VtcHR5IikpOwotICAgICAgICBpZiAoIXByb3BlcnR5KQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoIWNsaWVudEJhdHRlcnlTdGF0dXMgfHwgY2xpZW50QmF0
dGVyeVN0YXR1cy0+ZGlzY2hhcmdpbmdUaW1lKCkgIT0gcHJvcGVydHktPnZhbC54KQotICAgICAg
ICAgICAgZGlzY2hhcmdpbmdUaW1lQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIGRpc2NoYXJnaW5n
VGltZSA9IHByb3BlcnR5LT52YWwueDsKLSAgICB9Ci0KLSAgICBkb3VibGUgbGV2ZWwgPSAwOwot
ICAgIGJvb2wgbGV2ZWxDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICBwcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PEVfVWtpdF9Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKGV1a2l0UHJvcGVydHlOYW1lcy0+
cHJvcGVydGllcywgIlBlcmNlbnRhZ2UiKSk7Ci0gICAgaWYgKCFwcm9wZXJ0eSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghY2xpZW50QmF0dGVyeVN0YXR1cyB8fCBjbGllbnRCYXR0ZXJ5U3Rh
dHVzLT5sZXZlbCgpICE9IHByb3BlcnR5LT52YWwuZCkKLSAgICAgICAgbGV2ZWxDaGFuZ2VkID0g
dHJ1ZTsKLSAgICBsZXZlbCA9IHByb3BlcnR5LT52YWwuZDsKLQotICAgIFdURjo6UmVmUHRyPEJh
dHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMgPSBCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoY2hhcmdp
bmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7Ci0gICAgaWYgKGNoYXJn
aW5nQ2hhbmdlZCkKLSAgICAgICAgY2xpZW50LT5zZXRCYXR0ZXJ5U3RhdHVzKGV2ZW50TmFtZXMo
KS5jaGFyZ2luZ2NoYW5nZUV2ZW50LCBiYXR0ZXJ5U3RhdHVzKTsKLSAgICBpZiAoY2hhcmdpbmdU
aW1lQ2hhbmdlZCkKLSAgICAgICAgY2xpZW50LT5zZXRCYXR0ZXJ5U3RhdHVzKGV2ZW50TmFtZXMo
KS5jaGFyZ2luZ3RpbWVjaGFuZ2VFdmVudCwgYmF0dGVyeVN0YXR1cyk7Ci0gICAgaWYgKGRpc2No
YXJnaW5nVGltZUNoYW5nZWQpCi0gICAgICAgIGNsaWVudC0+c2V0QmF0dGVyeVN0YXR1cyhldmVu
dE5hbWVzKCkuZGlzY2hhcmdpbmd0aW1lY2hhbmdlRXZlbnQsIGJhdHRlcnlTdGF0dXMpOwotICAg
IGlmIChsZXZlbENoYW5nZWQpCi0gICAgICAgIGNsaWVudC0+c2V0QmF0dGVyeVN0YXR1cyhldmVu
dE5hbWVzKCkubGV2ZWxjaGFuZ2VFdmVudCwgYmF0dGVyeVN0YXR1cyk7Ci19Ci0KLX0KLQotI2Vu
ZGlmIC8vIEJBVFRFUllfU1RBVFVTCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dl
YkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNv
cmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGY0N2Q3MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9CYXR0ZXJ5Q2xpZW50RWZsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgQmF0dGVyeUNsaWVudEVmbF9oCi0jZGVmaW5lIEJhdHRlcnlDbGllbnRFZmxfaAotCi0j
aWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQotCi0jaW5jbHVkZSAiQmF0dGVyeUNsaWVudC5oIgot
I2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUg
PEVfVWtpdC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJhdHRlcnlDb250cm9sbGVyOwotY2xhc3MgQmF0dGVyeVN0
YXR1czsKLQotY2xhc3MgQmF0dGVyeUNsaWVudEVmbCA6IHB1YmxpYyBCYXR0ZXJ5Q2xpZW50IHsK
LXB1YmxpYzoKLSAgICBCYXR0ZXJ5Q2xpZW50RWZsKCk7Ci0gICAgfkJhdHRlcnlDbGllbnRFZmwo
KSB7IH07Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxl
ciopOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lk
IHN0b3BVcGRhdGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBiYXR0ZXJ5Q29udHJvbGxlckRlc3Ry
b3llZCgpOwotCi0gICAgdm9pZCBzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+KTsKLSAgICBCYXR0ZXJ5U3RhdHVz
KiBiYXR0ZXJ5U3RhdHVzKCkgeyByZXR1cm4gbV9iYXR0ZXJ5U3RhdHVzLmdldCgpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEJhdHRlcnlDbGllbnRFZmw+Kik7Ci0g
ICAgc3RhdGljIHZvaWQgZ2V0QmF0dGVyeVN0YXR1cyh2b2lkKiBkYXRhLCB2b2lkKiByZXBseURh
dGEsIERCdXNFcnJvciopOwotICAgIHN0YXRpYyB2b2lkIHNldEJhdHRlcnlDbGllbnQodm9pZCog
ZGF0YSwgdm9pZCogcmVwbHlEYXRhLCBEQnVzRXJyb3IqKTsKLQotICAgIEJhdHRlcnlDb250cm9s
bGVyKiBtX2NvbnRyb2xsZXI7Ci0gICAgVGltZXI8QmF0dGVyeUNsaWVudEVmbD4gbV90aW1lcjsK
LSAgICBSZWZQdHI8QmF0dGVyeVN0YXR1cz4gbV9iYXR0ZXJ5U3RhdHVzOwotICAgIGNvbnN0IGRv
dWJsZSBtX2JhdHRlcnlTdGF0dXNSZWZyZXNoSW50ZXJ2YWw7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBCQVRURVJZX1NUQVRVUwotI2VuZGlmIC8vIEJhdHRlcnlDbGllbnRFZmxfaAotCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>