<?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>44116</bug_id>
          
          <creation_ts>2010-08-17 10:04:47 -0700</creation_ts>
          <short_desc>Move BlobRegistry interface and implementation to platform/network</short_desc>
          <delta_ts>2010-08-18 12:05:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>dimich</cc>
    
    <cc>fishd</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>265613</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-17 10:04:47 -0700</bug_when>
    <thetext>This is to address fishd&apos;s feedback at bug 43871. We want to move BlobRegistry interface and implementation to a better place: platform/network. We also need to move BlobData and BlobStorageData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265614</commentid>
    <comment_count>1</comment_count>
      <attachid>64603</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-17 10:08:32 -0700</bug_when>
    <thetext>Created attachment 64603
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265622</commentid>
    <comment_count>2</comment_count>
      <attachid>64603</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-17 10:21:38 -0700</bug_when>
    <thetext>Comment on attachment 64603
Proposed Patch

WebCore/platform/network/BlobData.h:65
 +      BlobDataItem(const String&amp; path)
explicit?

WebCore/platform/network/BlobData.h:55
 +      BlobDataItem(const CString&amp; data)
explicit?

WebCore/platform/network/BlobRegistry.h:59
 +      virtual ~BlobRegistry() { }
can this destructor be protected?

WebCore/platform/network/BlobRegistry.h:53
 +      virtual void registerBlobURL(const KURL&amp;, PassOwnPtr&lt;BlobData&gt;) = 0;
i think it would be helpful to document these methods.  it is at least not
entirely obvious what the second form of registerBlobURL means.

WebCore/platform/network/BlobRegistry.h:51
 +      static BlobRegistry&amp; instance();
i think a global WebCore::blobRegistry() method would be more conventional
for WebCore.

WebCore/platform/network/BlobStorageData.h:41
 +  struct BlobStorageDataItem {
there seems to be unfortunate repetition between BlobDataItem
and BlobStorageDataItem.  have you considered reusing BlobDataItem
here?

WebCore/platform/network/BlobRegistryImpl.h:62
 +      PassRefPtr&lt;BlobStorageData&gt; getBlobDataFromURL(const KURL&amp;) const;
why not just reuse BlobData here?  you can say that getBlobDataFromURL
returns a &quot;canonical&quot; BlobData that has all Blob references resolved
to either Data or File references.  it just seems like it would be
simpler to have fewer classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265625</commentid>
    <comment_count>3</comment_count>
      <attachid>64603</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-17 10:22:51 -0700</bug_when>
    <thetext>Comment on attachment 64603
Proposed Patch

Since this bug is really just about moving the files, I&apos;m going to R+.  The
other suggested changes can certainly happen separately if you prefer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265626</commentid>
    <comment_count>4</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-17 10:27:07 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 64603 [details])
&gt; Since this bug is really just about moving the files, I&apos;m going to R+.  The
&gt; other suggested changes can certainly happen separately if you prefer.

I originally plan to change to use blobRegistry() in another patch. Since you have more feedbacks, I will address all of them in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265831</commentid>
    <comment_count>5</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-08-17 16:19:00 -0700</bug_when>
    <thetext>I assume this move implies that we&apos;ll have BlobResourceHandle in platform/network too and consequently we&apos;ll want to move FileStream and related stuff under platform.  Is that the case?
(We have a reference to blob in unimplemented FileStream::write but it can be replaced with a file path or blob ID)

(By the way I thought it&apos;d be good to have separate classes for BlobStorageData and BlobData - but ok they look VERY similar so it&apos;d be better to unify them.  Sorry Jian if I contributed to the decision.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265838</commentid>
    <comment_count>6</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-17 16:33:19 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I assume this move implies that we&apos;ll have BlobResourceHandle in platform/network too and consequently we&apos;ll want to move FileStream and related stuff under platform.  Is that the case?
&gt; (We have a reference to blob in unimplemented FileStream::write but it can be replaced with a file path or blob ID)
&gt; 
&gt; (By the way I thought it&apos;d be good to have separate classes for BlobStorageData and BlobData - but ok they look VERY similar so it&apos;d be better to unify them.  Sorry Jian if I contributed to the decision.)

Ideally BlobResourceHandle should be put in platform/network and FileStream and FileStreamProxy should be moved to platform/network. However, there&apos;re some kind of dependency violations we need to resolve.

The first one is reference to blob in FileStream::write. This can be resolved as you suggest. In addition, we cannot pass Blob object between thread.

The other one is reference to ScriptExecutionContext (and CrossThreadTask) in FileStreamProxy and BlobResourceHandle. This is needed to post task to different thread. I am not sure if there is a good way to fix this. We could add something like postTask to ResourceHandleClient. However, Task is defined in dom/ScriptExecutionContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265844</commentid>
    <comment_count>7</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-08-17 16:49:44 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Ideally BlobResourceHandle should be put in platform/network and FileStream and FileStreamProxy should be moved to platform/network. However, there&apos;re some kind of dependency violations we need to resolve.
&gt; 
&gt; The first one is reference to blob in FileStream::write. This can be resolved as you suggest. In addition, we cannot pass Blob object between thread.
&gt; 
&gt; The other one is reference to ScriptExecutionContext (and CrossThreadTask) in FileStreamProxy and BlobResourceHandle. This is needed to post task to different thread. I am not sure if there is a good way to fix this. We could add something like postTask to ResourceHandleClient. However, Task is defined in dom/ScriptExecutionContext.

Ah, you&apos;re right there&apos;re more dependencies.  ...I see so it needs more consideration to move BlobResourceHandle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266294</commentid>
    <comment_count>8</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-18 12:05:44 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/65526.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64603</attachid>
            <date>2010-08-17 10:08:32 -0700</date>
            <delta_ts>2010-08-17 10:22:51 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>44116</filename>
            <type>text/plain</type>
            <size>73941</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCAzNDhjMTc4Li5hNDM4YWVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yNTUsNyArMjU1LDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJXAogCWh0bWwvQXN5bmNJbWFnZVJlc2l6ZXIuY3BwIFwK
IAlodG1sL0Jsb2IuY3BwIFwKLQlodG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwKIAlodG1sL0Js
b2JVUkwuY3BwIFwKIAlodG1sL0NvbGxlY3Rpb25DYWNoZS5jcHAgXAogCWh0bWwvQ1NTUHJlbG9h
ZFNjYW5uZXIuY3BwIFwKQEAgLTQwOCw3ICs0MDcsNiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChM
T0NBTF9TUkNfRklMRVMpIFwKIAlwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAg
XAogCVwKIAlwbGF0Zm9ybS9BcmVuYS5jcHAgXAotCXBsYXRmb3JtL0Jsb2JEYXRhLmNwcCBcCiAJ
cGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKIAlwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAgXAog
CXBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBcCkBAIC01MjksNiArNTI3LDggQEAgTE9D
QUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcGxhdGZvcm0vbW9jay9TcGVl
Y2hJbnB1dENsaWVudE1vY2suY3BwIFwKIAlcCiAJcGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZUJhc2UuY3BwIFwKKwlwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcCBc
CisJcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCBcCiAJcGxhdGZvcm0vbmV0
d29yay9DcmVkZW50aWFsLmNwcCBcCiAJcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFn
ZS5jcHAgXAogCXBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDE3ZjE4
ZTYuLjRlZWNmMmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTQyLDcgKzk0Miw2IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBodG1sL0FzeW5jSW1hZ2VSZXNpemVyLmNwcAogICAgIGh0bWwvQmxvYi5jcHAKICAg
ICBodG1sL0Jsb2JCdWlsZGVyLmNwcAotICAgIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKICAg
ICBodG1sL0Jsb2JVUkwuY3BwCiAgICAgaHRtbC9Db2xsZWN0aW9uQ2FjaGUuY3BwCiAgICAgaHRt
bC9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKQEAgLTEyMDksNyArMTIwOCw2IEBAIFNFVChXZWJDb3Jl
X1NPVVJDRVMKICAgICBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKIAogICAg
IHBsYXRmb3JtL0FyZW5hLmNwcAotICAgIHBsYXRmb3JtL0Jsb2JEYXRhLmNwcAogICAgIHBsYXRm
b3JtL0Jsb2JJdGVtLmNwcAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogICAgIHBsYXRm
b3JtL0NvbnRleHRNZW51LmNwcApAQCAtMTMwNSw2ICsxMzAzLDggQEAgU0VUKFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5jcHAKIAogICAg
IHBsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcAorICAgIHBs
YXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGFCdWlsZGVyLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNjdjOGU3Li42OTY0ODlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEwLTA4LTE3
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEJsb2JSZWdpc3RyeSBpbnRlcmZhY2UgYW5k
IGltcGxlbWVudGF0aW9uIHRvIHBsYXRmb3JtL25ldHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTE2CisKKyAgICAgICAgQWxzbyBtb3ZlIEJs
b2JEYXRhIGFuZCBCbG9iU3RvcmFnZURhdGEgc2luY2UgdGhleSdyZSBwYXJ0IG9mIEJsb2JSZWdp
c3RyeQorICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIEFuZHJvaWQubWs6Cisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNw
cDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkRhdGEuY3BwLgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vQmxvYkRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5o
OiBSZW5hbWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOiBSZW5hbWVkIGZyb20gV2Vi
Q29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvQmxvYlJlZ2lzdHJ5SW1wbC5oOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9odG1sL0Jsb2JSZWdp
c3RyeUltcGwuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JTdG9yYWdlRGF0YS5o
OiBSZW5hbWVkIGZyb20gV2ViQ29yZS9odG1sL0Jsb2JTdG9yYWdlRGF0YS5oLgorCiAyMDEwLTA4
LTE2ICBBbmRyZWFzIEtsaW5nICA8YW5kcmVhcy5rbGluZ0Bub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA5Mzk4NTJmLi43ZDM5ODU0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KQEAgLTEzMTQsOSArMTMxNCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9o
dG1sL0Jsb2IuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0Jsb2JCdWlsZGVyLmggXAotCVdlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBc
Ci0JV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuaCBcCi0JV2ViQ29yZS9odG1sL0Jsb2JT
dG9yYWdlRGF0YS5oIFwKIAlXZWJDb3JlL2h0bWwvQmxvYlVSTC5jcHAgXAogCVdlYkNvcmUvaHRt
bC9CbG9iVVJMLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0
ZXMuaCBcCkBAIC0xODc5LDExICsxODc2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL3BsYXRmb3JtL0FyZW5hLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVkUG9vbC5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL0Js
b2JEYXRhLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9CbG9iRGF0YS5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL0Jsb2JJdGVtLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oIFwKLQlX
ZWJDb3JlL3BsYXRmb3JtL0Jsb2JSZWdpc3RyeS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRl
bnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCkBAIC0yMDkyLDYgKzIwODYsMTIgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VCYXNlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQmFzZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGlj
YXRpb25DbGllbnQuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmggXAorCVdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeUltcGwuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lz
dHJ5SW1wbC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlN0b3JhZ2VEYXRhLmgg
XAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0ROUy5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggNjE1NzYxMC4uMTE4NjE3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE0MzcsOSArMTQzNyw2IEBA
CiAgICAgICAgICAgICAnaHRtbC9CbG9iLmgnLAogICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxk
ZXIuY3BwJywKICAgICAgICAgICAgICdodG1sL0Jsb2JCdWlsZGVyLmgnLAotICAgICAgICAgICAg
J2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvQmxvYlJlZ2lz
dHJ5SW1wbC5oJywKLSAgICAgICAgICAgICdodG1sL0Jsb2JTdG9yYWdlRGF0YS5oJywKICAgICAg
ICAgICAgICdodG1sL0Jsb2JVUkwuY3BwJywKICAgICAgICAgICAgICdodG1sL0Jsb2JVUkwuaCcs
CiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmNwcCcsCkBAIC0yNzg3
LDYgKzI3ODQsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQmFzZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvQXV0aGVudGljYXRpb25DbGllbnQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29y
ay9CbG9iRGF0YS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvQmxvYlN0b3JhZ2VEYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0ROUy5oJywK
QEAgLTMwMzMsMTEgKzMwMzYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5hLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
QXV0b2RyYWluZWRQb29sLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL0Jsb2JEYXRhLmNwcCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vQmxvYkRhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vQmxvYkl0ZW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5oJywKLSAg
ICAgICAgICAgICdwbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vQ29udGVudFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNzZlMzc4Mi4u
NzM3ZDdiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dl
YkNvcmUucHJvCkBAIC02MTksNyArNjE5LDYgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9Bc3lu
Y0ltYWdlUmVzaXplci5jcHAgXAogICAgIGh0bWwvQmxvYi5jcHAgXAogICAgIGh0bWwvQmxvYkJ1
aWxkZXIuY3BwIFwKLSAgICBodG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwKICAgICBodG1sL0Js
b2JVUkwuY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAgXAogICAgIGh0
bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwIFwKQEAgLTg2NSw3ICs4NjQsNiBAQCBTT1VSQ0VT
ICs9IFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmNwcCBcCiAgICAgcGxhdGZv
cm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuY3BwIFwKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAg
XAotICAgIHBsYXRmb3JtL0Jsb2JEYXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vQmxvYkl0ZW0uY3Bw
IFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuY3BwIFwKQEAgLTkyOCw2ICs5MjYsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0
Zm9ybS9tb2NrL0dlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwIFwKICAgICBwbGF0Zm9ybS9tb2Nr
L1NwZWVjaElucHV0Q2xpZW50TW9jay5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0
YS5jcHAgXAorICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgXAogICAg
IHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAg
XApAQCAtMTM4OSw3ICsxMzg5LDYgQEAgSEVBREVSUyArPSBcCiAgICAgaHRtbC9Bc3luY0ltYWdl
UmVzaXplci5oIFwKICAgICBodG1sL0Jsb2IuaCBcCiAgICAgaHRtbC9CbG9iQnVpbGRlci5oIFwK
LSAgICBodG1sL0Jsb2JTdG9yYWdlRGF0YS5oIFwKICAgICBodG1sL0Jsb2JVUkwuaCBcCiAgICAg
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGF0
dGVybi5oIFwKQEAgLTE2NDIsOSArMTY0MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3Jt
L2FuaW1hdGlvbi9BbmltYXRpb24uaCBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlv
bkxpc3QuaCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuaCBcCi0gICAgcGxhdGZvcm0vQmxvYkRhdGEu
aCBcCiAgICAgcGxhdGZvcm0vQmxvYkl0ZW0uaCBcCi0gICAgcGxhdGZvcm0vQmxvYlJlZ2lzdHJ5
LmggXAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmggXAogICAgIHBsYXRmb3JtL0NvbnRleHRN
ZW51LmggXAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXApAQCAtMTcxOCw2ICsx
NzE1LDEwIEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaCBc
CiAgICAgcGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuaCBcCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNhdGlvbkNsaWVudC5oIFwKKyAgICBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JEYXRhLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
LmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oIFwKKyAgICBwbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JTdG9yYWdlRGF0YS5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Ny
ZWRlbnRpYWwuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaCBcCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCmluZGV4IGZjNjI4ZDcuLmFhNmQyMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagpAQCAtMjM5MjEsMTQgKzIzOTIxLDYgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkRhdGEuY3Bw
Ig0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cQmxvYkRhdGEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEJsb2JJdGVtLmNwcCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCkBAIC0yMzkzNywxMCArMjM5MjksNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxCbG9iUmVnaXN0cnkuaCINCi0J
CQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXENvbnRlbnRUeXBlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yNjc4NCw2ICsy
Njc3MiwzMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xCbG9iRGF0YS5jcHAiDQorCQkJCQk+DQorCQkJ
CTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0
d29ya1xCbG9iRGF0YS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcQmxvYlJlZ2lzdHJ5LmgiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cbmV0d29ya1xCbG9iUmVnaXN0cnlJbXBsLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXEJs
b2JSZWdpc3RyeUltcGwuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXEJsb2JTdG9yYWdlRGF0YS5oIg0K
KwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcQ3JlZGVudGlhbC5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CkBAIC0zNjkzNywxOCArMzY5NDksNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JSZWdpc3RyeUltcGwuY3BwIg0KLQkJCQk+
DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9i
UmVnaXN0cnlJbXBsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEJsb2JTdG9yYWdlRGF0YS5oIg0KLQkJCQk+DQotCQkJPC9GaWxl
Pg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iVVJMLmNwcCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDQzMzI1ZWMuLjA2MDk4MWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC02OTcsNiArNjk3LDEyIEBACiAJCTJFNDM0NjU1MEY1NDZBODIw
MEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFNDM0NjQzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRTQz
NDY1ODBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NTYwRjU0NkE5OTAwQjBG
MUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCAqLzsgfTsKIAkJMkU0MzQ2NTkwRjU0NkE5OTAw
QjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDY1NzBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJl
YWRDb3BpZXIuaCAqLzsgfTsKKwkJMkU3Q0EyNzYxMjFBMUFERTAwNkM5MzFFIC8qIEJsb2JEYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFN0NB
MjcwMTIxQTFBREMwMDZDOTMxRSAvKiBCbG9iRGF0YS5jcHAgKi87IH07CisJCTJFN0NBMjc3MTIx
QTFBREUwMDZDOTMxRSAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU3Q0EyNzExMjFBMUFERTAwNkM5MzFFIC8qIEJsb2JEYXRhLmgg
Ki87IH07CisJCTJFN0NBMjc4MTIxQTFBREUwMDZDOTMxRSAvKiBCbG9iUmVnaXN0cnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFN0NBMjcyMTIxQTFB
REUwMDZDOTMxRSAvKiBCbG9iUmVnaXN0cnkuaCAqLzsgfTsKKwkJMkU3Q0EyNzkxMjFBMUFERTAw
NkM5MzFFIC8qIEJsb2JSZWdpc3RyeUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3Q0EyNzMxMjFBMUFERTAwNkM5MzFFIC8qIEJsb2JSZWdp
c3RyeUltcGwuY3BwICovOyB9OworCQkyRTdDQTI3QTEyMUExQURFMDA2QzkzMUUgLyogQmxvYlJl
Z2lzdHJ5SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU3Q0EyNzQxMjFBMUFERTAwNkM5MzFFIC8qIEJsb2JSZWdpc3RyeUltcGwuaCAqLzsgfTsK
KwkJMkU3Q0EyN0IxMjFBMUFERTAwNkM5MzFFIC8qIEJsb2JTdG9yYWdlRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3Q0EyNzUxMjFBMUFERTAw
NkM5MzFFIC8qIEJsb2JTdG9yYWdlRGF0YS5oICovOyB9OwogCQkyRTk0RjQzQjExOTIwN0RBMDBC
N0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFOTRGNDM5MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIu
Y3BwICovOyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0RjQzQTEx
OTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07CiAJCTJFOTRGNDUwMTE5MjA5
NjQwMEI3Rjc1RCAvKiBGaWxlUmVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGM0NCMTE4QjkwOEUwMEI3Rjc1RCAvKiBGaWxlUmVhZGVy
LmNwcCAqLzsgfTsKQEAgLTcxMCwxNCArNzE2LDggQEAKIAkJMkVDRjdBRTIxMDE2MkI1ODAwNDI3
REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmggKi87IH07
CiAJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUQ2MDlCQTExNDVCMDcxMDBD
ODY4NEUgLyogRE9NRm9ybURhdGEuY3BwICovOyB9OwogCQkyRUQ2MDlCRDExNDVCMDcxMDBDODY4
NEUgLyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oICovOyB9
OwotCQkyRUVENTc1MjEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTc0RDEyMTA5
RUQwMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi87IH07Ci0JCTJFRUQ1NzUzMTIx
MDlFRDAwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTc0RTEyMTA5RUQwMDA3NjU2QkIgLyogQmxv
YlJlZ2lzdHJ5SW1wbC5oICovOyB9OwotCQkyRUVENTc1NDEyMTA5RUQwMDA3NjU2QkIgLyogQmxv
YlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRUVENTc0RjEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlN0b3JhZ2VEYXRhLmggKi87IH07
CiAJCTJFRUQ1NzU1MTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NzUwMTIxMDlFRDAwMDc2NTZC
QiAvKiBCbG9iVVJMLmNwcCAqLzsgfTsKIAkJMkVFRDU3NTYxMjEwOUVEMDAwNzY1NkJCIC8qIEJs
b2JVUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
RUQ1NzUxMTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmggKi87IH07Ci0JCTJFRUQ1NzU4MTIx
MDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NzU3MTIxMDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVn
aXN0cnkuaCAqLzsgfTsKLQkJMkVFRDU3NUIxMjEwOUVGMzAwNzY1NkJCIC8qIEJsb2JEYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NzU5
MTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgKi87IH07Ci0JCTJFRUQ1NzVDMTIxMDlF
RjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkVFRDU3NUExMjEwOUVGMzAwNzY1NkJCIC8qIEJsb2JEYXRhLmggKi87
IH07CiAJCTJFRUQ1N0ZEMTIxNEE5QzIwMDc2NTZCQiAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1
N0ZCMTIxNEE5QzIwMDc2NTZCQiAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCAqLzsgfTsK
IAkJMkVFRDU3RkUxMjE0QTlDMjAwNzY1NkJCIC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1N0ZDMTIx
NEE5QzIwMDc2NTZCQiAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggKi87IH07CiAJCTMxMjg4
RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNkUwRTMwMDVENjAw
MzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi87IH07CkBAIC02NTAyLDYgKzY1
MDIsMTIgQEAKIAkJMkU0MzQ2NDMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJUaHJlYWQuaDsgcGF0aCA9IHdv
cmtlcnMvV29ya2VyVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFNDM0
NjU2MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcm9zc1RocmVhZENvcGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFNDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1Ro
cmVhZENvcGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVh
ZENvcGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTdDQTI3MDEyMUExQURD
MDA2QzkzMUUgLyogQmxvYkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQmxvYkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTdDQTI3
MTEyMUExQURFMDA2QzkzMUUgLyogQmxvYkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmxvYkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU3Q0Ey
NzIxMjFBMUFERTAwNkM5MzFFIC8qIEJsb2JSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCbG9iUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkU3Q0EyNzMxMjFBMUFERTAwNkM5MzFFIC8qIEJsb2JSZWdpc3RyeUltcGwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvYlJlZ2lzdHJ5SW1wbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFN0NBMjc0MTIxQTFBREUwMDZDOTMxRSAvKiBC
bG9iUmVnaXN0cnlJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JS
ZWdpc3RyeUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU3Q0EyNzUxMjFB
MUFERTAwNkM5MzFFIC8qIEJsb2JTdG9yYWdlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCbG9iU3RvcmFnZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkU5NEYzQ0IxMThCOTA4RTAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJFOTRGM0NDMTE4QjkwOEUwMEI3Rjc1RCAvKiBGaWxlUmVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVSZWFkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU5NEY0MjcxMTkyMDVCMzAwQjdGNzVEIC8qIEZpbGVSZWFk
ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEZpbGVSZWFkZXIuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjUxOCwxNCArNjUyNCw4IEBACiAJCTJFQ0Y3QUUwMTAxNjJC
NTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFcnJv
ckV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5QkExMTQ1QjA3
MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERPTUZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkVENjA5QkIxMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTJFRUQ1NzREMTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JSZWdpc3RyeUltcGwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRUVENTc0RTEyMTA5RUQwMDA3NjU2QkIg
LyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
bG9iUmVnaXN0cnlJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFRUQ1NzRG
MTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iU3RvcmFnZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQmxvYlN0b3JhZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJFRUQ1NzUwMTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JVUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRUVENTc1MTEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlVSTC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iVVJMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFRUQ1NzU3MTIxMDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYlJlZ2lzdHJ5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFRUQ1NzU5MTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFRUQ1NzVBMTIxMDlFRjMwMDc2NTZCQiAv
KiBCbG9iRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iRGF0YS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUVENTdGQjEyMTRBOUMyMDA3NjU2QkIg
LyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkVFRDU3RkMxMjE0QTlDMjAwNzY1NkJCIC8qIFRocmVhZGFibGVCbG9iUmVn
aXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RTBFMzAwNUQ2
MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjQyOSw2ICsxMjQyOSwxMiBAQAogCQkJCTkzNEY3MTM3MEQ1
QTZFRkYwMDAxOEQ2OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwICovLAogCQkJ
CTkzNEY3MTM5MEQ1QTZGMTAwMDAxOEQ2OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2Uu
aCAqLywKIAkJCQlFMTI0NzQ4MzEwQUExNjFEMDBCNzk0OTMgLyogQXV0aGVudGljYXRpb25DbGll
bnQuaCAqLywKKwkJCQkyRTdDQTI3MDEyMUExQURDMDA2QzkzMUUgLyogQmxvYkRhdGEuY3BwICov
LAorCQkJCTJFN0NBMjcxMTIxQTFBREUwMDZDOTMxRSAvKiBCbG9iRGF0YS5oICovLAorCQkJCTJF
N0NBMjcyMTIxQTFBREUwMDZDOTMxRSAvKiBCbG9iUmVnaXN0cnkuaCAqLywKKwkJCQkyRTdDQTI3
MzEyMUExQURFMDA2QzkzMUUgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi8sCisJCQkJMkU3Q0Ey
NzQxMjFBMUFERTAwNkM5MzFFIC8qIEJsb2JSZWdpc3RyeUltcGwuaCAqLywKKwkJCQkyRTdDQTI3
NTEyMUExQURFMDA2QzkzMUUgLyogQmxvYlN0b3JhZ2VEYXRhLmggKi8sCiAJCQkJNTE0Qzc2NTgw
Q0U5MjNBMTAwN0VGM0NEIC8qIENyZWRlbnRpYWwuY3BwICovLAogCQkJCTUxNEM3NjU5MENFOTIz
QTEwMDdFRjNDRCAvKiBDcmVkZW50aWFsLmggKi8sCiAJCQkJNTFBMDUyMzIxMDU4Nzc0RjAwQ0M5
RTk1IC8qIENyZWRlbnRpYWxTdG9yYWdlLmNwcCAqLywKQEAgLTEzOTYwLDkgKzEzOTY2LDYgQEAK
IAkJCQk4OUJFRDVFOTExQkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1aWxkZXIuY3BwICovLAogCQkJ
CTg5QkVENUVBMTFCRTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5oICovLAogCQkJCTg5Q0Qw
Mjc5MTFDODU5QTgwMDcwQjc5MSAvKiBCbG9iQnVpbGRlci5pZGwgKi8sCi0JCQkJMkVFRDU3NEQx
MjEwOUVEMDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeUltcGwuY3BwICovLAotCQkJCTJFRUQ1NzRF
MTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggKi8sCi0JCQkJMkVFRDU3NEYx
MjEwOUVEMDAwNzY1NkJCIC8qIEJsb2JTdG9yYWdlRGF0YS5oICovLAogCQkJCTJFRUQ1NzUwMTIx
MDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAqLywKIAkJCQkyRUVENTc1MTEyMTA5RUQwMDA3
NjU2QkIgLyogQmxvYlVSTC5oICovLAogCQkJCTkzQzQ0MUVEMEY4MTNBMUEwMEMxQTYzNCAvKiBD
b2xsZWN0aW9uQ2FjaGUuY3BwICovLApAQCAtMTY1NTMsMTEgKzE2NTU2LDggQEAKIAkJCQlCQ0ZC
MkY3NDA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuY3BwICovLAogCQkJCUJDRkIyRjc1MDk3QTJF
MUEwMEJBNzAzRCAvKiBBcmVuYS5oICovLAogCQkJCTUxRTFFQ0IxMEM5MUM1NTYwMERDMjU1QiAv
KiBBdXRvZHJhaW5lZFBvb2wuaCAqLywKLQkJCQkyRUVENTc1OTEyMTA5RUYzMDA3NjU2QkIgLyog
QmxvYkRhdGEuY3BwICovLAotCQkJCTJFRUQ1NzVBMTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0
YS5oICovLAogCQkJCTg5ODhFMTBDMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi8s
CiAJCQkJODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggKi8sCi0JCQkJMkVF
RDU3NTcxMjEwOUVFNDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5oICovLAogCQkJCUJDQzhDRkNB
MDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEuZ3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRC
NUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk0MUQwMTVDODBGNEI1Qzcx
MDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywKQEAgLTE3NjY0LDExICsxNzY2NCw3IEBACiAJ
CQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODlCRUQ1RUMxMUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyRUVENTc1QzEyMTA5RUYzMDA3NjU2QkIgLyogQmxvYkRhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg5ODhFMTBGMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMkVFRDU3NTgxMjEwOUVFNDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkVFRDU3NTMxMjEwOUVEMDAwNzY1NkJCIC8qIEJsb2JSZWdp
c3RyeUltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTJFRUQ1NzU0MTIxMDlFRDAwMDc2NTZCQiAv
KiBCbG9iU3RvcmFnZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRUQ1NzU2MTIxMDlFRDAw
MDc2NTZCQiAvKiBCbG9iVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCRTA4MjQ1RTU5
MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVF
MTBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDMw
Miw2ICsyMDI5OCwxMCBAQAogCQkJCTg5OUFCQ0FBMTIxNUZBNTUwMEY5RjIxOSAvKiBGaWxlU3lz
dGVtQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg5OUFCQ0FCMTIxNUZBNUEwMEY5RjIx
OSAvKiBGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk5QUJDQjkxMjE1RkFCNTAwRjlGMjE5
IC8qIEVudHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTdDQTI3NzEyMUExQURFMDA2QzkzMUUg
LyogQmxvYkRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFN0NBMjc4MTIxQTFBREUwMDZDOTMx
RSAvKiBCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFN0NBMjdBMTIxQTFBREUw
MDZDOTMxRSAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTdDQTI3
QjEyMUExQURFMDA2QzkzMUUgLyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTIwMzYxLDcgKzIwMzYxLDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5
VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwog
CQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJ
RW5nbGlzaCwKQEAgLTIwNjY4LDkgKzIwNjY3LDcgQEAKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBE
N0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVBRkFGMEUxMEUy
QUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODlCRUQ1RUIxMUJF
MTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJFRUQ1
NzVCMTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
OTg4RTEwRTExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJMkVFRDU3NTIxMjEwOUVEMDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeUltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVFRDU3NTUxMjEwOUVEMDAwNzY1NkJCIC8qIEJsb2JVUkwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0
aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBi
cmVha19saW5lcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIyNzUxLDYgKzIyNzQ4LDggQEAKIAkJ
CQk4OTlBQkM4NDEyMTVGMDNEMDBGOUYyMTkgLyogSlNGaWxlU3lzdGVtQ2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODk5QUJDODYxMjE1RjBEODAwRjlGMjE5IC8qIERPTUZpbGVTeXN0
ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk5QUJDQkExMjE1RkFCODAwRjlGMjE5IC8qIEVu
dHJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJFN0NBMjc2MTIxQTFBREUwMDZDOTMxRSAvKiBC
bG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRTdDQTI3OTEyMUExQURFMDA2QzkzMUUg
LyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJ
bXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJiYjhmMC4uMDAwMDAwMAot
LS0gYS9XZWJDb3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkJsb2JSZWdpc3Ry
eUltcGwuaCIKLQotI2luY2x1ZGUgIkZpbGVTdHJlYW0uaCIKLSNpbmNsdWRlICJGaWxlU3RyZWFt
UHJveHkuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJv
ci5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
ZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJl
c3BvbnNlLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBCbG9iUmVnaXN0cnlJ
bXBsOjpzaG91bGRMb2FkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBj
b25zdAotewotICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBub3QgZmV0Y2hlZCB1c2luZyB0aGUg
R0VUIG1ldGhvZCwgYmFpbCBvdXQuCi0gICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShyZXF1ZXN0
Lmh0dHBNZXRob2QoKSwgIkdFVCIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJlZ2lzdHJ5SW1w
bDo6Y3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBS
ZXNvdXJjZUhhbmRsZUNsaWVudCopCi17Ci0gICAgaWYgKCFzaG91bGRMb2FkUmVzb3VyY2UocmVx
dWVzdCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRklYTUU6IFRvIGJlIGltcGxlbWVu
dGVkLgotICAgIHJldHVybiAwOwotfQotCi1ib29sIEJsb2JSZWdpc3RyeUltcGw6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJj
ZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCi17Ci0gICAgaWYgKCFz
aG91bGRMb2FkUmVzb3VyY2UocmVxdWVzdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIEZJWE1FOiBUbyBiZSBpbXBsZW1lbnRlZC4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUJs
b2JSZWdpc3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEJsb2JSZWdpc3RyeUltcGwsIGlu
c3RhbmNlLCAoKSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotfQotCi12b2lkIEJsb2JSZWdpc3Ry
eUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdlRGF0
YSwgY29uc3QgQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3QmIGl0ZW1zKQotewotICAgIGZvciAoQmxv
YlN0b3JhZ2VEYXRhSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVtcy5iZWdpbigp
OyBpdGVyICE9IGl0ZW1zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnR5cGUg
PT0gQmxvYlN0b3JhZ2VEYXRhSXRlbTo6RGF0YSkKLSAgICAgICAgICAgIGJsb2JTdG9yYWdlRGF0
YS0+YXBwZW5kRGF0YShpdGVyLT5kYXRhLCBpdGVyLT5vZmZzZXQsIGl0ZXItPmxlbmd0aCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnR5cGUgPT0gQmxvYlN0b3Jh
Z2VEYXRhSXRlbTo6RmlsZSk7Ci0gICAgICAgICAgICBibG9iU3RvcmFnZURhdGEtPmFwcGVuZEZp
bGUoaXRlci0+cGF0aCwgaXRlci0+b2Zmc2V0LCBpdGVyLT5sZW5ndGgsIGl0ZXItPmV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQmxvYlJlZ2lz
dHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW1zKEJsb2JTdG9yYWdlRGF0YSogYmxvYlN0b3JhZ2VE
YXRhLCBjb25zdCBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdCYgaXRlbXMsIGxvbmcgbG9uZyBvZmZz
ZXQsIGxvbmcgbG9uZyBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGxlbmd0aCAhPSBCbG9iRGF0YUl0
ZW06OnRvRW5kT2ZGaWxlKTsKLQotICAgIEJsb2JTdG9yYWdlRGF0YUl0ZW1MaXN0Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gaXRlbXMuYmVnaW4oKTsKLSAgICBpZiAob2Zmc2V0KSB7Ci0gICAgICAg
IGZvciAoOyBpdGVyICE9IGl0ZW1zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChv
ZmZzZXQgPj0gaXRlci0+bGVuZ3RoKQotICAgICAgICAgICAgICAgIG9mZnNldCAtPSBpdGVyLT5s
ZW5ndGg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmb3IgKDsgaXRlciAhPSBpdGVtcy5lbmQoKSAmJiBsZW5ndGggPiAw
OyArK2l0ZXIpIHsKLSAgICAgICAgbG9uZyBsb25nIGN1cnJlbnRMZW5ndGggPSBpdGVyLT5sZW5n
dGggLSBvZmZzZXQ7Ci0gICAgICAgIGxvbmcgbG9uZyBuZXdMZW5ndGggPSBjdXJyZW50TGVuZ3Ro
ID4gbGVuZ3RoID8gbGVuZ3RoIDogY3VycmVudExlbmd0aDsKLSAgICAgICAgaWYgKGl0ZXItPnR5
cGUgPT0gQmxvYlN0b3JhZ2VEYXRhSXRlbTo6RGF0YSkKLSAgICAgICAgICAgIGJsb2JTdG9yYWdl
RGF0YS0+YXBwZW5kRGF0YShpdGVyLT5kYXRhLCBpdGVyLT5vZmZzZXQgKyBvZmZzZXQsIG5ld0xl
bmd0aCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnR5cGUgPT0g
QmxvYlN0b3JhZ2VEYXRhSXRlbTo6RmlsZSk7Ci0gICAgICAgICAgICBibG9iU3RvcmFnZURhdGEt
PmFwcGVuZEZpbGUoaXRlci0+cGF0aCwgaXRlci0+b2Zmc2V0ICsgb2Zmc2V0LCBuZXdMZW5ndGgs
IGl0ZXItPmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgICAgIH0KLSAgICAgICAgb2Zm
c2V0ID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9i
VVJMKGNvbnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCi17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIFJlZlB0cjxCbG9iU3RvcmFnZURhdGE+
IGJsb2JTdG9yYWdlRGF0YSA9IEJsb2JTdG9yYWdlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgYmxvYlN0
b3JhZ2VEYXRhLT5zZXRDb250ZW50VHlwZShibG9iRGF0YS0+Y29udGVudFR5cGUoKSk7Ci0gICAg
YmxvYlN0b3JhZ2VEYXRhLT5zZXRDb250ZW50RGlzcG9zaXRpb24oYmxvYkRhdGEtPmNvbnRlbnRE
aXNwb3NpdGlvbigpKTsKLQotICAgIGZvciAoQmxvYkRhdGFJdGVtTGlzdDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGJsb2JEYXRhLT5pdGVtcygpLmJlZ2luKCk7IGl0ZXIgIT0gYmxvYkRhdGEtPml0
ZW1zKCkuZW5kKCk7ICsraXRlcikgewotICAgICAgICBzd2l0Y2ggKGl0ZXItPnR5cGUpIHsKLSAg
ICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkRhdGE6Ci0gICAgICAgICAgICBibG9iU3RvcmFnZURh
dGEtPmFwcGVuZERhdGEoaXRlci0+ZGF0YSwgMCwgaXRlci0+ZGF0YS5sZW5ndGgoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6Ci0gICAgICAg
ICAgICBibG9iU3RvcmFnZURhdGEtPmFwcGVuZEZpbGUoaXRlci0+cGF0aCwgaXRlci0+b2Zmc2V0
LCBpdGVyLT5sZW5ndGgsIGl0ZXItPmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkJsb2I6Ci0gICAgICAgICAg
ICBpZiAobV9ibG9icy5jb250YWlucyhpdGVyLT51cmwuc3RyaW5nKCkpKQotICAgICAgICAgICAg
ICAgIGFwcGVuZFN0b3JhZ2VJdGVtcyhibG9iU3RvcmFnZURhdGEuZ2V0KCksIG1fYmxvYnMuZ2V0
KGl0ZXItPnVybC5zdHJpbmcoKSktPml0ZW1zKCksIGl0ZXItPm9mZnNldCwgaXRlci0+bGVuZ3Ro
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICBtX2Jsb2Jz
LnNldCh1cmwuc3RyaW5nKCksIGJsb2JTdG9yYWdlRGF0YSk7Ci19Ci0KLXZvaWQgQmxvYlJlZ2lz
dHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3Jj
VVJMKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBSZWZQdHI8QmxvYlN0
b3JhZ2VEYXRhPiBzcmMgPSBtX2Jsb2JzLmdldChzcmNVUkwuc3RyaW5nKCkpOwotICAgIEFTU0VS
VChzcmMpOwotICAgIGlmICghc3JjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Qmxv
YlN0b3JhZ2VEYXRhPiBibG9iU3RvcmFnZURhdGEgPSBCbG9iU3RvcmFnZURhdGE6OmNyZWF0ZSgp
OwotICAgIGJsb2JTdG9yYWdlRGF0YS0+c2V0Q29udGVudFR5cGUoc3JjLT5jb250ZW50VHlwZSgp
KTsKLSAgICBibG9iU3RvcmFnZURhdGEtPnNldENvbnRlbnREaXNwb3NpdGlvbihzcmMtPmNvbnRl
bnREaXNwb3NpdGlvbigpKTsKLSAgICBhcHBlbmRTdG9yYWdlSXRlbXMoYmxvYlN0b3JhZ2VEYXRh
LmdldCgpLCBzcmMtPml0ZW1zKCkpOwotICAgIAotICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmco
KSwgYmxvYlN0b3JhZ2VEYXRhKTsKLX0KLQotdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjp1bnJlZ2lz
dGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBtX2Jsb2JzLnJlbW92ZSh1cmwuc3RyaW5nKCkpOwotfQotCi1QYXNzUmVmUHRyPEJs
b2JTdG9yYWdlRGF0YT4gQmxvYlJlZ2lzdHJ5SW1wbDo6Z2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0
IEtVUkwmIHVybCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHJl
dHVybiBtX2Jsb2JzLmdldCh1cmwuc3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5oIGIvV2ViQ29y
ZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDI2OTNiYy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQmxvYlJlZ2lzdHJ5SW1wbF9oCi0j
ZGVmaW5lIEJsb2JSZWdpc3RyeUltcGxfaAotCi0jaW5jbHVkZSAiQmxvYkRhdGEuaCIKLSNpbmNs
dWRlICJCbG9iUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJCbG9iU3RvcmFnZURhdGEuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBLVVJMOwotY2xhc3MgUmVzb3VyY2VFcnJv
cjsKLWNsYXNzIFJlc291cmNlSGFuZGxlOwotY2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7Ci1j
bGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotCi0vLyBCbG9i
UmVnaXN0cnlJbXBsIGlzIG5vdCB0aHJlYWQtc2FmZS4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGZyb20gbWFpbiB0aHJlYWQuCi1jbGFzcyBCbG9iUmVnaXN0cnlJbXBsIDogcHVibGljIEJsb2JS
ZWdpc3RyeSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QmxvYlJlZ2lzdHJ5SW1wbCgpIHsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0
cjxCbG9iRGF0YT4pOwotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VS
TCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7Ci0gICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9i
VVJMKGNvbnN0IEtVUkwmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFu
ZGxlQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBib29sIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8Y2hhcj4mIGRhdGEpOwotCi0gICAgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+
IGdldEJsb2JEYXRhRnJvbVVSTChjb25zdCBLVVJMJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
Ym9vbCBzaG91bGRMb2FkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBj
b25zdDsKLSAgICB2b2lkIGFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqLCBjb25z
dCBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdCYpOwotICAgIHZvaWQgYXBwZW5kU3RvcmFnZUl0ZW1z
KEJsb2JTdG9yYWdlRGF0YSosIGNvbnN0IEJsb2JTdG9yYWdlRGF0YUl0ZW1MaXN0JiwgbG9uZyBs
b25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPEJsb2JTdG9yYWdlRGF0YT4gPiBtX2Jsb2JzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gQmxvYlJlZ2lzdHJ5SW1wbF9oCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvQmxvYlN0b3JhZ2VEYXRhLmggYi9XZWJDb3JlL2h0bWwvQmxvYlN0b3JhZ2VEYXRhLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MTI1YTQuLjAwMDAwMDAKLS0tIGEvV2Vi
Q29yZS9odG1sL0Jsb2JTdG9yYWdlRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEJsb2JTdG9yYWdlRGF0YV9oCi0jZGVmaW5lIEJsb2JTdG9yYWdlRGF0YV9oCi0K
LSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQmxvYlN0b3JhZ2VEYXRhSXRlbSB7Ci0g
ICAgZW51bSBCbG9iU3RvcmVEYXRhSXRlbVR5cGUgeyBEYXRhLCBGaWxlIH07Ci0gICAgQmxvYlN0
b3JlRGF0YUl0ZW1UeXBlIHR5cGU7Ci0gICAgbG9uZyBsb25nIG9mZnNldDsKLSAgICBsb25nIGxv
bmcgbGVuZ3RoOwotCi0gICAgLy8gRm9yIHN0cmluZyBkYXRhLgotICAgIENTdHJpbmcgZGF0YTsK
LQotICAgIC8vIEZvciBmaWxlIGRhdGEuCi0gICAgU3RyaW5nIHBhdGg7Ci0gICAgZG91YmxlIGV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKLQotICAgIEJsb2JTdG9yYWdlRGF0YUl0ZW0oY29uc3Qg
Q1N0cmluZyYgZGF0YSwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKLSAgICAg
ICAgOiB0eXBlKERhdGEpCi0gICAgICAgICwgb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBsZW5n
dGgobGVuZ3RoKQotICAgICAgICAsIGRhdGEoZGF0YSkKLSAgICAgICAgLCBleHBlY3RlZE1vZGlm
aWNhdGlvblRpbWUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgQmxvYlN0b3JhZ2VEYXRhSXRlbShj
b25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGRv
dWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCi0gICAgICAgIDogdHlwZShGaWxlKQotICAg
ICAgICAsIG9mZnNldChvZmZzZXQpCi0gICAgICAgICwgbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAg
LCBwYXRoKHBhdGgpCi0gICAgICAgICwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSkKLSAgICB7Ci0gICAgfQotfTsKLQotdHlwZWRlZiBWZWN0b3I8Qmxv
YlN0b3JhZ2VEYXRhSXRlbT4gQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3Q7Ci0KLWNsYXNzIEJsb2JT
dG9yYWdlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2JTdG9yYWdlRGF0YT4gewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gY3JlYXRlKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYlN0b3JhZ2VEYXRhKCkpOwotICAgIH0K
LQotICAgIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRUeXBlOyB9Ci0gICAgdm9pZCBzZXRDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlKSB7IG1fY29udGVudFR5cGUgPSBjb250ZW50VHlwZTsgfQotCi0gICAgY29uc3QgU3RyaW5n
JiBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnREaXNwb3NpdGlv
bjsgfQotICAgIHZvaWQgc2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29udGVu
dERpc3Bvc2l0aW9uKSB7IG1fY29udGVudERpc3Bvc2l0aW9uID0gY29udGVudERpc3Bvc2l0aW9u
OyB9Ci0gICAgCi0gICAgY29uc3QgQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3QmIGl0ZW1zKCkgY29u
c3QgeyByZXR1cm4gbV9pdGVtczsgfQotCi0gICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IENTdHJp
bmcmIGRhdGEsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCi0gICAgewotICAg
ICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iU3RvcmFnZURhdGFJdGVtKGRhdGEsIG9mZnNldCwgbGVu
Z3RoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
bG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZp
Y2F0aW9uVGltZSkKLSAgICB7Ci0gICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JTdG9yYWdlRGF0
YUl0ZW0ocGF0aCwgb2Zmc2V0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9jb250ZW50VHlwZTsKLSAgICBTdHJpbmcg
bV9jb250ZW50RGlzcG9zaXRpb247Ci0gICAgQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3QgbV9pdGVt
czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEJsb2JTdG9yYWdl
RGF0YV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JEYXRhLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vQmxvYkRhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
YjI1NmQwLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkRhdGEuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
bG9iRGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGxvbmcgbG9uZyBCbG9i
RGF0YUl0ZW06OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUgQmxvYkRhdGFJdGVtOjpk
b05vdENoZWNrRmlsZUNoYW5nZSA9IDA7Ci0KLXZvaWQgQmxvYkRhdGFJdGVtOjpjb3B5KGNvbnN0
IEJsb2JEYXRhSXRlbSYgaXRlbSkKLXsKLSAgICB0eXBlID0gaXRlbS50eXBlOwotICAgIGRhdGEg
PSBpdGVtLmRhdGE7IC8vIFRoaXMgaXMgT0sgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBzdG9yYWdl
IGlzIFZlY3RvcjxjaGFyPi4KLSAgICBwYXRoID0gaXRlbS5wYXRoLmNyb3NzVGhyZWFkU3RyaW5n
KCk7Ci0gICAgdXJsID0gaXRlbS51cmwuY29weSgpOwotICAgIG9mZnNldCA9IGl0ZW0ub2Zmc2V0
OwotICAgIGxlbmd0aCA9IGl0ZW0ubGVuZ3RoOwotICAgIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZSA9IGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lOwotfQotCi1QYXNzT3duUHRyPEJsb2JE
YXRhPiBCbG9iRGF0YTo6Y29weSgpIGNvbnN0Ci17Ci0gICAgT3duUHRyPEJsb2JEYXRhPiBibG9i
RGF0YSA9IGFkb3B0UHRyKG5ldyBCbG9iRGF0YSgpKTsKLSAgICBibG9iRGF0YS0+bV9jb250ZW50
VHlwZSA9IG1fY29udGVudFR5cGUuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKLSAgICBibG9iRGF0YS0+
bV9jb250ZW50RGlzcG9zaXRpb24gPSBtX2NvbnRlbnREaXNwb3NpdGlvbi5jcm9zc1RocmVhZFN0
cmluZygpOwotICAgIGJsb2JEYXRhLT5tX2l0ZW1zLnJlc2l6ZShtX2l0ZW1zLnNpemUoKSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKQotICAgICAgICBi
bG9iRGF0YS0+bV9pdGVtcy5hdChpKS5jb3B5KG1faXRlbXMuYXQoaSkpOwotCi0gICAgcmV0dXJu
IGJsb2JEYXRhLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBCbG9iRGF0YTo6YXBwZW5kRGF0YShjb25z
dCBDU3RyaW5nJiBkYXRhKQotewotICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShkYXRh
KSk7Ci19Ci0KLXZvaWQgQmxvYkRhdGE6OmFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQot
ewotICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShwYXRoKSk7Ci19Ci0KLXZvaWQgQmxv
YkRhdGE6OmFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBs
b25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQotewotICAg
IG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShwYXRoLCBvZmZzZXQsIGxlbmd0aCwgZXhwZWN0
ZWRNb2RpZmljYXRpb25UaW1lKSk7Ci19Ci0KLXZvaWQgQmxvYkRhdGE6OmFwcGVuZEJsb2IoY29u
c3QgS1VSTCYgdXJsLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQotewotICAg
IG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbSh1cmwsIG9mZnNldCwgbGVuZ3RoKSk7Ci19Ci0K
LXZvaWQgQmxvYkRhdGE6OnN3YXBJdGVtcyhCbG9iRGF0YUl0ZW1MaXN0JiBpdGVtcykKLXsKLSAg
ICBtX2l0ZW1zLnN3YXAoaXRlbXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JEYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL0Js
b2JEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3Y2RmZGQuLjAwMDAwMDAK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEJsb2JEYXRhX2gKLSNkZWZpbmUgQmxvYkRhdGFfaAotCi0jaW5jbHVk
ZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBCbG9iRGF0YUl0ZW0g
ewotICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgdG9FbmRPZkZpbGU7Ci0gICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKLQotICAgIC8vIERlZmF1bHQgY29uc3Ry
dWN0b3IuCi0gICAgQmxvYkRhdGFJdGVtKCkKLSAgICAgICAgOiBvZmZzZXQoMCkKLSAgICAgICAg
LCBsZW5ndGgodG9FbmRPZkZpbGUpCi0gICAgICAgICwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1l
KGRvTm90Q2hlY2tGaWxlQ2hhbmdlKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBDb25zdHJ1Y3Rv
ciBmb3IgU3RyaW5nIHR5cGUuCi0gICAgQmxvYkRhdGFJdGVtKGNvbnN0IENTdHJpbmcmIGRhdGEp
Ci0gICAgICAgIDogdHlwZShEYXRhKQotICAgICAgICAsIGRhdGEoZGF0YSkKLSAgICAgICAgLCBv
ZmZzZXQoMCkKLSAgICAgICAgLCBsZW5ndGgodG9FbmRPZkZpbGUpCi0gICAgICAgICwgZXhwZWN0
ZWRNb2RpZmljYXRpb25UaW1lKGRvTm90Q2hlY2tGaWxlQ2hhbmdlKQotICAgIHsKLSAgICB9Ci0K
LSAgICAvLyBDb25zdHJ1Y3RvciBmb3IgRmlsZSB0eXBlIChjb21wbGV0ZSBmaWxlKS4KLSAgICBC
bG9iRGF0YUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKQotICAgICAgICA6IHR5cGUoRmlsZSkKLSAg
ICAgICAgLCBwYXRoKHBhdGgpCi0gICAgICAgICwgb2Zmc2V0KDApCi0gICAgICAgICwgbGVuZ3Ro
KHRvRW5kT2ZGaWxlKQotICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZShkb05vdENo
ZWNrRmlsZUNoYW5nZSkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gQ29uc3RydWN0b3IgZm9yIEZp
bGUgdHlwZSAocGFydGlhbCBmaWxlKS4KLSAgICBCbG9iRGF0YUl0ZW0oY29uc3QgU3RyaW5nJiBw
YXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRN
b2RpZmljYXRpb25UaW1lKQotICAgICAgICA6IHR5cGUoRmlsZSkKLSAgICAgICAgLCBwYXRoKHBh
dGgpCi0gICAgICAgICwgb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQot
ICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZShleHBlY3RlZE1vZGlmaWNhdGlvblRp
bWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICAvLyBDb25zdHJ1Y3RvciBmb3IgQmxvYiB0eXBl
LgotICAgIEJsb2JEYXRhSXRlbShjb25zdCBLVVJMJiB1cmwsIGxvbmcgbG9uZyBvZmZzZXQsIGxv
bmcgbG9uZyBsZW5ndGgpCi0gICAgICAgIDogdHlwZShCbG9iKQotICAgICAgICAsIHVybCh1cmwp
Ci0gICAgICAgICwgb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQotICAg
ICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5nZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgLy8gR2V0cyBhIGNvcHkgb2YgdGhlIGRhdGEgc3VpdGFibGUgZm9y
IHBhc3NpbmcgdG8gYW5vdGhlciB0aHJlYWQuCi0gICAgdm9pZCBjb3B5KGNvbnN0IEJsb2JEYXRh
SXRlbSYpOwotCi0gICAgZW51bSB7IERhdGEsIEZpbGUsIEJsb2IgfSB0eXBlOwotICAgIAotICAg
IC8vIEZvciBEYXRhIHR5cGUuCi0gICAgQ1N0cmluZyBkYXRhOwotCi0gICAgLy8gRm9yIEZpbGUg
dHlwZS4KLSAgICBTdHJpbmcgcGF0aDsKLQotICAgIC8vIEZvciBCbG9iIHR5cGUuCi0gICAgS1VS
TCB1cmw7Ci0KLSAgICAvLyBGb3IgRmlsZSBhbmQgQmxvYiB0eXBlLgotICAgIGxvbmcgbG9uZyBv
ZmZzZXQ7Ci0gICAgbG9uZyBsb25nIGxlbmd0aDsKLQotICAgIC8vIEZvciBGaWxlIHR5cGUgb25s
eS4KLSAgICBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lOwotfTsKLQotdHlwZWRlZiBW
ZWN0b3I8QmxvYkRhdGFJdGVtPiBCbG9iRGF0YUl0ZW1MaXN0OwotCi1jbGFzcyBCbG9iRGF0YSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJsb2JEYXRhKCkpOwotICAgIH0KLQotICAg
IC8vIEdldHMgYSBjb3B5IG9mIHRoZSBkYXRhIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGFub3Ro
ZXIgdGhyZWFkLgotICAgIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNvcHkoKSBjb25zdDsKLQotICAg
IGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRUeXBl
OyB9Ci0gICAgdm9pZCBzZXRDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSB7
IG1fY29udGVudFR5cGUgPSBjb250ZW50VHlwZTsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBjb250
ZW50RGlzcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnREaXNwb3NpdGlvbjsgfQot
ICAgIHZvaWQgc2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29udGVudERpc3Bv
c2l0aW9uKSB7IG1fY29udGVudERpc3Bvc2l0aW9uID0gY29udGVudERpc3Bvc2l0aW9uOyB9Ci0K
LSAgICBjb25zdCBCbG9iRGF0YUl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1faXRl
bXM7IH0KLSAgICB2b2lkIHN3YXBJdGVtcyhCbG9iRGF0YUl0ZW1MaXN0Jik7Ci0gICAgCi0gICAg
dm9pZCBhcHBlbmREYXRhKGNvbnN0IENTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZEZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKTsKLSAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2Rp
ZmljYXRpb25UaW1lKTsKLSAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgS1VSTCYsIGxvbmcgbG9u
ZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOwotCi1wcml2YXRlOgotICAgIEJsb2JEYXRhKCkg
eyB9Ci0KLSAgICBTdHJpbmcgbV9jb250ZW50VHlwZTsKLSAgICBTdHJpbmcgbV9jb250ZW50RGlz
cG9zaXRpb247Ci0gICAgQmxvYkRhdGFJdGVtTGlzdCBtX2l0ZW1zOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQmxvYkRhdGFfaApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaCBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYlJlZ2lzdHJ5
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDdiMWMuLjAwMDAwMDAKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEJsb2JSZWdpc3RyeV9oCi0jZGVmaW5lIEJsb2JSZWdpc3RyeV9oCi0KLSNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJs
b2JEYXRhOwotY2xhc3MgS1VSTDsKLWNsYXNzIFJlc291cmNlRXJyb3I7Ci1jbGFzcyBSZXNvdXJj
ZUhhbmRsZTsKLWNsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50OwotY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLQotLy8gQmxvYlJlZ2lzdHJ5IGlzIG5vdCB0
aHJlYWQtc2FmZS4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQuCi1j
bGFzcyBCbG9iUmVnaXN0cnkgewotcHVibGljOgotICAgIHN0YXRpYyBCbG9iUmVnaXN0cnkmIGlu
c3RhbmNlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwm
LCBQYXNzT3duUHRyPEJsb2JEYXRhPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJs
b2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJikgPSAwOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3Vy
Y2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsKLQot
ICAgIHZpcnR1YWwgfkJsb2JSZWdpc3RyeSgpIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gQmxvYlJlZ2lzdHJ5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMjU2ZDAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCkBA
IC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBsb25nIGxvbmcgQmxvYkRhdGFJdGVtOjp0
b0VuZE9mRmlsZSA9IC0xOworY29uc3QgZG91YmxlIEJsb2JEYXRhSXRlbTo6ZG9Ob3RDaGVja0Zp
bGVDaGFuZ2UgPSAwOworCit2b2lkIEJsb2JEYXRhSXRlbTo6Y29weShjb25zdCBCbG9iRGF0YUl0
ZW0mIGl0ZW0pCit7CisgICAgdHlwZSA9IGl0ZW0udHlwZTsKKyAgICBkYXRhID0gaXRlbS5kYXRh
OyAvLyBUaGlzIGlzIE9LIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBWZWN0b3I8
Y2hhcj4uCisgICAgcGF0aCA9IGl0ZW0ucGF0aC5jcm9zc1RocmVhZFN0cmluZygpOworICAgIHVy
bCA9IGl0ZW0udXJsLmNvcHkoKTsKKyAgICBvZmZzZXQgPSBpdGVtLm9mZnNldDsKKyAgICBsZW5n
dGggPSBpdGVtLmxlbmd0aDsKKyAgICBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFzc093blB0cjxCbG9iRGF0YT4gQmxvYkRh
dGE6OmNvcHkoKSBjb25zdAoreworICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBhZG9w
dFB0cihuZXcgQmxvYkRhdGEoKSk7CisgICAgYmxvYkRhdGEtPm1fY29udGVudFR5cGUgPSBtX2Nv
bnRlbnRUeXBlLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgYmxvYkRhdGEtPm1fY29udGVudERp
c3Bvc2l0aW9uID0gbV9jb250ZW50RGlzcG9zaXRpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAg
ICBibG9iRGF0YS0+bV9pdGVtcy5yZXNpemUobV9pdGVtcy5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgYmxvYkRhdGEtPm1f
aXRlbXMuYXQoaSkuY29weShtX2l0ZW1zLmF0KGkpKTsKKworICAgIHJldHVybiBibG9iRGF0YS5y
ZWxlYXNlKCk7Cit9CisKK3ZvaWQgQmxvYkRhdGE6OmFwcGVuZERhdGEoY29uc3QgQ1N0cmluZyYg
ZGF0YSkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oZGF0YSkpOworfQorCit2
b2lkIEJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX2l0
ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0ocGF0aCkpOworfQorCit2b2lkIEJsb2JEYXRhOjphcHBl
bmRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxl
bmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBtX2l0ZW1zLmFw
cGVuZChCbG9iRGF0YUl0ZW0ocGF0aCwgb2Zmc2V0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0
aW9uVGltZSkpOworfQorCit2b2lkIEJsb2JEYXRhOjphcHBlbmRCbG9iKGNvbnN0IEtVUkwmIHVy
bCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBtX2l0ZW1zLmFw
cGVuZChCbG9iRGF0YUl0ZW0odXJsLCBvZmZzZXQsIGxlbmd0aCkpOworfQorCit2b2lkIEJsb2JE
YXRhOjpzd2FwSXRlbXMoQmxvYkRhdGFJdGVtTGlzdCYgaXRlbXMpCit7CisgICAgbV9pdGVtcy5z
d2FwKGl0ZW1zKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYkRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2NkZmRk
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmgK
QEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JEYXRhX2gKKyNkZWZpbmUgQmxvYkRhdGFfaAor
CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBCbG9i
RGF0YUl0ZW0geworICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgdG9FbmRPZkZpbGU7CisgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKKworICAgIC8vIERlZmF1
bHQgY29uc3RydWN0b3IuCisgICAgQmxvYkRhdGFJdGVtKCkKKyAgICAgICAgOiBvZmZzZXQoMCkK
KyAgICAgICAgLCBsZW5ndGgodG9FbmRPZkZpbGUpCisgICAgICAgICwgZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lKGRvTm90Q2hlY2tGaWxlQ2hhbmdlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBD
b25zdHJ1Y3RvciBmb3IgU3RyaW5nIHR5cGUuCisgICAgQmxvYkRhdGFJdGVtKGNvbnN0IENTdHJp
bmcmIGRhdGEpCisgICAgICAgIDogdHlwZShEYXRhKQorICAgICAgICAsIGRhdGEoZGF0YSkKKyAg
ICAgICAgLCBvZmZzZXQoMCkKKyAgICAgICAgLCBsZW5ndGgodG9FbmRPZkZpbGUpCisgICAgICAg
ICwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKGRvTm90Q2hlY2tGaWxlQ2hhbmdlKQorICAgIHsK
KyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciBmb3IgRmlsZSB0eXBlIChjb21wbGV0ZSBmaWxl
KS4KKyAgICBCbG9iRGF0YUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKQorICAgICAgICA6IHR5cGUo
RmlsZSkKKyAgICAgICAgLCBwYXRoKHBhdGgpCisgICAgICAgICwgb2Zmc2V0KDApCisgICAgICAg
ICwgbGVuZ3RoKHRvRW5kT2ZGaWxlKQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZShkb05vdENoZWNrRmlsZUNoYW5nZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0
b3IgZm9yIEZpbGUgdHlwZSAocGFydGlhbCBmaWxlKS4KKyAgICBCbG9iRGF0YUl0ZW0oY29uc3Qg
U3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUg
ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQorICAgICAgICA6IHR5cGUoRmlsZSkKKyAgICAgICAg
LCBwYXRoKHBhdGgpCisgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBsZW5ndGgo
bGVuZ3RoKQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZShleHBlY3RlZE1vZGlm
aWNhdGlvblRpbWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICAvLyBDb25zdHJ1Y3RvciBmb3Ig
QmxvYiB0eXBlLgorICAgIEJsb2JEYXRhSXRlbShjb25zdCBLVVJMJiB1cmwsIGxvbmcgbG9uZyBv
ZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCisgICAgICAgIDogdHlwZShCbG9iKQorICAgICAgICAs
IHVybCh1cmwpCisgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBsZW5ndGgobGVu
Z3RoKQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNo
YW5nZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gR2V0cyBhIGNvcHkgb2YgdGhlIGRhdGEgc3Vp
dGFibGUgZm9yIHBhc3NpbmcgdG8gYW5vdGhlciB0aHJlYWQuCisgICAgdm9pZCBjb3B5KGNvbnN0
IEJsb2JEYXRhSXRlbSYpOworCisgICAgZW51bSB7IERhdGEsIEZpbGUsIEJsb2IgfSB0eXBlOwor
ICAgIAorICAgIC8vIEZvciBEYXRhIHR5cGUuCisgICAgQ1N0cmluZyBkYXRhOworCisgICAgLy8g
Rm9yIEZpbGUgdHlwZS4KKyAgICBTdHJpbmcgcGF0aDsKKworICAgIC8vIEZvciBCbG9iIHR5cGUu
CisgICAgS1VSTCB1cmw7CisKKyAgICAvLyBGb3IgRmlsZSBhbmQgQmxvYiB0eXBlLgorICAgIGxv
bmcgbG9uZyBvZmZzZXQ7CisgICAgbG9uZyBsb25nIGxlbmd0aDsKKworICAgIC8vIEZvciBGaWxl
IHR5cGUgb25seS4KKyAgICBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lOworfTsKKwor
dHlwZWRlZiBWZWN0b3I8QmxvYkRhdGFJdGVtPiBCbG9iRGF0YUl0ZW1MaXN0OworCitjbGFzcyBC
bG9iRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJsb2JEYXRhKCkpOworICAg
IH0KKworICAgIC8vIEdldHMgYSBjb3B5IG9mIHRoZSBkYXRhIHN1aXRhYmxlIGZvciBwYXNzaW5n
IHRvIGFub3RoZXIgdGhyZWFkLgorICAgIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNvcHkoKSBjb25z
dDsKKworICAgIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRlbnRUeXBlOyB9CisgICAgdm9pZCBzZXRDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlKSB7IG1fY29udGVudFR5cGUgPSBjb250ZW50VHlwZTsgfQorCisgICAgY29uc3QgU3Ry
aW5nJiBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnREaXNwb3Np
dGlvbjsgfQorICAgIHZvaWQgc2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29u
dGVudERpc3Bvc2l0aW9uKSB7IG1fY29udGVudERpc3Bvc2l0aW9uID0gY29udGVudERpc3Bvc2l0
aW9uOyB9CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsgcmV0
dXJuIG1faXRlbXM7IH0KKyAgICB2b2lkIHN3YXBJdGVtcyhCbG9iRGF0YUl0ZW1MaXN0Jik7Cisg
ICAgCisgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IENTdHJpbmcmKTsKKyAgICB2b2lkIGFwcGVu
ZEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhw
ZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgS1VSTCYs
IGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOworCitwcml2YXRlOgorICAgIEJs
b2JEYXRhKCkgeyB9CisKKyAgICBTdHJpbmcgbV9jb250ZW50VHlwZTsKKyAgICBTdHJpbmcgbV9j
b250ZW50RGlzcG9zaXRpb247CisgICAgQmxvYkRhdGFJdGVtTGlzdCBtX2l0ZW1zOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmxvYkRhdGFfaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmZjZDdiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmxvYlJlZ2lzdHJ5X2gK
KyNkZWZpbmUgQmxvYlJlZ2lzdHJ5X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYkRhdGE7CitjbGFzcyBLVVJMOworY2xhc3Mg
UmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlSGFuZGxlOworY2xhc3MgUmVzb3VyY2VIYW5k
bGVDbGllbnQ7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNl
OworCisvLyBCbG9iUmVnaXN0cnkgaXMgbm90IHRocmVhZC1zYWZlLiBJdCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KK2NsYXNzIEJsb2JSZWdpc3RyeSB7CitwdWJsaWM6
CisgICAgc3RhdGljIEJsb2JSZWdpc3RyeSYgaW5zdGFuY2UoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VS
TCYgc3JjVVJMKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IEtVUkwmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVh
dGVSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNs
aWVudCopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYs
IFZlY3RvcjxjaGFyPiYgZGF0YSkgPSAwOworCisgICAgdmlydHVhbCB+QmxvYlJlZ2lzdHJ5KCkg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCbG9iUmVnaXN0
cnlfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUlt
cGwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYmI4ZjAKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTAs
MCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnlJ
bXBsLmgiCisKKyNpbmNsdWRlICJGaWxlU3RyZWFtLmgiCisjaW5jbHVkZSAiRmlsZVN0cmVhbVBy
b3h5LmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3Iu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVy
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgQmxvYlJlZ2lzdHJ5SW1w
bDo6c2hvdWxkTG9hZFJlc291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29u
c3QKK3sKKyAgICAvLyBJZiB0aGUgcmVzb3VyY2UgaXMgbm90IGZldGNoZWQgdXNpbmcgdGhlIEdF
VCBtZXRob2QsIGJhaWwgb3V0LgorICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UocmVxdWVzdC5o
dHRwTWV0aG9kKCksICJHRVQiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IEJsb2JSZWdpc3RyeUltcGw6
OmNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVz
b3VyY2VIYW5kbGVDbGllbnQqKQoreworICAgIGlmICghc2hvdWxkTG9hZFJlc291cmNlKHJlcXVl
c3QpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiBUbyBiZSBpbXBsZW1lbnRl
ZC4KKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBCbG9iUmVnaXN0cnlJbXBsOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VF
cnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mKQoreworICAgIGlmICghc2hv
dWxkTG9hZFJlc291cmNlKHJlcXVlc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBGSVhNRTogVG8gYmUgaW1wbGVtZW50ZWQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitCbG9i
UmVnaXN0cnkmIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJbXBsLCBpbnN0
YW5jZSwgKCkpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBCbG9iUmVnaXN0cnlJ
bXBsOjphcHBlbmRTdG9yYWdlSXRlbXMoQmxvYlN0b3JhZ2VEYXRhKiBibG9iU3RvcmFnZURhdGEs
IGNvbnN0IEJsb2JTdG9yYWdlRGF0YUl0ZW1MaXN0JiBpdGVtcykKK3sKKyAgICBmb3IgKEJsb2JT
dG9yYWdlRGF0YUl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gaXRlbXMuYmVnaW4oKTsg
aXRlciAhPSBpdGVtcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT50eXBlID09
IEJsb2JTdG9yYWdlRGF0YUl0ZW06OkRhdGEpCisgICAgICAgICAgICBibG9iU3RvcmFnZURhdGEt
PmFwcGVuZERhdGEoaXRlci0+ZGF0YSwgaXRlci0+b2Zmc2V0LCBpdGVyLT5sZW5ndGgpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyLT50eXBlID09IEJsb2JTdG9yYWdl
RGF0YUl0ZW06OkZpbGUpOworICAgICAgICAgICAgYmxvYlN0b3JhZ2VEYXRhLT5hcHBlbmRGaWxl
KGl0ZXItPnBhdGgsIGl0ZXItPm9mZnNldCwgaXRlci0+bGVuZ3RoLCBpdGVyLT5leHBlY3RlZE1v
ZGlmaWNhdGlvblRpbWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJsb2JSZWdpc3Ry
eUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdlRGF0
YSwgY29uc3QgQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3QmIGl0ZW1zLCBsb25nIGxvbmcgb2Zmc2V0
LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggIT0gQmxvYkRhdGFJdGVt
Ojp0b0VuZE9mRmlsZSk7CisKKyAgICBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGl0ZW1zLmJlZ2luKCk7CisgICAgaWYgKG9mZnNldCkgeworICAgICAgICBm
b3IgKDsgaXRlciAhPSBpdGVtcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAob2Zm
c2V0ID49IGl0ZXItPmxlbmd0aCkKKyAgICAgICAgICAgICAgICBvZmZzZXQgLT0gaXRlci0+bGVu
Z3RoOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yICg7IGl0ZXIgIT0gaXRlbXMuZW5kKCkgJiYgbGVuZ3RoID4gMDsg
KytpdGVyKSB7CisgICAgICAgIGxvbmcgbG9uZyBjdXJyZW50TGVuZ3RoID0gaXRlci0+bGVuZ3Ro
IC0gb2Zmc2V0OworICAgICAgICBsb25nIGxvbmcgbmV3TGVuZ3RoID0gY3VycmVudExlbmd0aCA+
IGxlbmd0aCA/IGxlbmd0aCA6IGN1cnJlbnRMZW5ndGg7CisgICAgICAgIGlmIChpdGVyLT50eXBl
ID09IEJsb2JTdG9yYWdlRGF0YUl0ZW06OkRhdGEpCisgICAgICAgICAgICBibG9iU3RvcmFnZURh
dGEtPmFwcGVuZERhdGEoaXRlci0+ZGF0YSwgaXRlci0+b2Zmc2V0ICsgb2Zmc2V0LCBuZXdMZW5n
dGgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyLT50eXBlID09IEJs
b2JTdG9yYWdlRGF0YUl0ZW06OkZpbGUpOworICAgICAgICAgICAgYmxvYlN0b3JhZ2VEYXRhLT5h
cHBlbmRGaWxlKGl0ZXItPnBhdGgsIGl0ZXItPm9mZnNldCArIG9mZnNldCwgbmV3TGVuZ3RoLCBp
dGVyLT5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgICAgICB9CisgICAgICAgIG9mZnNl
dCA9IDA7CisgICAgfQorfQorCit2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBi
bG9iU3RvcmFnZURhdGEgPSBCbG9iU3RvcmFnZURhdGE6OmNyZWF0ZSgpOworICAgIGJsb2JTdG9y
YWdlRGF0YS0+c2V0Q29udGVudFR5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkpOworICAgIGJs
b2JTdG9yYWdlRGF0YS0+c2V0Q29udGVudERpc3Bvc2l0aW9uKGJsb2JEYXRhLT5jb250ZW50RGlz
cG9zaXRpb24oKSk7CisKKyAgICBmb3IgKEJsb2JEYXRhSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBibG9iRGF0YS0+aXRlbXMoKS5iZWdpbigpOyBpdGVyICE9IGJsb2JEYXRhLT5pdGVt
cygpLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgc3dpdGNoIChpdGVyLT50eXBlKSB7CisgICAg
ICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgorICAgICAgICAgICAgYmxvYlN0b3JhZ2VEYXRh
LT5hcHBlbmREYXRhKGl0ZXItPmRhdGEsIDAsIGl0ZXItPmRhdGEubGVuZ3RoKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpGaWxlOgorICAgICAgICAg
ICAgYmxvYlN0b3JhZ2VEYXRhLT5hcHBlbmRGaWxlKGl0ZXItPnBhdGgsIGl0ZXItPm9mZnNldCwg
aXRlci0+bGVuZ3RoLCBpdGVyLT5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpCbG9iOgorICAgICAgICAgICAg
aWYgKG1fYmxvYnMuY29udGFpbnMoaXRlci0+dXJsLnN0cmluZygpKSkKKyAgICAgICAgICAgICAg
ICBhcHBlbmRTdG9yYWdlSXRlbXMoYmxvYlN0b3JhZ2VEYXRhLmdldCgpLCBtX2Jsb2JzLmdldChp
dGVyLT51cmwuc3RyaW5nKCkpLT5pdGVtcygpLCBpdGVyLT5vZmZzZXQsIGl0ZXItPmxlbmd0aCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgbV9ibG9icy5z
ZXQodXJsLnN0cmluZygpLCBibG9iU3RvcmFnZURhdGEpOworfQorCit2b2lkIEJsb2JSZWdpc3Ry
eUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VS
TCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgUmVmUHRyPEJsb2JTdG9y
YWdlRGF0YT4gc3JjID0gbV9ibG9icy5nZXQoc3JjVVJMLnN0cmluZygpKTsKKyAgICBBU1NFUlQo
c3JjKTsKKyAgICBpZiAoIXNyYykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEJsb2JT
dG9yYWdlRGF0YT4gYmxvYlN0b3JhZ2VEYXRhID0gQmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoKTsK
KyAgICBibG9iU3RvcmFnZURhdGEtPnNldENvbnRlbnRUeXBlKHNyYy0+Y29udGVudFR5cGUoKSk7
CisgICAgYmxvYlN0b3JhZ2VEYXRhLT5zZXRDb250ZW50RGlzcG9zaXRpb24oc3JjLT5jb250ZW50
RGlzcG9zaXRpb24oKSk7CisgICAgYXBwZW5kU3RvcmFnZUl0ZW1zKGJsb2JTdG9yYWdlRGF0YS5n
ZXQoKSwgc3JjLT5pdGVtcygpKTsKKyAgICAKKyAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5nKCks
IGJsb2JTdG9yYWdlRGF0YSk7Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3Rl
ckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgbV9ibG9icy5yZW1vdmUodXJsLnN0cmluZygpKTsKK30KKworUGFzc1JlZlB0cjxCbG9i
U3RvcmFnZURhdGE+IEJsb2JSZWdpc3RyeUltcGw6OmdldEJsb2JEYXRhRnJvbVVSTChjb25zdCBL
VVJMJiB1cmwpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1
cm4gbV9ibG9icy5nZXQodXJsLnN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2OTNiYwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmgKQEAgLTAsMCArMSw3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQmxvYlJlZ2lzdHJ5SW1wbF9oCisjZGVmaW5lIEJsb2JSZWdpc3RyeUltcGxfaAor
CisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIKKyNpbmNs
dWRlICJCbG9iU3RvcmFnZURhdGEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBLVVJMOworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlSGFuZGxlOwor
Y2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFz
cyBSZXNvdXJjZVJlc3BvbnNlOworCisvLyBCbG9iUmVnaXN0cnlJbXBsIGlzIG5vdCB0aHJlYWQt
c2FmZS4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQuCitjbGFzcyBC
bG9iUmVnaXN0cnlJbXBsIDogcHVibGljIEJsb2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+QmxvYlJlZ2lzdHJ5SW1wbCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7Cisg
ICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50Kik7CisgICAgdmlydHVhbCBi
b29sIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVz
b3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworCisg
ICAgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGdldEJsb2JEYXRhRnJvbVVSTChjb25zdCBL
VVJMJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBzaG91bGRMb2FkUmVzb3VyY2UoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZFN0b3Jh
Z2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqLCBjb25zdCBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdCYp
OworICAgIHZvaWQgYXBwZW5kU3RvcmFnZUl0ZW1zKEJsb2JTdG9yYWdlRGF0YSosIGNvbnN0IEJs
b2JTdG9yYWdlRGF0YUl0ZW1MaXN0JiwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0
aCk7CisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gPiBtX2Js
b2JzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmxvYlJlZ2lz
dHJ5SW1wbF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlN0b3Jh
Z2VEYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlN0b3JhZ2VEYXRhLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxMjVhNAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iU3RvcmFnZURhdGEuaApAQCAtMCwwICsx
LDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQmxvYlN0b3JhZ2VEYXRhX2gKKyNkZWZpbmUgQmxvYlN0b3JhZ2VEYXRh
X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBCbG9iU3RvcmFnZURhdGFJdGVt
IHsKKyAgICBlbnVtIEJsb2JTdG9yZURhdGFJdGVtVHlwZSB7IERhdGEsIEZpbGUgfTsKKyAgICBC
bG9iU3RvcmVEYXRhSXRlbVR5cGUgdHlwZTsKKyAgICBsb25nIGxvbmcgb2Zmc2V0OworICAgIGxv
bmcgbG9uZyBsZW5ndGg7CisKKyAgICAvLyBGb3Igc3RyaW5nIGRhdGEuCisgICAgQ1N0cmluZyBk
YXRhOworCisgICAgLy8gRm9yIGZpbGUgZGF0YS4KKyAgICBTdHJpbmcgcGF0aDsKKyAgICBkb3Vi
bGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lOworCisgICAgQmxvYlN0b3JhZ2VEYXRhSXRlbShj
b25zdCBDU3RyaW5nJiBkYXRhLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQor
ICAgICAgICA6IHR5cGUoRGF0YSkKKyAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQorICAgICAgICAs
IGxlbmd0aChsZW5ndGgpCisgICAgICAgICwgZGF0YShkYXRhKQorICAgICAgICAsIGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSgwKQorICAgIHsKKyAgICB9CisKKyAgICBCbG9iU3RvcmFnZURhdGFJ
dGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0
aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgOiB0eXBlKEZpbGUp
CisgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQorICAg
ICAgICAsIHBhdGgocGF0aCkKKyAgICAgICAgLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUoZXhw
ZWN0ZWRNb2RpZmljYXRpb25UaW1lKQorICAgIHsKKyAgICB9Cit9OworCit0eXBlZGVmIFZlY3Rv
cjxCbG9iU3RvcmFnZURhdGFJdGVtPiBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdDsKKworY2xhc3Mg
QmxvYlN0b3JhZ2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYlN0b3JhZ2VEYXRhPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iU3RvcmFnZURhdGEoKSk7Cisg
ICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVudFR5cGU7IH0KKyAgICB2b2lkIHNldENvbnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUpIHsgbV9jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOyB9CisKKyAgICBjb25zdCBT
dHJpbmcmIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudERpc3Bv
c2l0aW9uOyB9CisgICAgdm9pZCBzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgU3RyaW5nJiBj
b250ZW50RGlzcG9zaXRpb24pIHsgbV9jb250ZW50RGlzcG9zaXRpb24gPSBjb250ZW50RGlzcG9z
aXRpb247IH0KKyAgICAKKyAgICBjb25zdCBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdCYgaXRlbXMo
KSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CisKKyAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qg
Q1N0cmluZyYgZGF0YSwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKKyAgICB7
CisgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JTdG9yYWdlRGF0YUl0ZW0oZGF0YSwgb2Zmc2V0
LCBsZW5ndGgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRN
b2RpZmljYXRpb25UaW1lKQorICAgIHsKKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYlN0b3Jh
Z2VEYXRhSXRlbShwYXRoLCBvZmZzZXQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1l
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX2NvbnRlbnRUeXBlOworICAgIFN0
cmluZyBtX2NvbnRlbnREaXNwb3NpdGlvbjsKKyAgICBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdCBt
X2l0ZW1zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmxvYlN0
b3JhZ2VEYXRhX2gK
</data>
<flag name="review"
          id="53195"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="53196"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>