<?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>43874</bug_id>
          
          <creation_ts>2010-08-11 13:33:34 -0700</creation_ts>
          <short_desc>Add ThreadableBlobRegistry to support calling BlobRegistry methods in main thread</short_desc>
          <delta_ts>2010-08-12 15:51:57 -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>abarth</cc>
    
    <cc>dimich</cc>
    
    <cc>eric</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>263432</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-11 13:33:34 -0700</bug_when>
    <thetext>Add ThreadableBlobRegistry to support calling BlobRegistry methods in main thread. This is needed to support blobs in workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263477</commentid>
    <comment_count>1</comment_count>
      <attachid>64168</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-11 15:16:11 -0700</bug_when>
    <thetext>Created attachment 64168
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263539</commentid>
    <comment_count>2</comment_count>
      <attachid>64168</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-11 17:50:55 -0700</bug_when>
    <thetext>Comment on attachment 64168
Proposed Patch

Just a few things.

I think you&apos;re missing the Android build file.


&gt; diff --git a/WebCore/dom/ScriptExecutionContext.cpp b/WebCore/dom/ScriptExecutionContext.cpp

I think there are a lot of items in here which should be guarded with if ENABLE(BLOB) (even some which don&apos;t have it from the previous checkin).



FUTURE (maybe next checkin): trackBlobURL and revokeBlobURL feel very asymetric. revoke (and ~ScriptExecutionContext) calls unregisterBlobURL but track doesn&apos;t call registerBlobURL. (It feels like one class doing the ref and another doing the deref.)

I&apos;d recommend that at least registerBlobURL be moved into trackBlobURL and perhaps the name changed to createPublicURL. (Maybe most of the guts of Blob::createPublicURL should move into the ScriptExecutionContext function.)
 


&gt; diff --git a/WebCore/html/Blob.cpp b/WebCore/html/Blob.cpp
&gt;  Blob::Blob(ScriptExecutionContext*, const PassRefPtr&lt;BlobItem&gt;&amp; item)
&gt; -    : m_size(0)
&gt; +    : m_scriptExecutionContext(0)
&gt; +    , m_size(0)

Why isn&apos;t m_type initialized for this constructor?



&gt; diff --git a/WebCore/html/BlobRegistryImpl.cpp b/WebCore/html/BlobRegistryImpl.cpp
 &gt;  void BlobRegistryImpl::registerBlobURL(const KURL&amp; url, PassOwnPtr&lt;BlobData&gt; blobData)
&gt;  {
&gt; +    ASSERT(isMainThread());

I like the assert. Can this assert be added to instance() (even if it needs to move into the cpp file)?


&gt; diff --git a/WebCore/html/ThreadableBlobRegistry.cpp b/WebCore/html/ThreadableBlobRegistry.cpp

&gt; +void postTaskToMainThread(ScriptExecutionContext*, PassOwnPtr&lt;ScriptExecutionContext::Task&gt;);
&gt; +void registerBlobURLTask(ScriptExecutionContext*, const KURL&amp;, PassOwnPtr&lt;BlobData&gt;);
&gt; +void registerBlobURLFromTask(ScriptExecutionContext*, const KURL&amp; url, const KURL&amp; srcURL);
&gt; +void unregisterBlobURLTask(ScriptExecutionContext*, const KURL&amp;);

I think these prototypes should be removed, and the functions declared as &quot;static&quot; instead.



&gt; diff --git a/WebCore/html/ThreadableBlobRegistry.h b/WebCore/html/ThreadableBlobRegistry.h
&gt; +public:
&gt; +    static void registerBlobURL(ScriptExecutionContext*, const KURL&amp;, PassOwnPtr&lt;BlobData&gt;);
&gt; +    static void registerBlobURL(ScriptExecutionContext*, const KURL&amp; url, const KURL&amp; srcURL);

|url| param name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263902</commentid>
    <comment_count>3</comment_count>
      <attachid>64246</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 11:56:18 -0700</bug_when>
    <thetext>Created attachment 64246
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263903</commentid>
    <comment_count>4</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 12:00:36 -0700</bug_when>
    <thetext>All fixed except commented ones.

(In reply to comment #2)
&gt; (From update of attachment 64168 [details])
&gt; Just a few things.
&gt; 
&gt; I think you&apos;re missing the Android build file.
&gt; 
&gt; 
&gt; &gt; diff --git a/WebCore/dom/ScriptExecutionContext.cpp b/WebCore/dom/ScriptExecutionContext.cpp
&gt; 
&gt; I think there are a lot of items in here which should be guarded with if ENABLE(BLOB) (even some which don&apos;t have it from the previous checkin).
&gt; 
I am trying to figure out the boundary of using guards or not in order to be compatible with the existing file feature. I will fix this in my next checkin altogether.
&gt; 
&gt; 
&gt; FUTURE (maybe next checkin): trackBlobURL and revokeBlobURL feel very asymetric. revoke (and ~ScriptExecutionContext) calls unregisterBlobURL but track doesn&apos;t call registerBlobURL. (It feels like one class doing the ref and another doing the deref.)
&gt; 
&gt; I&apos;d recommend that at least registerBlobURL be moved into trackBlobURL and perhaps the name changed to createPublicURL. (Maybe most of the guts of Blob::createPublicURL should move into the ScriptExecutionContext function.)
&gt; 
I fixed this in this patch since your suggestion really makes thing much clear.
&gt; 
&gt; 
&gt; &gt; diff --git a/WebCore/html/Blob.cpp b/WebCore/html/Blob.cpp
&gt; &gt;  Blob::Blob(ScriptExecutionContext*, const PassRefPtr&lt;BlobItem&gt;&amp; item)
&gt; &gt; -    : m_size(0)
&gt; &gt; +    : m_scriptExecutionContext(0)
&gt; &gt; +    , m_size(0)
&gt; 
&gt; Why isn&apos;t m_type initialized for this constructor?
&gt; 
This is legacy constructor that is going to be removed when we switch to new BlobData structure. The type string is simply empty for this constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264027</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-12 15:24:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65271 might have broken Qt Linux Release minimal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264051</commentid>
    <comment_count>6</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 15:51:57 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/65271.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64168</attachid>
            <date>2010-08-11 15:16:11 -0700</date>
            <delta_ts>2010-08-12 11:56:18 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43874</filename>
            <type>text/plain</type>
            <size>24630</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDUzMzJiNGUuLmFlMWQxOTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA0MCw2ICsxMDQwLDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGh0bWwvSW1hZ2VSZXNpemVyVGhyZWFkLmNwcAogICAg
IGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwCiAgICAgaHRtbC9TdGVwUmFuZ2UuY3BwCisgICAgaHRt
bC9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAogICAgIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHAK
ICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKICAgICBodG1sL2NhbnZhcy9DYW52
YXNQYXR0ZXJuLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MzBlZWIwLi5kYjJhNWZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEwLTA4LTEx
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeSB0byBz
dXBwb3J0IGNhbGxpbmcgQmxvYlJlZ2lzdHJ5IG1ldGhvZHMgaW4KKyAgICAgICAgbWFpbiB0aHJl
YWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg3
NAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp+U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjphZGRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OnJlbW92ZUJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6cmV2b2tlQmxvYlVSTCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aDoKKyAgICAgICAgKiBodG1sL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6Qmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjp+QmxvYik6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjpjb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZVB1
YmxpY1VSTCk6CisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgICogaHRtbC9CbG9iUmVn
aXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lz
dGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjp1bnJlZ2lz
dGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9i
RGF0YUZyb21VUkwpOgorICAgICAgICAqIGh0bWwvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA6
IEFkZGVkLgorICAgICAgICAqIGh0bWwvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOiBBZGRlZC4K
KwogMjAxMC0wOC0xMSAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4K
IAogICAgICAgICBbd3gsIFdlYkRPTV0gQnVpbGQgZml4LiBGaXggY2FsbGJhY2sgcGFyYW1zIGFu
ZCBXZWJDb3JlOjpTdHJpbmcgLT4gV1RGOjpTdHJpbmcgZml4ZXMuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3YTE0Y2Ix
Li4xYTllZjk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1NjUsNiArMTU2NSw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJV2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5jcHAgXAogCVdlYkNvcmUvaHRtbC9TdGVwUmFu
Z2UuaCBcCiAJV2ViQ29yZS9odG1sL1RleHRNZXRyaWNzLmggXAorCVdlYkNvcmUvaHRtbC9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCBcCisJV2ViQ29yZS9odG1sL1RocmVhZGFibGVCbG9iUmVn
aXN0cnkuaCBcCiAJV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwIFwKIAlXZWJDb3JlL2h0
bWwvVmFsaWRpdHlTdGF0ZS5oIFwKIAlXZWJDb3JlL2h0bWwvVm9pZENhbGxiYWNrLmggXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCBhMmZhZjUzLi5kNmJjZGQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTczMSw2ICsxNzMxLDggQEAKICAgICAgICAgICAg
ICdodG1sL1N0ZXBSYW5nZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvU3RlcFJhbmdlLmgnLAog
ICAgICAgICAgICAgJ2h0bWwvVGV4dE1ldHJpY3MuaCcsCisgICAgICAgICAgICAnaHRtbC9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9UaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ2h0bWwvVGltZVJhbmdlcy5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvVGltZVJhbmdlcy5oJywKICAgICAgICAgICAgICdodG1sL1ZhbGlkaXR5U3Rh
dGUuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNv
cmUucHJvCmluZGV4IGJjODdlMjUuLmJlMjQyYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzQzLDYgKzc0Myw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIGh0bWwvSW1hZ2VEYXRhLmNwcCBcCiAgICAgaHRtbC9JbWFnZVJlc2l6ZXJU
aHJlYWQuY3BwIFwKICAgICBodG1sL0xhYmVsc05vZGVMaXN0LmNwcCBcCisgICAgaHRtbC9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCBcCiAgICAgaHRtbC9TdGVwUmFuZ2UuY3BwIFwKICAgICBo
dG1sL1ZhbGlkaXR5U3RhdGUuY3BwIFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDQ2M2Y1ZDkuLjdhMzli
YTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDA5NDksNiArNDA5
NDksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxUaW1lUmFuZ2VzLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBiYTEwYzIuLjJmZjZh
NDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MTYs
NiArNzE2LDggQEAKIAkJMkVFRDU3NTgxMjEwOUVFNDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVFRDU3NTcx
MjEwOUVFNDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5oICovOyB9OwogCQkyRUVENTc1QjEyMTA5
RUYzMDA3NjU2QkIgLyogQmxvYkRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkVFRDU3NTkxMjEwOUVGMzAwNzY1NkJCIC8qIEJsb2JEYXRhLmNw
cCAqLzsgfTsKIAkJMkVFRDU3NUMxMjEwOUVGMzAwNzY1NkJCIC8qIEJsb2JEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTc1QTEyMTA5RUYz
MDA3NjU2QkIgLyogQmxvYkRhdGEuaCAqLzsgfTsKKwkJMkVFRDU3ODgxMjEzNDFGQzAwNzY1NkJC
IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVFRDU3ODYxMjEzNDFGQzAwNzY1NkJCIC8qIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwICovOyB9OworCQkyRUVENTc4OTEyMTM0MUZDMDA3NjU2QkIgLyog
VGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkVFRDU3ODcxMjEzNDFGQzAwNzY1NkJCIC8qIFRocmVhZGFibGVCbG9i
UmVnaXN0cnkuaCAqLzsgfTsKIAkJMzEyODhFNzIwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENT
U0tleWZyYW1lUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTI4OEU2RTBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
LmNwcCAqLzsgfTsKIAkJMzEyODhFNzMwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZy
YW1lUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEyODhFNkYwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5oICovOyB9
OwogCQkzMTI4OEU3NDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4OEU3
MDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi87IH07CkBA
IC02NDcxLDYgKzY0NzMsOCBAQAogCQkyRUVENTc1NzEyMTA5RUU0MDA3NjU2QkIgLyogQmxvYlJl
Z2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JSZWdpc3RyeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUVENTc1OTEyMTA5RUYzMDA3NjU2QkIg
LyogQmxvYkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxv
YkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUVENTc1QTEyMTA5RUYz
MDA3NjU2QkIgLyogQmxvYkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmxvYkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkVFRDU3ODYxMjEzNDFG
QzAwNzY1NkJCIC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1Nzg3MTIxMzQxRkMwMDc2NTZCQiAvKiBUaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVh
ZGFibGVCbG9iUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyODhF
NkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RjBFMzAwNUQ2MDAzNjE5QUUgLyog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYktpdENTU0tleWZyYW1lUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MTg0LDYgKzE0MTg4LDggQEAK
IAkJCQlBNUFGQjM0RTExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmggKi8sCiAJCQkJQkNF
RjQ1RTgwRTY4Nzc2NzAwMUMxMjg3IC8qIFRleHRNZXRyaWNzLmggKi8sCiAJCQkJQkNFRjQ1M0Yw
RTY3NkFDMTAwMUMxMjg3IC8qIFRleHRNZXRyaWNzLmlkbCAqLywKKwkJCQkyRUVENTc4NjEyMTM0
MUZDMDA3NjU2QkIgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi8sCisJCQkJMkVFRDU3
ODcxMjEzNDFGQzAwNzY1NkJCIC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCAqLywKIAkJCQlF
NDQ2MTM5RDBDRDYzMzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5jcHAgKi8sCiAJCQkJRTQ0NjEz
OUUwQ0Q2MzMxMDAwRkFEQTc1IC8qIFRpbWVSYW5nZXMuaCAqLywKIAkJCQlFNDQ2MTM5RjBDRDYz
MzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5pZGwgKi8sCkBAIC0yMDE0Miw2ICsyMDE0OCw3IEBA
CiAJCQkJMkVFRDU3NTgxMjEwOUVFNDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkVFRDU3NUMxMjEwOUVGMzAwNzY1NkJCIC8qIEJsb2JEYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NzhCNkZDQTEyMTI4ODIxMDAxNTk1RUYgLyogSFRNTFZpZXdTb3VyY2VQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFRUQ1Nzg5MTIxMzQxRkMwMDc2NTZCQiAvKiBU
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMjAxLDcgKzIwMjA4
LDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
MTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29k
ZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZv
ckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTIy
NTY3LDYgKzIyNTczLDcgQEAKIAkJCQkyRUVENTc1NTEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlVS
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRUVENTc1QjEyMTA5RUYzMDA3NjU2QkIgLyogQmxv
YkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc4QjZGQzkxMjEyODgyMTAwMTU5NUVGIC8q
IEhUTUxWaWV3U291cmNlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJFRUQ1Nzg4MTIx
MzQxRkMwMDc2NTZCQiAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9X
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCA5ZmRlYzlmLi5kMWEx
NmJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAor
KysgYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMjgsMTMgKzI4
LDE0IEBACiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAi
QmxvYi5oIgogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCiAj
aW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0
LmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KQEAgLTkxLDEwICs5MiwxMiBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp+U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpCiAgICAgICAgIG1fZmlsZVRocmVhZCA9IDA7CiAgICAgfQogI2VuZGlm
CisgICAgSGFzaFNldDxCbG9iKj46Oml0ZXJhdG9yIGJsb2JzRW5kID0gbV9ibG9icy5lbmQoKTsK
KyAgICBmb3IgKEhhc2hTZXQ8QmxvYio+OjppdGVyYXRvciBpdGVyID0gbV9ibG9icy5iZWdpbigp
OyBpdGVyICE9IGJsb2JzRW5kOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPmNvbnRleHREZXN0
cm95ZWQoKTsKICAgICBIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGJsb2JVUkxzRW5kID0gbV9i
bG9iVVJMcy5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgaXRlciA9
IG1fYmxvYlVSTHMuYmVnaW4oKTsgaXRlciAhPSBibG9iVVJMc0VuZDsgKytpdGVyKQotICAgICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IHRocmVhZC1zYWZlIHByb3h5IHRvIG1ha2UgaXQgd29yayB3
aXRoIHdvcmtlcnMuCi0gICAgICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS51bnJlZ2lzdGVy
QmxvYlVSTChLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0ZXIpKTsKKyAgICAgICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodGhpcywgS1VSTChQYXJzZWRVUkxTdHJp
bmcsICppdGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCkBAIC0xNjgsNiArMTcxLDE4
IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQoTWVz
c2FnZVBvcnQqIHBvcnQpCiAgICAgbV9tZXNzYWdlUG9ydHMucmVtb3ZlKHBvcnQpOwogfQogCit2
b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZEJsb2IoQmxvYiogYmxvYikKK3sKKyAgICBB
U1NFUlQoYmxvYik7CisgICAgbV9ibG9icy5hZGQoYmxvYik7Cit9CisKK3ZvaWQgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6cmVtb3ZlQmxvYihCbG9iKiBibG9iKQoreworICAgIEFTU0VSVChibG9i
KTsKKyAgICBtX2Jsb2JzLnJlbW92ZShibG9iKTsKK30KKwogYm9vbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCiB7CiAgICAgLy8gTm8gcHJvdGVj
dGlvbiBhZ2FpbnN0IG1fYWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRlcmF0aW9u
OiBjYW5TdXNwZW5kKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgpAQCAtMjUyLDgg
KzI2Nyw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6dHJhY2tCbG9iVVJMKGNvbnN0
IFN0cmluZyYgdXJsKQogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXZva2VCbG9iVVJM
KGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmIChtX2Jsb2JVUkxzLmNvbnRhaW5zKHVybCkp
IHsKLSAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2FmZSBwcm94eSB0byBtYWtl
IGl0IHdvcmsgd2l0aCB3b3JrZXJzLgotICAgICAgICBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCku
dW5yZWdpc3RlckJsb2JVUkwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkpOworICAgICAgICBU
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsKSk7CiAgICAgICAgIG1fYmxvYlVSTHMucmVtb3ZlKHVybCk7CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCmluZGV4IDc5ZDRkNDIuLmY5OWZk
YjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysg
Yi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTQxLDYgKzQxLDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEFjdGl2ZURPTU9iamVjdDsKKyAgICBj
bGFzcyBCbG9iOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBjbGFzcyBEYXRhYmFzZTsKICAg
ICBjbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7CkBAIC0xMjYsNiArMTI3LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJ
ZCk7CiAgICAgICAgIERPTVRpbWVyKiBmaW5kVGltZW91dChpbnQgdGltZW91dElkKTsKIAorICAg
ICAgICB2b2lkIGFkZEJsb2IoQmxvYiopOworICAgICAgICB2b2lkIHJlbW92ZUJsb2IoQmxvYiop
OwogICAgICAgICB2b2lkIHRyYWNrQmxvYlVSTChjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdm9p
ZCByZXZva2VCbG9iVVJMKGNvbnN0IFN0cmluZyYpOwogCkBAIC0xNTcsNiArMTYwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIYXNoTWFwPGludCwgRE9NVGltZXIqPiBtX3RpbWVv
dXRzOwogCiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Jsb2JVUkxzOworICAgICAgICBIYXNo
U2V0PEJsb2IqPiBtX2Jsb2JzOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwIGIv
V2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IGY4Zjc5NWUuLmY5ZWJiMTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9CbG9iLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKQEAgLTMz
LDE2ICszMywxNyBAQAogCiAjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRlICJCbG9iSXRl
bS5oIgotI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBC
bG9iRGF0YS4KIEJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcykKLSAgICA6IG1fdHlwZSh0eXBlKQor
ICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KDApCisgICAgLCBtX3R5cGUodHlwZSkKICAg
ICAsIG1fc2l6ZSgwKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgp
OyArK2kpCkBAIC01MSw1MCArNTIsNjcgQEAgQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW0KIAogLy8g
RklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiBC
bG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBQYXNzUmVmUHRyPEJsb2JJ
dGVtPiYgaXRlbSkKLSAgICA6IG1fc2l6ZSgwKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KDApCisgICAgLCBtX3NpemUoMCkKIHsKICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtKTsKIH0K
IAogLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRh
dGEuCiBCbG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHBh
dGgpCi0gICAgOiBtX3NpemUoMCkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgwKQor
ICAgICwgbV9zaXplKDApCiB7CiAgICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUg
dGhlIHR5cGUgdW5saWtlIEZpbGUocGF0aCkuCiAgICAgbV9pdGVtcy5hcHBlbmQoRmlsZUJsb2JJ
dGVtOjpjcmVhdGUocGF0aCkpOwogfQogCiBCbG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRh
LCBsb25nIGxvbmcgc2l6ZSkKLSAgICA6IG1fdHlwZShibG9iRGF0YS0+Y29udGVudFR5cGUoKSkK
KyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQor
ICAgICwgbV90eXBlKGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKQogICAgICwgbV9zaXplKHNpemUp
CiB7CiAgICAgQVNTRVJUKGJsb2JEYXRhLmdldCgpICYmICFibG9iRGF0YS0+aXRlbXMoKS5pc0Vt
cHR5KCkpOwogCisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwor
CiAgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0
aGUgcHJvdmlkZWQgYmxvYiBkYXRhLgogICAgIG1fdXJsID0gQmxvYlVSTDo6Y3JlYXRlVVJMKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhyZWFkLXNh
ZmUgcHJveHkgdG8gbWFrZSBpdCB3b3JrIHdpdGggd29ya2Vycy4KLSAgICBCbG9iUmVnaXN0cnk6
Omluc3RhbmNlKCkucmVnaXN0ZXJCbG9iVVJMKG1fdXJsLCBibG9iRGF0YSk7CisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IG1fdXJsLCBibG9iRGF0YSk7CiB9CiAKIEJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJp
bmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQotICAgIDogbV90eXBlKHR5cGUpCisgICAgOiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAsIG1fdHlw
ZSh0eXBlKQogICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAgLy8gRklYTUU6IFRvIGJlIHJlbW92
ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiAgICAgaWYgKHNyY1VSTC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5h
ZGRCbG9iKHRoaXMpOworCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVn
aXN0ZXIgaXQgd2l0aCB0aGUgc2FtZSBibG9iIGRhdGEgYXMgdGhlIHNvdXJjZSBVUkwuCiAgICAg
bV91cmwgPSBCbG9iVVJMOjpjcmVhdGVVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2FmZSBwcm94eSB0byBtYWtlIGl0IHdvcmsgd2l0
aCB3b3JrZXJzLgotICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS5yZWdpc3RlckJsb2JVUkwo
bV91cmwsIHNyY1VSTCk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9i
VVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJsLCBzcmNVUkwpOwogfQogCiBCbG9iOjp+
QmxvYigpCiB7CiAgICAgLy8gVGhlIGludGVybmFsIFVSTCBpcyBvbmx5IHVzZWQgdG8gcmVmZXIg
dG8gdGhlIEJsb2Igb2JqZWN0LiBTbyB3ZSBuZWVkIHRvIHVucmVnaXN0ZXIgdGhlIFVSTCB3aGVu
IHRoZSBvYmplY3QgaXMgR0MtZWQuCi0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2Fm
ZSBwcm94eSB0byBtYWtlIGl0IHdvcmsgd2l0aCB3b3JrZXJzLgotICAgIEJsb2JSZWdpc3RyeTo6
aW5zdGFuY2UoKS51bnJlZ2lzdGVyQmxvYlVSTChtX3VybCk7CisgICAgaWYgKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCkgeworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlbW92
ZUJsb2IodGhpcyk7CisgICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJC
bG9iVVJMKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV91cmwpOworICAgIH0KK30KKwordm9p
ZCBCbG9iOjpjb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKKworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVybmFsIFVSTCBiZWZvcmUg
dGhlIGNvbnRleHQgaXMgZ29uZS4KKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lz
dGVyQmxvYlVSTChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJsKTsKKyAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSAwOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6
ZSgpIGNvbnN0CkBAIC0xNDYsOCArMTY0LDcgQEAgS1VSTCBCbG9iOjpjcmVhdGVQdWJsaWNVUkwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgY29uc3QKIHsK
ICAgICBLVVJMIHVybCA9IEJsb2JVUkw6OmNyZWF0ZVVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsKIAotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhyZWFkLXNhZmUgcHJveHkgdG8gbWFrZSBp
dCB3b3JrIHdpdGggd29ya2Vycy4KLSAgICBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkucmVnaXN0
ZXJCbG9iVVJMKHVybCwgbV91cmwpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lz
dGVyQmxvYlVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB1cmwsIG1fdXJsKTsKIAogICAgIC8v
IEtlZXAgdHJhY2sgb2YgdGhlIG5ldyBVUkwgaW4gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
c28gdGhhdCBpdCB3aWxsIGdldCB1bnJlZ2lzdGVyZWQgd2hlbiB0aGUgY29udGV4dCBpcyBnb25l
LgogICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnRyYWNrQmxvYlVSTCh1cmwuc3RyaW5nKCkp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgK
aW5kZXggYTcyOTI5Yy4uNDVhMTcyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYi5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgfkJsb2IoKTsKIAorICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOworCiAgICAg
Y29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgc2l6ZSgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQpAQCAtOTUsNiArOTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSXQg
aXMgb25seSB1c2VkIGJ5IEZpbGVSZWFkZXIgdG8gcmVhZCB0aGUgYmxvYiBkYXRhIHZpYSBsb2Fk
aW5nIGZyb20gdGhlIGJsb2IgVVJMIHJlc291cmNlLgogICAgIEtVUkwgbV91cmw7CiAKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgU3Ry
aW5nIG1fdHlwZTsKICAgICBsb25nIGxvbmcgbV9zaXplOwogfTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJ
bXBsLmNwcAppbmRleCA3NGU1MTc1Li4yZWQ5YzQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
QmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwu
Y3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNs
dWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExOCw2ICsxMTksOCBAQCB2b2lkIEJsb2JSZWdp
c3RyeUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdl
RGF0YSwgY29ucwogCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25z
dCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQogeworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKICAgICBSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iU3Rv
cmFnZURhdGEgPSBCbG9iU3RvcmFnZURhdGE6OmNyZWF0ZSgpOwogICAgIGJsb2JTdG9yYWdlRGF0
YS0+c2V0Q29udGVudFR5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkpOwogICAgIGJsb2JTdG9y
YWdlRGF0YS0+c2V0Q29udGVudERpc3Bvc2l0aW9uKGJsb2JEYXRhLT5jb250ZW50RGlzcG9zaXRp
b24oKSk7CkBAIC0xNDMsNiArMTQ2LDggQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3Rl
ckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG8KIAogdm9p
ZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBzcmNVUkwpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIFJl
ZlB0cjxCbG9iU3RvcmFnZURhdGE+IHNyYyA9IG1fYmxvYnMuZ2V0KHNyY1VSTC5zdHJpbmcoKSk7
CiAgICAgQVNTRVJUKHNyYyk7CiAgICAgaWYgKCFzcmMpCkBAIC0xNTgsMTEgKzE2MywxMyBAQCB2
b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIHNyY1VSTCkKIAogdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjp1bnJlZ2lzdGVyQmxv
YlVSTChjb25zdCBLVVJMJiB1cmwpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBtX2Jsb2JzLnJlbW92ZSh1cmwuc3RyaW5nKCkpOwogfQogCiBQYXNzUmVmUHRyPEJsb2JTdG9y
YWdlRGF0YT4gQmxvYlJlZ2lzdHJ5SW1wbDo6Z2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IEtVUkwm
IHVybCkgY29uc3QKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBt
X2Jsb2JzLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
VGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgYi9XZWJDb3JlL2h0bWwvVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4ZTVlZgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNw
cApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeS5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJC
bG9iUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBwb3N0VGFza1RvTWFpblRocmVhZChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
Pik7Cit2b2lkIHJlZ2lzdGVyQmxvYlVSTFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JEYXRhPik7Cit2b2lkIHJlZ2lzdGVyQmxvYlVSTEZy
b21UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIHNyY1VSTCk7Cit2b2lkIHVucmVnaXN0ZXJCbG9iVVJMVGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgS1VSTCYpOworCit2b2lkIHBvc3RUYXNrVG9NYWluVGhyZWFkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKK3sKKyAgICBBU1NFUlQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIFdvcmtlckxvYWRlclByb3h5
JiBwcm94eSA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250
ZXh0KS0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CisgICAgcHJveHkucG9zdFRhc2tU
b0xvYWRlcih0YXNrKTsKK30KKwordm9pZCByZWdpc3RlckJsb2JVUkxUYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JE
YXRhKQoreworICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS5yZWdpc3RlckJsb2JVUkwodXJs
LCBibG9iRGF0YSk7Cit9CisKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJC
bG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNv
bnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCit7CisgICAgaWYg
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICBwb3N0
VGFza1RvTWFpblRocmVhZChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjcmVhdGVDYWxsYmFja1Rh
c2soJnJlZ2lzdGVyQmxvYlVSTFRhc2ssIHVybCwgYmxvYkRhdGEpKTsKKyAgICBlbHNlCisgICAg
ICAgIHJlZ2lzdGVyQmxvYlVSTFRhc2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdXJsLCBibG9i
RGF0YSk7Cit9CisKK3ZvaWQgcmVnaXN0ZXJCbG9iVVJMRnJvbVRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKQoreworICAgIEJs
b2JSZWdpc3RyeTo6aW5zdGFuY2UoKS5yZWdpc3RlckJsb2JVUkwodXJsLCBzcmNVUkwpOworfQor
Cit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIHNyY1VSTCkKK3sKKyAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNX
b3JrZXJDb250ZXh0KCkpCisgICAgICAgIHBvc3RUYXNrVG9NYWluVGhyZWFkKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGNyZWF0ZUNhbGxiYWNrVGFzaygmcmVnaXN0ZXJCbG9iVVJMRnJvbVRhc2ss
IHVybCwgc3JjVVJMKSk7CisgICAgZWxzZQorICAgICAgICByZWdpc3RlckJsb2JVUkxGcm9tVGFz
ayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQgdW5yZWdp
c3RlckJsb2JVUkxUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwp
Cit7CisgICAgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpLnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7
Cit9CisKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS1VSTCYg
dXJsKQoreworICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQo
KSkKKyAgICAgICAgcG9zdFRhc2tUb01haW5UaHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZ1bnJlZ2lzdGVyQmxvYlVSTFRhc2ssIHVybCkpOworICAgIGVs
c2UKKyAgICAgICAgdW5yZWdpc3RlckJsb2JVUkxUYXNrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IHVybCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggYi9XZWJDb3JlL2h0bWwvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzViMTUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5o
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
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
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRocmVhZGFibGVCbG9iUmVnaXN0cnlfaAorI2RlZmlu
ZSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYkRhdGE7CitjbGFzcyBLVVJMOwor
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpOworICAgIHN0YXRpYyB2b2lkIHVucmVn
aXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJik7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5X2gK
</data>
<flag name="review"
          id="52670"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="52671"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64246</attachid>
            <date>2010-08-12 11:56:18 -0700</date>
            <delta_ts>2010-08-12 14:18:04 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43874_3</filename>
            <type>text/plain</type>
            <size>27091</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCAzMTZlZDJhLi5kZjZjNWI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yNTUsNiArMjU1LDggQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJXAogCWh0bWwvQXN5bmNJbWFnZVJlc2l6ZXIuY3BwIFwK
IAlodG1sL0Jsb2IuY3BwIFwKKwlodG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwKKwlodG1sL0Js
b2JVUkwuY3BwIFwKIAlodG1sL0NvbGxlY3Rpb25DYWNoZS5jcHAgXAogCWh0bWwvQ1NTUHJlbG9h
ZFNjYW5uZXIuY3BwIFwKIAlodG1sL0RPTUZvcm1EYXRhLmNwcCBcCkBAIC0yODcsNiArMjg5LDcg
QEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJaHRtbC9IVE1MVmll
d1NvdXJjZVBhcnNlci5jcHAgXAogCWh0bWwvSW1hZ2VEYXRhLmNwcCBcCiAJaHRtbC9JbWFnZVJl
c2l6ZXJUaHJlYWQuY3BwIFwKKwlodG1sL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwIFwKIAlo
dG1sL1RpbWVSYW5nZXMuY3BwIFwKIAlodG1sL1ZhbGlkaXR5U3RhdGUuY3BwIFwKIAlcCkBAIC00
MDUsNiArNDA4LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJ
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwIFwKIAlcCiAJcGxhdGZvcm0vQXJl
bmEuY3BwIFwKKwlwbGF0Zm9ybS9CbG9iRGF0YS5jcHAgXAogCXBsYXRmb3JtL0NvbnRlbnRUeXBl
LmNwcCBcCiAJcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwIFwKIAlwbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNTMzMmI0ZS4uYWUxZDE5OCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDQw
LDYgKzEwNDAsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9JbWFnZVJlc2l6ZXJU
aHJlYWQuY3BwCiAgICAgaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKICAgICBodG1sL1N0ZXBSYW5n
ZS5jcHAKKyAgICBodG1sL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCiAgICAgaHRtbC9WYWxp
ZGl0eVN0YXRlLmNwcAogICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAogICAgIGh0
bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJkYzQ2YWUuLmMyYWIzNTAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTAtMDgtMTEgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5IHRvIHN1cHBvcnQgY2FsbGluZyBCbG9iUmVnaXN0cnkgbWV0aG9kcyBpbgorICAg
ICAgICBtYWluIHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQzODc0CisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkQmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZW1vdmVCbG9iKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNyZWF0ZVB1YmxpY0Jsb2JV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmV2b2tlUHVi
bGljQmxvYlVSTCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAg
ICAgICAgKiBodG1sL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iOjp+QmxvYik6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpj
b250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKiBodG1s
L0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1w
bDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6
OnVucmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6
OmdldEJsb2JEYXRhRnJvbVVSTCk6CisgICAgICAgICogaHRtbC9UaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmNwcDogQWRkZWQuCisgICAgICAgICogaHRtbC9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Lmg6
IEFkZGVkLgorCiAyMDEwLTA4LTExICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDdhMTRjYjEuLjFh
OWVmOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtMTU2NSw2ICsxNTY1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmNwcCBcCiAJV2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5o
IFwKIAlXZWJDb3JlL2h0bWwvVGV4dE1ldHJpY3MuaCBcCisJV2ViQ29yZS9odG1sL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwIFwKKwlXZWJDb3JlL2h0bWwvVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eS5oIFwKIAlXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAgXAogCVdlYkNvcmUvaHRtbC9W
YWxpZGl0eVN0YXRlLmggXAogCVdlYkNvcmUvaHRtbC9Wb2lkQ2FsbGJhY2suaCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGEy
ZmFmNTMuLmQ2YmNkZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNzMxLDYgKzE3MzEsOCBAQAogICAgICAgICAgICAgJ2h0
bWwvU3RlcFJhbmdlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9TdGVwUmFuZ2UuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9UZXh0TWV0cmljcy5oJywKKyAgICAgICAgICAgICdodG1sL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwJywKKyAgICAgICAgICAgICdodG1sL1RocmVhZGFibGVCbG9iUmVn
aXN0cnkuaCcsCiAgICAgICAgICAgICAnaHRtbC9UaW1lUmFuZ2VzLmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9UaW1lUmFuZ2VzLmgnLAogICAgICAgICAgICAgJ2h0bWwvVmFsaWRpdHlTdGF0ZS5j
cHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggYmM4N2UyNS4uYmUyNDJiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03NDMsNiArNzQzLDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgaHRtbC9JbWFnZURhdGEuY3BwIFwKICAgICBodG1sL0ltYWdlUmVzaXplclRocmVh
ZC5jcHAgXAogICAgIGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwIFwKKyAgICBodG1sL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwIFwKICAgICBodG1sL1N0ZXBSYW5nZS5jcHAgXAogICAgIGh0bWwv
VmFsaWRpdHlTdGF0ZS5jcHAgXAogICAgIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNDYzZjVkOS4uN2EzOWJhNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MDk0OSw2ICs0MDk0OSwx
NCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXFRocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxodG1sXFRpbWVSYW5nZXMuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTBlNTNhYi4uMTc1NzVkNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcxNiw2ICs3
MTYsOCBAQAogCQkyRUVENTc1ODEyMTA5RUU0MDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTc1NzEyMTA5
RUU0MDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5LmggKi87IH07CiAJCTJFRUQ1NzVCMTIxMDlFRjMw
MDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRUVENTc1OTEyMTA5RUYzMDA3NjU2QkIgLyogQmxvYkRhdGEuY3BwICov
OyB9OwogCQkyRUVENTc1QzEyMTA5RUYzMDA3NjU2QkIgLyogQmxvYkRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NzVBMTIxMDlFRjMwMDc2
NTZCQiAvKiBCbG9iRGF0YS5oICovOyB9OworCQkyRUVENTdFRDEyMTM4MDcyMDA3NjU2QkIgLyog
VGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRUVENTdFQjEyMTM4MDcyMDA3NjU2QkIgLyogVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5jcHAgKi87IH07CisJCTJFRUQ1N0VFMTIxMzgwNzIwMDc2NTZCQiAvKiBUaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRUVENTdFQzEyMTM4MDcyMDA3NjU2QkIgLyogVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5oICovOyB9OwogCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3Bw
ICovOyB9OwogCQkzMTI4OEU3MzBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4
OEU2RjBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CiAJ
CTMxMjg4RTc0MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcwMEUz
MDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCAqLzsgfTsKQEAgLTY0
NzEsNiArNjQ3Myw4IEBACiAJCTJFRUQ1NzU3MTIxMDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVnaXN0
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYlJlZ2lzdHJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRUQ1NzU5MTIxMDlFRjMwMDc2NTZCQiAvKiBC
bG9iRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRUQ1NzVBMTIxMDlFRjMwMDc2
NTZCQiAvKiBCbG9iRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9i
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUVENTdFQjEyMTM4MDcyMDA3
NjU2QkIgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMkVFRDU3RUMxMjEzODA3MjAwNzY1NkJCIC8qIFRocmVhZGFibGVC
bG9iUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RTBF
MzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjg4RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjg4
RTcwMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQxODQsNiArMTQxODgsOCBAQAogCQkJ
CUE1QUZCMzRFMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuaCAqLywKIAkJCQlCQ0VGNDVF
ODBFNjg3NzY3MDAxQzEyODcgLyogVGV4dE1ldHJpY3MuaCAqLywKIAkJCQlCQ0VGNDUzRjBFNjc2
QUMxMDAxQzEyODcgLyogVGV4dE1ldHJpY3MuaWRsICovLAorCQkJCTJFRUQ1N0VCMTIxMzgwNzIw
MDc2NTZCQiAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCAqLywKKwkJCQkyRUVENTdFQzEy
MTM4MDcyMDA3NjU2QkIgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oICovLAogCQkJCUU0NDYx
MzlEMENENjMzMTAwMEZBREE3NSAvKiBUaW1lUmFuZ2VzLmNwcCAqLywKIAkJCQlFNDQ2MTM5RTBD
RDYzMzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5oICovLAogCQkJCUU0NDYxMzlGMENENjMzMTAw
MEZBREE3NSAvKiBUaW1lUmFuZ2VzLmlkbCAqLywKQEAgLTIwMTQyLDYgKzIwMTQ4LDcgQEAKIAkJ
CQkyRUVENTc1ODEyMTA5RUU0MDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRUVENTc1QzEyMTA5RUYzMDA3NjU2QkIgLyogQmxvYkRhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3OEI2RkNBMTIxMjg4MjEwMDE1OTVFRiAvKiBIVE1MVmlld1NvdXJjZVBhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVFRDU3RUUxMjEzODA3MjAwNzY1NkJCIC8qIFRocmVh
ZGFibGVCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjI1NjYsNiArMjI1NzMsNyBA
QAogCQkJCTJFRUQ1NzU1MTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTJFRUQ1NzVCMTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzhCNkZDOTEyMTI4ODIxMDAxNTk1RUYgLyogSFRNTFZpZXdTb3VyY2VQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkVFRDU3RUQxMjEzODA3MjAwNzY1NkJCIC8q
IFRocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IDlmZGVjOWYuLjZkNmIxOGQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0yOCwxMyArMjgsMTUgQEAKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVk
ZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VU
YXNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJGaWxlVGhyZWFk
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgorI2luY2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXb3JrZXJD
b250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KQEAgLTkxLDEwICs5MywxNSBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp+U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpCiAgICAgICAgIG1fZmlsZVRocmVhZCA9IDA7CiAgICAgfQog
I2VuZGlmCi0gICAgSGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBibG9iVVJMc0VuZCA9IG1fYmxv
YlVSTHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2Jsb2JVUkxzLmJlZ2luKCk7IGl0ZXIgIT0gYmxvYlVSTHNFbmQ7ICsraXRlcikKLSAgICAgICAg
Ly8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2FmZSBwcm94eSB0byBtYWtlIGl0IHdvcmsgd2l0
aCB3b3JrZXJzLgotICAgICAgICBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkudW5yZWdpc3RlckJs
b2JVUkwoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdGVyKSk7CisKKyAgICBIYXNoU2V0PEJsb2Iq
Pjo6aXRlcmF0b3IgYmxvYnNFbmQgPSBtX2Jsb2JzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxC
bG9iKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Jsb2JzLmJlZ2luKCk7IGl0ZXIgIT0gYmxvYnNFbmQ7
ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+Y29udGV4dERlc3Ryb3llZCgpOworI2lmIEVOQUJM
RShCTE9CKQorICAgIEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgcHVibGljQmxvYlVSTHNFbmQg
PSBtX3B1YmxpY0Jsb2JVUkxzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxTdHJpbmc+OjppdGVy
YXRvciBpdGVyID0gbV9wdWJsaWNCbG9iVVJMcy5iZWdpbigpOyBpdGVyICE9IHB1YmxpY0Jsb2JV
UkxzRW5kOyArK2l0ZXIpCisgICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0
ZXJCbG9iVVJMKHRoaXMsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXRlcikpOworI2VuZGlmCiB9
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCkBAIC0xNjgsNiArMTc1LDE4IEBAIHZvaWQgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqIHBvcnQp
CiAgICAgbV9tZXNzYWdlUG9ydHMucmVtb3ZlKHBvcnQpOwogfQogCit2b2lkIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OmFkZEJsb2IoQmxvYiogYmxvYikKK3sKKyAgICBBU1NFUlQoYmxvYik7Cisg
ICAgbV9ibG9icy5hZGQoYmxvYik7Cit9CisKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
cmVtb3ZlQmxvYihCbG9iKiBibG9iKQoreworICAgIEFTU0VSVChibG9iKTsKKyAgICBtX2Jsb2Jz
LnJlbW92ZShibG9iKTsKK30KKwogYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjYW5TdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0cygpCiB7CiAgICAgLy8gTm8gcHJvdGVjdGlvbiBhZ2FpbnN0IG1f
YWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRlcmF0aW9uOiBjYW5TdXNwZW5kKCkg
c2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgpAQCAtMjQ0LDE5ICsyNjMsMjMgQEAgRE9N
VGltZXIqIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmZpbmRUaW1lb3V0KGludCB0aW1lb3V0SWQp
CiAgICAgcmV0dXJuIG1fdGltZW91dHMuZ2V0KHRpbWVvdXRJZCk7CiB9CiAKLXZvaWQgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6dHJhY2tCbG9iVVJMKGNvbnN0IFN0cmluZyYgdXJsKQorI2lmIEVO
QUJMRShCTE9CKQorS1VSTCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjcmVhdGVQdWJsaWNCbG9i
VVJMKEJsb2IqIGJsb2IpCiB7Ci0gICAgbV9ibG9iVVJMcy5hZGQodXJsKTsKKyAgICBLVVJMIHB1
YmxpY1VSTCA9IEJsb2JVUkw6OmNyZWF0ZVVSTCh0aGlzKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwodGhpcywgcHVibGljVVJMLCBibG9iLT51cmwoKSk7Cisg
ICAgbV9wdWJsaWNCbG9iVVJMcy5hZGQocHVibGljVVJMLnN0cmluZygpKTsKKyAgICByZXR1cm4g
cHVibGljVVJMOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJldm9rZUJsb2JV
UkwoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJldm9r
ZVB1YmxpY0Jsb2JVUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAgIGlmIChtX2Jsb2JVUkxzLmNv
bnRhaW5zKHVybCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2FmZSBw
cm94eSB0byBtYWtlIGl0IHdvcmsgd2l0aCB3b3JrZXJzLgotICAgICAgICBCbG9iUmVnaXN0cnk6
Omluc3RhbmNlKCkudW5yZWdpc3RlckJsb2JVUkwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkp
OwotICAgICAgICBtX2Jsb2JVUkxzLnJlbW92ZSh1cmwpOworICAgIGlmIChtX3B1YmxpY0Jsb2JV
UkxzLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpIHsKKyAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsKTsKKyAgICAgICAgbV9wdWJsaWNCbG9i
VVJMcy5yZW1vdmUodXJsLnN0cmluZygpKTsKICAgICB9CiB9CisjZW5kaWYKIAogI2lmIEVOQUJM
RShCTE9CKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCiBGaWxlVGhyZWFkKiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpmaWxlVGhyZWFkKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApp
bmRleCA3OWQ0ZDQyLi43NjE3NTVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CkBAIC00MSw2ICs0MSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBY3Rp
dmVET01PYmplY3Q7CisgICAgY2xhc3MgQmxvYjsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAg
Y2xhc3MgRGF0YWJhc2U7CiAgICAgY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOwpAQCAt
MTI2LDggKzEyNywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcmVtb3Zl
VGltZW91dChpbnQgdGltZW91dElkKTsKICAgICAgICAgRE9NVGltZXIqIGZpbmRUaW1lb3V0KGlu
dCB0aW1lb3V0SWQpOwogCi0gICAgICAgIHZvaWQgdHJhY2tCbG9iVVJMKGNvbnN0IFN0cmluZyYp
OwotICAgICAgICB2b2lkIHJldm9rZUJsb2JVUkwoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZv
aWQgYWRkQmxvYihCbG9iKik7CisgICAgICAgIHZvaWQgcmVtb3ZlQmxvYihCbG9iKik7CisjaWYg
RU5BQkxFKEJMT0IpCisgICAgICAgIEtVUkwgY3JlYXRlUHVibGljQmxvYlVSTChCbG9iKik7Cisg
ICAgICAgIHZvaWQgcmV2b2tlUHVibGljQmxvYlVSTChjb25zdCBLVVJMJik7CisjZW5kaWYKIAog
I2lmIFVTRShKU0MpCiAgICAgICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCk7CkBA
IC0xNTYsNyArMTYxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBIYXNoTWFw
PGludCwgRE9NVGltZXIqPiBtX3RpbWVvdXRzOwogCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X2Jsb2JVUkxzOworICAgICAgICBIYXNoU2V0PEJsb2IqPiBtX2Jsb2JzOworI2lmIEVOQUJMRShC
TE9CKQorICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9wdWJsaWNCbG9iVVJMczsKKyNlbmRpZgog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPSAwOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3Bw
CmluZGV4IGY4Zjc5NWUuLjNhNjJhYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKQEAgLTMzLDY4ICszMyw4OSBAQAogCiAjaW5j
bHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRlICJCbG9iSXRlbS5oIgotI2luY2x1ZGUgIkJsb2JS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRocmVhZGFi
bGVCbG9iUmVnaXN0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGSVhNRTogVG8g
YmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KLUJsb2I6OkJsb2Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgQmxvYkl0
ZW1MaXN0JiBpdGVtcykKLSAgICA6IG1fdHlwZSh0eXBlKQorQmxvYjo6QmxvYihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9z
aXplKDApCiB7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1f
aXRlbXMuYXBwZW5kKGl0ZW1zW2ldKTsKIH0KIAogLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hl
biB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCi1CbG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYgaXRlbSkKLSAgICA6IG1fc2l6
ZSgwKQorQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYgaXRlbSkKKyAgICA6IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICwgbV9zaXplKDAp
CiB7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwogICAgIG1f
aXRlbXMuYXBwZW5kKGl0ZW0pOwogfQogCiAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdl
IHN3aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KLUJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IG1fc2l6ZSgwKQorQmxvYjo6QmxvYihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJp
bmcmIHBhdGgpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkKKyAgICAsIG1fc2l6ZSgwKQogeworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+YWRkQmxvYih0aGlzKTsKICAgICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgaW5pdGlhbGl6ZSB0
aGUgdHlwZSB1bmxpa2UgRmlsZShwYXRoKS4KICAgICBtX2l0ZW1zLmFwcGVuZChGaWxlQmxvYkl0
ZW06OmNyZWF0ZShwYXRoKSk7CiB9CiAKIEJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEs
IGxvbmcgbG9uZyBzaXplKQotICAgIDogbV90eXBlKGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKQor
ICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisg
ICAgLCBtX3R5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkpCiAgICAgLCBtX3NpemUoc2l6ZSkK
IHsKICAgICBBU1NFUlQoYmxvYkRhdGEuZ2V0KCkgJiYgIWJsb2JEYXRhLT5pdGVtcygpLmlzRW1w
dHkoKSk7CiAKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZEJsb2IodGhpcyk7CisK
ICAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJuYWwgVVJMIGFuZCByZWdpc3RlciBpdCB3aXRoIHRo
ZSBwcm92aWRlZCBibG9iIGRhdGEuCiAgICAgbV91cmwgPSBCbG9iVVJMOjpjcmVhdGVVUkwoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2Fm
ZSBwcm94eSB0byBtYWtlIGl0IHdvcmsgd2l0aCB3b3JrZXJzLgotICAgIEJsb2JSZWdpc3RyeTo6
aW5zdGFuY2UoKS5yZWdpc3RlckJsb2JVUkwobV91cmwsIGJsb2JEYXRhKTsKKyAgICBUaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
bV91cmwsIGJsb2JEYXRhKTsKIH0KIAogQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpCi0gICAgOiBtX3R5cGUodHlwZSkKKyAgICA6IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICwgbV90eXBl
KHR5cGUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmFkZEJsb2IodGhpcyk7CisKICAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdl
IHN3aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KICAgICBpZiAoc3JjVVJMLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVn
aXN0ZXIgaXQgd2l0aCB0aGUgc2FtZSBibG9iIGRhdGEgYXMgdGhlIHNvdXJjZSBVUkwuCiAgICAg
bV91cmwgPSBCbG9iVVJMOjpjcmVhdGVVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2FmZSBwcm94eSB0byBtYWtlIGl0IHdvcmsgd2l0
aCB3b3JrZXJzLgotICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS5yZWdpc3RlckJsb2JVUkwo
bV91cmwsIHNyY1VSTCk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9i
VVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJsLCBzcmNVUkwpOwogfQogCiBCbG9iOjp+
QmxvYigpCiB7CiAgICAgLy8gVGhlIGludGVybmFsIFVSTCBpcyBvbmx5IHVzZWQgdG8gcmVmZXIg
dG8gdGhlIEJsb2Igb2JqZWN0LiBTbyB3ZSBuZWVkIHRvIHVucmVnaXN0ZXIgdGhlIFVSTCB3aGVu
IHRoZSBvYmplY3QgaXMgR0MtZWQuCi0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2Fm
ZSBwcm94eSB0byBtYWtlIGl0IHdvcmsgd2l0aCB3b3JrZXJzLgotICAgIEJsb2JSZWdpc3RyeTo6
aW5zdGFuY2UoKS51bnJlZ2lzdGVyQmxvYlVSTChtX3VybCk7CisgICAgaWYgKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCkgeworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlbW92
ZUJsb2IodGhpcyk7CisgICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJC
bG9iVVJMKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV91cmwpOworICAgIH0KK30KKwordm9p
ZCBCbG9iOjpjb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKKworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVybmFsIFVSTCBiZWZvcmUg
dGhlIGNvbnRleHQgaXMgZ29uZS4KKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lz
dGVyQmxvYlVSTChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJsKTsKKyAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSAwOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6
ZSgpIGNvbnN0CkBAIC0xNDEsMTkgKzE2Miw2IEBAIFBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xp
Y2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbG9uCiAg
ICAgfQogICAgIHJldHVybiBCbG9iOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29u
dGVudFR5cGUsIGl0ZW1zKTsKIH0KLQotS1VSTCBCbG9iOjpjcmVhdGVQdWJsaWNVUkwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgY29uc3QKLXsKLSAgICBL
VVJMIHVybCA9IEJsb2JVUkw6OmNyZWF0ZVVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLQot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhyZWFkLXNhZmUgcHJveHkgdG8gbWFrZSBpdCB3b3Jr
IHdpdGggd29ya2Vycy4KLSAgICBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkucmVnaXN0ZXJCbG9i
VVJMKHVybCwgbV91cmwpOwotCi0gICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgbmV3IFVSTCBpbiB0
aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBzbyB0aGF0IGl0IHdpbGwgZ2V0IHVucmVnaXN0ZXJl
ZCB3aGVuIHRoZSBjb250ZXh0IGlzIGdvbmUuCi0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
dHJhY2tCbG9iVVJMKHVybC5zdHJpbmcoKSk7Ci0KLSAgICByZXR1cm4gdXJsOwotfQogI2VuZGlm
IC8vIEVOQUJMRShCTE9CKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBhNzI5MjljLi4z
NzRhNDAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUvaHRt
bC9CbG9iLmgKQEAgLTYwLDYgKzYwLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+QmxvYigp
OwogCisgICAgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CisKICAgICBjb25zdCBLVVJMJiB1cmwo
KSBjb25zdCB7IHJldHVybiBtX3VybDsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkg
Y29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CkBAIC03Myw4ICs3NSw2IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShCTE9CKQogICAgIFBhc3NS
ZWZQdHI8QmxvYj4gc2xpY2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IFN0cmluZygp
KSBjb25zdDsKLQotICAgIEtVUkwgY3JlYXRlUHVibGljVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKSBjb25zdDsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CkBAIC05NSw2ICs5NSw3IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyBJdCBpcyBvbmx5IHVzZWQgYnkgRmlsZVJlYWRlciB0byByZWFkIHRoZSBi
bG9iIGRhdGEgdmlhIGxvYWRpbmcgZnJvbSB0aGUgYmxvYiBVUkwgcmVzb3VyY2UuCiAgICAgS1VS
TCBtX3VybDsKIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKICAgICBTdHJpbmcgbV90eXBlOwogICAgIGxvbmcgbG9uZyBtX3NpemU7CiB9Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvV2ViQ29yZS9o
dG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDc0ZTUxNzUuLmJiYmI4ZjAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
QmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzMsNiArNzQsNyBA
QCBib29sIEJsb2JSZWdpc3RyeUltcGw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAogCiBCbG9iUmVnaXN0cnkmIEJsb2JSZWdpc3RyeTo6
aW5zdGFuY2UoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJbXBsLCBpbnN0YW5jZSwgKCkpOwogICAgIHJldHVybiBp
bnN0YW5jZTsKIH0KQEAgLTExOCw2ICsxMjAsOCBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OmFw
cGVuZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdlRGF0YSwgY29ucwog
CiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmws
IFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQogeworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKICAgICBSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iU3RvcmFnZURhdGEgPSBC
bG9iU3RvcmFnZURhdGE6OmNyZWF0ZSgpOwogICAgIGJsb2JTdG9yYWdlRGF0YS0+c2V0Q29udGVu
dFR5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkpOwogICAgIGJsb2JTdG9yYWdlRGF0YS0+c2V0
Q29udGVudERpc3Bvc2l0aW9uKGJsb2JEYXRhLT5jb250ZW50RGlzcG9zaXRpb24oKSk7CkBAIC0x
NDMsNiArMTQ3LDggQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgS1VSTCYgdXJsLCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG8KIAogdm9pZCBCbG9iUmVnaXN0
cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNV
UkwpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIFJlZlB0cjxCbG9iU3Rv
cmFnZURhdGE+IHNyYyA9IG1fYmxvYnMuZ2V0KHNyY1VSTC5zdHJpbmcoKSk7CiAgICAgQVNTRVJU
KHNyYyk7CiAgICAgaWYgKCFzcmMpCkBAIC0xNTgsMTEgKzE2NCwxMyBAQCB2b2lkIEJsb2JSZWdp
c3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNy
Y1VSTCkKIAogdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjp1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBL
VVJMJiB1cmwpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX2Jsb2JzLnJl
bW92ZSh1cmwuc3RyaW5nKCkpOwogfQogCiBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gQmxv
YlJlZ2lzdHJ5SW1wbDo6Z2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IEtVUkwmIHVybCkgY29uc3QK
IHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Jsb2JzLmdldCh1
cmwuc3RyaW5nKCkpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5jcHAgYi9XZWJDb3JlL2h0bWwvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRlNzBmYgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaHRtbC9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcApAQCAtMCwwICsx
LDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtl
ckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIHZvaWQgcG9zdFRhc2tUb01haW5UaHJlYWQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUGFzc093blB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQoreworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAgV29ya2VyTG9hZGVyUHJveHkmIHByb3h5
ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT50
aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKKyAgICBwcm94eS5wb3N0VGFza1RvTG9hZGVy
KHRhc2spOworfQorCitzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkxUYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JE
YXRhKQoreworICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS5yZWdpc3RlckJsb2JVUkwodXJs
LCBibG9iRGF0YSk7Cit9CisKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJC
bG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNv
bnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCit7CisgICAgaWYg
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICBwb3N0
VGFza1RvTWFpblRocmVhZChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjcmVhdGVDYWxsYmFja1Rh
c2soJnJlZ2lzdGVyQmxvYlVSTFRhc2ssIHVybCwgYmxvYkRhdGEpKTsKKyAgICBlbHNlCisgICAg
ICAgIHJlZ2lzdGVyQmxvYlVSTFRhc2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdXJsLCBibG9i
RGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTEZyb21UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3sK
KyAgICBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgc3JjVVJM
KTsKK30KKwordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit7CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICBwb3N0VGFza1RvTWFpblRocmVhZChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBjcmVhdGVDYWxsYmFja1Rhc2soJnJlZ2lzdGVyQmxvYlVSTEZy
b21UYXNrLCB1cmwsIHNyY1VSTCkpOworICAgIGVsc2UKKyAgICAgICAgcmVnaXN0ZXJCbG9iVVJM
RnJvbVRhc2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdXJsLCBzcmNVUkwpOworfQorCitzdGF0
aWMgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkudW5yZWdpc3Rl
ckJsb2JVUkwodXJsKTsKK30KKwordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lz
dGVyQmxvYlVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlz
V29ya2VyQ29udGV4dCgpKQorICAgICAgICBwb3N0VGFza1RvTWFpblRocmVhZChzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBjcmVhdGVDYWxsYmFja1Rhc2soJnVucmVnaXN0ZXJCbG9iVVJMVGFzaywg
dXJsKSk7CisgICAgZWxzZQorICAgICAgICB1bnJlZ2lzdGVyQmxvYlVSTFRhc2soc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgdXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaCBiL1dlYkNvcmUvaHRt
bC9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2RjZTZiYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9UaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeV9oCisjZGVmaW5lIFRocmVhZGFibGVCbG9iUmVnaXN0cnlfaAorCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iRGF0YTsK
K2NsYXNzIEtVUkw7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBUaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJs
b2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJs
b2JEYXRhPik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICBzdGF0aWMg
dm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VS
TCYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeV9oCg==
</data>
<flag name="review"
          id="52773"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="52774"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>