<?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>167572</bug_id>
          
          <creation_ts>2017-01-29 21:38:01 -0800</creation_ts>
          <short_desc>[WebRTC] Add a libwebrtc AudioModule specific to WebKit</short_desc>
          <delta_ts>2017-01-31 16:20:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit 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>143211</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>agouaillard</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1271183</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-01-29 21:38:01 -0800</bug_when>
    <thetext>Add a libwebrtc AudioModule specific to WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271184</commentid>
    <comment_count>1</comment_count>
      <attachid>300086</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-01-29 21:53:04 -0800</bug_when>
    <thetext>Created attachment 300086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271520</commentid>
    <comment_count>2</comment_count>
      <attachid>300171</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-01-30 17:51:27 -0800</bug_when>
    <thetext>Created attachment 300171
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271569</commentid>
    <comment_count>3</comment_count>
      <attachid>300171</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-01-30 21:12:01 -0800</bug_when>
    <thetext>Comment on attachment 300171
Patch

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

Is there no better way than to do this than polling on a thread?  This code seems like it is specific to one particular configuration.

&gt; Source/WebCore/ChangeLog:11
&gt; +        Code inspired from Chrome AudioModule.

Can you give a link?

&gt; Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:43
&gt; +    int16_t shouldNotBeCalled(int16_t value) const

This should be a template.  Not all values are 16-bit.

&gt; Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:59
&gt; +    int64_t TimeUntilNextProcess() final { return 1000000; }

std::numeric_limits&lt;int64_t&gt;::max() ?

&gt; Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCUtils.cpp:100
&gt; +    factoryAndThreads.factory = webrtc::CreatePeerConnectionFactory(factoryAndThreads.networkThread.get(), factoryAndThreads.networkThread.get(), factoryAndThreads.signalingThread.get(), factoryAndThreads.audioDeviceModule.get(), new webrtc::VideoToolboxVideoEncoderFactory() , new webrtc::VideoToolboxVideoDecoderFactory());

extra space before comma.
Do we really have to call new so often?  I know that&apos;s how libwebrtc works, but in WebKit it looks like it might be a memory leak because there&apos;s no corresponding delete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271736</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-01-31 09:00:55 -0800</bug_when>
    <thetext>&gt; Is there no better way than to do this than polling on a thread?  This code
&gt; seems like it is specific to one particular configuration.

This code is inspired from:
https://chromium.googlesource.com/chromium/src/+/master/remoting/protocol/webrtc_audio_module.cc
https://chromium.googlesource.com/chromium/src/+/master/remoting/protocol/webrtc_audio_module.h

I would hope we can do better but did not dig into deep enough yet.

&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:43
&gt; &gt; +    int16_t shouldNotBeCalled(int16_t value) const
&gt; 
&gt; This should be a template.  Not all values are 16-bit.

OK

&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:59
&gt; &gt; +    int64_t TimeUntilNextProcess() final { return 1000000; }
&gt; 
&gt; std::numeric_limits&lt;int64_t&gt;::max() ?

OK

&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCUtils.cpp:100
&gt; &gt; +    factoryAndThreads.factory = webrtc::CreatePeerConnectionFactory(factoryAndThreads.networkThread.get(), factoryAndThreads.networkThread.get(), factoryAndThreads.signalingThread.get(), factoryAndThreads.audioDeviceModule.get(), new webrtc::VideoToolboxVideoEncoderFactory() , new webrtc::VideoToolboxVideoDecoderFactory());
&gt; 
&gt; extra space before comma.

OK

&gt; Do we really have to call new so often?  I know that&apos;s how libwebrtc works,
&gt; but in WebKit it looks like it might be a memory leak because there&apos;s no
&gt; corresponding delete.

I did not want to change libwebrtc API in any patch, except wherever needed.
We can do those changes in our local libwebrtc copy.
I am unsure whether the upstream project would consider following that path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271742</commentid>
    <comment_count>5</comment_count>
      <attachid>300222</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-01-31 09:12:18 -0800</bug_when>
    <thetext>Created attachment 300222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271786</commentid>
    <comment_count>6</comment_count>
      <attachid>300222</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-31 10:59:21 -0800</bug_when>
    <thetext>Comment on attachment 300222
Patch

Clearing flags on attachment: 300222

Committed r211439: &lt;http://trac.webkit.org/changeset/211439&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271787</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-31 10:59:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271974</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-01-31 16:20:03 -0800</bug_when>
    <thetext>r211458</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300086</attachid>
            <date>2017-01-29 21:53:04 -0800</date>
            <delta_ts>2017-01-30 17:51:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167572-20170129215056.patch</filename>
            <type>text/plain</type>
            <size>24445</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFmZGNkODdiZThhNzc5
MTRhOTlmNGZlNjQ1YTJiYTA2ZWI5ODJkNS4uNzIwNDdjMzE5Mzg5ODNjNzljNzQ2NWJjN2U1ZmI3
MGJjYjU4MTk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTAxLTI5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViUlRDXSBBZGQgYSBs
aWJ3ZWJydGMgQXVkaW9Nb2R1bGUgc3BlY2lmaWMgdG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc1NzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBiZSBjb3ZlcmVkIGJ5IHdlYnJ0YyBh
dWRpbyB0ZXN0cy4KKyAgICAgICAgQWRkaW5nIGFuIEF1ZGlvTW9kdWxlIHRvIGNpcmN1bXZlbnQg
dGhlIGRlZmF1bHQgTGliV2ViUlRDIEF1ZGlvIE1vZHVsZSB3aGljaCBkb2VzIHRoZSBhdWRpbyBk
aXJlY3RseS4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdWRpb01vZHVsZSBp
cyByZXN0cmljdGVkIHRvIGVuYWJsZSBmdWVsaW5nIHRoZSBpbmNvbWluZyBhdWRpbyB0cmFja3Mg
d2l0aCBpbmNvbWluZyBkYXRhLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJX
ZWJSVENBdWRpb01vZHVsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRD
QXVkaW9Nb2R1bGU6OkxpYldlYlJUQ0F1ZGlvTW9kdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
YldlYlJUQ0F1ZGlvTW9kdWxlOjpSZWdpc3RlckF1ZGlvQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TGliV2ViUlRDQXVkaW9Nb2R1bGU6Ok9uTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMaWJXZWJSVENBdWRpb01vZHVsZTo6U3RhcnRQbGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxpYldlYlJUQ0F1ZGlvTW9kdWxlOjpTdG9wUGxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpM
aWJXZWJSVENBdWRpb01vZHVsZTo6U3RhcnRQbGF5b3V0T25BdWRpb1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpMaWJXZWJSVENBdWRpb01vZHVsZTo6UG9sbEZyb21Tb3VyY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb01vZHVsZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2Vi
UlRDVXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTWVzc2FnZURhdGE6OlRocmVh
ZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVQZWVyQ29ubmVjdGlv
bkZhY3RvcnlBbmRUaHJlYWRzKToKKwogMjAxNy0wMS0yNyAgWXVzdWtlIFN1enVraSAgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgZHluYW1pYy1pbXBvcnQgZm9y
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBlMzZlMTBlYWYzNzBiZmI4Yjg1OGM2YjY0NjUxMWE2MjQ1MGI4YmYzLi42
MjYzYjIzY2JiMmIxMzEyNzlmNWYwOWQxZTdlNDc5ZTUwNTcwMWU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTM1LDYgKzE1
MzUsOCBAQAogCQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTRCODIwMzFE
NkRGMEQ5MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggKi87IH07CiAJCTQxNTA3MTU3MTY4
NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwNzE1NTE2ODUwNjczMDBDM0M3QjMgLyogU2Vs
ZWN0b3JGaWx0ZXIuY3BwICovOyB9OwogCQk0MTUwNzE1ODE2ODUwNjczMDBDM0M3QjMgLyogU2Vs
ZWN0b3JGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxNTA3MTU2MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5oICovOyB9Owor
CQk0MTUwODAzNjFFM0YwMEFEMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MDgwMzQxRTNG
MDBBQTAwNTFENzVEIC8qIExpYldlYlJUQ0F1ZGlvTW9kdWxlLmNwcCAqLzsgfTsKKwkJNDE1MDgw
MzcxRTNGMDBCMDAwNTFENzVEIC8qIExpYldlYlJUQ0F1ZGlvTW9kdWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwODAzNTFFM0YwMEFBMDA1MUQ3
NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCAqLzsgfTsKIAkJNDE1MEY5RjExMkI2RTBFNzAw
MDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MEY5RUYxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRo
dW1iRWxlbWVudC5oICovOyB9OwogCQk0MTUwRjlGMjEyQjZFMEU3MDAwOEM4NjAgLyogU2xpZGVy
VGh1bWJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNTBGOUYwMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuY3Bw
ICovOyB9OwogCQk0MTU2NzA0NzFEQkUxNTMzMDA5QUMzQkIgLyogUGVlckNvbm5lY3Rpb25TdGF0
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTY3
MDQ2MURCRTE1MjQwMDlBQzNCQiAvKiBQZWVyQ29ubmVjdGlvblN0YXRlcy5oICovOyB9OwpAQCAt
ODcyNCw2ICs4NzI2LDggQEAKIAkJNDE0QjgyMDMxRDZERjBEOTAwNzdFQkUzIC8qIFN0cnVjdHVy
ZWRDbG9uZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVkQ2xv
bmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MDcxNTUxNjg1MDY3MzAwQzND
N0IzIC8qIFNlbGVjdG9yRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNlbGVjdG9yRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDE1MDcxNTYxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxNTA4MDM0MUUzRjAwQUEwMDUxRDc1RCAvKiBMaWJXZWJSVENBdWRpb01v
ZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENB
dWRpb01vZHVsZS5jcHA7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTUwODAzNTFFM0YwMEFBMDA1MUQ3NUQg
LyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTGliV2ViUlRDQXVkaW9Nb2R1bGUuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENBdWRp
b01vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTUwRjlFRjEyQjZFMEU3
MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNsaWRlclRodW1iRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTUwRjlGMDEyQjZFMEU3MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNsaWRlclRodW1iRWxlbWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNTY3MDQ2MURCRTE1MjQwMDlBQzNC
QiAvKiBQZWVyQ29ubmVjdGlvblN0YXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQZWVyQ29ubmVjdGlvblN0YXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTY2NjksNiArMTY2NzMsOCBAQAogCQk0MTU3NDc0MjFFMzg2OTgwMDBFOTE0RDggLyogbGli
d2VicnRjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0
MTUwODAzNDFFM0YwMEFBMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3BwICovLAor
CQkJCTQxNTA4MDM1MUUzRjAwQUEwMDUxRDc1RCAvKiBMaWJXZWJSVENBdWRpb01vZHVsZS5oICov
LAogCQkJCTQxNTc0NzQzMUUzODY5OUUwMEU5MTREOCAvKiBMaWJXZWJSVENNYWNyb3MuaCAqLywK
IAkJCQk0MTU3NDc0NDFFMzg2OTlFMDBFOTE0RDggLyogTGliV2ViUlRDUHJvdmlkZXIuaCAqLywK
IAkJCQk0MTU3NDc0NTFFMzg2OTlFMDBFOTE0RDggLyogTGliV2ViUlRDVXRpbHMuY3BwICovLApA
QCAtMjYxNzAsNiArMjYxNzYsNyBAQAogCQkJCTBGOEI0NTcyMURDM0ZCQTMwMDQ0M0MzRiAvKiBJ
bnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ3MTBE
RjFEQjZGRTIyMDAyRENFQzMgLyogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjI3NTM1NzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0MTUwODAzNzFFM0YwMEIwMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9N
b2R1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NjJBNEExMTEzRTcxQkUwMDRBNDIyMCAvKiBJ
bnRQb2ludEhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTc0MEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMkI5MjE3MzE2QzVDQzQyMDA0MURD
RDkgLyogSW50UmVjdEV4dGVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTU4OCw2ICszMTU5NSw3
IEBACiAJCQkJQjIyMjdBMDgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNW
R0ZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFFQkYzQTBGRDM0RjQxMDBEQTc1NTkg
LyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MTUwODAzNjFFM0Yw
MEFEMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjIyMjdBMEIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjIyMjdBMEUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0ExMTBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ0F1ZGlvTW9kdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb01vZHVsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA4MzMy
NmZmYTQ1MzIzMWZjMzY4YmVjMjRlYzBmYjQ2ZWMyZDhjZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENBdWRp
b01vZHVsZS5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCIKKworI2lmIFVTRShMSUJX
RUJSVEMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGliV2ViUlRDQXVkaW9Nb2R1bGU6Okxp
YldlYlJUQ0F1ZGlvTW9kdWxlKCkKKyAgICA6IG1fYXVkaW9UYXNrUnVubmVyKHJ0Yzo6VGhyZWFk
OjpDcmVhdGUoKSkKK3sKKyAgICBtX2F1ZGlvVGFza1J1bm5lci0+U3RhcnQoKTsKK30KKworaW50
MzJfdCBMaWJXZWJSVENBdWRpb01vZHVsZTo6UmVnaXN0ZXJBdWRpb0NhbGxiYWNrKHdlYnJ0Yzo6
QXVkaW9UcmFuc3BvcnQqIGF1ZGlvVHJhbnNwb3J0KQoreworICAgIG1fYXVkaW9UcmFuc3BvcnQg
PSBhdWRpb1RyYW5zcG9ydDsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMaWJXZWJSVENBdWRp
b01vZHVsZTo6T25NZXNzYWdlKHJ0Yzo6TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQo
bWVzc2FnZS0+bWVzc2FnZV9pZCA9PSAxKTsKKyAgICBTdGFydFBsYXlvdXRPbkF1ZGlvVGhyZWFk
KCk7Cit9CisKK2ludDMyX3QgTGliV2ViUlRDQXVkaW9Nb2R1bGU6OlN0YXJ0UGxheW91dCgpCit7
CisgICAgaWYgKCFtX2lzUGxheWluZyAmJiBtX2F1ZGlvVGFza1J1bm5lcikgeworICAgICAgICBt
X2F1ZGlvVGFza1J1bm5lci0+UG9zdChSVENfRlJPTV9IRVJFLCB0aGlzLCAxKTsKKyAgICAgICAg
bV9pc1BsYXlpbmcgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50MzJfdCBM
aWJXZWJSVENBdWRpb01vZHVsZTo6U3RvcFBsYXlvdXQoKQoreworICAgIGlmIChtX2lzUGxheWlu
ZykKKyAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBMaWJXZWJSVENBdWRpb01vZHVsZTo6U3RhcnRQbGF5b3V0T25BdWRpb1RocmVhZCgpCit7Cisg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgUG9sbEZyb21Tb3VyY2UoKTsKKyAgICAgICAgbV9h
dWRpb1Rhc2tSdW5uZXItPlNsZWVwTXMoNTApOworICAgICAgICBpZiAoIW1faXNQbGF5aW5nKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworLy8gbGlid2VicnRjIHVzZXMgMTBtcyBm
cmFtZXMuCitjb25zdCBpbnQga1NhbXBsaW5nUmF0ZSA9IDQ4MDAwOworY29uc3QgaW50IGtGcmFt
ZUxlbmd0aE1zID0gMTA7Citjb25zdCBpbnQga1NhbXBsZXNQZXJGcmFtZSA9IGtTYW1wbGluZ1Jh
dGUgKiBrRnJhbWVMZW5ndGhNcyAvIDEwMDA7Citjb25zdCBpbnQgIGtQb2xsSW50ZXJ2YWwgPSA1
ICoga0ZyYW1lTGVuZ3RoTXM7Citjb25zdCBpbnQga0NoYW5uZWxzID0gMjsKK2NvbnN0IGludCBr
Qnl0ZXNQZXJTYW1wbGUgPSAyOworCit2b2lkIExpYldlYlJUQ0F1ZGlvTW9kdWxlOjpQb2xsRnJv
bVNvdXJjZSgpCit7CisgICAgaWYgKCFtX2F1ZGlvVHJhbnNwb3J0KQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtQb2xsSW50ZXJ2YWwgLyBrRnJhbWVMZW5ndGhN
czsgaSsrKSB7CisgICAgICAgIGludDY0X3QgZWxhcHNlZFRpbWUgPSAtMTsKKyAgICAgICAgaW50
NjRfdCBudHBUaW1lID0gLTE7CisgICAgICAgIGNoYXIgZGF0YVsoa0J5dGVzUGVyU2FtcGxlICog
a0NoYW5uZWxzICoga1NhbXBsZXNQZXJGcmFtZSkgKyAxXTsKKyAgICAgICAgZGF0YVtrQnl0ZXNQ
ZXJTYW1wbGUgKiBrQ2hhbm5lbHMgKiBrU2FtcGxlc1BlckZyYW1lXSA9IDA7CisgICAgICAgIG1f
YXVkaW9UcmFuc3BvcnQtPlB1bGxSZW5kZXJEYXRhKGtCeXRlc1BlclNhbXBsZSAqIDgsIGtTYW1w
bGluZ1JhdGUsIGtDaGFubmVscywga1NhbXBsZXNQZXJGcmFtZSwgZGF0YSwgJmVsYXBzZWRUaW1l
LCAmbnRwVGltZSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ0F1ZGlvTW9kdWxlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Nb2R1bGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MzAzMmY4YjFhODI5MDkyZjUzY2UwMTU3YjFjYTc2MTQ2NTNiNjUyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0xpYldlYlJUQ0F1ZGlvTW9kdWxlLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJX
ZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRlIDx3ZWJydGMvYmFzZS9tZXNzYWdlaGFuZGxlci5oPgor
I2luY2x1ZGUgPHdlYnJ0Yy9iYXNlL3RocmVhZC5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX2RldmljZS9pbmNsdWRlL2F1ZGlvX2RldmljZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIExpYldlYlJUQ0F1ZGlvTW9kdWxlIGlzIHB1bGxpbmcgc3RyZWFtZWQgZGF0YSB0
byBlbnN1cmUgYXVkaW8gZGF0YSBpcyBwYXNzZWQgdG8gdGhlIGF1ZGlvIHRyYWNrLgorY2xhc3Mg
TGliV2ViUlRDQXVkaW9Nb2R1bGUgZmluYWwgOiBwdWJsaWMgd2VicnRjOjpBdWRpb0RldmljZU1v
ZHVsZSwgcHJpdmF0ZSBydGM6Ok1lc3NhZ2VIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBMaWJXZWJS
VENBdWRpb01vZHVsZSgpOworCitwcml2YXRlOgorICAgIGludDE2X3Qgc2hvdWxkTm90QmVDYWxs
ZWQoaW50MTZfdCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaW50MzJfdCBBZGRSZWYo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAxOyB9CisgICAgaW50MzJfdCBSZWxlYXNlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gMTsgfQorICAgIHZvaWQgT25NZXNzYWdlKHJ0Yzo6TWVzc2FnZSopOwor
CisgICAgLy8gd2VicnRjOjpBdWRpb0RldmljZU1vZHVsZSBBUEkKKyAgICBpbnQzMl90IFN0YXJ0
UGxheW91dCgpIGZpbmFsOworICAgIGludDMyX3QgU3RvcFBsYXlvdXQoKSBmaW5hbDsKKyAgICBp
bnQzMl90IFJlZ2lzdGVyQXVkaW9DYWxsYmFjayh3ZWJydGM6OkF1ZGlvVHJhbnNwb3J0KikgZmlu
YWw7CisgICAgYm9vbCBQbGF5aW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1BsYXlpbmc7
IH0KKworICAgIGludDY0X3QgVGltZVVudGlsTmV4dFByb2Nlc3MoKSBmaW5hbCB7IHJldHVybiAx
MDAwMDAwOyB9CisgICAgdm9pZCBQcm9jZXNzKCkgZmluYWwgeyB9CisgICAgaW50MzJfdCBBY3Rp
dmVBdWRpb0xheWVyKEF1ZGlvTGF5ZXIqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RC
ZUNhbGxlZCgtMSk7IH0KKyAgICBFcnJvckNvZGUgTGFzdEVycm9yKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4ga0FkbUVyck5vbmU7IH0KKyAgICBpbnQzMl90IFJlZ2lzdGVyRXZlbnRPYnNlcnZlcih3
ZWJydGM6OkF1ZGlvRGV2aWNlT2JzZXJ2ZXIqKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgaW50
MzJfdCBJbml0KCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGludDMyX3QgVGVybWluYXRlKCkg
ZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGJvb2wgSW5pdGlhbGl6ZWQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiB0cnVlOyB9CisgICAgaW50MTZfdCBQbGF5b3V0RGV2aWNlcygpIGZpbmFsIHsgcmV0
dXJuIDA7IH0KKyAgICBpbnQxNl90IFJlY29yZGluZ0RldmljZXMoKSBmaW5hbCB7IHJldHVybiAw
OyB9CisgICAgaW50MzJfdCBQbGF5b3V0RGV2aWNlTmFtZSh1aW50MTZfdCwgY2hhclt3ZWJydGM6
OmtBZG1NYXhEZXZpY2VOYW1lU2l6ZV0sIGNoYXJbd2VicnRjOjprQWRtTWF4R3VpZFNpemVdKSBm
aW5hbCB7IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBSZWNvcmRpbmdEZXZpY2VOYW1lKHVpbnQx
Nl90LCBjaGFyW3dlYnJ0Yzo6a0FkbU1heERldmljZU5hbWVTaXplXSwgY2hhclt3ZWJydGM6OmtB
ZG1NYXhHdWlkU2l6ZV0pIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFNldFBsYXlv
dXREZXZpY2UodWludDE2X3QpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFNldFBs
YXlvdXREZXZpY2UoV2luZG93c0RldmljZVR5cGUpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBp
bnQzMl90IFNldFJlY29yZGluZ0RldmljZSh1aW50MTZfdCkgZmluYWwgeyByZXR1cm4gMDsgfQor
ICAgIGludDMyX3QgU2V0UmVjb3JkaW5nRGV2aWNlKFdpbmRvd3NEZXZpY2VUeXBlKSBmaW5hbCB7
IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBQbGF5b3V0SXNBdmFpbGFibGUoYm9vbCopIGZpbmFs
IHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgSW5pdFBsYXlv
dXQoKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBQbGF5b3V0SXNJbml0aWFsaXplZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBpbnQzMl90IFJlY29yZGluZ0lzQXZh
aWxhYmxlKGJvb2wqKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAg
ICBpbnQzMl90IEluaXRSZWNvcmRpbmcoKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBS
ZWNvcmRpbmdJc0luaXRpYWxpemVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBpbnQzMl90IFN0YXJ0UmVjb3JkaW5nKCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGludDMy
X3QgU3RvcFJlY29yZGluZygpIGZpbmFsIHsgcmV0dXJuIDA7ICB9CisgICAgYm9vbCBSZWNvcmRp
bmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyAgfQorICAgIGludDMyX3QgU2V0QUdDKGJvb2wp
IGZpbmFsIHsgcmV0dXJuIDA7ICB9CisgICAgYm9vbCBBR0MoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBzaG91bGROb3RCZUNhbGxlZCgwKTsgIH0KKyAgICBpbnQzMl90IFNldFdhdmVPdXRWb2x1bWUo
dWludDE2X3QsIHVpbnQxNl90KSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7
IH0KKyAgICBpbnQzMl90IFdhdmVPdXRWb2x1bWUodWludDE2X3QqLCB1aW50MTZfdCopIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgSW5p
dFNwZWFrZXIoKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBTcGVha2VySXNJbml0aWFs
aXplZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50MzJfdCBJbml0TWlj
cm9waG9uZSgpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBib29sIE1pY3JvcGhvbmVJc0luaXRp
YWxpemVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbnQzMl90IFNwZWFr
ZXJWb2x1bWVJc0F2YWlsYWJsZShib29sKikgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxs
ZWQoLTEpOyB9CisgICAgaW50MzJfdCBTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90KSBmaW5hbCB7
IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNwZWFrZXJWb2x1
bWUodWludDMyX3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7
IH0KKyAgICBpbnQzMl90IE1heFNwZWFrZXJWb2x1bWUodWludDMyX3QqKSBjb25zdCBmaW5hbCB7
IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pblNwZWFrZXJW
b2x1bWUodWludDMyX3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgt
MSk7IH0KKyAgICBpbnQzMl90IFNwZWFrZXJWb2x1bWVTdGVwU2l6ZSh1aW50MTZfdCopIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgTWlj
cm9waG9uZVZvbHVtZUlzQXZhaWxhYmxlKGJvb2wqKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RC
ZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNldE1pY3JvcGhvbmVWb2x1bWUodWludDMyX3Qp
IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgTWlj
cm9waG9uZVZvbHVtZSh1aW50MzJfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJl
Q2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgTWF4TWljcm9waG9uZVZvbHVtZSh1aW50MzJfdCop
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMy
X3QgTWluTWljcm9waG9uZVZvbHVtZSh1aW50MzJfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNo
b3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgTWljcm9waG9uZVZvbHVtZVN0ZXBT
aXplKHVpbnQxNl90KikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEp
OyB9CisgICAgaW50MzJfdCBTcGVha2VyTXV0ZUlzQXZhaWxhYmxlKGJvb2wqKSBmaW5hbCB7IHJl
dHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNldFNwZWFrZXJNdXRl
KGJvb2wpIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMy
X3QgU3BlYWtlck11dGUoYm9vbCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2Fs
bGVkKC0xKTsgfQorICAgIGludDMyX3QgTWljcm9waG9uZU11dGVJc0F2YWlsYWJsZShib29sKikg
ZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTZXRN
aWNyb3Bob25lTXV0ZShib29sKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7
IH0KKyAgICBpbnQzMl90IE1pY3JvcGhvbmVNdXRlKGJvb2wqKSBjb25zdCBmaW5hbCB7IHJldHVy
biBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pY3JvcGhvbmVCb29zdElz
QXZhaWxhYmxlKGJvb2wqKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0K
KyAgICBpbnQzMl90IFNldE1pY3JvcGhvbmVCb29zdChib29sKSBmaW5hbCB7IHJldHVybiBzaG91
bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pY3JvcGhvbmVCb29zdChib29sKikg
Y29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJf
dCBTdGVyZW9QbGF5b3V0SXNBdmFpbGFibGUoYm9vbCogYXZhaWxhYmxlKSBjb25zdCBmaW5hbCB7
ICphdmFpbGFibGUgPSBmYWxzZTsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFNldFN0ZXJlb1Bs
YXlvdXQoYm9vbCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGludDMyX3QgU3RlcmVvUGxheW91
dChib29sKikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9Cisg
ICAgaW50MzJfdCBTdGVyZW9SZWNvcmRpbmdJc0F2YWlsYWJsZShib29sKiBhdmFpbGFibGUpIGNv
bnN0IGZpbmFsIHsgKmF2YWlsYWJsZSA9IGZhbHNlOyByZXR1cm4gMDsgIH0KKyAgICBpbnQzMl90
IFNldFN0ZXJlb1JlY29yZGluZyhib29sKSBmaW5hbCB7IHJldHVybiAwOyAgfQorICAgIGludDMy
X3QgU3RlcmVvUmVjb3JkaW5nKGJvb2wqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RC
ZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNldFJlY29yZGluZ0NoYW5uZWwoY29uc3QgQ2hh
bm5lbFR5cGUpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFJlY29yZGluZ0NoYW5u
ZWwoQ2hhbm5lbFR5cGUqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgt
MSk7IH0KKyAgICBpbnQzMl90IFNldFBsYXlvdXRCdWZmZXIoY29uc3QgQnVmZmVyVHlwZSwgdWlu
dDE2X3QpIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMy
X3QgUGxheW91dEJ1ZmZlcihCdWZmZXJUeXBlKiwgdWludDE2X3QqKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFBsYXlvdXREZWxheSh1
aW50MTZfdCogZGVsYXkpIGNvbnN0IGZpbmFsIHsgKmRlbGF5ID0gMDsgcmV0dXJuIDA7IH0KKyAg
ICBpbnQzMl90IFJlY29yZGluZ0RlbGF5KHVpbnQxNl90KikgY29uc3QgZmluYWwgeyByZXR1cm4g
c2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBDUFVMb2FkKHVpbnQxNl90Kikg
Y29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJf
dCBTdGFydFJhd091dHB1dEZpbGVSZWNvcmRpbmcoY29uc3QgY2hhclt3ZWJydGM6OmtBZG1NYXhG
aWxlTmFtZVNpemVdKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAg
ICBpbnQzMl90IFN0b3BSYXdPdXRwdXRGaWxlUmVjb3JkaW5nKCkgZmluYWwgeyByZXR1cm4gc2hv
dWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTdGFydFJhd0lucHV0RmlsZVJlY29y
ZGluZyhjb25zdCBjaGFyW3dlYnJ0Yzo6a0FkbU1heEZpbGVOYW1lU2l6ZV0pIGZpbmFsIHsgcmV0
dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU3RvcFJhd0lucHV0Rmls
ZVJlY29yZGluZygpIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAg
IGludDMyX3QgU2V0UmVjb3JkaW5nU2FtcGxlUmF0ZShjb25zdCB1aW50MzJfdCkgZmluYWwgeyBy
ZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBSZWNvcmRpbmdTYW1w
bGVSYXRlKHVpbnQzMl90KikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQo
LTEpOyB9CisgICAgaW50MzJfdCBTZXRQbGF5b3V0U2FtcGxlUmF0ZShjb25zdCB1aW50MzJfdCkg
ZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBQbGF5
b3V0U2FtcGxlUmF0ZSh1aW50MzJfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJl
Q2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgUmVzZXRBdWRpb0RldmljZSgpIGZpbmFsIHsgcmV0
dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU2V0TG91ZHNwZWFrZXJT
dGF0dXMoYm9vbCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAg
aW50MzJfdCBHZXRMb3Vkc3BlYWtlclN0YXR1cyhib29sKikgY29uc3QgZmluYWwgeyByZXR1cm4g
c2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgYm9vbCBCdWlsdEluQUVDSXNBdmFpbGFibGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgQnVpbHRJbkFHQ0lzQXZh
aWxhYmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7ICB9CisgICAgYm9vbCBCdWlsdElu
TlNJc0F2YWlsYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyAgfQorICAgIGludDMy
X3QgRW5hYmxlQnVpbHRJbkFFQyhib29sKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxl
ZCgtMSk7IH0KKyAgICBpbnQzMl90IEVuYWJsZUJ1aWx0SW5BR0MoYm9vbCkgZmluYWwgeyByZXR1
cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBFbmFibGVCdWlsdEluTlMo
Ym9vbCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisKKyNpZiBkZWZp
bmVkKFdFQlJUQ19JT1MpCisgICAgaW50IEdldFBsYXlvdXRBdWRpb1BhcmFtZXRlcnMod2VicnRj
OjpBdWRpb1BhcmFtZXRlcnMqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxl
ZCgtMSk7IH0KKyAgICBpbnQgR2V0UmVjb3JkQXVkaW9QYXJhbWV0ZXJzKHdlYnJ0Yzo6QXVkaW9Q
YXJhbWV0ZXJzKikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9
CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIFN0YXJ0UGxheW91dE9uQXVkaW9UaHJlYWQo
KTsKKworICAgIHZvaWQgUG9sbEZyb21Tb3VyY2UoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxy
dGM6OlRocmVhZD4gbV9hdWRpb1Rhc2tSdW5uZXI7CisKKyAgICBib29sIG1faXNQbGF5aW5nID0g
ZmFsc2U7CisgICAgd2VicnRjOjpBdWRpb1RyYW5zcG9ydCogbV9hdWRpb1RyYW5zcG9ydCA9IG51
bGxwdHI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElC
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL0xpYldlYlJUQ1V0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENVdGlscy5jcHAKaW5kZXggZDc3MDlkOWNjMTBj
NGE4OGFlY2ZjYWZjZDEwMDM2YzY0ZmIzZGY4Yi4uYzkwMzRmNDRkYjgyMWVmOTIwZGM0NTI5YmY4
MzE1YjkxYzAwNjlmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1V0aWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDVXRpbHMuY3BwCkBAIC0xLDI5
ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAg
LTMxLDYgKzI4LDcgQEAKIAogI2lmIFVTRShMSUJXRUJSVEMpCiAKKyNpbmNsdWRlICJMaWJXZWJS
VENBdWRpb01vZHVsZS5oIgogI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvcGVlcmNvbm5lY3Rpb25mYWN0
b3J5cHJveHkuaD4KICNpbmNsdWRlIDx3ZWJydGMvYXBpL3BlZXJjb25uZWN0aW9uZmFjdG9yeS5o
PgogI2luY2x1ZGUgPHdlYnJ0Yy9iYXNlL3BoeXNpY2Fsc29ja2V0c2VydmVyLmg+CkBAIC00Miw2
ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlBbmRUaHJlYWRzIDogcHVibGljIHJ0Yzo6TWVzc2FnZUhhbmRsZXIgeworICAgIHN0ZDo6
dW5pcXVlX3B0cjxMaWJXZWJSVENBdWRpb01vZHVsZT4gYXVkaW9EZXZpY2VNb2R1bGU7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPHJ0Yzo6VGhyZWFkPiBuZXR3b3JrVGhyZWFkOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxydGM6OlRocmVhZD4gc2lnbmFsaW5nVGhyZWFkOwogICAgIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeTsKQEAg
LTk2LDcgKzk1LDkgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVBlZXJDb25uZWN0aW9uRmFjdG9y
eUFuZFRocmVhZHMoKQogICAgIHJlc3VsdCA9IGZhY3RvcnlBbmRUaHJlYWRzLnNpZ25hbGluZ1Ro
cmVhZC0+U3RhcnQoKTsKICAgICBBU1NFUlQocmVzdWx0KTsKIAotICAgIGZhY3RvcnlBbmRUaHJl
YWRzLmZhY3RvcnkgPSB3ZWJydGM6OkNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeShmYWN0b3J5
QW5kVGhyZWFkcy5uZXR3b3JrVGhyZWFkLmdldCgpLCBmYWN0b3J5QW5kVGhyZWFkcy5uZXR3b3Jr
VGhyZWFkLmdldCgpLCBmYWN0b3J5QW5kVGhyZWFkcy5zaWduYWxpbmdUaHJlYWQuZ2V0KCksIG51
bGxwdHIsIG5ldyB3ZWJydGM6OlZpZGVvVG9vbGJveFZpZGVvRW5jb2RlckZhY3RvcnkoKSAsIG5l
dyB3ZWJydGM6OlZpZGVvVG9vbGJveFZpZGVvRGVjb2RlckZhY3RvcnkoKSk7CisgICAgZmFjdG9y
eUFuZFRocmVhZHMuYXVkaW9EZXZpY2VNb2R1bGUgPSBzdGQ6Om1ha2VfdW5pcXVlPExpYldlYlJU
Q0F1ZGlvTW9kdWxlPigpOworCisgICAgZmFjdG9yeUFuZFRocmVhZHMuZmFjdG9yeSA9IHdlYnJ0
Yzo6Q3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KGZhY3RvcnlBbmRUaHJlYWRzLm5ldHdvcmtU
aHJlYWQuZ2V0KCksIGZhY3RvcnlBbmRUaHJlYWRzLm5ldHdvcmtUaHJlYWQuZ2V0KCksIGZhY3Rv
cnlBbmRUaHJlYWRzLnNpZ25hbGluZ1RocmVhZC5nZXQoKSwgZmFjdG9yeUFuZFRocmVhZHMuYXVk
aW9EZXZpY2VNb2R1bGUuZ2V0KCksIG5ldyB3ZWJydGM6OlZpZGVvVG9vbGJveFZpZGVvRW5jb2Rl
ckZhY3RvcnkoKSAsIG5ldyB3ZWJydGM6OlZpZGVvVG9vbGJveFZpZGVvRGVjb2RlckZhY3Rvcnko
KSk7CiAKICAgICBBU1NFUlQoZmFjdG9yeUFuZFRocmVhZHMuZmFjdG9yeSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300171</attachid>
            <date>2017-01-30 17:51:27 -0800</date>
            <delta_ts>2017-01-31 09:12:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167572-20170130174917.patch</filename>
            <type>text/plain</type>
            <size>24488</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTgzOTllYjNhNzVmN2Uy
YzQwYzUxZTY5YzcxMDU0ZWQyNjEyMGIwYS4uZDdkYzVhNWM0ZjZhYzAwZTMxMTY0N2JlNzQ0ZWYz
MjNhODMzODc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTAxLTMwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViUlRDXSBBZGQgYSBs
aWJ3ZWJydGMgQXVkaW9Nb2R1bGUgc3BlY2lmaWMgdG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc1NzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBiZSBjb3ZlcmVkIGJ5IHdlYnJ0YyBh
dWRpbyB0ZXN0cy4KKyAgICAgICAgQWRkaW5nIGFuIEF1ZGlvTW9kdWxlIHRvIGNpcmN1bXZlbnQg
dGhlIGRlZmF1bHQgTGliV2ViUlRDIEF1ZGlvIE1vZHVsZSB3aGljaCBkb2VzIHRoZSBhdWRpbyBk
aXJlY3RseS4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdWRpb01vZHVsZSBp
cyByZXN0cmljdGVkIHRvIGVuYWJsZSBmdWVsaW5nIHRoZSBpbmNvbWluZyBhdWRpbyB0cmFja3Mg
d2l0aCBpbmNvbWluZyBkYXRhLgorICAgICAgICBDb2RlIGluc3BpcmVkIGZyb20gQ2hyb21lIEF1
ZGlvTW9kdWxlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENBdWRp
b01vZHVsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDQXVkaW9Nb2R1
bGU6OkxpYldlYlJUQ0F1ZGlvTW9kdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpYldlYlJUQ0F1
ZGlvTW9kdWxlOjpSZWdpc3RlckF1ZGlvQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TGli
V2ViUlRDQXVkaW9Nb2R1bGU6Ok9uTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJS
VENBdWRpb01vZHVsZTo6U3RhcnRQbGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpYldlYlJU
Q0F1ZGlvTW9kdWxlOjpTdG9wUGxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJSVENB
dWRpb01vZHVsZTo6U3RhcnRQbGF5b3V0T25BdWRpb1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaWJXZWJSVENBdWRpb01vZHVsZTo6UG9sbEZyb21Tb3VyY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb01vZHVsZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDVXRpbHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVQZWVyQ29ubmVjdGlvbkZhY3RvcnlB
bmRUaHJlYWRzKToKKwogMjAxNy0wMS0zMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgU2V2ZXJhbCB3ZWIgdGltaW5nIHRlc3RzIGNyYXNoIGlu
IEdUSysgYW5kIEFwcGxlV2luIGJvdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhM2ViYmQxYmFiMDJhYmU3YTRhYWVhMTJlMjBj
MTU3OWYxNmU1ZGU0Li43Njk1OTY1OGQwZGZhMmQ5Yjg1NjE2NDMwZWNjNzhkMjJiNDk0ZjM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xNTM1LDYgKzE1MzUsOCBAQAogCQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3Ry
dWN0dXJlZENsb25lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTRCODIwMzFENkRGMEQ5MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggKi87IH07
CiAJCTQxNTA3MTU3MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwNzE1NTE2ODUwNjcz
MDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwICovOyB9OwogCQk0MTUwNzE1ODE2ODUwNjcz
MDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTA3MTU2MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZp
bHRlci5oICovOyB9OworCQk0MTUwODAzNjFFM0YwMEFEMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVk
aW9Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE1MDgwMzQxRTNGMDBBQTAwNTFENzVEIC8qIExpYldlYlJUQ0F1ZGlvTW9kdWxlLmNwcCAq
LzsgfTsKKwkJNDE1MDgwMzcxRTNGMDBCMDAwNTFENzVEIC8qIExpYldlYlJUQ0F1ZGlvTW9kdWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwODAz
NTFFM0YwMEFBMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCAqLzsgfTsKIAkJNDE1
MEY5RjExMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MEY5RUYxMkI2RTBFNzAwMDhD
ODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oICovOyB9OwogCQk0MTUwRjlGMjEyQjZFMEU3MDAw
OEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTBGOUYwMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJU
aHVtYkVsZW1lbnQuY3BwICovOyB9OwogCQk0MTU2NzA0NzFEQkUxNTMzMDA5QUMzQkIgLyogUGVl
ckNvbm5lY3Rpb25TdGF0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxNTY3MDQ2MURCRTE1MjQwMDlBQzNCQiAvKiBQZWVyQ29ubmVjdGlvblN0YXRl
cy5oICovOyB9OwpAQCAtODcyMyw2ICs4NzI1LDggQEAKIAkJNDE0QjgyMDMxRDZERjBEOTAwNzdF
QkUzIC8qIFN0cnVjdHVyZWRDbG9uZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJ1Y3R1cmVkQ2xvbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MDcx
NTUxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE1MDcxNTYxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yRmlsdGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNTA4MDM0MUUzRjAwQUEwMDUxRDc1RCAvKiBM
aWJXZWJSVENBdWRpb01vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBMaWJXZWJSVENBdWRpb01vZHVsZS5jcHA7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRD
QXVkaW9Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTUwODAzNTFF
M0YwMEFBMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDQXVkaW9Nb2R1bGUuaDsgcGF0aCA9IGxpYndlYnJ0
Yy9MaWJXZWJSVENBdWRpb01vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTUwRjlFRjEyQjZFMEU3MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsaWRlclRodW1iRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTUwRjlGMDEyQjZFMEU3MDAwOEM4NjAgLyogU2xpZGVyVGh1
bWJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNsaWRl
clRodW1iRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNTY3MDQ2
MURCRTE1MjQwMDlBQzNCQiAvKiBQZWVyQ29ubmVjdGlvblN0YXRlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQZWVyQ29ubmVjdGlvblN0YXRlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTY2NjcsNiArMTY2NzEsOCBAQAogCQk0MTU3NDc0MjFFMzg2OTgw
MDBFOTE0RDggLyogbGlid2VicnRjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQk0MTUwODAzNDFFM0YwMEFBMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9N
b2R1bGUuY3BwICovLAorCQkJCTQxNTA4MDM1MUUzRjAwQUEwMDUxRDc1RCAvKiBMaWJXZWJSVENB
dWRpb01vZHVsZS5oICovLAogCQkJCTQxNTc0NzQzMUUzODY5OUUwMEU5MTREOCAvKiBMaWJXZWJS
VENNYWNyb3MuaCAqLywKIAkJCQk0MTU3NDc0NDFFMzg2OTlFMDBFOTE0RDggLyogTGliV2ViUlRD
UHJvdmlkZXIuaCAqLywKIAkJCQk0MTU3NDc0NTFFMzg2OTlFMDBFOTE0RDggLyogTGliV2ViUlRD
VXRpbHMuY3BwICovLApAQCAtMjYxNjYsNiArMjYxNzIsNyBAQAogCQkJCTBGOEI0NTcyMURDM0ZC
QTMwMDQ0M0MzRiAvKiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQ3MTBERjFEQjZGRTIyMDAyRENFQzMgLyogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJF
bnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NzIwQjA1MzgxNDAwMkNFNjRGIC8qIElu
dFBvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTUwODAzNzFFM0YwMEIwMDA1MUQ3NUQgLyog
TGliV2ViUlRDQXVkaW9Nb2R1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NjJBNEExMTEzRTcx
QkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTc0
MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMkI5MjE3
MzE2QzVDQzQyMDA0MURDRDkgLyogSW50UmVjdEV4dGVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MTU4NCw2ICszMTU5MSw3IEBACiAJCQkJQjIyMjdBMDgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ1RTcyRkIwRkQyNjIz
OTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFFQkYzQTBG
RDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0MTUwODAzNjFFM0YwMEFEMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMEIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMEUwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjIyN0ExMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0xpYldlYlJUQ0F1ZGlvTW9kdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb01vZHVsZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmFhYTg1YjFmNzJlOWRjNjZhNTJmOTMyNWI0YjBlM2ZiZjhkNjFkOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENBdWRpb01vZHVsZS5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCIK
KworI2lmIFVTRShMSUJXRUJSVEMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGliV2ViUlRD
QXVkaW9Nb2R1bGU6OkxpYldlYlJUQ0F1ZGlvTW9kdWxlKCkKKyAgICA6IG1fYXVkaW9UYXNrUnVu
bmVyKHJ0Yzo6VGhyZWFkOjpDcmVhdGUoKSkKK3sKKyAgICBtX2F1ZGlvVGFza1J1bm5lci0+U3Rh
cnQoKTsKK30KKworaW50MzJfdCBMaWJXZWJSVENBdWRpb01vZHVsZTo6UmVnaXN0ZXJBdWRpb0Nh
bGxiYWNrKHdlYnJ0Yzo6QXVkaW9UcmFuc3BvcnQqIGF1ZGlvVHJhbnNwb3J0KQoreworICAgIG1f
YXVkaW9UcmFuc3BvcnQgPSBhdWRpb1RyYW5zcG9ydDsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBMaWJXZWJSVENBdWRpb01vZHVsZTo6T25NZXNzYWdlKHJ0Yzo6TWVzc2FnZSogbWVzc2FnZSkK
K3sKKyAgICBBU1NFUlQobWVzc2FnZS0+bWVzc2FnZV9pZCA9PSAxKTsKKyAgICBTdGFydFBsYXlv
dXRPbkF1ZGlvVGhyZWFkKCk7Cit9CisKK2ludDMyX3QgTGliV2ViUlRDQXVkaW9Nb2R1bGU6OlN0
YXJ0UGxheW91dCgpCit7CisgICAgaWYgKCFtX2lzUGxheWluZyAmJiBtX2F1ZGlvVGFza1J1bm5l
cikgeworICAgICAgICBtX2F1ZGlvVGFza1J1bm5lci0+UG9zdChSVENfRlJPTV9IRVJFLCB0aGlz
LCAxKTsKKyAgICAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gMDsK
K30KKworaW50MzJfdCBMaWJXZWJSVENBdWRpb01vZHVsZTo6U3RvcFBsYXlvdXQoKQoreworICAg
IGlmIChtX2lzUGxheWluZykKKyAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKKyAgICByZXR1
cm4gMDsKK30KKworLy8gbGlid2VicnRjIHVzZXMgMTBtcyBmcmFtZXMuCitjb25zdCB1bnNpZ25l
ZCBzYW1wbGluZ1JhdGUgPSA0ODAwMDsKK2NvbnN0IHVuc2lnbmVkIGZyYW1lTGVuZ3RoTXMgPSAx
MDsKK2NvbnN0IHVuc2lnbmVkIHNhbXBsZXNQZXJGcmFtZSA9IHNhbXBsaW5nUmF0ZSAqIGZyYW1l
TGVuZ3RoTXMgLyAxMDAwOworY29uc3QgdW5zaWduZWQgcG9sbFNhbXBsZXMgPSA1OworY29uc3Qg
dW5zaWduZWQgcG9sbEludGVydmFsID0gNSAqIGZyYW1lTGVuZ3RoTXM7Citjb25zdCB1bnNpZ25l
ZCBjaGFubmVscyA9IDI7Citjb25zdCB1bnNpZ25lZCBieXRlc1BlclNhbXBsZSA9IDI7CisKK3Zv
aWQgTGliV2ViUlRDQXVkaW9Nb2R1bGU6OlN0YXJ0UGxheW91dE9uQXVkaW9UaHJlYWQoKQorewor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFBvbGxGcm9tU291cmNlKCk7CisgICAgICAgIG1f
YXVkaW9UYXNrUnVubmVyLT5TbGVlcE1zKHBvbGxJbnRlcnZhbCk7CisgICAgICAgIGlmICghbV9p
c1BsYXlpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIExpYldlYlJU
Q0F1ZGlvTW9kdWxlOjpQb2xsRnJvbVNvdXJjZSgpCit7CisgICAgaWYgKCFtX2F1ZGlvVHJhbnNw
b3J0KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9s
bFNhbXBsZXM7IGkrKykgeworICAgICAgICBpbnQ2NF90IGVsYXBzZWRUaW1lID0gLTE7CisgICAg
ICAgIGludDY0X3QgbnRwVGltZSA9IC0xOworICAgICAgICBjaGFyIGRhdGFbKGJ5dGVzUGVyU2Ft
cGxlICogY2hhbm5lbHMgKiBzYW1wbGVzUGVyRnJhbWUpXTsKKyAgICAgICAgbV9hdWRpb1RyYW5z
cG9ydC0+UHVsbFJlbmRlckRhdGEoYnl0ZXNQZXJTYW1wbGUgKiA4LCBzYW1wbGluZ1JhdGUsIGNo
YW5uZWxzLCBzYW1wbGVzUGVyRnJhbWUsIGRhdGEsICZlbGFwc2VkVGltZSwgJm50cFRpbWUpOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9MaWJXZWJSVENBdWRpb01vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ0F1ZGlvTW9kdWxlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTMwMzJmOGIxYTgyOTA5MmY1M2NlMDE1N2IxY2E3NjE0NjUzYjY1MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJS
VENBdWRpb01vZHVsZS5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgi
CisjaW5jbHVkZSA8d2VicnRjL2Jhc2UvbWVzc2FnZWhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3ZWJy
dGMvYmFzZS90aHJlYWQuaD4KKyNpbmNsdWRlIDx3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
aW5jbHVkZS9hdWRpb19kZXZpY2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBMaWJX
ZWJSVENBdWRpb01vZHVsZSBpcyBwdWxsaW5nIHN0cmVhbWVkIGRhdGEgdG8gZW5zdXJlIGF1ZGlv
IGRhdGEgaXMgcGFzc2VkIHRvIHRoZSBhdWRpbyB0cmFjay4KK2NsYXNzIExpYldlYlJUQ0F1ZGlv
TW9kdWxlIGZpbmFsIDogcHVibGljIHdlYnJ0Yzo6QXVkaW9EZXZpY2VNb2R1bGUsIHByaXZhdGUg
cnRjOjpNZXNzYWdlSGFuZGxlciB7CitwdWJsaWM6CisgICAgTGliV2ViUlRDQXVkaW9Nb2R1bGUo
KTsKKworcHJpdmF0ZToKKyAgICBpbnQxNl90IHNob3VsZE5vdEJlQ2FsbGVkKGludDE2X3QgdmFs
dWUpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGludDMyX3QgQWRkUmVmKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gMTsgfQorICAgIGludDMyX3QgUmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IDE7IH0KKyAgICB2b2lkIE9uTWVzc2FnZShydGM6Ok1lc3NhZ2UqKTsKKworICAgIC8vIHdlYnJ0
Yzo6QXVkaW9EZXZpY2VNb2R1bGUgQVBJCisgICAgaW50MzJfdCBTdGFydFBsYXlvdXQoKSBmaW5h
bDsKKyAgICBpbnQzMl90IFN0b3BQbGF5b3V0KCkgZmluYWw7CisgICAgaW50MzJfdCBSZWdpc3Rl
ckF1ZGlvQ2FsbGJhY2sod2VicnRjOjpBdWRpb1RyYW5zcG9ydCopIGZpbmFsOworICAgIGJvb2wg
UGxheWluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9CisKKyAgICBpbnQ2
NF90IFRpbWVVbnRpbE5leHRQcm9jZXNzKCkgZmluYWwgeyByZXR1cm4gMTAwMDAwMDsgfQorICAg
IHZvaWQgUHJvY2VzcygpIGZpbmFsIHsgfQorICAgIGludDMyX3QgQWN0aXZlQXVkaW9MYXllcihB
dWRpb0xheWVyKikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9
CisgICAgRXJyb3JDb2RlIExhc3RFcnJvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGtBZG1FcnJO
b25lOyB9CisgICAgaW50MzJfdCBSZWdpc3RlckV2ZW50T2JzZXJ2ZXIod2VicnRjOjpBdWRpb0Rl
dmljZU9ic2VydmVyKikgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGludDMyX3QgSW5pdCgpIGZp
bmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFRlcm1pbmF0ZSgpIGZpbmFsIHsgcmV0dXJu
IDA7IH0KKyAgICBib29sIEluaXRpYWxpemVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIGludDE2X3QgUGxheW91dERldmljZXMoKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAg
aW50MTZfdCBSZWNvcmRpbmdEZXZpY2VzKCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGludDMy
X3QgUGxheW91dERldmljZU5hbWUodWludDE2X3QsIGNoYXJbd2VicnRjOjprQWRtTWF4RGV2aWNl
TmFtZVNpemVdLCBjaGFyW3dlYnJ0Yzo6a0FkbU1heEd1aWRTaXplXSkgZmluYWwgeyByZXR1cm4g
MDsgfQorICAgIGludDMyX3QgUmVjb3JkaW5nRGV2aWNlTmFtZSh1aW50MTZfdCwgY2hhclt3ZWJy
dGM6OmtBZG1NYXhEZXZpY2VOYW1lU2l6ZV0sIGNoYXJbd2VicnRjOjprQWRtTWF4R3VpZFNpemVd
KSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBTZXRQbGF5b3V0RGV2aWNlKHVpbnQx
Nl90KSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBTZXRQbGF5b3V0RGV2aWNlKFdp
bmRvd3NEZXZpY2VUeXBlKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBTZXRSZWNv
cmRpbmdEZXZpY2UodWludDE2X3QpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFNl
dFJlY29yZGluZ0RldmljZShXaW5kb3dzRGV2aWNlVHlwZSkgZmluYWwgeyByZXR1cm4gMDsgfQor
ICAgIGludDMyX3QgUGxheW91dElzQXZhaWxhYmxlKGJvb2wqKSBmaW5hbCB7IHJldHVybiBzaG91
bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IEluaXRQbGF5b3V0KCkgZmluYWwgeyBy
ZXR1cm4gMDsgfQorICAgIGJvb2wgUGxheW91dElzSW5pdGlhbGl6ZWQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiB0cnVlOyB9CisgICAgaW50MzJfdCBSZWNvcmRpbmdJc0F2YWlsYWJsZShib29sKikg
ZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBJbml0
UmVjb3JkaW5nKCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGJvb2wgUmVjb3JkaW5nSXNJbml0
aWFsaXplZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50MzJfdCBTdGFy
dFJlY29yZGluZygpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFN0b3BSZWNvcmRp
bmcoKSBmaW5hbCB7IHJldHVybiAwOyAgfQorICAgIGJvb2wgUmVjb3JkaW5nKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gMDsgIH0KKyAgICBpbnQzMl90IFNldEFHQyhib29sKSBmaW5hbCB7IHJldHVy
biAwOyAgfQorICAgIGJvb2wgQUdDKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVD
YWxsZWQoMCk7ICB9CisgICAgaW50MzJfdCBTZXRXYXZlT3V0Vm9sdW1lKHVpbnQxNl90LCB1aW50
MTZfdCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJf
dCBXYXZlT3V0Vm9sdW1lKHVpbnQxNl90KiwgdWludDE2X3QqKSBjb25zdCBmaW5hbCB7IHJldHVy
biBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IEluaXRTcGVha2VyKCkgZmlu
YWwgeyByZXR1cm4gMDsgfQorICAgIGJvb2wgU3BlYWtlcklzSW5pdGlhbGl6ZWQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGludDMyX3QgSW5pdE1pY3JvcGhvbmUoKSBmaW5h
bCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBNaWNyb3Bob25lSXNJbml0aWFsaXplZCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50MzJfdCBTcGVha2VyVm9sdW1lSXNBdmFp
bGFibGUoYm9vbCopIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAg
IGludDMyX3QgU2V0U3BlYWtlclZvbHVtZSh1aW50MzJfdCkgZmluYWwgeyByZXR1cm4gc2hvdWxk
Tm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTcGVha2VyVm9sdW1lKHVpbnQzMl90Kikg
Y29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJf
dCBNYXhTcGVha2VyVm9sdW1lKHVpbnQzMl90KikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxk
Tm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBNaW5TcGVha2VyVm9sdW1lKHVpbnQzMl90
KikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50
MzJfdCBTcGVha2VyVm9sdW1lU3RlcFNpemUodWludDE2X3QqKSBjb25zdCBmaW5hbCB7IHJldHVy
biBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pY3JvcGhvbmVWb2x1bWVJ
c0F2YWlsYWJsZShib29sKikgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9
CisgICAgaW50MzJfdCBTZXRNaWNyb3Bob25lVm9sdW1lKHVpbnQzMl90KSBmaW5hbCB7IHJldHVy
biBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pY3JvcGhvbmVWb2x1bWUo
dWludDMyX3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0K
KyAgICBpbnQzMl90IE1heE1pY3JvcGhvbmVWb2x1bWUodWludDMyX3QqKSBjb25zdCBmaW5hbCB7
IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pbk1pY3JvcGhv
bmVWb2x1bWUodWludDMyX3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxl
ZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pY3JvcGhvbmVWb2x1bWVTdGVwU2l6ZSh1aW50MTZfdCop
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMy
X3QgU3BlYWtlck11dGVJc0F2YWlsYWJsZShib29sKikgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90
QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTZXRTcGVha2VyTXV0ZShib29sKSBmaW5hbCB7
IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNwZWFrZXJNdXRl
KGJvb2wqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAg
ICBpbnQzMl90IE1pY3JvcGhvbmVNdXRlSXNBdmFpbGFibGUoYm9vbCopIGZpbmFsIHsgcmV0dXJu
IHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU2V0TWljcm9waG9uZU11dGUo
Ym9vbCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJf
dCBNaWNyb3Bob25lTXV0ZShib29sKikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVD
YWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBNaWNyb3Bob25lQm9vc3RJc0F2YWlsYWJsZShib29s
KikgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBT
ZXRNaWNyb3Bob25lQm9vc3QoYm9vbCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQo
LTEpOyB9CisgICAgaW50MzJfdCBNaWNyb3Bob25lQm9vc3QoYm9vbCopIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU3RlcmVvUGxheW91
dElzQXZhaWxhYmxlKGJvb2wqIGF2YWlsYWJsZSkgY29uc3QgZmluYWwgeyAqYXZhaWxhYmxlID0g
ZmFsc2U7IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBTZXRTdGVyZW9QbGF5b3V0KGJvb2wpIGZp
bmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFN0ZXJlb1BsYXlvdXQoYm9vbCopIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU3Rl
cmVvUmVjb3JkaW5nSXNBdmFpbGFibGUoYm9vbCogYXZhaWxhYmxlKSBjb25zdCBmaW5hbCB7ICph
dmFpbGFibGUgPSBmYWxzZTsgcmV0dXJuIDA7ICB9CisgICAgaW50MzJfdCBTZXRTdGVyZW9SZWNv
cmRpbmcoYm9vbCkgZmluYWwgeyByZXR1cm4gMDsgIH0KKyAgICBpbnQzMl90IFN0ZXJlb1JlY29y
ZGluZyhib29sKikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9
CisgICAgaW50MzJfdCBTZXRSZWNvcmRpbmdDaGFubmVsKGNvbnN0IENoYW5uZWxUeXBlKSBmaW5h
bCB7IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBSZWNvcmRpbmdDaGFubmVsKENoYW5uZWxUeXBl
KikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50
MzJfdCBTZXRQbGF5b3V0QnVmZmVyKGNvbnN0IEJ1ZmZlclR5cGUsIHVpbnQxNl90KSBmaW5hbCB7
IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFBsYXlvdXRCdWZm
ZXIoQnVmZmVyVHlwZSosIHVpbnQxNl90KikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90
QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBQbGF5b3V0RGVsYXkodWludDE2X3QqIGRlbGF5
KSBjb25zdCBmaW5hbCB7ICpkZWxheSA9IDA7IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBSZWNv
cmRpbmdEZWxheSh1aW50MTZfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2Fs
bGVkKC0xKTsgfQorICAgIGludDMyX3QgQ1BVTG9hZCh1aW50MTZfdCopIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU3RhcnRSYXdPdXRw
dXRGaWxlUmVjb3JkaW5nKGNvbnN0IGNoYXJbd2VicnRjOjprQWRtTWF4RmlsZU5hbWVTaXplXSkg
ZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTdG9w
UmF3T3V0cHV0RmlsZVJlY29yZGluZygpIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVk
KC0xKTsgfQorICAgIGludDMyX3QgU3RhcnRSYXdJbnB1dEZpbGVSZWNvcmRpbmcoY29uc3QgY2hh
clt3ZWJydGM6OmtBZG1NYXhGaWxlTmFtZVNpemVdKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RC
ZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFN0b3BSYXdJbnB1dEZpbGVSZWNvcmRpbmcoKSBm
aW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNldFJl
Y29yZGluZ1NhbXBsZVJhdGUoY29uc3QgdWludDMyX3QpIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5v
dEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgUmVjb3JkaW5nU2FtcGxlUmF0ZSh1aW50MzJf
dCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGlu
dDMyX3QgU2V0UGxheW91dFNhbXBsZVJhdGUoY29uc3QgdWludDMyX3QpIGZpbmFsIHsgcmV0dXJu
IHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgUGxheW91dFNhbXBsZVJhdGUo
dWludDMyX3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0K
KyAgICBpbnQzMl90IFJlc2V0QXVkaW9EZXZpY2UoKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RC
ZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNldExvdWRzcGVha2VyU3RhdHVzKGJvb2wpIGZp
bmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgR2V0TG91
ZHNwZWFrZXJTdGF0dXMoYm9vbCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2Fs
bGVkKC0xKTsgfQorICAgIGJvb2wgQnVpbHRJbkFFQ0lzQXZhaWxhYmxlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIEJ1aWx0SW5BR0NJc0F2YWlsYWJsZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyAgfQorICAgIGJvb2wgQnVpbHRJbk5TSXNBdmFpbGFibGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgIH0KKyAgICBpbnQzMl90IEVuYWJsZUJ1aWx0
SW5BRUMoYm9vbCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAg
aW50MzJfdCBFbmFibGVCdWlsdEluQUdDKGJvb2wpIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJl
Q2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgRW5hYmxlQnVpbHRJbk5TKGJvb2wpIGZpbmFsIHsg
cmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorCisjaWYgZGVmaW5lZChXRUJSVENfSU9T
KQorICAgIGludCBHZXRQbGF5b3V0QXVkaW9QYXJhbWV0ZXJzKHdlYnJ0Yzo6QXVkaW9QYXJhbWV0
ZXJzKikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAg
aW50IEdldFJlY29yZEF1ZGlvUGFyYW1ldGVycyh3ZWJydGM6OkF1ZGlvUGFyYW1ldGVycyopIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorI2VuZGlmCisKK3By
aXZhdGU6CisgICAgdm9pZCBTdGFydFBsYXlvdXRPbkF1ZGlvVGhyZWFkKCk7CisKKyAgICB2b2lk
IFBvbGxGcm9tU291cmNlKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpUaHJlYWQ+IG1f
YXVkaW9UYXNrUnVubmVyOworCisgICAgYm9vbCBtX2lzUGxheWluZyA9IGZhbHNlOworICAgIHdl
YnJ0Yzo6QXVkaW9UcmFuc3BvcnQqIG1fYXVkaW9UcmFuc3BvcnQgPSBudWxscHRyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJX
ZWJSVENVdGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvTGliV2ViUlRDVXRpbHMuY3BwCmluZGV4IGQ3NzA5ZDljYzEwYzRhODhhZWNmY2FmY2Qx
MDAzNmM2NGZiM2RmOGIuLmM5MDM0ZjQ0ZGI4MjFlZjkyMGRjNDUyOWJmODMxNWI5MWMwMDY5ZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENVdGlscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1V0aWxzLmNwcApAQCAtMSwyOSArMSwyNiBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0zMSw2ICsyOCw3IEBA
CiAKICNpZiBVU0UoTElCV0VCUlRDKQogCisjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUu
aCIKICNpbmNsdWRlIDx3ZWJydGMvYXBpL3BlZXJjb25uZWN0aW9uZmFjdG9yeXByb3h5Lmg+CiAj
aW5jbHVkZSA8d2VicnRjL2FwaS9wZWVyY29ubmVjdGlvbmZhY3RvcnkuaD4KICNpbmNsdWRlIDx3
ZWJydGMvYmFzZS9waHlzaWNhbHNvY2tldHNlcnZlci5oPgpAQCAtNDIsNiArNDAsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgUGVlckNvbm5lY3Rpb25GYWN0b3J5QW5kVGhyZWFk
cyA6IHB1YmxpYyBydGM6Ok1lc3NhZ2VIYW5kbGVyIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TGli
V2ViUlRDQXVkaW9Nb2R1bGU+IGF1ZGlvRGV2aWNlTW9kdWxlOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxydGM6OlRocmVhZD4gbmV0d29ya1RocmVhZDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpU
aHJlYWQ+IHNpZ25hbGluZ1RocmVhZDsKICAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+IGZhY3Rvcnk7CkBAIC05Niw3ICs5NSw5IEBA
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVQZWVyQ29ubmVjdGlvbkZhY3RvcnlBbmRUaHJlYWRzKCkK
ICAgICByZXN1bHQgPSBmYWN0b3J5QW5kVGhyZWFkcy5zaWduYWxpbmdUaHJlYWQtPlN0YXJ0KCk7
CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAKLSAgICBmYWN0b3J5QW5kVGhyZWFkcy5mYWN0b3J5ID0g
d2VicnRjOjpDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoZmFjdG9yeUFuZFRocmVhZHMubmV0
d29ya1RocmVhZC5nZXQoKSwgZmFjdG9yeUFuZFRocmVhZHMubmV0d29ya1RocmVhZC5nZXQoKSwg
ZmFjdG9yeUFuZFRocmVhZHMuc2lnbmFsaW5nVGhyZWFkLmdldCgpLCBudWxscHRyLCBuZXcgd2Vi
cnRjOjpWaWRlb1Rvb2xib3hWaWRlb0VuY29kZXJGYWN0b3J5KCkgLCBuZXcgd2VicnRjOjpWaWRl
b1Rvb2xib3hWaWRlb0RlY29kZXJGYWN0b3J5KCkpOworICAgIGZhY3RvcnlBbmRUaHJlYWRzLmF1
ZGlvRGV2aWNlTW9kdWxlID0gc3RkOjptYWtlX3VuaXF1ZTxMaWJXZWJSVENBdWRpb01vZHVsZT4o
KTsKKworICAgIGZhY3RvcnlBbmRUaHJlYWRzLmZhY3RvcnkgPSB3ZWJydGM6OkNyZWF0ZVBlZXJD
b25uZWN0aW9uRmFjdG9yeShmYWN0b3J5QW5kVGhyZWFkcy5uZXR3b3JrVGhyZWFkLmdldCgpLCBm
YWN0b3J5QW5kVGhyZWFkcy5uZXR3b3JrVGhyZWFkLmdldCgpLCBmYWN0b3J5QW5kVGhyZWFkcy5z
aWduYWxpbmdUaHJlYWQuZ2V0KCksIGZhY3RvcnlBbmRUaHJlYWRzLmF1ZGlvRGV2aWNlTW9kdWxl
LmdldCgpLCBuZXcgd2VicnRjOjpWaWRlb1Rvb2xib3hWaWRlb0VuY29kZXJGYWN0b3J5KCkgLCBu
ZXcgd2VicnRjOjpWaWRlb1Rvb2xib3hWaWRlb0RlY29kZXJGYWN0b3J5KCkpOwogCiAgICAgQVNT
RVJUKGZhY3RvcnlBbmRUaHJlYWRzLmZhY3RvcnkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300222</attachid>
            <date>2017-01-31 09:12:18 -0800</date>
            <delta_ts>2017-01-31 10:59:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167572-20170131091008.patch</filename>
            <type>text/plain</type>
            <size>24600</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTgzOTllYjNhNzVmN2Uy
YzQwYzUxZTY5YzcxMDU0ZWQyNjEyMGIwYS4uMzVmNzY1ODg4MzY2YjAzMWVkOTdiZWZmYzU5Nzk0
MzM0ZDIyMmZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTAxLTMxICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViUlRDXSBBZGQgYSBs
aWJ3ZWJydGMgQXVkaW9Nb2R1bGUgc3BlY2lmaWMgdG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc1NzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBiZSBjb3ZlcmVkIGJ5IHdlYnJ0YyBh
dWRpbyB0ZXN0cy4KKyAgICAgICAgQWRkaW5nIGFuIEF1ZGlvTW9kdWxlIHRvIGNpcmN1bXZlbnQg
dGhlIGRlZmF1bHQgTGliV2ViUlRDIEF1ZGlvIE1vZHVsZSB3aGljaCBkb2VzIHRoZSBhdWRpbyBk
aXJlY3RseS4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdWRpb01vZHVsZSBp
cyByZXN0cmljdGVkIHRvIGVuYWJsZSBmdWVsaW5nIHRoZSBpbmNvbWluZyBhdWRpbyB0cmFja3Mg
d2l0aCBpbmNvbWluZyBkYXRhLgorICAgICAgICBDb2RlIGluc3BpcmVkIGZyb20gaHR0cHM6Ly9j
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYy8rL21hc3Rlci9yZW1vdGluZy9w
cm90b2NvbC93ZWJydGNfYXVkaW9fbW9kdWxlLmgKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxpYldlYlJUQ0F1ZGlvTW9kdWxlOjpMaWJXZWJSVENBdWRpb01vZHVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMaWJXZWJSVENBdWRpb01vZHVsZTo6UmVnaXN0ZXJBdWRpb0NhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxpYldlYlJUQ0F1ZGlvTW9kdWxlOjpPbk1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TGliV2ViUlRDQXVkaW9Nb2R1bGU6OlN0YXJ0UGxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpMaWJXZWJSVENBdWRpb01vZHVsZTo6U3RvcFBsYXlvdXQpOgorICAgICAgICAo
V2ViQ29yZTo6TGliV2ViUlRDQXVkaW9Nb2R1bGU6OlN0YXJ0UGxheW91dE9uQXVkaW9UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDQXVkaW9Nb2R1bGU6OlBvbGxGcm9tU291cmNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDQXVk
aW9Nb2R1bGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2Vi
cnRjL0xpYldlYlJUQ1V0aWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZE1lc3NhZ2VE
YXRhOjpUaHJlYWRNZXNzYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplUGVl
ckNvbm5lY3Rpb25GYWN0b3J5QW5kVGhyZWFkcyk6CisKIDIwMTctMDEtMzAgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFNldmVyYWwgd2ViIHRp
bWluZyB0ZXN0cyBjcmFzaCBpbiBHVEsrIGFuZCBBcHBsZVdpbiBib3RzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTNlYmJkMWJh
YjAyYWJlN2E0YWFlYTEyZTIwYzE1NzlmMTZlNWRlNC4uNzY5NTk2NThkMGRmYTJkOWI4NTYxNjQz
MGVjYzc4ZDIyYjQ5NGYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTUzNSw2ICsxNTM1LDggQEAKIAkJNDE0QjgyMDUxRDZE
RjBFNTAwNzdFQkUzIC8qIFN0cnVjdHVyZWRDbG9uZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE0QjgyMDMxRDZERjBEOTAwNzdFQkUzIC8qIFN0cnVj
dHVyZWRDbG9uZS5oICovOyB9OwogCQk0MTUwNzE1NzE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0
b3JGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE1MDcxNTUxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmNwcCAqLzsgfTsK
IAkJNDE1MDcxNTgxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwNzE1NjE2ODUwNjczMDBD
M0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLzsgfTsKKwkJNDE1MDgwMzYxRTNGMDBBRDAwNTFE
NzVEIC8qIExpYldlYlJUQ0F1ZGlvTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTA4MDM0MUUzRjAwQUEwMDUxRDc1RCAvKiBMaWJXZWJS
VENBdWRpb01vZHVsZS5jcHAgKi87IH07CisJCTQxNTA4MDM3MUUzRjAwQjAwMDUxRDc1RCAvKiBM
aWJXZWJSVENBdWRpb01vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDE1MDgwMzUxRTNGMDBBQTAwNTFENzVEIC8qIExpYldlYlJUQ0F1ZGlvTW9k
dWxlLmggKi87IH07CiAJCTQxNTBGOUYxMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
NTBGOUVGMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuaCAqLzsgfTsKIAkJ
NDE1MEY5RjIxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwRjlGMDEyQjZFMEU3
MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDE1NjcwNDcxREJF
MTUzMzAwOUFDM0JCIC8qIFBlZXJDb25uZWN0aW9uU3RhdGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTU2NzA0NjFEQkUxNTI0MDA5QUMzQkIgLyog
UGVlckNvbm5lY3Rpb25TdGF0ZXMuaCAqLzsgfTsKQEAgLTg3MjMsNiArODcyNSw4IEBACiAJCTQx
NEI4MjAzMUQ2REYwRDkwMDc3RUJFMyAvKiBTdHJ1Y3R1cmVkQ2xvbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlZENsb25lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxNTA3MTU1MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3RvckZpbHRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNTA3MTU2MTY4NTA2NzMwMEMzQzdC
MyAvKiBTZWxlY3RvckZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZWxlY3RvckZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTUwODAzNDFF
M0YwMEFBMDA1MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3BwOyBwYXRoID0g
bGlid2VicnRjL0xpYldlYlJUQ0F1ZGlvTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDE1MDgwMzUxRTNGMDBBQTAwNTFENzVEIC8qIExpYldlYlJUQ0F1ZGlvTW9kdWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ0F1ZGlvTW9kdWxl
Lmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Nb2R1bGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MEY5RUYxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1i
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbGlkZXJUaHVtYkVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MEY5RjAxMkI2RTBFNzAw
MDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTbGlkZXJUaHVtYkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTU2NzA0NjFEQkUxNTI0MDA5QUMzQkIgLyogUGVlckNvbm5lY3Rpb25TdGF0
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVlckNvbm5lY3Rpb25TdGF0
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NjY3LDYgKzE2NjcxLDggQEAK
IAkJNDE1NzQ3NDIxRTM4Njk4MDAwRTkxNEQ4IC8qIGxpYndlYnJ0YyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDE1MDgwMzQxRTNGMDBBQTAwNTFENzVE
IC8qIExpYldlYlJUQ0F1ZGlvTW9kdWxlLmNwcCAqLywKKwkJCQk0MTUwODAzNTFFM0YwMEFBMDA1
MUQ3NUQgLyogTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCAqLywKIAkJCQk0MTU3NDc0MzFFMzg2OTlF
MDBFOTE0RDggLyogTGliV2ViUlRDTWFjcm9zLmggKi8sCiAJCQkJNDE1NzQ3NDQxRTM4Njk5RTAw
RTkxNEQ4IC8qIExpYldlYlJUQ1Byb3ZpZGVyLmggKi8sCiAJCQkJNDE1NzQ3NDUxRTM4Njk5RTAw
RTkxNEQ4IC8qIExpYldlYlJUQ1V0aWxzLmNwcCAqLywKQEAgLTI2MTY2LDYgKzI2MTcyLDcgQEAK
IAkJCQkwRjhCNDU3MjFEQzNGQkEzMDA0NDNDM0YgLyogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NzEwREYxREI2RkUyMjAwMkRDRUMzIC8qIElu
dGVyc2VjdGlvbk9ic2VydmVyRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTcyMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE1MDgwMzcx
RTNGMDBCMDAwNTFENzVEIC8qIExpYldlYlJUQ0F1ZGlvTW9kdWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDYyQTRBMTExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjc1MzU3NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTJCOTIxNzMxNkM1Q0M0MjAwNDFEQ0Q5IC8qIEludFJlY3RFeHRlbnQuaCBp
biBIZWFkZXJzICovLApAQCAtMzE1ODQsNiArMzE1OTEsNyBAQAogCQkJCUIyMjI3QTA4MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg0NUU3MkZCMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDgxRUJGM0EwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDE1MDgwMzYxRTNGMDBBRDAwNTFENzVEIC8qIExpYldlYlJU
Q0F1ZGlvTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTBCMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTBF
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0Zp
dFRvVmlld0JveC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb01vZHVsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRD
QXVkaW9Nb2R1bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhYWE4NWIxZjcyZTlkYzY2YTUyZjkzMjViNGIw
ZTNmYmY4ZDYxZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Nb2R1bGUuY3BwCkBAIC0wLDAgKzEs
MTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxpYldl
YlJUQ0F1ZGlvTW9kdWxlLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0xpYldlYlJUQ0F1ZGlvTW9kdWxlOjpMaWJXZWJSVENBdWRpb01vZHVsZSgpCisg
ICAgOiBtX2F1ZGlvVGFza1J1bm5lcihydGM6OlRocmVhZDo6Q3JlYXRlKCkpCit7CisgICAgbV9h
dWRpb1Rhc2tSdW5uZXItPlN0YXJ0KCk7Cit9CisKK2ludDMyX3QgTGliV2ViUlRDQXVkaW9Nb2R1
bGU6OlJlZ2lzdGVyQXVkaW9DYWxsYmFjayh3ZWJydGM6OkF1ZGlvVHJhbnNwb3J0KiBhdWRpb1Ry
YW5zcG9ydCkKK3sKKyAgICBtX2F1ZGlvVHJhbnNwb3J0ID0gYXVkaW9UcmFuc3BvcnQ7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgTGliV2ViUlRDQXVkaW9Nb2R1bGU6Ok9uTWVzc2FnZShydGM6
Ok1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKG1lc3NhZ2UtPm1lc3NhZ2VfaWQgPT0g
MSk7CisgICAgU3RhcnRQbGF5b3V0T25BdWRpb1RocmVhZCgpOworfQorCitpbnQzMl90IExpYldl
YlJUQ0F1ZGlvTW9kdWxlOjpTdGFydFBsYXlvdXQoKQoreworICAgIGlmICghbV9pc1BsYXlpbmcg
JiYgbV9hdWRpb1Rhc2tSdW5uZXIpIHsKKyAgICAgICAgbV9hdWRpb1Rhc2tSdW5uZXItPlBvc3Qo
UlRDX0ZST01fSEVSRSwgdGhpcywgMSk7CisgICAgICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludDMyX3QgTGliV2ViUlRDQXVkaW9Nb2R1bGU6OlN0
b3BQbGF5b3V0KCkKK3sKKyAgICBpZiAobV9pc1BsYXlpbmcpCisgICAgICAgIG1faXNQbGF5aW5n
ID0gZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9CisKKy8vIGxpYndlYnJ0YyB1c2VzIDEwbXMgZnJh
bWVzLgorY29uc3QgdW5zaWduZWQgc2FtcGxpbmdSYXRlID0gNDgwMDA7Citjb25zdCB1bnNpZ25l
ZCBmcmFtZUxlbmd0aE1zID0gMTA7Citjb25zdCB1bnNpZ25lZCBzYW1wbGVzUGVyRnJhbWUgPSBz
YW1wbGluZ1JhdGUgKiBmcmFtZUxlbmd0aE1zIC8gMTAwMDsKK2NvbnN0IHVuc2lnbmVkIHBvbGxT
YW1wbGVzID0gNTsKK2NvbnN0IHVuc2lnbmVkIHBvbGxJbnRlcnZhbCA9IDUgKiBmcmFtZUxlbmd0
aE1zOworY29uc3QgdW5zaWduZWQgY2hhbm5lbHMgPSAyOworY29uc3QgdW5zaWduZWQgYnl0ZXNQ
ZXJTYW1wbGUgPSAyOworCit2b2lkIExpYldlYlJUQ0F1ZGlvTW9kdWxlOjpTdGFydFBsYXlvdXRP
bkF1ZGlvVGhyZWFkKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBQb2xsRnJvbVNv
dXJjZSgpOworICAgICAgICBtX2F1ZGlvVGFza1J1bm5lci0+U2xlZXBNcyhwb2xsSW50ZXJ2YWwp
OworICAgICAgICBpZiAoIW1faXNQbGF5aW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordm9pZCBMaWJXZWJSVENBdWRpb01vZHVsZTo6UG9sbEZyb21Tb3VyY2UoKQoreworICAg
IGlmICghbV9hdWRpb1RyYW5zcG9ydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBvbGxTYW1wbGVzOyBpKyspIHsKKyAgICAgICAgaW50NjRfdCBlbGFw
c2VkVGltZSA9IC0xOworICAgICAgICBpbnQ2NF90IG50cFRpbWUgPSAtMTsKKyAgICAgICAgY2hh
ciBkYXRhWyhieXRlc1BlclNhbXBsZSAqIGNoYW5uZWxzICogc2FtcGxlc1BlckZyYW1lKV07Cisg
ICAgICAgIG1fYXVkaW9UcmFuc3BvcnQtPlB1bGxSZW5kZXJEYXRhKGJ5dGVzUGVyU2FtcGxlICog
OCwgc2FtcGxpbmdSYXRlLCBjaGFubmVscywgc2FtcGxlc1BlckZyYW1lLCBkYXRhLCAmZWxhcHNl
ZFRpbWUsICZudHBUaW1lKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb01v
ZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk1OTg4NjA5ZDE3OGU1NjM2OTE1OWIzNTI2MzJlZWMxZWJiOTc5
ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9saWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Nb2R1bGUuaApAQCAtMCwwICsxLDE2MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUg
IkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9iYXNlL21lc3NhZ2VoYW5kbGVy
Lmg+CisjaW5jbHVkZSA8d2VicnRjL2Jhc2UvdGhyZWFkLmg+CisjaW5jbHVkZSA8d2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2luY2x1ZGUvYXVkaW9fZGV2aWNlLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gTGliV2ViUlRDQXVkaW9Nb2R1bGUgaXMgcHVsbGluZyBzdHJlYW1lZCBk
YXRhIHRvIGVuc3VyZSBhdWRpbyBkYXRhIGlzIHBhc3NlZCB0byB0aGUgYXVkaW8gdHJhY2suCitj
bGFzcyBMaWJXZWJSVENBdWRpb01vZHVsZSBmaW5hbCA6IHB1YmxpYyB3ZWJydGM6OkF1ZGlvRGV2
aWNlTW9kdWxlLCBwcml2YXRlIHJ0Yzo6TWVzc2FnZUhhbmRsZXIgeworcHVibGljOgorICAgIExp
YldlYlJUQ0F1ZGlvTW9kdWxlKCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gVSBzaG91bGROb3RCZUNhbGxlZChVIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBp
bnQzMl90IEFkZFJlZigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQzMl90IFJl
bGVhc2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiAxOyB9CisgICAgdm9pZCBPbk1lc3NhZ2UocnRj
OjpNZXNzYWdlKik7CisKKyAgICAvLyB3ZWJydGM6OkF1ZGlvRGV2aWNlTW9kdWxlIEFQSQorICAg
IGludDMyX3QgU3RhcnRQbGF5b3V0KCkgZmluYWw7CisgICAgaW50MzJfdCBTdG9wUGxheW91dCgp
IGZpbmFsOworICAgIGludDMyX3QgUmVnaXN0ZXJBdWRpb0NhbGxiYWNrKHdlYnJ0Yzo6QXVkaW9U
cmFuc3BvcnQqKSBmaW5hbDsKKyAgICBib29sIFBsYXlpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2lzUGxheWluZzsgfQorCisgICAgaW50NjRfdCBUaW1lVW50aWxOZXh0UHJvY2VzcygpIGZp
bmFsIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpOyB9CisgICAg
dm9pZCBQcm9jZXNzKCkgZmluYWwgeyB9CisgICAgaW50MzJfdCBBY3RpdmVBdWRpb0xheWVyKEF1
ZGlvTGF5ZXIqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0K
KyAgICBFcnJvckNvZGUgTGFzdEVycm9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4ga0FkbUVyck5v
bmU7IH0KKyAgICBpbnQzMl90IFJlZ2lzdGVyRXZlbnRPYnNlcnZlcih3ZWJydGM6OkF1ZGlvRGV2
aWNlT2JzZXJ2ZXIqKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgaW50MzJfdCBJbml0KCkgZmlu
YWwgeyByZXR1cm4gMDsgfQorICAgIGludDMyX3QgVGVybWluYXRlKCkgZmluYWwgeyByZXR1cm4g
MDsgfQorICAgIGJvb2wgSW5pdGlhbGl6ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CisgICAgaW50MTZfdCBQbGF5b3V0RGV2aWNlcygpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBp
bnQxNl90IFJlY29yZGluZ0RldmljZXMoKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgaW50MzJf
dCBQbGF5b3V0RGV2aWNlTmFtZSh1aW50MTZfdCwgY2hhclt3ZWJydGM6OmtBZG1NYXhEZXZpY2VO
YW1lU2l6ZV0sIGNoYXJbd2VicnRjOjprQWRtTWF4R3VpZFNpemVdKSBmaW5hbCB7IHJldHVybiAw
OyB9CisgICAgaW50MzJfdCBSZWNvcmRpbmdEZXZpY2VOYW1lKHVpbnQxNl90LCBjaGFyW3dlYnJ0
Yzo6a0FkbU1heERldmljZU5hbWVTaXplXSwgY2hhclt3ZWJydGM6OmtBZG1NYXhHdWlkU2l6ZV0p
IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFNldFBsYXlvdXREZXZpY2UodWludDE2
X3QpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFNldFBsYXlvdXREZXZpY2UoV2lu
ZG93c0RldmljZVR5cGUpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFNldFJlY29y
ZGluZ0RldmljZSh1aW50MTZfdCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGludDMyX3QgU2V0
UmVjb3JkaW5nRGV2aWNlKFdpbmRvd3NEZXZpY2VUeXBlKSBmaW5hbCB7IHJldHVybiAwOyB9Cisg
ICAgaW50MzJfdCBQbGF5b3V0SXNBdmFpbGFibGUoYm9vbCopIGZpbmFsIHsgcmV0dXJuIHNob3Vs
ZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgSW5pdFBsYXlvdXQoKSBmaW5hbCB7IHJl
dHVybiAwOyB9CisgICAgYm9vbCBQbGF5b3V0SXNJbml0aWFsaXplZCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KKyAgICBpbnQzMl90IFJlY29yZGluZ0lzQXZhaWxhYmxlKGJvb2wqKSBm
aW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IEluaXRS
ZWNvcmRpbmcoKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBSZWNvcmRpbmdJc0luaXRp
YWxpemVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbnQzMl90IFN0YXJ0
UmVjb3JkaW5nKCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIGludDMyX3QgU3RvcFJlY29yZGlu
ZygpIGZpbmFsIHsgcmV0dXJuIDA7ICB9CisgICAgYm9vbCBSZWNvcmRpbmcoKSBjb25zdCBmaW5h
bCB7IHJldHVybiAwOyAgfQorICAgIGludDMyX3QgU2V0QUdDKGJvb2wpIGZpbmFsIHsgcmV0dXJu
IDA7ICB9CisgICAgYm9vbCBBR0MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNh
bGxlZCgwKTsgIH0KKyAgICBpbnQzMl90IFNldFdhdmVPdXRWb2x1bWUodWludDE2X3QsIHVpbnQx
Nl90KSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90
IFdhdmVPdXRWb2x1bWUodWludDE2X3QqLCB1aW50MTZfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgSW5pdFNwZWFrZXIoKSBmaW5h
bCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBTcGVha2VySXNJbml0aWFsaXplZCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50MzJfdCBJbml0TWljcm9waG9uZSgpIGZpbmFs
IHsgcmV0dXJuIDA7IH0KKyAgICBib29sIE1pY3JvcGhvbmVJc0luaXRpYWxpemVkKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbnQzMl90IFNwZWFrZXJWb2x1bWVJc0F2YWls
YWJsZShib29sKikgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAg
aW50MzJfdCBTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90KSBmaW5hbCB7IHJldHVybiBzaG91bGRO
b3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNwZWFrZXJWb2x1bWUodWludDMyX3QqKSBj
b25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90
IE1heFNwZWFrZXJWb2x1bWUodWludDMyX3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGRO
b3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pblNwZWFrZXJWb2x1bWUodWludDMyX3Qq
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQz
Ml90IFNwZWFrZXJWb2x1bWVTdGVwU2l6ZSh1aW50MTZfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgTWljcm9waG9uZVZvbHVtZUlz
QXZhaWxhYmxlKGJvb2wqKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0K
KyAgICBpbnQzMl90IFNldE1pY3JvcGhvbmVWb2x1bWUodWludDMyX3QpIGZpbmFsIHsgcmV0dXJu
IHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgTWljcm9waG9uZVZvbHVtZSh1
aW50MzJfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQor
ICAgIGludDMyX3QgTWF4TWljcm9waG9uZVZvbHVtZSh1aW50MzJfdCopIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgTWluTWljcm9waG9u
ZVZvbHVtZSh1aW50MzJfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVk
KC0xKTsgfQorICAgIGludDMyX3QgTWljcm9waG9uZVZvbHVtZVN0ZXBTaXplKHVpbnQxNl90Kikg
Y29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJf
dCBTcGVha2VyTXV0ZUlzQXZhaWxhYmxlKGJvb2wqKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RC
ZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNldFNwZWFrZXJNdXRlKGJvb2wpIGZpbmFsIHsg
cmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU3BlYWtlck11dGUo
Ym9vbCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAg
IGludDMyX3QgTWljcm9waG9uZU11dGVJc0F2YWlsYWJsZShib29sKikgZmluYWwgeyByZXR1cm4g
c2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTZXRNaWNyb3Bob25lTXV0ZShi
b29sKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90
IE1pY3JvcGhvbmVNdXRlKGJvb2wqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNh
bGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IE1pY3JvcGhvbmVCb29zdElzQXZhaWxhYmxlKGJvb2wq
KSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFNl
dE1pY3JvcGhvbmVCb29zdChib29sKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgt
MSk7IH0KKyAgICBpbnQzMl90IE1pY3JvcGhvbmVCb29zdChib29sKikgY29uc3QgZmluYWwgeyBy
ZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTdGVyZW9QbGF5b3V0
SXNBdmFpbGFibGUoYm9vbCogYXZhaWxhYmxlKSBjb25zdCBmaW5hbCB7ICphdmFpbGFibGUgPSBm
YWxzZTsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFNldFN0ZXJlb1BsYXlvdXQoYm9vbCkgZmlu
YWwgeyByZXR1cm4gMDsgfQorICAgIGludDMyX3QgU3RlcmVvUGxheW91dChib29sKikgY29uc3Qg
ZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTdGVy
ZW9SZWNvcmRpbmdJc0F2YWlsYWJsZShib29sKiBhdmFpbGFibGUpIGNvbnN0IGZpbmFsIHsgKmF2
YWlsYWJsZSA9IGZhbHNlOyByZXR1cm4gMDsgIH0KKyAgICBpbnQzMl90IFNldFN0ZXJlb1JlY29y
ZGluZyhib29sKSBmaW5hbCB7IHJldHVybiAwOyAgfQorICAgIGludDMyX3QgU3RlcmVvUmVjb3Jk
aW5nKGJvb2wqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0K
KyAgICBpbnQzMl90IFNldFJlY29yZGluZ0NoYW5uZWwoY29uc3QgQ2hhbm5lbFR5cGUpIGZpbmFs
IHsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFJlY29yZGluZ0NoYW5uZWwoQ2hhbm5lbFR5cGUq
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQz
Ml90IFNldFBsYXlvdXRCdWZmZXIoY29uc3QgQnVmZmVyVHlwZSwgdWludDE2X3QpIGZpbmFsIHsg
cmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgUGxheW91dEJ1ZmZl
cihCdWZmZXJUeXBlKiwgdWludDE2X3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RC
ZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFBsYXlvdXREZWxheSh1aW50MTZfdCogZGVsYXkp
IGNvbnN0IGZpbmFsIHsgKmRlbGF5ID0gMDsgcmV0dXJuIDA7IH0KKyAgICBpbnQzMl90IFJlY29y
ZGluZ0RlbGF5KHVpbnQxNl90KikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxs
ZWQoLTEpOyB9CisgICAgaW50MzJfdCBDUFVMb2FkKHVpbnQxNl90KikgY29uc3QgZmluYWwgeyBy
ZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBTdGFydFJhd091dHB1
dEZpbGVSZWNvcmRpbmcoY29uc3QgY2hhclt3ZWJydGM6OmtBZG1NYXhGaWxlTmFtZVNpemVdKSBm
aW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBpbnQzMl90IFN0b3BS
YXdPdXRwdXRGaWxlUmVjb3JkaW5nKCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQo
LTEpOyB9CisgICAgaW50MzJfdCBTdGFydFJhd0lucHV0RmlsZVJlY29yZGluZyhjb25zdCBjaGFy
W3dlYnJ0Yzo6a0FkbU1heEZpbGVOYW1lU2l6ZV0pIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJl
Q2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU3RvcFJhd0lucHV0RmlsZVJlY29yZGluZygpIGZp
bmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU2V0UmVj
b3JkaW5nU2FtcGxlUmF0ZShjb25zdCB1aW50MzJfdCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90
QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBSZWNvcmRpbmdTYW1wbGVSYXRlKHVpbnQzMl90
KikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50
MzJfdCBTZXRQbGF5b3V0U2FtcGxlUmF0ZShjb25zdCB1aW50MzJfdCkgZmluYWwgeyByZXR1cm4g
c2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBQbGF5b3V0U2FtcGxlUmF0ZSh1
aW50MzJfdCopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJlQ2FsbGVkKC0xKTsgfQor
ICAgIGludDMyX3QgUmVzZXRBdWRpb0RldmljZSgpIGZpbmFsIHsgcmV0dXJuIHNob3VsZE5vdEJl
Q2FsbGVkKC0xKTsgfQorICAgIGludDMyX3QgU2V0TG91ZHNwZWFrZXJTdGF0dXMoYm9vbCkgZmlu
YWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBHZXRMb3Vk
c3BlYWtlclN0YXR1cyhib29sKikgY29uc3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxs
ZWQoLTEpOyB9CisgICAgYm9vbCBCdWlsdEluQUVDSXNBdmFpbGFibGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgQnVpbHRJbkFHQ0lzQXZhaWxhYmxlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7ICB9CisgICAgYm9vbCBCdWlsdEluTlNJc0F2YWlsYWJsZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyAgfQorICAgIGludDMyX3QgRW5hYmxlQnVpbHRJ
bkFFQyhib29sKSBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBp
bnQzMl90IEVuYWJsZUJ1aWx0SW5BR0MoYm9vbCkgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVD
YWxsZWQoLTEpOyB9CisgICAgaW50MzJfdCBFbmFibGVCdWlsdEluTlMoYm9vbCkgZmluYWwgeyBy
ZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisKKyNpZiBkZWZpbmVkKFdFQlJUQ19JT1Mp
CisgICAgaW50IEdldFBsYXlvdXRBdWRpb1BhcmFtZXRlcnMod2VicnRjOjpBdWRpb1BhcmFtZXRl
cnMqKSBjb25zdCBmaW5hbCB7IHJldHVybiBzaG91bGROb3RCZUNhbGxlZCgtMSk7IH0KKyAgICBp
bnQgR2V0UmVjb3JkQXVkaW9QYXJhbWV0ZXJzKHdlYnJ0Yzo6QXVkaW9QYXJhbWV0ZXJzKikgY29u
c3QgZmluYWwgeyByZXR1cm4gc2hvdWxkTm90QmVDYWxsZWQoLTEpOyB9CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICB2b2lkIFN0YXJ0UGxheW91dE9uQXVkaW9UaHJlYWQoKTsKKworICAgIHZvaWQg
UG9sbEZyb21Tb3VyY2UoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRocmVhZD4gbV9h
dWRpb1Rhc2tSdW5uZXI7CisKKyAgICBib29sIG1faXNQbGF5aW5nID0gZmFsc2U7CisgICAgd2Vi
cnRjOjpBdWRpb1RyYW5zcG9ydCogbV9hdWRpb1RyYW5zcG9ydCA9IG51bGxwdHI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldl
YlJUQ1V0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENVdGlscy5jcHAKaW5kZXggZDc3MDlkOWNjMTBjNGE4OGFlY2ZjYWZjZDEw
MDM2YzY0ZmIzZGY4Yi4uNTFhZjJmMjc1MGJhNjZhY2U1MWM2YjlkY2JlNjIwN2JiNTgzY2RmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRj
L0xpYldlYlJUQ1V0aWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDVXRpbHMuY3BwCkBAIC0xLDI5ICsxLDI2IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMxLDYgKzI4LDcgQEAK
IAogI2lmIFVTRShMSUJXRUJSVEMpCiAKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5o
IgogI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvcGVlcmNvbm5lY3Rpb25mYWN0b3J5cHJveHkuaD4KICNp
bmNsdWRlIDx3ZWJydGMvYXBpL3BlZXJjb25uZWN0aW9uZmFjdG9yeS5oPgogI2luY2x1ZGUgPHdl
YnJ0Yy9iYXNlL3BoeXNpY2Fsc29ja2V0c2VydmVyLmg+CkBAIC00Miw2ICs0MCw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlBbmRUaHJlYWRz
IDogcHVibGljIHJ0Yzo6TWVzc2FnZUhhbmRsZXIgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxMaWJX
ZWJSVENBdWRpb01vZHVsZT4gYXVkaW9EZXZpY2VNb2R1bGU7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PHJ0Yzo6VGhyZWFkPiBuZXR3b3JrVGhyZWFkOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OlRo
cmVhZD4gc2lnbmFsaW5nVGhyZWFkOwogICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlBl
ZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeTsKQEAgLTk2LDcgKzk1LDkgQEAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUFuZFRocmVhZHMoKQog
ICAgIHJlc3VsdCA9IGZhY3RvcnlBbmRUaHJlYWRzLnNpZ25hbGluZ1RocmVhZC0+U3RhcnQoKTsK
ICAgICBBU1NFUlQocmVzdWx0KTsKIAotICAgIGZhY3RvcnlBbmRUaHJlYWRzLmZhY3RvcnkgPSB3
ZWJydGM6OkNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeShmYWN0b3J5QW5kVGhyZWFkcy5uZXR3
b3JrVGhyZWFkLmdldCgpLCBmYWN0b3J5QW5kVGhyZWFkcy5uZXR3b3JrVGhyZWFkLmdldCgpLCBm
YWN0b3J5QW5kVGhyZWFkcy5zaWduYWxpbmdUaHJlYWQuZ2V0KCksIG51bGxwdHIsIG5ldyB3ZWJy
dGM6OlZpZGVvVG9vbGJveFZpZGVvRW5jb2RlckZhY3RvcnkoKSAsIG5ldyB3ZWJydGM6OlZpZGVv
VG9vbGJveFZpZGVvRGVjb2RlckZhY3RvcnkoKSk7CisgICAgZmFjdG9yeUFuZFRocmVhZHMuYXVk
aW9EZXZpY2VNb2R1bGUgPSBzdGQ6Om1ha2VfdW5pcXVlPExpYldlYlJUQ0F1ZGlvTW9kdWxlPigp
OworCisgICAgZmFjdG9yeUFuZFRocmVhZHMuZmFjdG9yeSA9IHdlYnJ0Yzo6Q3JlYXRlUGVlckNv
bm5lY3Rpb25GYWN0b3J5KGZhY3RvcnlBbmRUaHJlYWRzLm5ldHdvcmtUaHJlYWQuZ2V0KCksIGZh
Y3RvcnlBbmRUaHJlYWRzLm5ldHdvcmtUaHJlYWQuZ2V0KCksIGZhY3RvcnlBbmRUaHJlYWRzLnNp
Z25hbGluZ1RocmVhZC5nZXQoKSwgZmFjdG9yeUFuZFRocmVhZHMuYXVkaW9EZXZpY2VNb2R1bGUu
Z2V0KCksIG5ldyB3ZWJydGM6OlZpZGVvVG9vbGJveFZpZGVvRW5jb2RlckZhY3RvcnkoKSwgbmV3
IHdlYnJ0Yzo6VmlkZW9Ub29sYm94VmlkZW9EZWNvZGVyRmFjdG9yeSgpKTsKIAogICAgIEFTU0VS
VChmYWN0b3J5QW5kVGhyZWFkcy5mYWN0b3J5KTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>