<?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>201359</bug_id>
          
          <creation_ts>2019-08-30 15:27:16 -0700</creation_ts>
          <short_desc>Abstract out WebSocketChannel message queue</short_desc>
          <delta_ts>2019-09-04 09:48:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>201377</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1566839</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-08-30 15:27:16 -0700</bug_when>
    <thetext>This can be used by RTCDataChannel as well when implementing send(Blob)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566848</commentid>
    <comment_count>1</comment_count>
      <attachid>377757</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-08-30 15:45:13 -0700</bug_when>
    <thetext>Created attachment 377757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566886</commentid>
    <comment_count>2</comment_count>
      <attachid>377757</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-08-30 16:52:36 -0700</bug_when>
    <thetext>Comment on attachment 377757
Patch

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

&gt; Source/WebCore/ChangeLog:25
&gt; +        (WebCore::MessageQueueWithBlobs::MessageQueueWithBlobs):

I think this needs a better name, like NetworkSendQueue or something.  This currently looks related to WTF::MessageQueue, but it&apos;s not.

&gt; Source/WebCore/fileapi/MessageQueueWithBlobs.h:46
&gt; +    MessageQueueWithBlobs(Document&amp;, Function&lt;void(const String&amp;)&gt;&amp;&amp;, Function&lt;void(const char*, size_t)&gt;&amp;&amp;, Function&lt;bool(int)&gt;&amp;&amp;);

I think these functions need names in the header.  Why does notifyError return a bool?

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:56
&gt; +    }, [&amp;channel](const char* data, size_t byteLength) {
&gt; +        channel.sendMessage(Messages::NetworkSocketChannel::SendData { IPC::DataReference { reinterpret_cast&lt;const uint8_t*&gt;(data), byteLength } }, byteLength);

This captures a raw pointer and uses it later.  I think we should capture a strong or weak reference instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566948</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-08-30 23:38:49 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #2)
&gt; Comment on attachment 377757 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=377757&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:25
&gt; &gt; +        (WebCore::MessageQueueWithBlobs::MessageQueueWithBlobs):
&gt; 
&gt; I think this needs a better name, like NetworkSendQueue or something.  This
&gt; currently looks related to WTF::MessageQueue, but it&apos;s not.

OK.
 
&gt; &gt; Source/WebCore/fileapi/MessageQueueWithBlobs.h:46
&gt; &gt; +    MessageQueueWithBlobs(Document&amp;, Function&lt;void(const String&amp;)&gt;&amp;&amp;, Function&lt;void(const char*, size_t)&gt;&amp;&amp;, Function&lt;bool(int)&gt;&amp;&amp;);
&gt; 
&gt; I think these functions need names in the header.  Why does notifyError
&gt; return a bool?

Will add names, notifyError returns a boolean to determine whether processing messages should stop after an error or not.
I will change it to processError.

&gt; &gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:56
&gt; &gt; +    }, [&amp;channel](const char* data, size_t byteLength) {
&gt; &gt; +        channel.sendMessage(Messages::NetworkSocketChannel::SendData { IPC::DataReference { reinterpret_cast&lt;const uint8_t*&gt;(data), byteLength } }, byteLength);
&gt; 
&gt; This captures a raw pointer and uses it later.  I think we should capture a
&gt; strong or weak reference instead.

channel is owning the MessageQueueWithBlobs so the lambdas will be destroyed at channel destruction time.
The only tricky part is the case of the lambdas being called during the destruction of channel.
I believe this is handled by the ABORT_ERROR check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566950</commentid>
    <comment_count>4</comment_count>
      <attachid>377788</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-08-31 00:04:31 -0700</bug_when>
    <thetext>Created attachment 377788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566974</commentid>
    <comment_count>5</comment_count>
      <attachid>377796</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-08-31 04:05:23 -0700</bug_when>
    <thetext>Created attachment 377796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567773</commentid>
    <comment_count>6</comment_count>
      <attachid>377796</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-04 09:47:01 -0700</bug_when>
    <thetext>Comment on attachment 377796
Patch

Clearing flags on attachment: 377796

Committed r249481: &lt;https://trac.webkit.org/changeset/249481&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567774</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-04 09:47:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567775</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-04 09:48:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/55023788&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377757</attachid>
            <date>2019-08-30 15:45:13 -0700</date>
            <delta_ts>2019-08-31 00:04:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201359-20190831004511.patch</filename>
            <type>text/plain</type>
            <size>30329</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTJjMWUzNzUyZjlkN2Mx
N2U3NDJhMTJlZDRlMGMxMzNiMDZhMWVkNi4uNTg2MjI5OTU2NWM2YzMyYWZhNWNhYjE1MTY4YWQ1
Y2I5OTE5OWMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA4LTMwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBYnN0cmFjdCBvdXQgV2Vi
U29ja2V0Q2hhbm5lbCBtZXNzYWdlIHF1ZXVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDEzNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIEJsb2JMb2FkZXIgaW4gaXRzIG93biBmaWxlLgorICAg
ICAgICBBZGQgTWVzc2FnZVF1ZXVlV2l0aEJsb2JzIGNsYXNzLgorICAgICAgICBUaGlzIGNsYXNz
IGhhbmRsZXMgdGhlIHNlbmRpbmcgb2YgbWVzc2FnZXMsIHNvbWUgb2YgdGhlbSBiZWluZyBibG9i
cy4KKyAgICAgICAgVGhpcyBjbGFzcyBlbnN1cmVzIHRoYXQgbWVzc2FnZXMgd2lsbCBiZSBzZW50
IGluIG9yZGVyLCBldmVuIHRob3VnaAorICAgICAgICBibG9icyBhcmUgcmVzb2x2ZWQgYXN5bmNo
cm9ub3VzbHkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2JMb2FkZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCbG9iTG9hZGVyOjpCbG9iTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JM
b2FkZXI6On5CbG9iTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkxvYWRlcjo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iTG9hZGVyOjpjb21wbGV0ZSk6CisgICAgICAgICogZmlsZWFw
aS9NZXNzYWdlUXVldWVXaXRoQmxvYnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
c3NhZ2VRdWV1ZVdpdGhCbG9iczo6TWVzc2FnZVF1ZXVlV2l0aEJsb2JzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lc3NhZ2VRdWV1ZVdpdGhCbG9iczo6ZW5xdWV1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZXNzYWdlUXVldWVXaXRoQmxvYnM6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3Nh
Z2VRdWV1ZVdpdGhCbG9iczo6cHJvY2Vzc01lc3NhZ2VzKToKKyAgICAgICAgKiBmaWxlYXBpL01l
c3NhZ2VRdWV1ZVdpdGhCbG9icy5oOiBBZGRlZC4KKwogMjAxOS0wOC0zMCAgU2lodWkgTGl1ICA8
c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBbd2syXSBMYXlvdXRUZXN0IGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2ZpcmUtZXJyb3ItZXZlbnQtZXhjZXB0
aW9uLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM0N2YyYTA5NmU0Y2E0MmJj
NTZhNzRlMDA5Yjg2OGQyYjIxNDUxYjIuLmRlODI5Y2I2MzNkMGNiZmI5NjkwNTEyYjNhNjg3M2Uw
NTEyYzIwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMDgtMzAgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIEFic3RyYWN0IG91dCBXZWJTb2Nr
ZXRDaGFubmVsIG1lc3NhZ2UgcXVldWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMTM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1ha2UgdXNlIG9mIG5ld2x5IGFkZGVkIE1lc3NhZ2VRdWV1ZVdpdGhC
bG9icy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlTWVzc2FnZVF1ZXVl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6V2ViU29ja2V0Q2hhbm5lbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6OnNlbmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb2NrZXRDaGFubmVsOjpkaXNjb25uZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oOgorCiAyMDE5LTA4LTMwICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzIGtleWVkIGJ5IHRoZWlyIFdlYlByb2Nlc3MgaWRlbnRpZmllcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAppbmRleCBjNWE5YTJjODM3YWY4YjE3MjQwZTNmZGU2OGY2OGJiYmFhMGFlMWZmLi41OWJiZGQ0
ZWVlNjI4MmM1ZDk4YTYxNjJhNzI2YWU0ODI2NzkxZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTA1
Nyw2ICsxMDU3LDcgQEAgZmlsZWFwaS9GaWxlTGlzdC5jcHAKIGZpbGVhcGkvRmlsZVJlYWRlci5j
cHAKIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKIGZpbGVhcGkvRmlsZVJlYWRlclN5bmMu
Y3BwCitmaWxlYXBpL01lc3NhZ2VRdWV1ZVdpdGhCbG9icy5jcHAKIGZpbGVhcGkvVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5jcHAKIAogaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggY2M2ZWIwMWE3NWU4ZjcyYWQwMzA5MjY4NTBhYTMzMjE5ZDAyYTgwMy4uNWFiODg2NmU2MWUz
MTI3MzkwMzRhZTdiZmQ5ZDMxMjhmZjkxZGNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEyMyw2ICsxMTIzLDggQEAKIAkJ
NDFERTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3Qzc4MjIyREExM0MwMDUz
MkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFERUZDQjYxRTU2QzFCRDAwMEQ5RTVGIC8qIEpTRE9NTWFw
TGlrZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFE
RUZDQjQxRTU2QzFCOTAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlrZS5oICovOyB9OwogCQk0MUUxQjFE
MTBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTFCMUNCMEZGNTk4NjkwMDU3NkIzQiAvKiBB
YnN0cmFjdFdvcmtlci5oICovOyB9OworCQk0MUU5RENFNzIzMTk3NEJGMDBGMzU5NDkgLyogQmxv
YkxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFFOURDRTQyMzE5NzNGRTAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUU5RENFOTIzMTlDQTc2MDBGMzU5
NDkgLyogTWVzc2FnZVF1ZXVlV2l0aEJsb2JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUU5RENFODIzMTlDQTc1MDBGMzU5NDkgLyogTWVzc2FnZVF1
ZXVlV2l0aEJsb2JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNDFGMDYyMTQwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
RjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggKi87
IH07CiAJCTQxRjFEMjFGMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjFEMjFE
MEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUZBQkQyRDFGNERGRTRBMDA2
QTZDOTcgLyogRE9NQ2FjaGVFbmdpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxRkFCRDJCMUY0REZFNDIwMDZBNkM5NyAvKiBET01DYWNoZUVuZ2lu
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
Mzg2LDYgKzczODgsMTAgQEAKIAkJNDFFNTkzRkYyMTQ4NjVBQTAwRDNDQjYxIC8qIFJUQ1J0cEVu
Y29kaW5nUGFyYW1ldGVycy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFNTk0MDAyMTQ4NjVBQTAwRDNDQjYxIC8q
IFJUQ1J0cEhlYWRlckV4dGVuc2lvblBhcmFtZXRlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJUQ1J0cEhlYWRlckV4
dGVuc2lvblBhcmFtZXRlcnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUU1
OTQwMTIxNDg2NUFCMDBEM0NCNjEgLyogUlRDUnRwRmVjUGFyYW1ldGVycy5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUlRD
UnRwRmVjUGFyYW1ldGVycy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRTlE
Q0U0MjMxOTczRkUwMEYzNTk0OSAvKiBCbG9iTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJsb2JMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDFFOURDRTYyMzE5NzQyMzAwRjM1OTQ5IC8qIEJsb2JMaW5lRW5kaW5ncy5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gQmxvYkxpbmVFbmRpbmdzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDFFOURDRTgyMzE5Q0E3NTAwRjM1OTQ5IC8qIE1lc3NhZ2VRdWV1ZVdpdGhCbG9i
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlUXVldWVXaXRoQmxv
YnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFFOURDRUEyMzE5Q0FFODAwRjM1
OTQ5IC8qIE1lc3NhZ2VRdWV1ZVdpdGhCbG9icy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNZXNzYWdlUXVldWVXaXRoQmxvYnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJh
c2VSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MjEz
MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYxRDIxRDBFRjM1QzJBMDBEQTg3
NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtOTcyOSw3ICs5NzM1LDYgQEAKIAkJN0M3N0MzRDIxREVGMTc4RTAwQTUwQkZBIC8qIEpT
QmxvYlByb3BlcnR5QmFnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQmxvYlByb3BlcnR5QmFnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M3
N0MzRDMxREVGMTc4RTAwQTUwQkZBIC8qIEpTQmxvYlByb3BlcnR5QmFnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmxvYlByb3BlcnR5QmFnLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNzdDM0Q2MURFRjg1MEEwMEE1MEJGQSAvKiBCbG9iTGluZUVuZGlu
Z3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYkxpbmVFbmRpbmdzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDNzdDM0Q4MURFRjg1NDAwMEE1MEJGQSAv
KiBCbG9iTGluZUVuZGluZ3MuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEJsb2JMaW5lRW5kaW5ncy5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNzdDM0Q5MURFRjg2RDcwMEE1MEJGQSAvKiBKU0Jsb2JM
aW5lRW5kaW5ncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Js
b2JMaW5lRW5kaW5ncy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNzdDM0RB
MURFRjg2RDcwMEE1MEJGQSAvKiBKU0Jsb2JMaW5lRW5kaW5ncy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0Jsb2JMaW5lRW5kaW5ncy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Qzc5MDNCMDFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE5NzcsNyArMjE5ODIsOCBAQAogCQkJ
CUExNUQ3NTEzMUU2OEY3QjEwMEEzNUZCQyAvKiBCbG9iQ2FsbGJhY2suaCAqLywKIAkJCQlBMTVE
NzUxNDFFNjhGN0IxMDBBMzVGQkMgLyogQmxvYkNhbGxiYWNrLmlkbCAqLywKIAkJCQk3Qzc3QzNE
NjFERUY4NTBBMDBBNTBCRkEgLyogQmxvYkxpbmVFbmRpbmdzLmggKi8sCi0JCQkJN0M3N0MzRDgx
REVGODU0MDAwQTUwQkZBIC8qIEJsb2JMaW5lRW5kaW5ncy5pZGwgKi8sCisJCQkJNDFFOURDRTYy
MzE5NzQyMzAwRjM1OTQ5IC8qIEJsb2JMaW5lRW5kaW5ncy5pZGwgKi8sCisJCQkJNDFFOURDRTQy
MzE5NzNGRTAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCAqLywKIAkJCQk3Qzc3QzNEMDFERUU0NzI0
MDBBNTBCRkEgLyogQmxvYlByb3BlcnR5QmFnLmggKi8sCiAJCQkJN0M3N0MzQ0YxREVFNDcxODAw
QTUwQkZBIC8qIEJsb2JQcm9wZXJ0eUJhZy5pZGwgKi8sCiAJCQkJOTc2RDZDNUYxMjJCOEEzRDAw
MUZEMUY3IC8qIEJsb2JVUkwuY3BwICovLApAQCAtMjIwMDAsNiArMjIwMDYsOCBAQAogCQkJCTJF
REYzNjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAgKi8sCiAJCQkJMkVE
RjM2OUIxMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi8sCiAJCQkJRTFBQjFF
QkQxNEU5RTNBODAwNDQ5RTEzIC8qIEZpbGVSZWFkZXJTeW5jLmlkbCAqLywKKwkJCQk0MUU5RENF
QTIzMTlDQUU4MDBGMzU5NDkgLyogTWVzc2FnZVF1ZXVlV2l0aEJsb2JzLmNwcCAqLywKKwkJCQk0
MUU5RENFODIzMTlDQTc1MDBGMzU5NDkgLyogTWVzc2FnZVF1ZXVlV2l0aEJsb2JzLmggKi8sCiAJ
CQkJOTc2RDZDNzUxMjJCOEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuY3Bw
ICovLAogCQkJCTk3NkQ2Qzc2MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmggKi8sCiAJCQkpOwpAQCAtMjg0OTEsNiArMjg0OTksNyBAQAogCQkJCUUxRDMxQ0REMTkx
OTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTREM0IwMEFGMjE1RDZBNjkwMDc2Qjk4MyAvKiBCbG9iRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdDNzdDM0Q3MURFRjg1MEEwMEE1MEJGQSAvKiBCbG9iTGluZUVuZGluZ3MuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQxRTlEQ0U3MjMxOTc0QkYwMEYzNTk0OSAvKiBCbG9iTG9hZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMUM5NEFGOTE5MTMwM0YwMDBENUE4OTMgLyogQmxvYlBhcnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDNzdDM0QxMURFRTQ3MjQwMEE1MEJGQSAvKiBCbG9iUHJv
cGVydHlCYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFREVGMUY1MTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMzA3OTEsNiArMzA4MDAsNyBAQAog
CQkJCTUxQTc0OEU2MjAwNjAwNEYwMDc1QkE2OCAvKiBNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRl
ckltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRUNDM0Y4MjAwNTg3QkYwMDQ4M0VBRSAvKiBN
ZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGNjQ1RTAx
RkY0NTk0RTAwQjU0REVEIC8qIE1lc3NhZ2VQb3J0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDFFOURDRTkyMzE5Q0E3NjAwRjM1OTQ5IC8qIE1lc3NhZ2VRdWV1ZVdpdGhCbG9icy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBNzQ4RTMyMDA1RDBFODAwNzVCQTY4IC8qIE1lc3NhZ2VX
aXRoTWVzc2FnZVBvcnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0I4OTVBRjE5REM3RUQ5MDA5
Q0FBOTMgLyogTWljcm90YXNrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzJDNEYwQzRFQjMw
NDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0Jsb2JMb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMGIzMmRmMDc4YTQ3ZjVkZDMzMjE5ZWYz
NjZhM2U1ZjQxMGJjOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9CbG9iTG9hZGVyLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RmlsZVJlYWRlckxvYWRlci5oIgorI2luY2x1ZGUgIkZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BcnJh
eUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEJsb2JMb2FkZXIgZmluYWwgOiBwdWJsaWMgRmlsZVJlYWRl
ckxvYWRlckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgQmxvYkxvYWRlcihEb2N1bWVudCosIEJsb2ImLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOworICAgIH5CbG9iTG9hZGVyKCk7CisKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsg
cmV0dXJuICEhbV9sb2FkZXI7IH0KKyAgICBjb25zdCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4m
IHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CisgICAgaW50IGVycm9yQ29kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JDb2RlOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBkaWRT
dGFydExvYWRpbmcoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKCkgZmluYWwg
eyB9CisKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZh
aWwoaW50IGVycm9yQ29kZSkgZmluYWw7CisgICAgdm9pZCBjb21wbGV0ZSgpOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEZpbGVSZWFkZXJMb2FkZXI+IG1fbG9hZGVyOworICAgIFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKKyAgICBpbnQgbV9lcnJvckNvZGUgeyAwIH07CisgICAg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2NvbXBsZXRpb25IYW5kbGVyOworfTsKKworaW5s
aW5lIEJsb2JMb2FkZXI6OkJsb2JMb2FkZXIoV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50LCBC
bG9iJiBibG9iLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CisgICAgOiBtX2xvYWRlcihtYWtlVW5pcXVlPEZpbGVSZWFkZXJMb2FkZXI+KEZpbGVSZWFkZXJM
b2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyLCB0aGlzKSkKKyAgICAsIG1fY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCit7CisgICAgbV9sb2FkZXItPnN0YXJ0KGRv
Y3VtZW50LCBibG9iKTsKK30KKworaW5saW5lIEJsb2JMb2FkZXI6On5CbG9iTG9hZGVyKCkKK3sK
KyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKK30KKworaW5s
aW5lIHZvaWQgQmxvYkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgbV9idWZmZXIg
PSBtX2xvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQoKTsKKyAgICBjb21wbGV0ZSgpOworfQorCitp
bmxpbmUgdm9pZCBCbG9iTG9hZGVyOjpkaWRGYWlsKGludCBlcnJvckNvZGUpCit7CisgICAgbV9l
cnJvckNvZGUgPSBlcnJvckNvZGU7CisgICAgY29tcGxldGUoKTsKK30KKworaW5saW5lIHZvaWQg
QmxvYkxvYWRlcjo6Y29tcGxldGUoKQoreworICAgIG1fbG9hZGVyID0gbnVsbHB0cjsKKyAgICBt
X2NvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTWVzc2FnZVF1ZXVlV2l0aEJsb2JzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTWVzc2FnZVF1ZXVlV2l0aEJsb2JzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mYmJjY2U0ZDk1NTY2ZjdiMzFlNzYxYmYzZmIwYjJhNTkzOTY0YmEwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9NZXNzYWdlUXVldWVXaXRoQmxvYnMuY3Bw
CkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VRdWV1ZVdpdGhCbG9icy5oIgorCisjaW5jbHVkZSAiQmxvYkxvYWRlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK01lc3NhZ2VRdWV1ZVdpdGhCbG9iczo6TWVzc2Fn
ZVF1ZXVlV2l0aEJsb2JzKERvY3VtZW50JiBkb2N1bWVudCwgRnVuY3Rpb248dm9pZChjb25zdCBT
dHJpbmcmKT4mJiB3cml0ZVN0cmluZywgRnVuY3Rpb248dm9pZChjb25zdCBjaGFyKiwgc2l6ZV90
KT4mJiB3cml0ZVJhd0RhdGEsIEZ1bmN0aW9uPGJvb2woaW50KT4mJiBub3RpZnlFcnJvcikKKyAg
ICA6IG1fZG9jdW1lbnQobWFrZVdlYWtQdHIoZG9jdW1lbnQpKQorICAgICwgbV93cml0ZVN0cmlu
ZyhXVEZNb3ZlKHdyaXRlU3RyaW5nKSkKKyAgICAsIG1fd3JpdGVSYXdEYXRhKFdURk1vdmUod3Jp
dGVSYXdEYXRhKSkKKyAgICAsIG1fbm90aWZ5RXJyb3IoV1RGTW92ZShub3RpZnlFcnJvcikpCit7
Cit9CisKK01lc3NhZ2VRdWV1ZVdpdGhCbG9iczo6fk1lc3NhZ2VRdWV1ZVdpdGhCbG9icygpID0g
ZGVmYXVsdDsKKwordm9pZCBNZXNzYWdlUXVldWVXaXRoQmxvYnM6OmVucXVldWUoY29uc3QgU3Ry
aW5nJiBkYXRhKQoreworICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBtX3dy
aXRlU3RyaW5nKGRhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcXVldWUuYXBw
ZW5kKGRhdGEpOworfQorCit2b2lkIE1lc3NhZ2VRdWV1ZVdpdGhCbG9iczo6ZW5xdWV1ZShjb25z
dCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBieXRlTGVuZ3RoKQoreworICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAg
ICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJpbmFyeURhdGEuZGF0YSgp
KTsKKyAgICAgICAgbV93cml0ZVJhd0RhdGEoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkg
KyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK3ZvaWQgTWVzc2FnZVF1ZXVlV2l0aEJs
b2JzOjplbnF1ZXVlKFdlYkNvcmU6OkJsb2ImIGJsb2IpCit7CisgICAgYXV0byBieXRlTGVuZ3Ro
ID0gYmxvYi5zaXplKCk7CisgICAgaWYgKCFieXRlTGVuZ3RoKSB7CisgICAgICAgIGVucXVldWUo
SlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGJ5dGVMZW5ndGgsIDEpLCAwLCAwKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX3F1ZXVlLmFwcGVuZChtYWtlVW5pcXVlUmVmPEJsb2JMb2Fk
ZXI+KG1fZG9jdW1lbnQuZ2V0KCksIGJsb2IsIFt0aGlzXSB7CisgICAgICAgIHByb2Nlc3NNZXNz
YWdlcygpOworICAgIH0pKTsKK30KKwordm9pZCBNZXNzYWdlUXVldWVXaXRoQmxvYnM6OmNsZWFy
KCkKK3sKKyAgICBtX3F1ZXVlLmNsZWFyKCk7Cit9CisKK3ZvaWQgTWVzc2FnZVF1ZXVlV2l0aEJs
b2JzOjpwcm9jZXNzTWVzc2FnZXMoKQoreworICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgYm9vbCBzaG91bGRQcm9jZXNOZXh0TWVzc2FnZSA9IHRydWU7CisgICAgICAg
IHN3aXRjaE9uKG1fcXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
eworICAgICAgICAgICAgbV93cml0ZVN0cmluZyhtZXNzYWdlKTsKKyAgICAgICAgfSwgW3RoaXNd
KFJlZjxTaGFyZWRCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShk
YXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgIH0sIFt0aGlzLCAmc2hvdWxkUHJv
Y2VzTmV4dE1lc3NhZ2VdKFVuaXF1ZVJlZjxCbG9iTG9hZGVyPiYgbG9hZGVyKSB7CisgICAgICAg
ICAgICBpZiAobG9hZGVyLT5pc0xvYWRpbmcoKSB8fCBsb2FkZXItPmVycm9yQ29kZSgpID09IEZp
bGVFcnJvcjo6QUJPUlRfRVJSKSB7CisgICAgICAgICAgICAgICAgc2hvdWxkUHJvY2VzTmV4dE1l
c3NhZ2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChjb25zdCBhdXRvJiByZXN1bHQgPSBsb2FkZXItPnJlc3VsdCgpKSB7
CisgICAgICAgICAgICAgICAgbV93cml0ZVJhd0RhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KHJlc3VsdC0+ZGF0YSgpKSwgcmVzdWx0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChsb2FkZXItPmVycm9y
Q29kZSgpKTsKKyAgICAgICAgICAgIHNob3VsZFByb2Nlc05leHRNZXNzYWdlID0gbV9ub3RpZnlF
cnJvcihsb2FkZXItPmVycm9yQ29kZSgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICghc2hv
dWxkUHJvY2VzTmV4dE1lc3NhZ2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcXVl
dWUucmVtb3ZlRmlyc3QoKTsKKyAgICB9CisKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9NZXNzYWdlUXVldWVXaXRoQmxvYnMu
aCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTWVzc2FnZVF1ZXVlV2l0aEJsb2JzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDhjZmJjZDEzNTA2OTgwZjdhYWQ2OGU5NDE3NGU4NTY3OTE3ZWMzMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTWVzc2FnZVF1ZXVlV2l0aEJsb2JzLmgK
QEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKK25hbWVzcGFjZSBKU0Mgewor
Y2xhc3MgQXJyYXlCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxv
YjsKK2NsYXNzIEJsb2JMb2FkZXI7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgTWVzc2FnZVF1ZXVlV2l0aEJsb2JzIHsKK3B1Ymxp
YzoKKyAgICBNZXNzYWdlUXVldWVXaXRoQmxvYnMoRG9jdW1lbnQmLCBGdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYpPiYmLCBGdW5jdGlvbjx2b2lkKGNvbnN0IGNoYXIqLCBzaXplX3QpPiYmLCBG
dW5jdGlvbjxib29sKGludCk+JiYpOworICAgIH5NZXNzYWdlUXVldWVXaXRoQmxvYnMoKTsKKwor
ICAgIHZvaWQgZW5xdWV1ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGVucXVldWUoY29uc3Qg
SlNDOjpBcnJheUJ1ZmZlciYsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOworICAgIHZvaWQgZW5xdWV1ZShCbG9iJik7CisKKyAgICB2b2lkIGNsZWFyKCk7CisKK3By
aXZhdGU6CisgICAgdm9pZCBwcm9jZXNzTWVzc2FnZXMoKTsKKworICAgIHVzaW5nIE1lc3NhZ2Ug
PSBWYXJpYW50PFN0cmluZywgUmVmPFNoYXJlZEJ1ZmZlcj4sIFVuaXF1ZVJlZjxCbG9iTG9hZGVy
Pj47CisgICAgRGVxdWU8TWVzc2FnZT4gbV9xdWV1ZTsKKworICAgIFdlYWtQdHI8RG9jdW1lbnQ+
IG1fZG9jdW1lbnQ7CisKKyAgICBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiBtX3dyaXRl
U3RyaW5nOworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgY2hhciosIHNpemVfdCk+IG1fd3JpdGVS
YXdEYXRhOworICAgIEZ1bmN0aW9uPGJvb2woaW50KT4gbV9ub3RpZnlFcnJvcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggMmU1N2FmMjQ4M2JkMzZiM2RkODVl
NGVjMThkZGUxMGY0NDM2ZTg2ZS4uYWY0YTUxOWEzM2YxNWQ0ZGU5MDIzYzEzNzcxYTVkN2U4MDhm
NTBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29j
a2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
U29ja2V0Q2hhbm5lbC5jcHAKQEAgLTM0LDE0ICszNCwxMiBAQAogI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Jsb2IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlUmVhZGVyTG9hZGVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0Q2hhbm5lbC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oPgotI2luY2x1ZGUgPHBhbC9T
ZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KIAordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBSZWY8V2ViU29ja2V0
Q2hhbm5lbD4gV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1
bWVudCwgV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENsaWVudCYgY2xpZW50KQpAQCAtNDksOSAr
NDcsMjMgQEAgUmVmPFdlYlNvY2tldENoYW5uZWw+IFdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShX
ZWJDb3JlOjpEb2N1bWVudCYgZG9jdW1lbnQsIFdlYkMKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBXZWJTb2NrZXRDaGFubmVsKGRvY3VtZW50LCBjbGllbnQpKTsKIH0KIAorTWVzc2FnZVF1ZXVl
V2l0aEJsb2JzIFdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZU1lc3NhZ2VRdWV1ZShEb2N1bWVudCYg
ZG9jdW1lbnQsIFdlYlNvY2tldENoYW5uZWwmIGNoYW5uZWwpCit7CisgICAgcmV0dXJuIHsgZG9j
dW1lbnQsIFsmY2hhbm5lbF0oYXV0byYgc3RyaW5nKSB7CisgICAgICAgIGF1dG8gYnl0ZUxlbmd0
aCA9IHN0cmluZy5zaXplSW5CeXRlcygpOworICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1l
c3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZFN0cmluZyB7IHN0cmluZyB9LCBieXRl
TGVuZ3RoKTsKKyAgICB9LCBbJmNoYW5uZWxdKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBieXRl
TGVuZ3RoKSB7CisgICAgICAgIGNoYW5uZWwuc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtT
b2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBieXRlTGVuZ3RoIH0gfSwgYnl0ZUxlbmd0aCk7
CisgICAgfSwgWyZjaGFubmVsXShhdXRvIGVycm9yQ29kZSkgeworICAgICAgICBjaGFubmVsLmZh
aWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXJyb3IgY29kZSA9ICIsIGVycm9y
Q29kZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH07Cit9CisKIFdlYlNvY2tldENo
YW5uZWw6OldlYlNvY2tldENoYW5uZWwoV2ViQ29yZTo6RG9jdW1lbnQmIGRvY3VtZW50LCBXZWJD
b3JlOjpXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQpCiAgICAgOiBtX2RvY3VtZW50KG1h
a2VXZWFrUHRyKGRvY3VtZW50KSkKICAgICAsIG1fY2xpZW50KG1ha2VXZWFrUHRyKGNsaWVudCkp
CisgICAgLCBtX21lc3NhZ2VRdWV1ZShjcmVhdGVNZXNzYWdlUXVldWUoZG9jdW1lbnQsICp0aGlz
KSkKIHsKIH0KIApAQCAtMTMyLDEwMiArMTQ0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZE1lc3NhZ2UoVCYmIG1lc3NhZ2UsIHNpemVfdCBieXRl
CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAotY2xhc3MgQmxvYkxvYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJD
b3JlOjpGaWxlUmVhZGVyTG9hZGVyQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBCbG9iTG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwg
V2ViQ29yZTo6QmxvYiYgYmxvYiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotICAgICAgICA6IG1fbG9hZGVyKG1ha2VVbmlxdWU8V2ViQ29yZTo6RmlsZVJl
YWRlckxvYWRlcj4oV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZmZXIs
IHRoaXMpKQotICAgICAgICAsIG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpCi0gICAgewotICAgICAgICBtX2xvYWRlci0+c3RhcnQoZG9jdW1lbnQsIGJsb2Ip
OwotICAgIH0KLQotICAgIH5CbG9iTG9hZGVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2xvYWRl
cikKLSAgICAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICB9Ci0KLSAgICBib29sIGlz
TG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICEhbV9sb2FkZXI7IH0KLSAgICBjb25zdCBSZWZQdHI8
SlNDOjpBcnJheUJ1ZmZlcj4mIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0g
ICAgT3B0aW9uYWw8aW50PiBlcnJvckNvZGUoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yQ29kZTsg
fQotCi1wcml2YXRlOgotICAgIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkgZmluYWwgeyB9Ci0gICAg
dm9pZCBkaWRSZWNlaXZlRGF0YSgpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIG1fYnVmZmVyID0gbV9sb2FkZXItPmFycmF5QnVm
ZmVyUmVzdWx0KCk7Ci0gICAgICAgIGNvbXBsZXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRG
YWlsKGludCBlcnJvckNvZGUpIGZpbmFsCi0gICAgewotICAgICAgICBtX2Vycm9yQ29kZSA9IGVy
cm9yQ29kZTsKLSAgICAgICAgY29tcGxldGUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBsZXRl
KCkKLSAgICB7Ci0gICAgICAgIG1fbG9hZGVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb21wbGV0
aW9uSGFuZGxlcigpOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWxl
UmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKLSAgICBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4gbV9i
dWZmZXI7Ci0gICAgT3B0aW9uYWw8aW50PiBtX2Vycm9yQ29kZTsKLSAgICBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+IG1fY29tcGxldGlvbkhhbmRsZXI7Ci19OwotCi1jbGFzcyBQZW5kaW5nTWVz
c2FnZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBj
bGFzcyBUeXBlIHsgVGV4dCwgQmluYXJ5LCBCbG9iIH07Ci0KLSAgICBleHBsaWNpdCBQZW5kaW5n
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi0gICAgICAgIDogbV90eXBlKFR5cGU6OlRl
eHQpCi0gICAgICAgICwgbV90ZXh0TWVzc2FnZShtZXNzYWdlKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBQZW5kaW5nTWVzc2FnZShjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotICAgICAgICA6IG1fdHlwZShU
eXBlOjpCaW5hcnkpCi0gICAgICAgICwgbV9iaW5hcnlEYXRhKFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkg
KyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgUGVuZGluZ01l
c3NhZ2UoV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50LCBXZWJDb3JlOjpCbG9iJiBibG9iLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgIDog
bV90eXBlKFR5cGU6OkJsb2IpCi0gICAgICAgICwgbV9ibG9iTG9hZGVyKG1ha2VVbmlxdWU8Qmxv
YkxvYWRlcj4oZG9jdW1lbnQsIGJsb2IsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgflBlbmRpbmdNZXNzYWdlKCkgPSBkZWZhdWx0OwotCi0gICAgVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZXh0
TWVzc2FnZSgpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpUZXh0KTsgcmV0dXJuIG1f
dGV4dE1lc3NhZ2U7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGJpbmFyeURh
dGEoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6QmluYXJ5KTsgcmV0dXJuICptX2Jp
bmFyeURhdGE7IH0KLSAgICBjb25zdCBCbG9iTG9hZGVyJiBibG9iTG9hZGVyKCkgY29uc3QgeyBB
U1NFUlQobV90eXBlID09IFR5cGU6OkJsb2IpOyByZXR1cm4gKm1fYmxvYkxvYWRlcjsgfQotCi1w
cml2YXRlOgotICAgIFR5cGUgbV90eXBlOwotICAgIFN0cmluZyBtX3RleHRNZXNzYWdlOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fYmluYXJ5RGF0YTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8QmxvYkxvYWRlcj4gbV9ibG9iTG9hZGVyOwotfTsKLQogV2ViU29ja2V0Q2hhbm5l
bDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKICAgICBhdXRvIGJ5dGVMZW5ndGggPSBtZXNzYWdlLnNpemVJbkJ5dGVzKCk7CiAgICAg
aWYgKCFpbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgpKQogICAgICAgICByZXR1cm4g
U2VuZEZhaWw7CiAKLSAgICBpZiAobV9wZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgpKQotICAgICAg
ICBzZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcg
eyBtZXNzYWdlIH0sIGJ5dGVMZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgbV9wZW5kaW5nTWVz
c2FnZXMuYXBwZW5kKG1ha2VVbmlxdWU8UGVuZGluZ01lc3NhZ2U+KG1lc3NhZ2UpKTsKLQorICAg
IG1fbWVzc2FnZVF1ZXVlLmVucXVldWUobWVzc2FnZSk7CiAgICAgcmV0dXJuIFNlbmRTdWNjZXNz
OwogfQogCkBAIC0yMzYsNTMgKzE1OSwyMCBAQCBXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0
IFdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgSlNDOjpBcnJheUJ1ZmZlciYgYmluYQogICAg
IGlmICghaW5jcmVhc2VCdWZmZXJlZEFtb3VudChieXRlTGVuZ3RoKSkKICAgICAgICAgcmV0dXJu
IFNlbmRGYWlsOwogCi0gICAgaWYgKG1fcGVuZGluZ01lc3NhZ2VzLmlzRW1wdHkoKSkKLSAgICAg
ICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7
IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlE
YXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0gfSwgYnl0ZUxlbmd0aCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQobWFrZVVuaXF1ZTxQZW5k
aW5nTWVzc2FnZT4oYmluYXJ5RGF0YSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotCisgICAg
bV9tZXNzYWdlUXVldWUuZW5xdWV1ZShiaW5hcnlEYXRhLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3Ro
KTsKICAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKIFdlYlNvY2tldENoYW5uZWw6OlNlbmRS
ZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChXZWJDb3JlOjpCbG9iJiBibG9iKQogewotICAg
IC8vIEF2b2lkIHRoZSBCbG9iIHF1ZXVlIGFuZCBsb2FkaW5nIGZvciBlbXB0eSBibG9icy4KKyAg
ICBhdXRvIGJ5dGVMZW5ndGggPSBibG9iLnNpemUoKTsKICAgICBpZiAoIWJsb2Iuc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gc2VuZChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUoYmxvYi5zaXplKCks
IDEpLCAwLCAwKTsKLQotICAgIG1fcGVuZGluZ01lc3NhZ2VzLmFwcGVuZChtYWtlVW5pcXVlPFBl
bmRpbmdNZXNzYWdlPihtX2RvY3VtZW50LmdldCgpLCBibG9iLCBbdGhpc10gewotICAgICAgICB3
aGlsZSAoIW1fcGVuZGluZ01lc3NhZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYXV0byYg
bWVzc2FnZSA9IG1fcGVuZGluZ01lc3NhZ2VzLmZpcnN0KCk7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAobWVzc2FnZS0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFBlbmRpbmdNZXNzYWdlOjpU
eXBlOjpUZXh0OgotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3Jr
U29ja2V0Q2hhbm5lbDo6U2VuZFN0cmluZyB7IG1lc3NhZ2UtPnRleHRNZXNzYWdlKCkgfSwgbWVz
c2FnZS0+dGV4dE1lc3NhZ2UoKS5zaXplSW5CeXRlcygpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OkJpbmFyeTogewotICAg
ICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGJpbmFyeURhdGEgPSBtZXNzYWdlLT5iaW5hcnlEYXRh
KCk7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRD
aGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSwgYmluYXJ5RGF0YS5zaXplKCkgfSB9
LCBiaW5hcnlEYXRhLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIFBlbmRpbmdNZXNzYWdlOjpUeXBlOjpCbG9iOiB7Ci0gICAg
ICAgICAgICAgICAgYXV0byYgbG9hZGVyID0gbWVzc2FnZS0+YmxvYkxvYWRlcigpOwotICAgICAg
ICAgICAgICAgIGlmIChsb2FkZXIuaXNMb2FkaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgICAgIGlmIChjb25zdCBhdXRvJiByZXN1bHQgPSBsb2FkZXIu
cmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBieXRlTGVuZ3RoID0gcmVzdWx0
LT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmNyZWFzZUJ1ZmZlcmVk
QW1vdW50KGJ5dGVMZW5ndGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2Uo
TWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVy
ZW5jZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3VsdC0+ZGF0YSgpKSwg
Ynl0ZUxlbmd0aCB9IH0sIGJ5dGVMZW5ndGgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
YXV0byBlcnJvckNvZGUgPSBsb2FkZXIuZXJyb3JDb2RlKCkpCi0gICAgICAgICAgICAgICAgICAg
IGZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXJyb3IgY29kZSA9ICIsIGVy
cm9yQ29kZS52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMu
cmVtb3ZlRmlyc3QoKTsKLSAgICAgICAgfQotICAgIH0pKTsKKyAgICAgICAgcmV0dXJuIHNlbmQo
SlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGJ5dGVMZW5ndGgsIDEpLCAwLCAwKTsKKworICAgIGlm
ICghaW5jcmVhc2VCdWZmZXJlZEFtb3VudChieXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIFNl
bmRGYWlsOworCisgICAgbV9tZXNzYWdlUXVldWUuZW5xdWV1ZShibG9iKTsKICAgICByZXR1cm4g
U2VuZFN1Y2Nlc3M7CiB9CiAKQEAgLTMxNiw3ICsyMDYsNyBAQCB2b2lkIFdlYlNvY2tldENoYW5u
ZWw6OmRpc2Nvbm5lY3QoKQogICAgIG1fY2xpZW50ID0gbnVsbHB0cjsKICAgICBtX2RvY3VtZW50
ID0gbnVsbHB0cjsKICAgICBtX3BlbmRpbmdUYXNrcy5jbGVhcigpOwotICAgIG1fcGVuZGluZ01l
c3NhZ2VzLmNsZWFyKCk7CisgICAgbV9tZXNzYWdlUXVldWUuY2xlYXIoKTsKIAogICAgIE1lc3Nh
Z2VTZW5kZXI6OnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpDbG9zZSB7IDAs
IHsgfSB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlNvY2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dl
YlNvY2tldENoYW5uZWwuaAppbmRleCA2Y2M3MTM0NWQ1NjkzYTFjNTNlNzA0MGEwN2RjMjgwZjg0
YmI1NDAwLi5iOGIwNDNmZGFlOTBhODcyMDM5NTVjNDYxNzVlNWQ1MTI2NmJhM2FiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5o
CkBAIC0yNyw5ICsyNyw5IEBACiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNs
dWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9NZXNzYWdlUXVldWVXaXRo
QmxvYnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmg+
CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9JZGVudGlmaWVkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAt
NDEsOCArNDEsNiBAQCBjbGFzcyBEYXRhUmVmZXJlbmNlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotY2xhc3MgUGVuZGluZ01lc3NhZ2U7Ci0KIGNsYXNzIFdlYlNvY2tldENoYW5uZWwgOiBwdWJs
aWMgSVBDOjpNZXNzYWdlU2VuZGVyLCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1Ymxp
YyBXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCwgcHVibGljIFJlZkNvdW50ZWQ8
V2ViU29ja2V0Q2hhbm5lbD4sIHB1YmxpYyBJZGVudGlmaWVkPFdlYlNvY2tldENoYW5uZWw+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYlNvY2tldENoYW5uZWw+IGNyZWF0ZShXZWJDb3Jl
OjpEb2N1bWVudCYsIFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWxDbGllbnQmKTsKQEAgLTU4LDYg
KzU2LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJTb2NrZXRDaGFubmVsKFdlYkNvcmU6
OkRvY3VtZW50JiwgV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENsaWVudCYpOwogCisgICAgc3Rh
dGljIFdlYkNvcmU6Ok1lc3NhZ2VRdWV1ZVdpdGhCbG9icyBjcmVhdGVNZXNzYWdlUXVldWUoV2Vi
Q29yZTo6RG9jdW1lbnQmLCBXZWJTb2NrZXRDaGFubmVsJik7CisKICAgICAvLyBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbAogICAgIENvbm5lY3RTdGF0dXMgY29ubmVjdChjb25zdCBVUkwmLCBj
b25zdCBTdHJpbmcmIHByb3RvY29sKSBmaW5hbDsKICAgICBTdHJpbmcgc3VicHJvdG9jb2woKSBm
aW5hbDsKQEAgLTk4LDcgKzk4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNDbG9zaW5nIHsg
ZmFsc2UgfTsKICAgICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9OwogICAgIERlcXVlPEZ1
bmN0aW9uPHZvaWQoKT4+IG1fcGVuZGluZ1Rhc2tzOwotICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0
cjxQZW5kaW5nTWVzc2FnZT4+IG1fcGVuZGluZ01lc3NhZ2VzOworICAgIFdlYkNvcmU6Ok1lc3Nh
Z2VRdWV1ZVdpdGhCbG9icyBtX21lc3NhZ2VRdWV1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377788</attachid>
            <date>2019-08-31 00:04:31 -0700</date>
            <delta_ts>2019-08-31 04:05:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201359-20190831090429.patch</filename>
            <type>text/plain</type>
            <size>30874</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTJjMWUzNzUyZjlkN2Mx
N2U3NDJhMTJlZDRlMGMxMzNiMDZhMWVkNi4uM2I4YjcyZTZjOTA5MDUxOGQyMjAzYzNlYWUxMTcw
NGY0MjEyNTNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTA4LTMwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBYnN0cmFjdCBvdXQgV2Vi
U29ja2V0Q2hhbm5lbCBtZXNzYWdlIHF1ZXVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDEzNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIEJsb2JMb2FkZXIgaW4gaXRzIG93biBmaWxlLgorICAg
ICAgICBBZGQgTWVzc2FnZVF1ZXVlV2l0aEJsb2JzIGNsYXNzLgorICAgICAgICBUaGlzIGNsYXNz
IGhhbmRsZXMgdGhlIHNlbmRpbmcgb2YgbWVzc2FnZXMsIHNvbWUgb2YgdGhlbSBiZWluZyBibG9i
cy4KKyAgICAgICAgVGhpcyBjbGFzcyBlbnN1cmVzIHRoYXQgbWVzc2FnZXMgd2lsbCBiZSBzZW50
IGluIG9yZGVyLCBldmVuIHRob3VnaAorICAgICAgICBibG9icyBhcmUgcmVzb2x2ZWQgYXN5bmNo
cm9ub3VzbHkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAg
ICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGZpbGVhcGkvQmxvYkxv
YWRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JMb2FkZXI6OkJsb2JMb2FkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYkxvYWRlcjo6fkJsb2JMb2FkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpCbG9iTG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JMb2FkZXI6OmNv
bXBsZXRlKToKKyAgICAgICAgKiBmaWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTZW5kUXVldWU6Ok5ldHdvcmtTZW5kUXVldWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1NlbmRRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOZXR3b3JrU2VuZFF1ZXVlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3
b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVzc2FnZXMpOgorICAgICAgICAqIGZpbGVhcGkvTmV0d29y
a1NlbmRRdWV1ZS5oOiBBZGRlZC4KKwogMjAxOS0wOC0zMCAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KIAogICAgICAgICBbd2syXSBMYXlvdXRUZXN0IGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2ZpcmUtZXJyb3ItZXZlbnQtZXhjZXB0aW9uLmh0bWwg
aXMgYSBmbGFreSBmYWlsdXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM0N2YyYTA5NmU0Y2E0MmJjNTZhNzRlMDA5
Yjg2OGQyYjIxNDUxYjIuLmNlZGM4ZjgwZDdlZjM3N2MyMjVlNDZmODlkYWNiOWI2YTQyYTE5OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMDgtMzAgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIEFic3RyYWN0IG91dCBXZWJTb2NrZXRDaGFubmVs
IG1lc3NhZ2UgcXVldWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMTM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1ha2UgdXNlIG9mIG5ld2x5IGFkZGVkIE5ldHdvcmtTZW5kUXVldWUuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6OmNyZWF0ZU1lc3NhZ2VRdWV1ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6OldlYlNvY2tldENoYW5uZWwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb2NrZXRDaGFubmVsOjpzZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0
Q2hhbm5lbDo6ZGlzY29ubmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNv
Y2tldENoYW5uZWwuaDoKKwogMjAxOS0wOC0zMCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTWFrZSBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBrZXll
ZCBieSB0aGVpciBXZWJQcm9jZXNzIGlkZW50aWZpZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGJl
ODU2NGVhODcyYzIxYzIxM2JhOWIxZDJhYzJmYmQwYTRiYTQyYzAuLjk4NjA0Y2ZjZGJlYzRhNTEx
YjI0ZDJmOGFjZGRhMTk4YmM3Y2FjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtNTE5LDYgKzUx
OSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBmaWxlYXBp
L0ZpbGVMaXN0LmgKICAgICBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuaAogICAgIGZpbGVhcGkv
RmlsZVJlYWRlckxvYWRlckNsaWVudC5oCisgICAgZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgK
IAogICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDbGllbnQuaAogICAgIGhpc3RvcnkvQmFja0Zvcndh
cmRDb250cm9sbGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYzVhOWEyYzgzN2FmOGIxNzI0MGUzZmRl
NjhmNjhiYmJhYTBhZTFmZi4uZmQzMGZlOWFiMDRiODZiMTk3NDNkMzI2MWQ5NzNjMzc5YmQ1MGZk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTEwNTcsNiArMTA1Nyw3IEBAIGZpbGVhcGkvRmlsZUxpc3Qu
Y3BwCiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwCiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
CiBmaWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAorZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNw
cAogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAogCiBoaXN0b3J5L0JhY2tGb3J3
YXJkQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBjYzZlYjAxYTc1ZThmNzJhZDAzMDkyNjg1MGFhMzMyMTlk
MDJhODAzLi44N2MwZTY1YzQ4OWEwOGRkMWViMzFhOGI0ZTllOWRiZTAyMTJhMmIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MTIzLDYgKzExMjMsOCBAQAogCQk0MURFN0M3RDIyMkRBMTQ4MDA1MzJCNjUgLyogU3RvcmFnZVF1
b3RhVXNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MURFRkNCNjFFNTZDMUJE
MDAwRDlFNUYgLyogSlNET01NYXBMaWtlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MURFRkNCNDFFNTZDMUI5MDAwRDlFNUYgLyogSlNET01NYXBMaWtl
LmggKi87IH07CiAJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFMUIxQ0Iw
RkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggKi87IH07CisJCTQxRTlEQ0U3MjMx
OTc0QkYwMEYzNTk0OSAvKiBCbG9iTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUU5RENFNDIzMTk3M0ZFMDBGMzU5NDkgLyogQmxvYkxvYWRl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQx
RTlEQ0U5MjMxOUNBNzYwMEYzNTk0OSAvKiBOZXR3b3JrU2VuZFF1ZXVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUU5RENFODIzMTlDQTc1MDBGMzU5
NDkgLyogTmV0d29ya1NlbmRRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQxRjA2MjE0MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZS5oICovOyB9OwogCQk0MUYxRDIxRjBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUYxRDIxRDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGQUJEMkQx
RjRERkU0QTAwNkE2Qzk3IC8qIERPTUNhY2hlRW5naW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUZBQkQyQjFGNERGRTQyMDA2QTZDOTcgLyogRE9N
Q2FjaGVFbmdpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNzM4Niw2ICs3Mzg4LDEwIEBACiAJCTQxRTU5M0ZGMjE0ODY1QUEwMEQzQ0I2MSAv
KiBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJUQ1J0cEVuY29kaW5nUGFyYW1l
dGVycy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTU5NDAwMjE0ODY1QUEw
MEQzQ0I2MSAvKiBSVENSdHBIZWFkZXJFeHRlbnNpb25QYXJhbWV0ZXJzLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSVENS
dHBIZWFkZXJFeHRlbnNpb25QYXJhbWV0ZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDFFNTk0MDEyMTQ4NjVBQjAwRDNDQjYxIC8qIFJUQ1J0cEZlY1BhcmFtZXRlcnMuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFJUQ1J0cEZlY1BhcmFtZXRlcnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MUU5RENFNDIzMTk3M0ZFMDBGMzU5NDkgLyogQmxvYkxvYWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQxRTlEQ0U2MjMxOTc0MjMwMEYzNTk0OSAvKiBCbG9iTGluZUVuZGluZ3MuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEJsb2JMaW5lRW5kaW5ncy5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQxRTlEQ0U4MjMxOUNBNzUwMEYzNTk0OSAvKiBOZXR3b3JrU2Vu
ZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtTZW5kUXVl
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFFOURDRUEyMzE5Q0FFODAwRjM1
OTQ5IC8qIE5ldHdvcmtTZW5kUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0d29ya1NlbmRRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxRjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGMDYyMTMwRjVGMTkyNjAw
QTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3Jp
cHRDYWNoZWRGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
aXB0Q2FjaGVkRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzI5
LDcgKzk3MzUsNiBAQAogCQk3Qzc3QzNEMjFERUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVy
dHlCYWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNCbG9iUHJv
cGVydHlCYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzc3QzNEMzFERUYx
NzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVydHlCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNCbG9iUHJvcGVydHlCYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M3N0MzRDYxREVGODUwQTAwQTUwQkZBIC8qIEJsb2JMaW5lRW5kaW5ncy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iTGluZUVuZGluZ3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M3N0MzRDgxREVGODU0MDAwQTUwQkZBIC8qIEJsb2JMaW5l
RW5kaW5ncy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gQmxvYkxpbmVFbmRpbmdzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0M3N0MzRDkxREVGODZENzAwQTUwQkZBIC8qIEpTQmxvYkxpbmVFbmRpbmdz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQmxvYkxpbmVFbmRp
bmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M3N0MzREExREVGODZENzAw
QTUwQkZBIC8qIEpTQmxvYkxpbmVFbmRpbmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQmxvYkxpbmVFbmRpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDNzkwM0IwMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTk3Nyw3ICsyMTk4Miw4IEBACiAJCQkJQTE1RDc1MTMx
RTY4RjdCMTAwQTM1RkJDIC8qIEJsb2JDYWxsYmFjay5oICovLAogCQkJCUExNUQ3NTE0MUU2OEY3
QjEwMEEzNUZCQyAvKiBCbG9iQ2FsbGJhY2suaWRsICovLAogCQkJCTdDNzdDM0Q2MURFRjg1MEEw
MEE1MEJGQSAvKiBCbG9iTGluZUVuZGluZ3MuaCAqLywKLQkJCQk3Qzc3QzNEODFERUY4NTQwMDBB
NTBCRkEgLyogQmxvYkxpbmVFbmRpbmdzLmlkbCAqLywKKwkJCQk0MUU5RENFNjIzMTk3NDIzMDBG
MzU5NDkgLyogQmxvYkxpbmVFbmRpbmdzLmlkbCAqLywKKwkJCQk0MUU5RENFNDIzMTk3M0ZFMDBG
MzU5NDkgLyogQmxvYkxvYWRlci5oICovLAogCQkJCTdDNzdDM0QwMURFRTQ3MjQwMEE1MEJGQSAv
KiBCbG9iUHJvcGVydHlCYWcuaCAqLywKIAkJCQk3Qzc3QzNDRjFERUU0NzE4MDBBNTBCRkEgLyog
QmxvYlByb3BlcnR5QmFnLmlkbCAqLywKIAkJCQk5NzZENkM1RjEyMkI4QTNEMDAxRkQxRjcgLyog
QmxvYlVSTC5jcHAgKi8sCkBAIC0yMjAwMCw2ICsyMjAwNiw4IEBACiAJCQkJMkVERjM2OUExMjJD
OTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmNwcCAqLywKIAkJCQkyRURGMzY5QjEyMkM5
NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMuaCAqLywKIAkJCQlFMUFCMUVCRDE0RTlFM0E4
MDA0NDlFMTMgLyogRmlsZVJlYWRlclN5bmMuaWRsICovLAorCQkJCTQxRTlEQ0VBMjMxOUNBRTgw
MEYzNTk0OSAvKiBOZXR3b3JrU2VuZFF1ZXVlLmNwcCAqLywKKwkJCQk0MUU5RENFODIzMTlDQTc1
MDBGMzU5NDkgLyogTmV0d29ya1NlbmRRdWV1ZS5oICovLAogCQkJCTk3NkQ2Qzc1MTIyQjhBM0Qw
MDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk5NzZENkM3NjEy
MkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oICovLAogCQkJKTsKQEAg
LTI4NDkxLDYgKzI4NDk5LDcgQEAKIAkJCQlFMUQzMUNERDE5MTk2MDIwMDAxMDA1QTMgLyogQmxv
YkRhdGFGaWxlUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RDNCMDBBRjIxNUQ2QTY5
MDA3NkI5ODMgLyogQmxvYkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qzc3QzNENzFERUY4
NTBBMDBBNTBCRkEgLyogQmxvYkxpbmVFbmRpbmdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUU5
RENFNzIzMTk3NEJGMDBGMzU5NDkgLyogQmxvYkxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFDOTRBRjkxOTEzMDNGMDAwRDVBODkzIC8qIEJsb2JQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3Qzc3QzNEMTFERUU0NzI0MDBBNTBCRkEgLyogQmxvYlByb3BlcnR5QmFnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRURFRjFGNTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5LmggaW4g
SGVhZGVycyAqLywKQEAgLTMwODUwLDYgKzMwODU5LDcgQEAKIAkJCQk0MTZENzVBMjIwQzY1MUE1
MDBEMDJEMkMgLyogTmV0d29ya0xvYWRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OEE4MUJGODUxMURDRkQ5MDAwREEyQjk4IC8qIE5ldHdvcmtMb2FkTWV0cmljcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTlDMjdGMDcxMzhEMjhDRjAwNzlCN0UyIC8qIE5ldHdvcmtSZXNvdXJjZXNE
YXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUU5RENFOTIzMTlDQTc2MDBGMzU5NDkgLyogTmV0
d29ya1NlbmRRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3RkE2MTkwRERBM0IzQTAwMjhG
OEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTNFRjM0
NDE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyNjkzOTcyNDFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkxvYWRlci5oIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iTG9hZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDBiMzJkZjA3OGE0N2Y1
ZGQzMzIxOWVmMzY2YTNlNWY0MTBiYzkyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQmxvYkxvYWRlci5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkZpbGVSZWFkZXJMb2FkZXIuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVy
Q2xpZW50LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iTG9hZGVyIGZpbmFsIDogcHVibGlj
IEZpbGVSZWFkZXJMb2FkZXJDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIEJsb2JMb2FkZXIoRG9jdW1lbnQqLCBCbG9iJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKKyAgICB+QmxvYkxvYWRlcigpOworCisgICAgYm9vbCBpc0xvYWRpbmco
KSBjb25zdCB7IHJldHVybiAhIW1fbG9hZGVyOyB9CisgICAgY29uc3QgUmVmUHRyPEpTQzo6QXJy
YXlCdWZmZXI+JiByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIGludCBl
cnJvckNvZGUoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yQ29kZTsgfQorCitwcml2YXRlOgorICAg
IHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0
YSgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgZmluYWw7CisgICAg
dm9pZCBkaWRGYWlsKGludCBlcnJvckNvZGUpIGZpbmFsOworICAgIHZvaWQgY29tcGxldGUoKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4gbV9idWZmZXI7CisgICAgaW50IG1fZXJyb3JDb2RlIHsg
MCB9OworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsK
K307CisKK2lubGluZSBCbG9iTG9hZGVyOjpCbG9iTG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50KiBk
b2N1bWVudCwgQmxvYiYgYmxvYiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQorICAgIDogbV9sb2FkZXIobWFrZVVuaXF1ZTxGaWxlUmVhZGVyTG9hZGVyPihG
aWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNBcnJheUJ1ZmZlciwgdGhpcykpCisgICAgLCBtX2NvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQoreworICAgIG1fbG9hZGVy
LT5zdGFydChkb2N1bWVudCwgYmxvYik7Cit9CisKK2lubGluZSBCbG9iTG9hZGVyOjp+QmxvYkxv
YWRlcigpCit7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7
Cit9CisKK2lubGluZSB2b2lkIEJsb2JMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAg
IG1fYnVmZmVyID0gbV9sb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCk7CisgICAgY29tcGxldGUo
KTsKK30KKworaW5saW5lIHZvaWQgQmxvYkxvYWRlcjo6ZGlkRmFpbChpbnQgZXJyb3JDb2RlKQor
eworICAgIG1fZXJyb3JDb2RlID0gZXJyb3JDb2RlOworICAgIGNvbXBsZXRlKCk7Cit9CisKK2lu
bGluZSB2b2lkIEJsb2JMb2FkZXI6OmNvbXBsZXRlKCkKK3sKKyAgICBtX2xvYWRlciA9IG51bGxw
dHI7CisgICAgbV9jb21wbGV0aW9uSGFuZGxlcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43OWJlYzU4NzAwNzA3ZTg5OWJhMmYyZTE2MTAwZDk5ZTYyMTI5MmY1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcApAQCAt
MCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrU2VuZFF1ZXVlLmgiCisKKyNpbmNsdWRlICJCbG9iTG9hZGVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworTmV0d29ya1NlbmRRdWV1ZTo6TmV0d29ya1NlbmRRdWV1ZShEb2N1
bWVudCYgZG9jdW1lbnQsIFdyaXRlU3RyaW5nJiYgd3JpdGVTdHJpbmcsIFdyaXRlUmF3RGF0YSYm
IHdyaXRlUmF3RGF0YSwgUHJvY2Vzc0Vycm9yJiYgcHJvY2Vzc0Vycm9yKQorICAgIDogbV9kb2N1
bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCisgICAgLCBtX3dyaXRlU3RyaW5nKFdURk1vdmUo
d3JpdGVTdHJpbmcpKQorICAgICwgbV93cml0ZVJhd0RhdGEoV1RGTW92ZSh3cml0ZVJhd0RhdGEp
KQorICAgICwgbV9wcm9jZXNzRXJyb3IoV1RGTW92ZShwcm9jZXNzRXJyb3IpKQoreworfQorCitO
ZXR3b3JrU2VuZFF1ZXVlOjp+TmV0d29ya1NlbmRRdWV1ZSgpID0gZGVmYXVsdDsKKwordm9pZCBO
ZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAo
bV9xdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV93cml0ZVN0cmluZyhkYXRhKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX3F1ZXVlLmFwcGVuZChkYXRhKTsKK30KKwordm9pZCBO
ZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURh
dGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgaWYg
KG1fcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oYmluYXJ5RGF0YS5kYXRhKCkpOworICAgICAgICBtX3dyaXRlUmF3RGF0YShk
YXRhICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsK
K30KKwordm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVlKFdlYkNvcmU6OkJsb2ImIGJsb2Ip
Cit7CisgICAgYXV0byBieXRlTGVuZ3RoID0gYmxvYi5zaXplKCk7CisgICAgaWYgKCFieXRlTGVu
Z3RoKSB7CisgICAgICAgIGVucXVldWUoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGJ5dGVMZW5n
dGgsIDEpLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3F1ZXVlLmFwcGVu
ZChtYWtlVW5pcXVlUmVmPEJsb2JMb2FkZXI+KG1fZG9jdW1lbnQuZ2V0KCksIGJsb2IsIFt0aGlz
XSB7CisgICAgICAgIHByb2Nlc3NNZXNzYWdlcygpOworICAgIH0pKTsKK30KKwordm9pZCBOZXR3
b3JrU2VuZFF1ZXVlOjpjbGVhcigpCit7CisgICAgbV9xdWV1ZS5jbGVhcigpOworfQorCit2b2lk
IE5ldHdvcmtTZW5kUXVldWU6OnByb2Nlc3NNZXNzYWdlcygpCit7CisgICAgd2hpbGUgKCFtX3F1
ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBib29sIHNob3VsZFN0b3BQcm9jZXNzaW5nID0gZmFs
c2U7CisgICAgICAgIHN3aXRjaE9uKG1fcXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkgeworICAgICAgICAgICAgbV93cml0ZVN0cmluZyhtZXNzYWdlKTsKKyAgICAg
ICAgfSwgW3RoaXNdKFJlZjxTaGFyZWRCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICBtX3dy
aXRlUmF3RGF0YShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgIH0sIFt0aGlz
LCAmc2hvdWxkU3RvcFByb2Nlc3NpbmddKFVuaXF1ZVJlZjxCbG9iTG9hZGVyPiYgbG9hZGVyKSB7
CisgICAgICAgICAgICBpZiAobG9hZGVyLT5pc0xvYWRpbmcoKSB8fCBsb2FkZXItPmVycm9yQ29k
ZSgpID09IEZpbGVFcnJvcjo6QUJPUlRfRVJSKSB7CisgICAgICAgICAgICAgICAgc2hvdWxkU3Rv
cFByb2Nlc3NpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci0+cmVzdWx0
KCkpIHsKKyAgICAgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4ocmVzdWx0LT5kYXRhKCkpLCByZXN1bHQtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGxvYWRlci0+
ZXJyb3JDb2RlKCkpOworICAgICAgICAgICAgc2hvdWxkU3RvcFByb2Nlc3NpbmcgPSBtX3Byb2Nl
c3NFcnJvcihsb2FkZXItPmVycm9yQ29kZSgpKSA9PSBDb250aW51ZTo6Tm87CisgICAgICAgIH0p
OworICAgICAgICBpZiAoc2hvdWxkU3RvcFByb2Nlc3NpbmcpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsKKyAgICB9CisKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3Jr
U2VuZFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44ZDQwODljYjJmYjkyYTM3MGI0MWQ1ZTc0NzAwNWViNTkwMjcxYTUwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgK
QEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKK25hbWVzcGFjZSBKU0Mgewor
Y2xhc3MgQXJyYXlCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxv
YjsKK2NsYXNzIEJsb2JMb2FkZXI7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgTmV0d29ya1NlbmRRdWV1ZSB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgV3JpdGVTdHJpbmcgPSBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPjsKKyAg
ICB1c2luZyBXcml0ZVJhd0RhdGEgPSBGdW5jdGlvbjx2b2lkKGNvbnN0IGNoYXIqLCBzaXplX3Qp
PjsKKyAgICBlbnVtIGNsYXNzIENvbnRpbnVlIHsgTm8sIFllcyB9OworICAgIHVzaW5nIFByb2Nl
c3NFcnJvciA9IEZ1bmN0aW9uPENvbnRpbnVlKGludCk+OworICAgIE5ldHdvcmtTZW5kUXVldWUo
RG9jdW1lbnQmLCBXcml0ZVN0cmluZyYmLCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vzc0Vycm9yJiYp
OworICAgIH5OZXR3b3JrU2VuZFF1ZXVlKCk7CisKKyAgICB2b2lkIGVucXVldWUoY29uc3QgU3Ry
aW5nJik7CisgICAgdm9pZCBlbnF1ZXVlKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICB2b2lkIGVucXVldWUoQmxv
YiYpOworCisgICAgdm9pZCBjbGVhcigpOworCitwcml2YXRlOgorICAgIHZvaWQgcHJvY2Vzc01l
c3NhZ2VzKCk7CisKKyAgICB1c2luZyBNZXNzYWdlID0gVmFyaWFudDxTdHJpbmcsIFJlZjxTaGFy
ZWRCdWZmZXI+LCBVbmlxdWVSZWY8QmxvYkxvYWRlcj4+OworICAgIERlcXVlPE1lc3NhZ2U+IG1f
cXVldWU7CisKKyAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworCisgICAgV3JpdGVT
dHJpbmcgbV93cml0ZVN0cmluZzsKKyAgICBXcml0ZVJhd0RhdGEgbV93cml0ZVJhd0RhdGE7Cisg
ICAgUHJvY2Vzc0Vycm9yIG1fcHJvY2Vzc0Vycm9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29j
a2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2Nr
ZXRDaGFubmVsLmNwcAppbmRleCAyZTU3YWYyNDgzYmQzNmIzZGQ4NWU0ZWMxOGRkZTEwZjQ0MzZl
ODZlLi4zZTc5ZjlhN2UxNGU1YTE4MjJmNmI0ZTZkNWVjMmJkN2RiMzYyMzZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNw
cApAQCAtMzQsMjQgKzM0LDM2IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvQmxvYi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVSZWFkZXJMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVSZWFk
ZXJMb2FkZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRDaGFubmVsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9X
ZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVJlZjxXZWJTb2NrZXRDaGFubmVsPiBXZWJTb2Nr
ZXRDaGFubmVsOjpjcmVhdGUoV2ViQ29yZTo6RG9jdW1lbnQmIGRvY3VtZW50LCBXZWJDb3JlOjpX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQpCitSZWY8V2ViU29ja2V0Q2hhbm5lbD4gV2Vi
U29ja2V0Q2hhbm5lbDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgV2ViU29ja2V0Q2hhbm5l
bENsaWVudCYgY2xpZW50KQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlNvY2tldENo
YW5uZWwoZG9jdW1lbnQsIGNsaWVudCkpOwogfQogCi1XZWJTb2NrZXRDaGFubmVsOjpXZWJTb2Nr
ZXRDaGFubmVsKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1bWVudCwgV2ViQ29yZTo6V2ViU29ja2V0
Q2hhbm5lbENsaWVudCYgY2xpZW50KQorTmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFubmVs
OjpjcmVhdGVNZXNzYWdlUXVldWUoRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFubmVs
JiBjaGFubmVsKQoreworICAgIHJldHVybiB7IGRvY3VtZW50LCBbJmNoYW5uZWxdKGF1dG8mIHN0
cmluZykgeworICAgICAgICBhdXRvIGJ5dGVMZW5ndGggPSBzdHJpbmcuc2l6ZUluQnl0ZXMoKTsK
KyAgICAgICAgY2hhbm5lbC5zZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5u
ZWw6OlNlbmRTdHJpbmcgeyBzdHJpbmcgfSwgYnl0ZUxlbmd0aCk7CisgICAgfSwgWyZjaGFubmVs
XShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgYnl0ZUxlbmd0aCkgeworICAgICAgICBjaGFubmVs
LnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJ
UEM6OkRhdGFSZWZlcmVuY2UgeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRh
KSwgYnl0ZUxlbmd0aCB9IH0sIGJ5dGVMZW5ndGgpOworICAgIH0sIFsmY2hhbm5lbF0oYXV0byBl
cnJvckNvZGUpIHsKKyAgICAgICAgY2hhbm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBs
b2FkIEJsb2I6IGVycm9yIGNvZGUgPSAiLCBlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuIE5l
dHdvcmtTZW5kUXVldWU6OkNvbnRpbnVlOjpObzsKKyAgICB9IH07Cit9CisKK1dlYlNvY2tldENo
YW5uZWw6OldlYlNvY2tldENoYW5uZWwoRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFu
bmVsQ2xpZW50JiBjbGllbnQpCiAgICAgOiBtX2RvY3VtZW50KG1ha2VXZWFrUHRyKGRvY3VtZW50
KSkKICAgICAsIG1fY2xpZW50KG1ha2VXZWFrUHRyKGNsaWVudCkpCisgICAgLCBtX21lc3NhZ2VR
dWV1ZShjcmVhdGVNZXNzYWdlUXVldWUoZG9jdW1lbnQsICp0aGlzKSkKIHsKIH0KIApAQCAtMTMy
LDEwMiArMTQ0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgV2ViU29ja2V0Q2hhbm5l
bDo6c2VuZE1lc3NhZ2UoVCYmIG1lc3NhZ2UsIHNpemVfdCBieXRlCiAgICAgc2VuZFdpdGhBc3lu
Y1JlcGx5KFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAotY2xhc3MgQmxvYkxvYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpGaWxlUmVhZGVyTG9h
ZGVyQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBC
bG9iTG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwgV2ViQ29yZTo6QmxvYiYgYmxv
YiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotICAgICAg
ICA6IG1fbG9hZGVyKG1ha2VVbmlxdWU8V2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcj4oV2ViQ29y
ZTo6RmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZmZXIsIHRoaXMpKQotICAgICAgICAs
IG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCi0gICAgewot
ICAgICAgICBtX2xvYWRlci0+c3RhcnQoZG9jdW1lbnQsIGJsb2IpOwotICAgIH0KLQotICAgIH5C
bG9iTG9hZGVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIG1f
bG9hZGVyLT5jYW5jZWwoKTsKLSAgICB9Ci0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsg
cmV0dXJuICEhbV9sb2FkZXI7IH0KLSAgICBjb25zdCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4m
IHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0gICAgT3B0aW9uYWw8aW50PiBl
cnJvckNvZGUoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yQ29kZTsgfQotCi1wcml2YXRlOgotICAg
IHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0
YSgpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgZmluYWwKLSAgICB7
Ci0gICAgICAgIG1fYnVmZmVyID0gbV9sb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCk7Ci0gICAg
ICAgIGNvbXBsZXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRGYWlsKGludCBlcnJvckNvZGUp
IGZpbmFsCi0gICAgewotICAgICAgICBtX2Vycm9yQ29kZSA9IGVycm9yQ29kZTsKLSAgICAgICAg
Y29tcGxldGUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBsZXRlKCkKLSAgICB7Ci0gICAgICAg
IG1fbG9hZGVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyPiBtX2xv
YWRlcjsKLSAgICBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgT3B0aW9u
YWw8aW50PiBtX2Vycm9yQ29kZTsKLSAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1fY29t
cGxldGlvbkhhbmRsZXI7Ci19OwotCi1jbGFzcyBQZW5kaW5nTWVzc2FnZSB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsgVGV4dCwg
QmluYXJ5LCBCbG9iIH07Ci0KLSAgICBleHBsaWNpdCBQZW5kaW5nTWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi0gICAgICAgIDogbV90eXBlKFR5cGU6OlRleHQpCi0gICAgICAgICwgbV90
ZXh0TWVzc2FnZShtZXNzYWdlKQotICAgIHsKLSAgICB9Ci0KLSAgICBQZW5kaW5nTWVzc2FnZShj
b25zdCBKU0M6OkFycmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQotICAgICAgICA6IG1fdHlwZShUeXBlOjpCaW5hcnkpCi0gICAg
ICAgICwgbV9iaW5hcnlEYXRhKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRl
TGVuZ3RoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgUGVuZGluZ01lc3NhZ2UoV2ViQ29yZTo6RG9j
dW1lbnQqIGRvY3VtZW50LCBXZWJDb3JlOjpCbG9iJiBibG9iLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgIDogbV90eXBlKFR5cGU6OkJsb2Ip
Ci0gICAgICAgICwgbV9ibG9iTG9hZGVyKG1ha2VVbmlxdWU8QmxvYkxvYWRlcj4oZG9jdW1lbnQs
IGJsb2IsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSkKLSAgICB7Ci0gICAgfQotCi0gICAg
flBlbmRpbmdNZXNzYWdlKCkgPSBkZWZhdWx0OwotCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZXh0TWVzc2FnZSgpIGNvbnN0IHsg
QVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpUZXh0KTsgcmV0dXJuIG1fdGV4dE1lc3NhZ2U7IH0KLSAg
ICBjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGJpbmFyeURhdGEoKSBjb25zdCB7IEFTU0VS
VChtX3R5cGUgPT0gVHlwZTo6QmluYXJ5KTsgcmV0dXJuICptX2JpbmFyeURhdGE7IH0KLSAgICBj
b25zdCBCbG9iTG9hZGVyJiBibG9iTG9hZGVyKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5
cGU6OkJsb2IpOyByZXR1cm4gKm1fYmxvYkxvYWRlcjsgfQotCi1wcml2YXRlOgotICAgIFR5cGUg
bV90eXBlOwotICAgIFN0cmluZyBtX3RleHRNZXNzYWdlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IG1fYmluYXJ5RGF0YTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkxvYWRl
cj4gbV9ibG9iTG9hZGVyOwotfTsKLQogV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJT
b2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBhdXRvIGJ5
dGVMZW5ndGggPSBtZXNzYWdlLnNpemVJbkJ5dGVzKCk7CiAgICAgaWYgKCFpbmNyZWFzZUJ1ZmZl
cmVkQW1vdW50KGJ5dGVMZW5ndGgpKQogICAgICAgICByZXR1cm4gU2VuZEZhaWw7CiAKLSAgICBp
ZiAobV9wZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgpKQotICAgICAgICBzZW5kTWVzc2FnZShNZXNz
YWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBtZXNzYWdlIH0sIGJ5dGVM
ZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKG1ha2VV
bmlxdWU8UGVuZGluZ01lc3NhZ2U+KG1lc3NhZ2UpKTsKLQorICAgIG1fbWVzc2FnZVF1ZXVlLmVu
cXVldWUobWVzc2FnZSk7CiAgICAgcmV0dXJuIFNlbmRTdWNjZXNzOwogfQogCkBAIC0yMzYsNTMg
KzE1OSwyMCBAQCBXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFdlYlNvY2tldENoYW5uZWw6
OnNlbmQoY29uc3QgSlNDOjpBcnJheUJ1ZmZlciYgYmluYQogICAgIGlmICghaW5jcmVhc2VCdWZm
ZXJlZEFtb3VudChieXRlTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIFNlbmRGYWlsOwogCi0gICAg
aWYgKG1fcGVuZGluZ01lc3NhZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAgc2VuZE1lc3NhZ2UoTWVz
c2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5j
ZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRl
T2Zmc2V0LCBieXRlTGVuZ3RoIH0gfSwgYnl0ZUxlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICBt
X3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQobWFrZVVuaXF1ZTxQZW5kaW5nTWVzc2FnZT4oYmluYXJ5
RGF0YSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotCisgICAgbV9tZXNzYWdlUXVldWUuZW5x
dWV1ZShiaW5hcnlEYXRhLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKICAgICByZXR1cm4gU2Vu
ZFN1Y2Nlc3M7CiB9CiAKLVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hh
bm5lbDo6c2VuZChXZWJDb3JlOjpCbG9iJiBibG9iKQorV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJl
c3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKEJsb2ImIGJsb2IpCiB7Ci0gICAgLy8gQXZvaWQg
dGhlIEJsb2IgcXVldWUgYW5kIGxvYWRpbmcgZm9yIGVtcHR5IGJsb2JzLgorICAgIGF1dG8gYnl0
ZUxlbmd0aCA9IGJsb2Iuc2l6ZSgpOwogICAgIGlmICghYmxvYi5zaXplKCkpCi0gICAgICAgIHJl
dHVybiBzZW5kKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZShibG9iLnNpemUoKSwgMSksIDAsIDAp
OwotCi0gICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKG1ha2VVbmlxdWU8UGVuZGluZ01lc3Nh
Z2U+KG1fZG9jdW1lbnQuZ2V0KCksIGJsb2IsIFt0aGlzXSB7Ci0gICAgICAgIHdoaWxlICghbV9w
ZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBtZXNzYWdlID0g
bV9wZW5kaW5nTWVzc2FnZXMuZmlyc3QoKTsKLQotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdl
LT50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OlRleHQ6
Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFu
bmVsOjpTZW5kU3RyaW5nIHsgbWVzc2FnZS0+dGV4dE1lc3NhZ2UoKSB9LCBtZXNzYWdlLT50ZXh0
TWVzc2FnZSgpLnNpemVJbkJ5dGVzKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBQZW5kaW5nTWVzc2FnZTo6VHlwZTo6QmluYXJ5OiB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgYXV0byYgYmluYXJ5RGF0YSA9IG1lc3NhZ2UtPmJpbmFyeURhdGEoKTsKLSAgICAg
ICAgICAgICAgICBzZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNl
bmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpLCBiaW5hcnlEYXRhLnNpemUoKSB9IH0sIGJpbmFyeURh
dGEuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OkJsb2I6IHsKLSAgICAgICAgICAgICAg
ICBhdXRvJiBsb2FkZXIgPSBtZXNzYWdlLT5ibG9iTG9hZGVyKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGxvYWRlci5pc0xvYWRpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci5yZXN1bHQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGJ5dGVMZW5ndGggPSByZXN1bHQtPmJ5dGVMZW5n
dGgoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluY3JlYXNlQnVmZmVyZWRBbW91bnQoYnl0
ZUxlbmd0aCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShNZXNzYWdlczo6
TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkpLCBieXRlTGVuZ3Ro
IH0gfSwgYnl0ZUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRvIGVycm9y
Q29kZSA9IGxvYWRlci5lcnJvckNvZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgZmFpbChtYWtl
U3RyaW5nKCJGYWlsZWQgdG8gbG9hZCBCbG9iOiBlcnJvciBjb2RlID0gIiwgZXJyb3JDb2RlLnZh
bHVlKCkpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5yZW1vdmVGaXJz
dCgpOwotICAgICAgICB9Ci0gICAgfSkpOworICAgICAgICByZXR1cm4gc2VuZChKU0M6OkFycmF5
QnVmZmVyOjpjcmVhdGUoYnl0ZUxlbmd0aCwgMSksIDAsIDApOworCisgICAgaWYgKCFpbmNyZWFz
ZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgpKQorICAgICAgICByZXR1cm4gU2VuZEZhaWw7CisK
KyAgICBtX21lc3NhZ2VRdWV1ZS5lbnF1ZXVlKGJsb2IpOwogICAgIHJldHVybiBTZW5kU3VjY2Vz
czsKIH0KIApAQCAtMzE2LDcgKzIwNiw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29u
bmVjdCgpCiAgICAgbV9jbGllbnQgPSBudWxscHRyOwogICAgIG1fZG9jdW1lbnQgPSBudWxscHRy
OwogICAgIG1fcGVuZGluZ1Rhc2tzLmNsZWFyKCk7Ci0gICAgbV9wZW5kaW5nTWVzc2FnZXMuY2xl
YXIoKTsKKyAgICBtX21lc3NhZ2VRdWV1ZS5jbGVhcigpOwogCiAgICAgTWVzc2FnZVNlbmRlcjo6
c2VuZChNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OkNsb3NlIHsgMCwgeyB9IH0pOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0
Q2hhbm5lbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hh
bm5lbC5oCmluZGV4IDZjYzcxMzQ1ZDU2OTNhMWM1M2U3MDQwYTA3ZGMyODBmODRiYjU0MDAuLmE0
OWQ3YjhiMWYwNmRhZjU1NmVlNWNkODFiOWE4YTJkZTE5NTA0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmgKQEAgLTI3LDkg
KzI3LDkgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTZW5kUXVldWUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmg+CiAjaW5jbHVkZSA8cGFs
L1Nlc3Npb25JRC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9JZGVu
dGlmaWVkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNDEsOCArNDEsNiBAQCBj
bGFzcyBEYXRhUmVmZXJlbmNlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUGVuZGlu
Z01lc3NhZ2U7Ci0KIGNsYXNzIFdlYlNvY2tldENoYW5uZWwgOiBwdWJsaWMgSVBDOjpNZXNzYWdl
U2VuZGVyLCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5l
bD4sIHB1YmxpYyBJZGVudGlmaWVkPFdlYlNvY2tldENoYW5uZWw+IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPFdlYlNvY2tldENoYW5uZWw+IGNyZWF0ZShXZWJDb3JlOjpEb2N1bWVudCYsIFdl
YkNvcmU6OldlYlNvY2tldENoYW5uZWxDbGllbnQmKTsKQEAgLTU4LDYgKzU2LDggQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBXZWJTb2NrZXRDaGFubmVsKFdlYkNvcmU6OkRvY3VtZW50JiwgV2Vi
Q29yZTo6V2ViU29ja2V0Q2hhbm5lbENsaWVudCYpOwogCisgICAgc3RhdGljIFdlYkNvcmU6Ok5l
dHdvcmtTZW5kUXVldWUgY3JlYXRlTWVzc2FnZVF1ZXVlKFdlYkNvcmU6OkRvY3VtZW50JiwgV2Vi
U29ja2V0Q2hhbm5lbCYpOworCiAgICAgLy8gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwKICAg
ICBDb25uZWN0U3RhdHVzIGNvbm5lY3QoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2Nv
bCkgZmluYWw7CiAgICAgU3RyaW5nIHN1YnByb3RvY29sKCkgZmluYWw7CkBAIC05OCw3ICs5OCw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ2xvc2luZyB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKICAgICBEZXF1ZTxGdW5jdGlvbjx2b2lkKCk+PiBtX3Bl
bmRpbmdUYXNrczsKLSAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ01lc3NhZ2U+PiBt
X3BlbmRpbmdNZXNzYWdlczsKKyAgICBXZWJDb3JlOjpOZXR3b3JrU2VuZFF1ZXVlIG1fbWVzc2Fn
ZVF1ZXVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377796</attachid>
            <date>2019-08-31 04:05:23 -0700</date>
            <delta_ts>2019-09-04 09:47:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201359-20190831130521.patch</filename>
            <type>text/plain</type>
            <size>30850</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTJjMWUzNzUyZjlkN2Mx
N2U3NDJhMTJlZDRlMGMxMzNiMDZhMWVkNi4uOGJiMDdiOWI0OGRhMGRlNTE1MDU4ODc1YTkxNDlj
ZDcyNzg0NmI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE5LTA4LTMwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBYnN0cmFjdCBvdXQgV2Vi
U29ja2V0Q2hhbm5lbCBtZXNzYWdlIHF1ZXVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDEzNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIEJsb2JMb2FkZXIgaW4gaXRzIG93biBmaWxlLgorICAg
ICAgICBJbnRyb2R1Y2UgTmV0d29ya1NlbmRRdWV1ZSBjbGFzcyB0byBoYW5kbGUgdGhlIHNlbmRp
bmcgb2YgbWVzc2FnZXMsIHNvbWUgb2YgdGhlbSBiZWluZyBibG9icy4KKyAgICAgICAgVGhpcyBj
bGFzcyBlbnN1cmVzIHRoYXQgbWVzc2FnZXMgd2lsbCBiZSBzZW50IGluIG9yZGVyLCBldmVuIHRo
b3VnaCBibG9iIGRhdGEgaXMgcmVzb2x2ZWQgYXN5bmNocm9ub3VzbHkuCisKKyAgICAgICAgQ292
ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGZpbGVhcGkvQmxvYkxvYWRlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkJsb2JMb2FkZXI6OkJsb2JMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qmxv
YkxvYWRlcjo6fkJsb2JMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkxvYWRlcjo6ZGlk
RmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iTG9hZGVyOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JMb2FkZXI6OmNvbXBsZXRlKToKKyAgICAgICAgKiBmaWxl
YXBpL05ldHdvcmtTZW5kUXVldWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtTZW5kUXVldWU6Ok5ldHdvcmtTZW5kUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29y
a1NlbmRRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU2VuZFF1ZXVl
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU2VuZFF1ZXVlOjpwcm9jZXNzTWVz
c2FnZXMpOgorICAgICAgICAqIGZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5oOiBBZGRlZC4KKwog
MjAxOS0wOC0zMCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBb
d2syXSBMYXlvdXRUZXN0IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERC
L2ZpcmUtZXJyb3ItZXZlbnQtZXhjZXB0aW9uLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDM0N2YyYTA5NmU0Y2E0MmJjNTZhNzRlMDA5Yjg2OGQyYjIxNDUxYjIuLmNlZGM4Zjgw
ZDdlZjM3N2MyMjVlNDZmODlkYWNiOWI2YTQyYTE5OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTktMDgtMzAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAg
ICAgIEFic3RyYWN0IG91dCBXZWJTb2NrZXRDaGFubmVsIG1lc3NhZ2UgcXVldWUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTM1OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgdXNlIG9mIG5ld2x5
IGFkZGVkIE5ldHdvcmtTZW5kUXVldWUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsv
V2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6
OmNyZWF0ZU1lc3NhZ2VRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6
OldlYlNvY2tldENoYW5uZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpz
ZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaDoKKwogMjAxOS0w
OC0zMCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBrZXllZCBieSB0aGVpciBXZWJQcm9jZXNzIGlk
ZW50aWZpZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGJlODU2NGVhODcyYzIxYzIxM2JhOWIxZDJh
YzJmYmQwYTRiYTQyYzAuLjk4NjA0Y2ZjZGJlYzRhNTExYjI0ZDJmOGFjZGRhMTk4YmM3Y2FjOGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtNTE5LDYgKzUxOSw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBmaWxlYXBpL0ZpbGVMaXN0LmgKICAgICBmaWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXIuaAogICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5o
CisgICAgZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgKIAogICAgIGhpc3RvcnkvQmFja0Zvcndh
cmRDbGllbnQuaAogICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggYzVhOWEyYzgzN2FmOGIxNzI0MGUzZmRlNjhmNjhiYmJhYTBhZTFmZi4uZmQzMGZl
OWFiMDRiODZiMTk3NDNkMzI2MWQ5NzNjMzc5YmQ1MGZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTEw
NTcsNiArMTA1Nyw3IEBAIGZpbGVhcGkvRmlsZUxpc3QuY3BwCiBmaWxlYXBpL0ZpbGVSZWFkZXIu
Y3BwCiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCiBmaWxlYXBpL0ZpbGVSZWFkZXJTeW5j
LmNwcAorZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcAogZmlsZWFwaS9UaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmNwcAogCiBoaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBj
YzZlYjAxYTc1ZThmNzJhZDAzMDkyNjg1MGFhMzMyMTlkMDJhODAzLi44N2MwZTY1YzQ4OWEwOGRk
MWViMzFhOGI0ZTllOWRiZTAyMTJhMmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTIzLDYgKzExMjMsOCBAQAogCQk0MURF
N0M3RDIyMkRBMTQ4MDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1
IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk0MURFRkNCNjFFNTZDMUJEMDAwRDlFNUYgLyogSlNET01NYXBMaWtl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MURFRkNC
NDFFNTZDMUI5MDAwRDlFNUYgLyogSlNET01NYXBMaWtlLmggKi87IH07CiAJCTQxRTFCMUQxMEZG
NTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFMUIxQ0IwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3Ry
YWN0V29ya2VyLmggKi87IH07CisJCTQxRTlEQ0U3MjMxOTc0QkYwMEYzNTk0OSAvKiBCbG9iTG9h
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUU5
RENFNDIzMTk3M0ZFMDBGMzU5NDkgLyogQmxvYkxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxRTlEQ0U5MjMxOUNBNzYwMEYzNTk0OSAv
KiBOZXR3b3JrU2VuZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MUU5RENFODIzMTlDQTc1MDBGMzU5NDkgLyogTmV0d29ya1NlbmRRdWV1ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRjA2
MjE0MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjIxMjBGNUYxOTI2
MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovOyB9OwogCQk0MUYxRDIx
RjBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIxRDBFRjM1QzJBMDBEQTg3
NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGQUJEMkQxRjRERkU0QTAwNkE2Qzk3IC8qIERPTUNh
Y2hlRW5naW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUZBQkQyQjFGNERGRTQyMDA2QTZDOTcgLyogRE9NQ2FjaGVFbmdpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzM4Niw2ICs3Mzg4LDEw
IEBACiAJCTQxRTU5M0ZGMjE0ODY1QUEwMEQzQ0I2MSAvKiBSVENSdHBFbmNvZGluZ1BhcmFtZXRl
cnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycy5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxRTU5NDAwMjE0ODY1QUEwMEQzQ0I2MSAvKiBSVENSdHBIZWFkZXJF
eHRlbnNpb25QYXJhbWV0ZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSVENSdHBIZWFkZXJFeHRlbnNpb25QYXJhbWV0
ZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFNTk0MDEyMTQ4NjVBQjAw
RDNDQjYxIC8qIFJUQ1J0cEZlY1BhcmFtZXRlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJUQ1J0cEZlY1BhcmFtZXRl
cnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUU5RENFNDIzMTk3M0ZFMDBG
MzU5NDkgLyogQmxvYkxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
bG9iTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRTlEQ0U2MjMxOTc0
MjMwMEYzNTk0OSAvKiBCbG9iTGluZUVuZGluZ3MuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEJsb2JMaW5lRW5kaW5ncy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRTlE
Q0U4MjMxOUNBNzUwMEYzNTk0OSAvKiBOZXR3b3JrU2VuZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtTZW5kUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDFFOURDRUEyMzE5Q0FFODAwRjM1OTQ5IC8qIE5ldHdvcmtTZW5kUXVldWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1NlbmRRdWV1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MjEyMEY1RjE5MjYwMEEw
N0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFGMDYyMTMwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxRjFEMjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzI5LDcgKzk3MzUsNiBAQAogCQk3Qzc3QzNE
MjFERUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVydHlCYWcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNCbG9iUHJvcGVydHlCYWcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Qzc3QzNEMzFERUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJv
cGVydHlCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCbG9iUHJvcGVy
dHlCYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M3N0MzRDYxREVGODUwQTAw
QTUwQkZBIC8qIEJsb2JMaW5lRW5kaW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCbG9iTGluZUVuZGluZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M3
N0MzRDgxREVGODU0MDAwQTUwQkZBIC8qIEJsb2JMaW5lRW5kaW5ncy5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQmxvYkxp
bmVFbmRpbmdzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M3N0MzRDkxREVG
ODZENzAwQTUwQkZBIC8qIEpTQmxvYkxpbmVFbmRpbmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQmxvYkxpbmVFbmRpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0M3N0MzREExREVGODZENzAwQTUwQkZBIC8qIEpTQmxvYkxpbmVFbmRp
bmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmxvYkxpbmVFbmRpbmdz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNzkwM0IwMUY4NkY5NUMwMDQ2M0E3
MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTk3Nyw3ICsyMTk4Miw4IEBACiAJCQkJQTE1RDc1MTMxRTY4RjdCMTAwQTM1RkJDIC8qIEJsb2JD
YWxsYmFjay5oICovLAogCQkJCUExNUQ3NTE0MUU2OEY3QjEwMEEzNUZCQyAvKiBCbG9iQ2FsbGJh
Y2suaWRsICovLAogCQkJCTdDNzdDM0Q2MURFRjg1MEEwMEE1MEJGQSAvKiBCbG9iTGluZUVuZGlu
Z3MuaCAqLywKLQkJCQk3Qzc3QzNEODFERUY4NTQwMDBBNTBCRkEgLyogQmxvYkxpbmVFbmRpbmdz
LmlkbCAqLywKKwkJCQk0MUU5RENFNjIzMTk3NDIzMDBGMzU5NDkgLyogQmxvYkxpbmVFbmRpbmdz
LmlkbCAqLywKKwkJCQk0MUU5RENFNDIzMTk3M0ZFMDBGMzU5NDkgLyogQmxvYkxvYWRlci5oICov
LAogCQkJCTdDNzdDM0QwMURFRTQ3MjQwMEE1MEJGQSAvKiBCbG9iUHJvcGVydHlCYWcuaCAqLywK
IAkJCQk3Qzc3QzNDRjFERUU0NzE4MDBBNTBCRkEgLyogQmxvYlByb3BlcnR5QmFnLmlkbCAqLywK
IAkJCQk5NzZENkM1RjEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAgKi8sCkBAIC0yMjAw
MCw2ICsyMjAwNiw4IEBACiAJCQkJMkVERjM2OUExMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFk
ZXJTeW5jLmNwcCAqLywKIAkJCQkyRURGMzY5QjEyMkM5NEI0MDAyRjdENEUgLyogRmlsZVJlYWRl
clN5bmMuaCAqLywKIAkJCQlFMUFCMUVCRDE0RTlFM0E4MDA0NDlFMTMgLyogRmlsZVJlYWRlclN5
bmMuaWRsICovLAorCQkJCTQxRTlEQ0VBMjMxOUNBRTgwMEYzNTk0OSAvKiBOZXR3b3JrU2VuZFF1
ZXVlLmNwcCAqLywKKwkJCQk0MUU5RENFODIzMTlDQTc1MDBGMzU5NDkgLyogTmV0d29ya1NlbmRR
dWV1ZS5oICovLAogCQkJCTk3NkQ2Qzc1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk5NzZENkM3NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeS5oICovLAogCQkJKTsKQEAgLTI4NDkxLDYgKzI4NDk5LDcgQEAKIAkJ
CQlFMUQzMUNERDE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0RDNCMDBBRjIxNUQ2QTY5MDA3NkI5ODMgLyogQmxvYkV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3Qzc3QzNENzFERUY4NTBBMDBBNTBCRkEgLyogQmxvYkxpbmVF
bmRpbmdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUU5RENFNzIzMTk3NEJGMDBGMzU5NDkgLyog
QmxvYkxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFDOTRBRjkxOTEzMDNGMDAwRDVBODkz
IC8qIEJsb2JQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qzc3QzNEMTFERUU0NzI0MDBBNTBC
RkEgLyogQmxvYlByb3BlcnR5QmFnLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRURFRjFGNTEyMUIw
RUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTMwODUwLDYg
KzMwODU5LDcgQEAKIAkJCQk0MTZENzVBMjIwQzY1MUE1MDBEMDJEMkMgLyogTmV0d29ya0xvYWRJ
bmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEE4MUJGODUxMURDRkQ5MDAwREEyQjk4
IC8qIE5ldHdvcmtMb2FkTWV0cmljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTlDMjdGMDcxMzhE
MjhDRjAwNzlCN0UyIC8qIE5ldHdvcmtSZXNvdXJjZXNEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0MUU5RENFOTIzMTlDQTc2MDBGMzU5NDkgLyogTmV0d29ya1NlbmRRdWV1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE3RkE2MTkwRERBM0IzQTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlm
aWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTNFRjM0NDE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjkzOTcyNDFBNEE1QjY0
MDBFODM0OUQgLyogTkZBLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQmxvYkxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iTG9h
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDBiMzJkZjA3OGE0N2Y1ZGQzMzIxOWVmMzY2YTNlNWY0MTBiYzky
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkxvYWRlci5o
CkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkJsb2IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZpbGVSZWFkZXJMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKyNp
bmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBCbG9iTG9hZGVyIGZpbmFsIDogcHVibGljIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJsb2JMb2FkZXIo
RG9jdW1lbnQqLCBCbG9iJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB+Qmxv
YkxvYWRlcigpOworCisgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiAhIW1fbG9h
ZGVyOyB9CisgICAgY29uc3QgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+JiByZXN1bHQoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIGludCBlcnJvckNvZGUoKSBjb25zdCB7IHJldHVy
biBtX2Vycm9yQ29kZTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkg
ZmluYWwgeyB9CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSgpIGZpbmFsIHsgfQorCisgICAgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKCkgZmluYWw7CisgICAgdm9pZCBkaWRGYWlsKGludCBlcnJvckNv
ZGUpIGZpbmFsOworICAgIHZvaWQgY29tcGxldGUoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxG
aWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4g
bV9idWZmZXI7CisgICAgaW50IG1fZXJyb3JDb2RlIHsgMCB9OworICAgIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKK307CisKK2lubGluZSBCbG9iTG9hZGVy
OjpCbG9iTG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwgQmxvYiYgYmxvYiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIDogbV9sb2Fk
ZXIobWFrZVVuaXF1ZTxGaWxlUmVhZGVyTG9hZGVyPihGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNB
cnJheUJ1ZmZlciwgdGhpcykpCisgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKQoreworICAgIG1fbG9hZGVyLT5zdGFydChkb2N1bWVudCwgYmxvYik7
Cit9CisKK2lubGluZSBCbG9iTG9hZGVyOjp+QmxvYkxvYWRlcigpCit7CisgICAgaWYgKG1fbG9h
ZGVyKQorICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Cit9CisKK2lubGluZSB2b2lkIEJsb2JM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIG1fYnVmZmVyID0gbV9sb2FkZXItPmFy
cmF5QnVmZmVyUmVzdWx0KCk7CisgICAgY29tcGxldGUoKTsKK30KKworaW5saW5lIHZvaWQgQmxv
YkxvYWRlcjo6ZGlkRmFpbChpbnQgZXJyb3JDb2RlKQoreworICAgIG1fZXJyb3JDb2RlID0gZXJy
b3JDb2RlOworICAgIGNvbXBsZXRlKCk7Cit9CisKK2lubGluZSB2b2lkIEJsb2JMb2FkZXI6OmNv
bXBsZXRlKCkKK3sKKyAgICBtX2xvYWRlciA9IG51bGxwdHI7CisgICAgbV9jb21wbGV0aW9uSGFu
ZGxlcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OWJlYzU4NzAwNzA3ZTg5OWJh
MmYyZTE2MTAwZDk5ZTYyMTI5MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2VuZFF1ZXVlLmgiCisK
KyNpbmNsdWRlICJCbG9iTG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmV0d29y
a1NlbmRRdWV1ZTo6TmV0d29ya1NlbmRRdWV1ZShEb2N1bWVudCYgZG9jdW1lbnQsIFdyaXRlU3Ry
aW5nJiYgd3JpdGVTdHJpbmcsIFdyaXRlUmF3RGF0YSYmIHdyaXRlUmF3RGF0YSwgUHJvY2Vzc0Vy
cm9yJiYgcHJvY2Vzc0Vycm9yKQorICAgIDogbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVu
dCkpCisgICAgLCBtX3dyaXRlU3RyaW5nKFdURk1vdmUod3JpdGVTdHJpbmcpKQorICAgICwgbV93
cml0ZVJhd0RhdGEoV1RGTW92ZSh3cml0ZVJhd0RhdGEpKQorICAgICwgbV9wcm9jZXNzRXJyb3Io
V1RGTW92ZShwcm9jZXNzRXJyb3IpKQoreworfQorCitOZXR3b3JrU2VuZFF1ZXVlOjp+TmV0d29y
a1NlbmRRdWV1ZSgpID0gZGVmYXVsdDsKKwordm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVl
KGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAobV9xdWV1ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV93cml0ZVN0cmluZyhkYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
X3F1ZXVlLmFwcGVuZChkYXRhKTsKK30KKwordm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjplbnF1ZXVl
KGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYmluYXJ5RGF0YS5k
YXRhKCkpOworICAgICAgICBtX3dyaXRlUmF3RGF0YShkYXRhICsgYnl0ZU9mZnNldCwgYnl0ZUxl
bmd0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9xdWV1ZS5hcHBlbmQoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0
YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKK30KKwordm9pZCBOZXR3b3JrU2VuZFF1
ZXVlOjplbnF1ZXVlKFdlYkNvcmU6OkJsb2ImIGJsb2IpCit7CisgICAgYXV0byBieXRlTGVuZ3Ro
ID0gYmxvYi5zaXplKCk7CisgICAgaWYgKCFieXRlTGVuZ3RoKSB7CisgICAgICAgIGVucXVldWUo
SlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGJ5dGVMZW5ndGgsIDEpLCAwLCAwKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX3F1ZXVlLmFwcGVuZChtYWtlVW5pcXVlUmVmPEJsb2JMb2Fk
ZXI+KG1fZG9jdW1lbnQuZ2V0KCksIGJsb2IsIFt0aGlzXSB7CisgICAgICAgIHByb2Nlc3NNZXNz
YWdlcygpOworICAgIH0pKTsKK30KKwordm9pZCBOZXR3b3JrU2VuZFF1ZXVlOjpjbGVhcigpCit7
CisgICAgbV9xdWV1ZS5jbGVhcigpOworfQorCit2b2lkIE5ldHdvcmtTZW5kUXVldWU6OnByb2Nl
c3NNZXNzYWdlcygpCit7CisgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAg
ICBib29sIHNob3VsZFN0b3BQcm9jZXNzaW5nID0gZmFsc2U7CisgICAgICAgIHN3aXRjaE9uKG1f
cXVldWUuZmlyc3QoKSwgW3RoaXNdKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgeworICAgICAgICAg
ICAgbV93cml0ZVN0cmluZyhtZXNzYWdlKTsKKyAgICAgICAgfSwgW3RoaXNdKFJlZjxTaGFyZWRC
dWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICBtX3dyaXRlUmF3RGF0YShkYXRhLT5kYXRhKCks
IGRhdGEtPnNpemUoKSk7CisgICAgICAgIH0sIFt0aGlzLCAmc2hvdWxkU3RvcFByb2Nlc3Npbmdd
KFVuaXF1ZVJlZjxCbG9iTG9hZGVyPiYgbG9hZGVyKSB7CisgICAgICAgICAgICBpZiAobG9hZGVy
LT5pc0xvYWRpbmcoKSB8fCBsb2FkZXItPmVycm9yQ29kZSgpID09IEZpbGVFcnJvcjo6QUJPUlRf
RVJSKSB7CisgICAgICAgICAgICAgICAgc2hvdWxkU3RvcFByb2Nlc3NpbmcgPSB0cnVlOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNv
bnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci0+cmVzdWx0KCkpIHsKKyAgICAgICAgICAgICAgICBt
X3dyaXRlUmF3RGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocmVzdWx0LT5kYXRhKCkpLCBy
ZXN1bHQtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUKGxvYWRlci0+ZXJyb3JDb2RlKCkpOworICAgICAgICAg
ICAgc2hvdWxkU3RvcFByb2Nlc3NpbmcgPSBtX3Byb2Nlc3NFcnJvcihsb2FkZXItPmVycm9yQ29k
ZSgpKSA9PSBDb250aW51ZTo6Tm87CisgICAgICAgIH0pOworICAgICAgICBpZiAoc2hvdWxkU3Rv
cFByb2Nlc3NpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcXVldWUucmVtb3Zl
Rmlyc3QoKTsKKyAgICB9CisKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDQwODljYjJmYjky
YTM3MGI0MWQ1ZTc0NzAwNWViNTkwMjcxYTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9OZXR3b3JrU2VuZFF1ZXVlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0
Zi9WYXJpYW50Lmg+CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgQXJyYXlCdWZmZXI7Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYjsKK2NsYXNzIEJsb2JMb2FkZXI7Citj
bGFzcyBEb2N1bWVudDsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgV0VCQ09SRV9FWFBP
UlQgTmV0d29ya1NlbmRRdWV1ZSB7CitwdWJsaWM6CisgICAgdXNpbmcgV3JpdGVTdHJpbmcgPSBG
dW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPjsKKyAgICB1c2luZyBXcml0ZVJhd0RhdGEgPSBG
dW5jdGlvbjx2b2lkKGNvbnN0IGNoYXIqLCBzaXplX3QpPjsKKyAgICBlbnVtIGNsYXNzIENvbnRp
bnVlIHsgTm8sIFllcyB9OworICAgIHVzaW5nIFByb2Nlc3NFcnJvciA9IEZ1bmN0aW9uPENvbnRp
bnVlKGludCk+OworICAgIE5ldHdvcmtTZW5kUXVldWUoRG9jdW1lbnQmLCBXcml0ZVN0cmluZyYm
LCBXcml0ZVJhd0RhdGEmJiwgUHJvY2Vzc0Vycm9yJiYpOworICAgIH5OZXR3b3JrU2VuZFF1ZXVl
KCk7CisKKyAgICB2b2lkIGVucXVldWUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBlbnF1ZXVl
KGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBi
eXRlTGVuZ3RoKTsKKyAgICB2b2lkIGVucXVldWUoQmxvYiYpOworCisgICAgdm9pZCBjbGVhcigp
OworCitwcml2YXRlOgorICAgIHZvaWQgcHJvY2Vzc01lc3NhZ2VzKCk7CisKKyAgICB1c2luZyBN
ZXNzYWdlID0gVmFyaWFudDxTdHJpbmcsIFJlZjxTaGFyZWRCdWZmZXI+LCBVbmlxdWVSZWY8Qmxv
YkxvYWRlcj4+OworICAgIERlcXVlPE1lc3NhZ2U+IG1fcXVldWU7CisKKyAgICBXZWFrUHRyPERv
Y3VtZW50PiBtX2RvY3VtZW50OworCisgICAgV3JpdGVTdHJpbmcgbV93cml0ZVN0cmluZzsKKyAg
ICBXcml0ZVJhd0RhdGEgbV93cml0ZVJhd0RhdGE7CisgICAgUHJvY2Vzc0Vycm9yIG1fcHJvY2Vz
c0Vycm9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCAyZTU3
YWYyNDgzYmQzNmIzZGQ4NWU0ZWMxOGRkZTEwZjQ0MzZlODZlLi4zZTc5ZjlhN2UxNGU1YTE4MjJm
NmI0ZTZkNWVjMmJkN2RiMzYyMzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMzQsMjQgKzM0LDM2IEBACiAj
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQmxvYi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVSZWFkZXJMb2Fk
ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJTb2Nr
ZXRDaGFubmVsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmg+
Ci0jaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLVJlZjxXZWJTb2NrZXRDaGFubmVsPiBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoV2ViQ29y
ZTo6RG9jdW1lbnQmIGRvY3VtZW50LCBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBj
bGllbnQpCitSZWY8V2ViU29ja2V0Q2hhbm5lbD4gV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKERv
Y3VtZW50JiBkb2N1bWVudCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCYgY2xpZW50KQogewogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlNvY2tldENoYW5uZWwoZG9jdW1lbnQsIGNsaWVudCkp
OwogfQogCi1XZWJTb2NrZXRDaGFubmVsOjpXZWJTb2NrZXRDaGFubmVsKFdlYkNvcmU6OkRvY3Vt
ZW50JiBkb2N1bWVudCwgV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENsaWVudCYgY2xpZW50KQor
TmV0d29ya1NlbmRRdWV1ZSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGVNZXNzYWdlUXVldWUoRG9j
dW1lbnQmIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFubmVsJiBjaGFubmVsKQoreworICAgIHJldHVy
biB7IGRvY3VtZW50LCBbJmNoYW5uZWxdKGF1dG8mIHN0cmluZykgeworICAgICAgICBhdXRvIGJ5
dGVMZW5ndGggPSBzdHJpbmcuc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgY2hhbm5lbC5zZW5kTWVz
c2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBzdHJpbmcg
fSwgYnl0ZUxlbmd0aCk7CisgICAgfSwgWyZjaGFubmVsXShjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgYnl0ZUxlbmd0aCkgeworICAgICAgICBjaGFubmVsLnNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpO
ZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgYnl0ZUxlbmd0aCB9IH0sIGJ5dGVM
ZW5ndGgpOworICAgIH0sIFsmY2hhbm5lbF0oYXV0byBlcnJvckNvZGUpIHsKKyAgICAgICAgY2hh
bm5lbC5mYWlsKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBsb2FkIEJsb2I6IGVycm9yIGNvZGUgPSAi
LCBlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtTZW5kUXVldWU6OkNvbnRpbnVl
OjpObzsKKyAgICB9IH07Cit9CisKK1dlYlNvY2tldENoYW5uZWw6OldlYlNvY2tldENoYW5uZWwo
RG9jdW1lbnQmIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQpCiAgICAg
OiBtX2RvY3VtZW50KG1ha2VXZWFrUHRyKGRvY3VtZW50KSkKICAgICAsIG1fY2xpZW50KG1ha2VX
ZWFrUHRyKGNsaWVudCkpCisgICAgLCBtX21lc3NhZ2VRdWV1ZShjcmVhdGVNZXNzYWdlUXVldWUo
ZG9jdW1lbnQsICp0aGlzKSkKIHsKIH0KIApAQCAtMTMyLDEwMiArMTQ0LDEzIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZE1lc3NhZ2UoVCYmIG1lc3Nh
Z2UsIHNpemVfdCBieXRlCiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KFdURk1vdmUobWVzc2FnZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotY2xhc3MgQmxvYkxvYWRlciBmaW5h
bCA6IHB1YmxpYyBXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyQ2xpZW50IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBCbG9iTG9hZGVyKFdlYkNvcmU6OkRvY3Vt
ZW50KiBkb2N1bWVudCwgV2ViQ29yZTo6QmxvYiYgYmxvYiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICA6IG1fbG9hZGVyKG1ha2VVbmlxdWU8
V2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcj4oV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6UmVh
ZEFzQXJyYXlCdWZmZXIsIHRoaXMpKQotICAgICAgICAsIG1fY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpCi0gICAgewotICAgICAgICBtX2xvYWRlci0+c3RhcnQo
ZG9jdW1lbnQsIGJsb2IpOwotICAgIH0KLQotICAgIH5CbG9iTG9hZGVyKCkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICB9
Ci0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICEhbV9sb2FkZXI7IH0KLSAg
ICBjb25zdCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4mIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyOyB9Ci0gICAgT3B0aW9uYWw8aW50PiBlcnJvckNvZGUoKSBjb25zdCB7IHJldHVy
biBtX2Vycm9yQ29kZTsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YSgpIGZpbmFsIHsgfQotCi0gICAgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIG1fYnVmZmVyID0gbV9s
b2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCk7Ci0gICAgICAgIGNvbXBsZXRlKCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBkaWRGYWlsKGludCBlcnJvckNvZGUpIGZpbmFsCi0gICAgewotICAgICAgICBt
X2Vycm9yQ29kZSA9IGVycm9yQ29kZTsKLSAgICAgICAgY29tcGxldGUoKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNvbXBsZXRlKCkKLSAgICB7Ci0gICAgICAgIG1fbG9hZGVyID0gbnVsbHB0cjsKLSAg
ICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKLSAgICBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgT3B0aW9uYWw8aW50PiBtX2Vycm9yQ29kZTsKLSAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1fY29tcGxldGlvbkhhbmRsZXI7Ci19OwotCi1j
bGFzcyBQZW5kaW5nTWVzc2FnZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsgVGV4dCwgQmluYXJ5LCBCbG9iIH07Ci0KLSAgICBl
eHBsaWNpdCBQZW5kaW5nTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi0gICAgICAgIDog
bV90eXBlKFR5cGU6OlRleHQpCi0gICAgICAgICwgbV90ZXh0TWVzc2FnZShtZXNzYWdlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBQZW5kaW5nTWVzc2FnZShjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBi
aW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotICAg
ICAgICA6IG1fdHlwZShUeXBlOjpCaW5hcnkpCi0gICAgICAgICwgbV9iaW5hcnlEYXRhKFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5h
cnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgUGVuZGluZ01lc3NhZ2UoV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50LCBXZWJDb3Jl
OjpCbG9iJiBibG9iLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCi0gICAgICAgIDogbV90eXBlKFR5cGU6OkJsb2IpCi0gICAgICAgICwgbV9ibG9iTG9hZGVy
KG1ha2VVbmlxdWU8QmxvYkxvYWRlcj4oZG9jdW1lbnQsIGJsb2IsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKSkKLSAgICB7Ci0gICAgfQotCi0gICAgflBlbmRpbmdNZXNzYWdlKCkgPSBkZWZh
dWx0OwotCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiB0ZXh0TWVzc2FnZSgpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpU
ZXh0KTsgcmV0dXJuIG1fdGV4dE1lc3NhZ2U7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpTaGFyZWRC
dWZmZXImIGJpbmFyeURhdGEoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6QmluYXJ5
KTsgcmV0dXJuICptX2JpbmFyeURhdGE7IH0KLSAgICBjb25zdCBCbG9iTG9hZGVyJiBibG9iTG9h
ZGVyKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OkJsb2IpOyByZXR1cm4gKm1fYmxv
YkxvYWRlcjsgfQotCi1wcml2YXRlOgotICAgIFR5cGUgbV90eXBlOwotICAgIFN0cmluZyBtX3Rl
eHRNZXNzYWdlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fYmluYXJ5RGF0
YTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkxvYWRlcj4gbV9ibG9iTG9hZGVyOwotfTsKLQog
V2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBhdXRvIGJ5dGVMZW5ndGggPSBtZXNzYWdlLnNpemVJ
bkJ5dGVzKCk7CiAgICAgaWYgKCFpbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgpKQog
ICAgICAgICByZXR1cm4gU2VuZEZhaWw7CiAKLSAgICBpZiAobV9wZW5kaW5nTWVzc2FnZXMuaXNF
bXB0eSgpKQotICAgICAgICBzZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5u
ZWw6OlNlbmRTdHJpbmcgeyBtZXNzYWdlIH0sIGJ5dGVMZW5ndGgpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKG1ha2VVbmlxdWU8UGVuZGluZ01lc3NhZ2U+KG1l
c3NhZ2UpKTsKLQorICAgIG1fbWVzc2FnZVF1ZXVlLmVucXVldWUobWVzc2FnZSk7CiAgICAgcmV0
dXJuIFNlbmRTdWNjZXNzOwogfQogCkBAIC0yMzYsNTMgKzE1OSwyMCBAQCBXZWJTb2NrZXRDaGFu
bmVsOjpTZW5kUmVzdWx0IFdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgSlNDOjpBcnJheUJ1
ZmZlciYgYmluYQogICAgIGlmICghaW5jcmVhc2VCdWZmZXJlZEFtb3VudChieXRlTGVuZ3RoKSkK
ICAgICAgICAgcmV0dXJuIFNlbmRGYWlsOwogCi0gICAgaWYgKG1fcGVuZGluZ01lc3NhZ2VzLmlz
RW1wdHkoKSkKLSAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFu
bmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0gfSwg
Ynl0ZUxlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQo
bWFrZVVuaXF1ZTxQZW5kaW5nTWVzc2FnZT4oYmluYXJ5RGF0YSwgYnl0ZU9mZnNldCwgYnl0ZUxl
bmd0aCkpOwotCisgICAgbV9tZXNzYWdlUXVldWUuZW5xdWV1ZShiaW5hcnlEYXRhLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKTsKICAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKLVdlYlNvY2tl
dENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChXZWJDb3JlOjpCbG9i
JiBibG9iKQorV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpz
ZW5kKEJsb2ImIGJsb2IpCiB7Ci0gICAgLy8gQXZvaWQgdGhlIEJsb2IgcXVldWUgYW5kIGxvYWRp
bmcgZm9yIGVtcHR5IGJsb2JzLgorICAgIGF1dG8gYnl0ZUxlbmd0aCA9IGJsb2Iuc2l6ZSgpOwog
ICAgIGlmICghYmxvYi5zaXplKCkpCi0gICAgICAgIHJldHVybiBzZW5kKEpTQzo6QXJyYXlCdWZm
ZXI6OmNyZWF0ZShibG9iLnNpemUoKSwgMSksIDAsIDApOwotCi0gICAgbV9wZW5kaW5nTWVzc2Fn
ZXMuYXBwZW5kKG1ha2VVbmlxdWU8UGVuZGluZ01lc3NhZ2U+KG1fZG9jdW1lbnQuZ2V0KCksIGJs
b2IsIFt0aGlzXSB7Ci0gICAgICAgIHdoaWxlICghbV9wZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBtZXNzYWdlID0gbV9wZW5kaW5nTWVzc2FnZXMuZmlyc3Qo
KTsKLQotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLT50eXBlKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OlRleHQ6Ci0gICAgICAgICAgICAgICAgc2VuZE1l
c3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kU3RyaW5nIHsgbWVzc2Fn
ZS0+dGV4dE1lc3NhZ2UoKSB9LCBtZXNzYWdlLT50ZXh0TWVzc2FnZSgpLnNpemVJbkJ5dGVzKCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQZW5kaW5nTWVzc2Fn
ZTo6VHlwZTo6QmluYXJ5OiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgYXV0byYgYmluYXJ5RGF0
YSA9IG1lc3NhZ2UtPmJpbmFyeURhdGEoKTsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShN
ZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJl
bmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkp
LCBiaW5hcnlEYXRhLnNpemUoKSB9IH0sIGJpbmFyeURhdGEuc2l6ZSgpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgUGVuZGluZ01lc3Nh
Z2U6OlR5cGU6OkJsb2I6IHsKLSAgICAgICAgICAgICAgICBhdXRvJiBsb2FkZXIgPSBtZXNzYWdl
LT5ibG9iTG9hZGVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvYWRlci5pc0xvYWRpbmcoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnN0
IGF1dG8mIHJlc3VsdCA9IGxvYWRlci5yZXN1bHQoKSkgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGJ5dGVMZW5ndGggPSByZXN1bHQtPmJ5dGVMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGluY3JlYXNlQnVmZmVyZWRBbW91bnQoYnl0ZUxlbmd0aCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNl
bmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4ocmVzdWx0LT5kYXRhKCkpLCBieXRlTGVuZ3RoIH0gfSwgYnl0ZUxlbmd0aCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRvIGVycm9yQ29kZSA9IGxvYWRlci5lcnJvckNvZGUo
KSkKLSAgICAgICAgICAgICAgICAgICAgZmFpbChtYWtlU3RyaW5nKCJGYWlsZWQgdG8gbG9hZCBC
bG9iOiBlcnJvciBjb2RlID0gIiwgZXJyb3JDb2RlLnZhbHVlKCkpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBtX3BlbmRpbmdNZXNzYWdlcy5yZW1vdmVGaXJzdCgpOwotICAgICAgICB9Ci0gICAgfSkp
OworICAgICAgICByZXR1cm4gc2VuZChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUoYnl0ZUxlbmd0
aCwgMSksIDAsIDApOworCisgICAgaWYgKCFpbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5n
dGgpKQorICAgICAgICByZXR1cm4gU2VuZEZhaWw7CisKKyAgICBtX21lc3NhZ2VRdWV1ZS5lbnF1
ZXVlKGJsb2IpOwogICAgIHJldHVybiBTZW5kU3VjY2VzczsKIH0KIApAQCAtMzE2LDcgKzIwNiw3
IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgpCiAgICAgbV9jbGllbnQgPSBu
dWxscHRyOwogICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwogICAgIG1fcGVuZGluZ1Rhc2tzLmNs
ZWFyKCk7Ci0gICAgbV9wZW5kaW5nTWVzc2FnZXMuY2xlYXIoKTsKKyAgICBtX21lc3NhZ2VRdWV1
ZS5jbGVhcigpOwogCiAgICAgTWVzc2FnZVNlbmRlcjo6c2VuZChNZXNzYWdlczo6TmV0d29ya1Nv
Y2tldENoYW5uZWw6OkNsb3NlIHsgMCwgeyB9IH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IDZjYzcxMzQ1ZDU2
OTNhMWM1M2U3MDQwYTA3ZGMyODBmODRiYjU0MDAuLmE0OWQ3YjhiMWYwNmRhZjU1NmVlNWNkODFi
OWE4YTJkZTE5NTA0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYlNvY2tldENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0
d29yay9XZWJTb2NrZXRDaGFubmVsLmgKQEAgLTI3LDkgKzI3LDkgQEAKIAogI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL05ldHdvcmtTZW5kUXVldWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgotI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9JZGVudGlmaWVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KIApAQCAtNDEsOCArNDEsNiBAQCBjbGFzcyBEYXRhUmVmZXJlbmNlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUGVuZGluZ01lc3NhZ2U7Ci0KIGNsYXNzIFdlYlNv
Y2tldENoYW5uZWwgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyLCBwdWJsaWMgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCwg
cHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD4sIHB1YmxpYyBJZGVudGlmaWVkPFdl
YlNvY2tldENoYW5uZWw+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYlNvY2tldENoYW5u
ZWw+IGNyZWF0ZShXZWJDb3JlOjpEb2N1bWVudCYsIFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWxD
bGllbnQmKTsKQEAgLTU4LDYgKzU2LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJTb2Nr
ZXRDaGFubmVsKFdlYkNvcmU6OkRvY3VtZW50JiwgV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENs
aWVudCYpOwogCisgICAgc3RhdGljIFdlYkNvcmU6Ok5ldHdvcmtTZW5kUXVldWUgY3JlYXRlTWVz
c2FnZVF1ZXVlKFdlYkNvcmU6OkRvY3VtZW50JiwgV2ViU29ja2V0Q2hhbm5lbCYpOworCiAgICAg
Ly8gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwKICAgICBDb25uZWN0U3RhdHVzIGNvbm5lY3Qo
Y29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkgZmluYWw7CiAgICAgU3RyaW5nIHN1
YnByb3RvY29sKCkgZmluYWw7CkBAIC05OCw3ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2lzQ2xvc2luZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsK
ICAgICBEZXF1ZTxGdW5jdGlvbjx2b2lkKCk+PiBtX3BlbmRpbmdUYXNrczsKLSAgICBEZXF1ZTxz
dGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ01lc3NhZ2U+PiBtX3BlbmRpbmdNZXNzYWdlczsKKyAgICBX
ZWJDb3JlOjpOZXR3b3JrU2VuZFF1ZXVlIG1fbWVzc2FnZVF1ZXVlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>