<?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>35707</bug_id>
          
          <creation_ts>2010-03-03 16:25:47 -0800</creation_ts>
          <short_desc>Implementing DOMFormData class</short_desc>
          <delta_ts>2010-03-10 17:20:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore 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>
          
          <blocked>26979</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>darin</cc>
    
    <cc>dimich</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>195808</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-03 16:25:47 -0800</bug_when>
    <thetext>This bug only covers the implementation of DOMFormData class for review purpose. The exposing of IDL interface and adding JSC bindings plus layout test will be in separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195809</commentid>
    <comment_count>1</comment_count>
      <attachid>49960</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-03 16:27:09 -0800</bug_when>
    <thetext>Created attachment 49960
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195810</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-03 16:34:31 -0800</bug_when>
    <thetext>Attachment 49960 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/html/FormDataList.cpp:36:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195811</commentid>
    <comment_count>3</comment_count>
      <attachid>49961</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-03 16:37:37 -0800</bug_when>
    <thetext>Created attachment 49961
Fix style error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196258</commentid>
    <comment_count>4</comment_count>
      <attachid>49961</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-03-04 16:28:18 -0800</bug_when>
    <thetext>Comment on attachment 49961
Fix style error

&gt; diff --git a/WebCore/platform/network/FormData.cpp b/WebCore/platform/network/FormData.cpp

&gt; diff --git a/WebCore/xml/DOMFormData.cpp b/WebCore/xml/DOMFormData.cpp

&gt; +void DOMFormData::append(const String&amp; name, const String&amp; value)
&gt; +{
&gt; +    if (!name.isEmpty())
&gt; +        m_list.appendData(name, value);
&gt; +}

Why name can not be empty? Either it should be allowed, or we perhaps want to throw exception for JS to reprot - a simple noop does not look right.

&gt; +
&gt; +void DOMFormData::append(const String&amp; name, Blob* blob)
&gt; +{
&gt; +    if (!name.isEmpty() &amp;&amp; !blob-&gt;path().isEmpty()) {

Ditto.

&gt; +        RefPtr&lt;File&gt; file = static_cast&lt;File*&gt;(blob);

I guess this is a place which will change when Blob.slice() is landed. Add // FIXME ?

&gt; +        m_list.appendFile(name, file.release());
&gt; +    }
&gt; +}
&gt; +
&gt; +} // namespace WebCore


&gt; diff --git a/WebCore/xml/DOMFormData.h b/WebCore/xml/DOMFormData.h

Why is it in WebCore/xml? It does not appear to haveanything to do with xml, except that it can be sent by XHR.
Perhaps a better place for it is WebCore/page.

&gt; +class DOMFormData : public RefCounted&lt;DOMFormData&gt; {
&gt; +public:
&gt; +    static PassRefPtr&lt;DOMFormData&gt; create()
&gt; +    {
&gt; +        return adoptRef(new DOMFormData());
&gt; +    }

Would be nice to have an empty line here. Also, often these functions are written in a single line.

&gt; +    void append(const String&amp; name, Blob* blob);

&apos;blob&apos; should be omitted.

&gt; +
&gt; +    const FormDataList&amp; list() const { return m_list; }

Consider: deriving DOMFormData from FormDataList, because DOMFormData &quot;is&quot; a list, essentially. It can not replace a list for example.
Also, it would provide for simpler domFormData.list().size() kind of calls rather then ugly domFormData.list().list().size().
Also, then you don&apos;t need a create(FormDataList) and a copy constructor on FormDataList.

r- but it is very close.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196292</commentid>
    <comment_count>5</comment_count>
      <attachid>50074</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-04 18:04:02 -0800</bug_when>
    <thetext>Created attachment 50074
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196294</commentid>
    <comment_count>6</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-04 18:06:00 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 49961 [details])
&gt; &gt; diff --git a/WebCore/platform/network/FormData.cpp b/WebCore/platform/network/FormData.cpp
&gt; 
&gt; &gt; diff --git a/WebCore/xml/DOMFormData.cpp b/WebCore/xml/DOMFormData.cpp
&gt; 
&gt; &gt; +void DOMFormData::append(const String&amp; name, const String&amp; value)
&gt; &gt; +{
&gt; &gt; +    if (!name.isEmpty())
&gt; &gt; +        m_list.appendData(name, value);
&gt; &gt; +}
&gt; 
&gt; Why name can not be empty? Either it should be allowed, or we perhaps want to
&gt; throw exception for JS to reprot - a simple noop does not look right.
&gt; 
This is for consistency with current form behavior: the element with empty name, except image, will not be submitted. I will ping the spec writer to check if we want to throw an exception.
&gt; &gt; +
&gt; &gt; +void DOMFormData::append(const String&amp; name, Blob* blob)
&gt; &gt; +{
&gt; &gt; +    if (!name.isEmpty() &amp;&amp; !blob-&gt;path().isEmpty()) {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; +        RefPtr&lt;File&gt; file = static_cast&lt;File*&gt;(blob);
&gt; 
&gt; I guess this is a place which will change when Blob.slice() is landed. Add //
&gt; FIXME ?
&gt; 
&gt; &gt; +        m_list.appendFile(name, file.release());
&gt; &gt; +    }
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +} // namespace WebCore
&gt; 
&gt; 
&gt; &gt; diff --git a/WebCore/xml/DOMFormData.h b/WebCore/xml/DOMFormData.h
&gt; 
&gt; Why is it in WebCore/xml? It does not appear to haveanything to do with xml,
&gt; except that it can be sent by XHR.
&gt; Perhaps a better place for it is WebCore/page.
&gt; 
&gt; &gt; +class DOMFormData : public RefCounted&lt;DOMFormData&gt; {
&gt; &gt; +public:
&gt; &gt; +    static PassRefPtr&lt;DOMFormData&gt; create()
&gt; &gt; +    {
&gt; &gt; +        return adoptRef(new DOMFormData());
&gt; &gt; +    }
&gt; 
&gt; Would be nice to have an empty line here. Also, often these functions are
&gt; written in a single line.
&gt; 
&gt; &gt; +    void append(const String&amp; name, Blob* blob);
&gt; 
&gt; &apos;blob&apos; should be omitted.
&gt; 
&gt; &gt; +
&gt; &gt; +    const FormDataList&amp; list() const { return m_list; }
&gt; 
&gt; Consider: deriving DOMFormData from FormDataList, because DOMFormData &quot;is&quot; a
&gt; list, essentially. It can not replace a list for example.
&gt; Also, it would provide for simpler domFormData.list().size() kind of calls
&gt; rather then ugly domFormData.list().list().size().
&gt; Also, then you don&apos;t need a create(FormDataList) and a copy constructor on
&gt; FormDataList.
&gt; 
&gt; r- but it is very close.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197030</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-03-07 14:09:37 -0800</bug_when>
    <thetext>DOMFormData should probably go in WebCore/html like File and FileList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197325</commentid>
    <comment_count>8</comment_count>
      <attachid>50249</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-08 14:41:32 -0800</bug_when>
    <thetext>Created attachment 50249
Move DOMFormData to html/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198369</commentid>
    <comment_count>9</comment_count>
      <attachid>50249</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-03-10 15:14:31 -0800</bug_when>
    <thetext>Comment on attachment 50249
Move DOMFormData to html/

r=me, with a coupel of nits that can be fixed on landing:

&gt; diff --git a/WebCore/html/DOMFormData.cpp b/WebCore/html/DOMFormData.cpp
&gt; +DOMFormData::DOMFormData(const TextEncoding&amp; encoding) : FormDataList(encoding)

&quot;: FormDataList(encoding)&quot; should be on a separate line

&gt; diff --git a/WebCore/html/HTMLFormElement.h b/WebCore/html/HTMLFormElement.h

&gt; +class DOMFormData;

Seems this declaration is not needed.

&gt; diff --git a/WebCore/platform/network/FormData.h b/WebCore/platform/network/FormData.h
&gt; +    static PassRefPtr&lt;FormData&gt; create(const DOMFormData&amp;, bool isMultiPartForm, Document*);

It&apos;d be better for readability if instead of &apos;bool&apos; this parameter was an enum, something like:
enum  { CreateRegularForm, CreateMultiPartForm };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198378</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-10 15:21:33 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; +    static PassRefPtr&lt;FormData&gt; create(const DOMFormData&amp;, bool isMultiPartForm, Document*);
&gt; 
&gt; It&apos;d be better for readability if instead of &apos;bool&apos; this parameter was an enum,
&gt; something like:
&gt; enum  { CreateRegularForm, CreateMultiPartForm };

Two separate creation functions is also a good option in a case like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198428</commentid>
    <comment_count>11</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-10 17:20:55 -0800</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/55821.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49960</attachid>
            <date>2010-03-03 16:27:09 -0800</date>
            <delta_ts>2010-03-03 16:37:37 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>35707</filename>
            <type>text/plain</type>
            <size>30661</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCBmMjY3NWUwLi44NzJlNWRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC04OTIsNiArODkyLDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwIFwK
IAl3b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgXAogCVwKKwl4bWwvRE9NRm9ybURhdGEuY3BwIFwK
IAl4bWwvRE9NUGFyc2VyLmNwcCBcCiAJeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAJeG1sL1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDcxYzQyOTguLjczZTAyMzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAK
KzIwMTAtMDMtMDMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGluZyBET01Gb3Jt
RGF0YSBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM1NzA3CisKKyAgICAgICAgVGhpcyBwYXRjaCBvbmx5IGFkZHJlc3NlcyB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgRE9NRm9ybURhdGEgY2xhc3MgYW5kCisgICAgICAgIG1vdmVzIHRoZSBGb3Jt
RGF0YSBjb25zdHJ1Y3Rpb24gbG9naWMgZnJvbSBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1E
YXRhCisgICAgICAgIHRvIEZvcm1EYXRhOjpjcmVhdGUoKSBzbyB0aGF0IGl0IGNhbiBiZSB1c2Vk
IGJ5IGJvdGggSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGFuZCBYTUxIdHRwUmVxdWVzdC4KKwor
ICAgICAgICBUaGUgRE9NRm9ybURhdGEgSURMIGludGVyZmFjZSB3aWxsIGJlIGV4cG9zZWQgaW4g
YW5vdGhlciBwYXRjaCBhbmQgdGhlCisgICAgICAgIHRlc3Qgd2lsbCBiZSBhZGRlZCB0aGVuLgor
CisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6Rm9ybURhdGFMaXN0KToKKyAgICAgICAgKiBodG1s
L0Zvcm1EYXRhTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjplbmNvZGlu
Zyk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OmNyZWF0ZURPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5o
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGE6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmJvdW5kYXJ5KToKKyAgICAgICAg
KiB4bWwvRE9NRm9ybURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB4bWwvRE9NRm9ybURhdGEu
aDogQWRkZWQuCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVl
c3QuaDoKKwogMjAxMC0wMy0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4ZWQgTWFjIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYTBhY2U1Yy4uNDkwNDVmZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC0xOTUzLDYgKzE5NTMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlVHJhbnNmb3JtRGF0YS5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZVZpc3VhbERhdGEuaCBcCisJV2ViQ29yZS94bWwvRE9NRm9ybURhdGEuY3BwIFwKKwlXZWJDb3Jl
L3htbC9ET01Gb3JtRGF0YS5oIFwKIAlXZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwIFwKIAlXZWJD
b3JlL3htbC9ET01QYXJzZXIuaCBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggOWRkNTI1OS4uNGQwNjc4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2NjEsNiArMzY2MSw4IEBACiAgICAgICAg
ICAgICAnd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAn
d29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwJywKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclRo
cmVhZC5oJywKKyAgICAgICAgICAgICd4bWwvRE9NRm9ybURhdGEuY3BwJywKKyAgICAgICAgICAg
ICd4bWwvRE9NRm9ybURhdGEuaCcsCiAgICAgICAgICAgICAneG1sL0RPTVBhcnNlci5jcHAnLAog
ICAgICAgICAgICAgJ3htbC9ET01QYXJzZXIuaCcsCiAgICAgICAgICAgICAneG1sL05hdGl2ZVhQ
YXRoTlNSZXNvbHZlci5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGYyMzI0Mi4uNWQwNzk3MCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC05NzUsNiArOTc1
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlU3Vycm91bmREYXRh
LmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlVHJhbnNmb3JtRGF0YS5jcHAgXAogICAg
IHJlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwIFwKKyAgICB4bWwvRE9NRm9ybURh
dGEuY3BwIFwKICAgICB4bWwvRE9NUGFyc2VyLmNwcCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCkBAIC0xOTUxLDYgKzE5
NTIsNyBAQCBIRUFERVJTICs9IFwKICAgICB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuaCBcCiAgICAg
d29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBcCiAgICAgd29ya2Vycy9Xb3JrZXJUaHJlYWQu
aCBcCisgICAgeG1sL0RPTUZvcm1EYXRhLmggXAogICAgIHhtbC9ET01QYXJzZXIuaCBcCiAgICAg
eG1sL05hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3QuaCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1M2FiYzMyLi40NDdiNmM5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI4MjY3LDYgKzI4MjY3
LDE0IEBACiAJCQlOYW1lPSJ4bWwiDQogCQkJPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ceG1sXERPTUZvcm1EYXRhLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxET01Gb3JtRGF0YS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXERPTVBhcnNlci5j
cHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBhYWQ0MjYxLi4xMzg3NWE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjI1LDYgKzYyNSw4IEBACiAJCTJFQ0Y3QUREMTAx
NjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURCMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9y
RXZlbnQuaCAqLzsgfTsKIAkJMkVDRjdBRTExMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdB
REUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNGN0FFMjEw
MTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdBREYxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZl
bnQuaCAqLzsgfTsKKwkJMkVENjA5NTUxMTNGMjg0OTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRDYwOTUz
MTEzRjI4NDkwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgKi87IH07CisJCTJFRDYwOTU2MTEz
RjI4NDkwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVENjA5NTQxMTNGMjg0OTAwQzg2ODRFIC8qIERPTUZvcm1E
YXRhLmggKi87IH07CiAJCTMxMjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAg
Ki87IH07CiAJCTMxMjg4RTczMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4
RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsKIAkJ
MzEyODhFNzQwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNzAwRTMw
MDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovOyB9OwpAQCAtNTk3
MCw2ICs1OTcyLDggQEAKIAkJMkVDRjdBREUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXJyb3JFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RFNyAv
KiBFcnJvckV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9yRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVDRjdBRTAxMDE2MkI1ODAwNDI3
REU3IC8qIEVycm9yRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVycm9yRXZlbnQu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUQ2MDk1MzExM0YyODQ5MDBDODY4
NEUgLyogRE9NRm9ybURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRE9NRm9ybURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUQ2MDk1
NDExM0YyODQ5MDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NRm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RjBFMzAwNUQ2MDAzNjE5
QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYktpdENTU0tleWZyYW1lUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MzMyLDYgKzE1MzM2
LDggQEAKIAkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVBIC8qIHhtbCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMkVENjA5NTMxMTNGMjg0OTAwQzg2ODRF
IC8qIERPTUZvcm1EYXRhLmNwcCAqLywKKwkJCQkyRUQ2MDk1NDExM0YyODQ5MDBDODY4NEUgLyog
RE9NRm9ybURhdGEuaCAqLywKIAkJCQkxQUNFNTNFMTBBOEQxOEU3MDAyMjk0N0QgLyogRE9NUGFy
c2VyLmNwcCAqLywKIAkJCQkxQUNFNTNFMjBBOEQxOEU3MDAyMjk0N0QgLyogRE9NUGFyc2VyLmgg
Ki8sCiAJCQkJMUFDRTUzRTMwQThEMThFNzAwMjI5NDdEIC8qIERPTVBhcnNlci5pZGwgKi8sCkBA
IC0xODYwOSw2ICsxODYxNSw3IEBACiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpv
b21Nb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUQzNjAxQTExMkY4QjU2MDA0OERFQTggLyog
RGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjVEMzYwMUQxMTJGOEJBMDAw
NDhERUE4IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVENjA5
NTYxMTNGMjg0OTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIw
Nzk5LDYgKzIwODA2LDcgQEAKIAkJCQk1OTYyMjk3ODExMzNFRkQ3MDBEQzRDQkIgLyogR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCQzJDNzc3MTEzNEE4
RkMwMDBCMkY2MSAvKiBDYW52YXNTdXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1RDM2
MDFGMTEyRjhCQTgwMDQ4REVBOCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMkVENjA5NTUxMTNGMjg0OTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgYi9X
ZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAppbmRleCAyODFjOWZlLi5kNTVhN2U5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
Rm9ybURhdGFMaXN0LmNwcApAQCAtMjgsNiArMjgsMTQgQEAgRm9ybURhdGFMaXN0OjpGb3JtRGF0
YUxpc3QoY29uc3QgVGV4dEVuY29kaW5nJiBjKQogewogfQogCitGb3JtRGF0YUxpc3Q6OkZvcm1E
YXRhTGlzdChjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QpCisgICAgOiBtX2VuY29kaW5nKGxpc3Qu
ZW5jb2RpbmcoKSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC5tX2xpc3Qu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgbV9saXN0LmFwcGVuZChsaXN0Lm1fbGlzdFtpXSk7Cisg
ICAgfQorfQorCiB2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcm
IHMpCiB7CiAgICAgbV9saXN0LmFwcGVuZChzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9G
b3JtRGF0YUxpc3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAppbmRleCBhZWMxYTUy
Li44ZDJiMDk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKKysrIGIv
V2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEZvcm1EYXRhTGlzdCB7CiBwdWJsaWM6CiAgICAgRm9ybURhdGFMaXN0
KGNvbnN0IFRleHRFbmNvZGluZyYpOworICAgIEZvcm1EYXRhTGlzdChjb25zdCBGb3JtRGF0YUxp
c3QmKTsKIAogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICAgeyBhcHBlbmRTdHJpbmcoa2V5KTsgYXBwZW5kU3RyaW5nKHZh
bHVlKTsgfQpAQCAtNTUsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIGNvbnN0IFZl
Y3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAppbmRleCAyZjg4ODk0Li40MWFhYTM1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcApAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAt
NDYsNyArNDUsNiBAQAogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAi
VmFsaWRpdHlTdGF0ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTIwMSw4MyArMTk5LDExIEBA
IFRleHRFbmNvZGluZyBIVE1MRm9ybUVsZW1lbnQ6OmRhdGFFbmNvZGluZygpIGNvbnN0CiAgICAg
cmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmRhdGFFbmNvZGluZyhkb2N1bWVudCgpKTsKIH0KIAot
UGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YShjb25z
dCBDU3RyaW5nJiBib3VuZGFyeSkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVu
dDo6Y3JlYXRlRm9ybURhdGEoKQogewotICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKLSAg
ICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcgPSBkYXRhRW5jb2RpbmcoKS5lbmNvZGluZ0ZvckZvcm1T
dWJtaXNzaW9uKCk7CisgICAgUmVmUHRyPERPTUZvcm1EYXRhPiBkb21Gb3JtRGF0YSA9IGNyZWF0
ZURPTUZvcm1EYXRhKCk7CiAKLSAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IEZvcm1EYXRh
OjpjcmVhdGUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9
IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgRm9ybURhdGFMaXN0IGxpc3QoZW5jb2RpbmcpOwot
Ci0gICAgICAgIGlmICghY29udHJvbC0+ZGlzYWJsZWQoKSAmJiBjb250cm9sLT5hcHBlbmRGb3Jt
RGF0YShsaXN0LCBtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkpIHsKLSAgICAg
ICAgICAgIHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gbGlzdC5saXN0KCkuc2l6ZSgpOwotICAg
ICAgICAgICAgQVNTRVJUKGZvcm1EYXRhTGlzdFNpemUgJSAyID09IDApOwotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBmb3JtRGF0YUxpc3RTaXplOyBqICs9IDIpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIGtleSA9IGxpc3QubGlzdCgpW2pd
OwotICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBsaXN0
Lmxpc3QoKVtqICsgMV07Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2Zvcm1EYXRhQnVpbGRlci5p
c011bHRpUGFydEZvcm0oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBPbWl0IHRoZSBuYW1l
ICJpc2luZGV4IiBpZiBpdCdzIHRoZSBmaXJzdCBmb3JtIGRhdGEgZWxlbWVudC4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0aGlzIG9i
c29sZXRlIG5vdz8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmlzRW1wdHko
KSAmJiBrZXkuZGF0YSgpID09ICJpc2luZGV4IikKLSAgICAgICAgICAgICAgICAgICAgICAgIEZv
cm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwgdmFsdWUu
ZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9mb3JtRGF0YUJ1aWxkZXIuYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShlbmNvZGVkRGF0
YSwga2V5LmRhdGEoKSwgdmFsdWUuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwotICAgICAgICAgICAgICAg
ICAgICBtX2Zvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIGJvdW5k
YXJ5LCBrZXkuZGF0YSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVy
YXRlRmlsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0
eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0g
ICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5maWxlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmZpbGUoKS0+cGF0aCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdmFsdWUuZmlsZSgpLT5maWxlTmFt
ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNw
ZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQg
ZmlsZSBmb3IgdGhlIHVwbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGF0aC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9
IGRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgZ2VuZXJhdGVkRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNob3VsZEdlbmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+c2hvdWxkUmVw
bGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlRmlsZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZ2VuZXJhdGVk
RmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1
ZGUgdGhlIGZpbGVuYW1lPSIuLiIgcGFydCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxl
bmFtZSBpcyBlbXB0eQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIu
YWRkRmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBNSU1FVHlwZVJlZ2lzdHJ5
IGZ1bmN0aW9uJ3MgbmFtZSBtYWtlcyBpdCBzb3VuZCBsaWtlIGl0IHRha2VzIGEgcGF0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QganVzdCBhIGJhc2VuYW1lLiBCdXQgZmls
ZW5hbWUgaXMgbm90IHRoZSBwYXRoLiBCdXQgbm90ZSB0aGF0IGl0J3Mgbm90IHNhZmUgdG8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHVzZSBwYXRoIGluc3RlYWQgc2luY2Ug
aW4gdGhlIGdlbmVyYXRlZC1maWxlIGNhc2UgaXQgd2lsbCBub3QgcmVmbGVjdCB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBNSU1FIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCBmaWxl
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRI
ZWFkZXIoaGVhZGVyLCBtaW1lVHlwZS5sYXRpbjEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtX2Zvcm1E
YXRhQnVpbGRlci5maW5pc2hNdWx0aVBhcnRIZWFkZXIoaGVhZGVyKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvLyBBcHBlbmQgYm9keQotICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEodmFsdWUuZGF0YSgpLmRhdGEoKSwgZGF0
YVNpemUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5maWxlKCkgJiYgIXZh
bHVlLmZpbGUoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC0+YXBwZW5kRmlsZSh2YWx1ZS5maWxlKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxl
KTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpCi0gICAgICAgIG1fZm9y
bURhdGFCdWlsZGVyLmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIGJv
dW5kYXJ5LCB0cnVlKTsKLQotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShlbmNvZGVkRGF0YS5kYXRh
KCksIGVuY29kZWREYXRhLnNpemUoKSk7CisgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBG
b3JtRGF0YTo6Y3JlYXRlKCpkb21Gb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBh
cnRGb3JtKCksIGRvY3VtZW50KCkpOwogCiAgICAgcmVzdWx0LT5zZXRJZGVudGlmaWVyKGdlbmVy
YXRlRm9ybURhdGFJZGVudGlmaWVyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zODksOCAr
MzE1LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wg
YWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgbG9ja0gKICAgICAgICAgICAgIEFTU0VSVCghbV9m
b3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpOwogICAgICAgICB9CiAKKyAgICAgICAg
UmVmUHRyPEZvcm1EYXRhPiBkYXRhID0gY3JlYXRlRm9ybURhdGEoKTsKICAgICAgICAgaWYgKCFt
X2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkgewotICAgICAgICAgICAgUmVmUHRy
PEZvcm1EYXRhPiBkYXRhID0gY3JlYXRlRm9ybURhdGEoQ1N0cmluZygpKTsKIAogICAgICAgICAg
ICAgaWYgKGlzTWFpbHRvRm9ybSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUg
Zm9ybSBkYXRhIGludG8gYSBzdHJpbmcgdGhhdCB3ZSBwdXQgaW50byB0aGUgVVJMLgpAQCAtNDAw
LDEzICszMjYsMTEgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQs
IGJvb2wgYWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgbG9ja0gKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRh
dGEucmVsZWFzZSgpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCks
IFN0cmluZygpLCBsb2NrSGlzdG9yeSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5ID0gbV9mb3Jt
RGF0YUJ1aWxkZXIuZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgICAgICAgICAg
ZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRh
KGJvdW5kYXJ5LmRhdGEoKSksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5
cGUoKSwgYm91bmRhcnkuZGF0YSgpLCBsb2NrSGlzdG9yeSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxl
YXNlKCkpOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnJhbWUtPmxv
YWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEuZ2V0KCksIG1fdGFyZ2V0LCBt
X2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgZGF0YS0+Ym91bmRhcnkoKS5kYXRhKCks
IGxvY2tIaXN0b3J5LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuc2V0SXNNdWx0aVBhcnRGb3JtKGZhbHNlKTsKLSAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJHRVQiLCBtX3VybCwgY3JlYXRlRm9y
bURhdGEoQ1N0cmluZygpKSwgbV90YXJnZXQsIFN0cmluZygpLCBTdHJpbmcoKSwgbG9ja0hpc3Rv
cnksIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigp
LT5zdWJtaXRGb3JtKCJHRVQiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoKSwgbV90YXJnZXQsIFN0
cmluZygpLCBTdHJpbmcoKSwgbG9ja0hpc3RvcnksIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgp
KTsKICAgICB9CiAKICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNz
ZnVsU3VibWl0QnV0dG9uKQpAQCAtNjg1LDQgKzYwOSwxNSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKTsKIH0KIAorUGFzc1JlZlB0cjxET01Gb3JtRGF0YT4gSFRNTEZv
cm1FbGVtZW50OjpjcmVhdGVET01Gb3JtRGF0YSgpCit7CisgICAgRm9ybURhdGFMaXN0IGxpc3Qo
ZGF0YUVuY29kaW5nKCkuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVudHNbaV07CisgICAgICAg
IGlmICghY29udHJvbC0+ZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRyb2wtPmFwcGVuZEZv
cm1EYXRhKGxpc3QsIG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIERPTUZvcm1EYXRhOjpjcmVhdGUobGlzdCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmggYi9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKaW5kZXggYzBjZTNlMy4uNWU5NzdhYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuaApAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIERPTUZvcm1EYXRhOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGb3JtRGF0YTsKIGNsYXNz
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ7CkBAIC0xMjUsNiArMTI2LDggQEAgcHVibGljOgogICAg
IENoZWNrZWRSYWRpb0J1dHRvbnMmIGNoZWNrZWRSYWRpb0J1dHRvbnMoKSB7IHJldHVybiBtX2No
ZWNrZWRSYWRpb0J1dHRvbnM7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnREaWRC
ZWNvbWVBY3RpdmUoKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPERPTUZvcm1EYXRhPiBjcmVhdGVE
T01Gb3JtRGF0YSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCk7CkBAIC0xMzUsNyArMTM4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgaXNNYWlsdG9Gb3JtKCkgY29uc3Q7CiAgICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZygp
IGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZUZvcm1EYXRhKGNvbnN0IENT
dHJpbmcmIGJvdW5kYXJ5KTsKKyAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0
YSgpOwogICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXgoSFRNTEZvcm1Db250cm9sRWxlbWVu
dCopOwogCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxGb3JtQ29sbGVjdGlvbjsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IGFmM2I3ZjAuLjUyNDVhZWIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMjIsOCArMjIsMTUgQEAKICNpbmNsdWRlICJG
b3JtRGF0YS5oIgogCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRm9y
bURhdGFCdWlsZGVyLmgiCisjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsNiArOTUsODUgQEAgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxGb3JtRGF0YT4g
Rm9ybURhdGE6OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNN
dWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVmUHRyPEZvcm1EYXRh
PiByZXN1bHQgPSBjcmVhdGUoKTsKKyAgICAKKyAgICBGb3JtRGF0YUJ1aWxkZXIgZm9ybURhdGFC
dWlsZGVyOworICAgIGlmIChpc011bHRpUGFydEZvcm0pCisgICAgICAgIHJlc3VsdC0+bV9ib3Vu
ZGFyeSA9IGZvcm1EYXRhQnVpbGRlci5nZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CisK
KyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
ID0gZG9tRm9ybURhdGEubGlzdCgpLmVuY29kaW5nKCk7CisKKyAgICBjb25zdCBWZWN0b3I8Rm9y
bURhdGFMaXN0OjpJdGVtPiYgbGlzdCA9IGRvbUZvcm1EYXRhLmxpc3QoKS5saXN0KCk7CisgICAg
c2l6ZV90IGZvcm1EYXRhTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKKyAgICBBU1NFUlQoIShmb3Jt
RGF0YUxpc3RTaXplICUgMikpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybURhdGFM
aXN0U2l6ZTsgaSArPSAyKSB7CisgICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYga2V5
ID0gbGlzdFtpXTsKKyAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2YWx1ZSA9IGxp
c3RbaSArIDFdOworICAgICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKSB7CisgICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gaGVhZGVyOworICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJlZ2luTXVs
dGlQYXJ0SGVhZGVyKGhlYWRlciwgcmVzdWx0LT5tX2JvdW5kYXJ5LmRhdGEoKSwga2V5LmRhdGEo
KSk7CisKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CisgICAg
ICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVk
IHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCisgICAgICAgICAgICBpZiAodmFsdWUuZmlsZSgpKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuZmlsZSgpLT5wYXRo
KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdmFsdWUuZmlsZSgpLT5maWxl
TmFtZSgpOworCisgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5
IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUg
Zm9yIHRoZSB1cGxvYWQuCisgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFtZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKS0+c2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdl
bmVyYXRlZEZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRHZW5l
cmF0ZUZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBnZW5lcmF0
ZWRGaWxlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWU9Ii4uIiBw
YXJ0IGluIHRoZSBoZWFkZXIsIGV2ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5CisgICAgICAg
ICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoaGVh
ZGVyLCBlbmNvZGluZywgZmlsZU5hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFt
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBNSU1FVHlw
ZVJlZ2lzdHJ5IGZ1bmN0aW9uJ3MgbmFtZSBtYWtlcyBpdCBzb3VuZCBsaWtlIGl0IHRha2VzIGEg
cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgLy8gbm90IGp1c3QgYSBiYXNlbmFtZS4gQnV0IGZp
bGVuYW1lIGlzIG5vdCB0aGUgcGF0aC4gQnV0IG5vdGUgdGhhdCBpdCdzIG5vdCBzYWZlIHRvCisg
ICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgdXNlIHBhdGggaW5zdGVhZCBzaW5jZSBpbiB0aGUg
Z2VuZXJhdGVkLWZpbGUgY2FzZSBpdCB3aWxsIG5vdCByZWZsZWN0IHRoZQorICAgICAgICAgICAg
ICAgICAgICAvLyBNSU1FIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCBmaWxlLgorICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZv
clBhdGgoZmlsZU5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1pbWVUeXBlLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRDb250ZW50
VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbWltZVR5cGUubGF0aW4xKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVy
LmZpbmlzaE11bHRpUGFydEhlYWRlcihoZWFkZXIpOworCisgICAgICAgICAgICAvLyBBcHBlbmQg
Ym9keQorICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRl
ci5zaXplKCkpOworICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEo
KS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEodmFsdWUuZGF0
YSgpLmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZmlsZSgp
ICYmICF2YWx1ZS5maWxlKCktPnBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmVz
dWx0LT5hcHBlbmRGaWxlKHZhbHVlLmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUp
OworCisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3Mg
dGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVtZW50LgorICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBp
cyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5vdz8KKyAgICAgICAgICAgIGlm
IChlbmNvZGVkRGF0YS5pc0VtcHR5KCkgJiYga2V5LmRhdGEoKSA9PSAiaXNpbmRleCIpCisgICAg
ICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGVuY29k
ZWREYXRhLCB2YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBr
ZXkuZGF0YSgpLCB2YWx1ZS5kYXRhKCkpOworICAgICAgICB9CisgICAgfSAKKworICAgIGlmIChp
c011bHRpUGFydEZvcm0pCisgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVs
dGlQYXJ0SGVhZGVyKGVuY29kZWREYXRhLCByZXN1bHQtPm1fYm91bmRhcnkuZGF0YSgpLCB0cnVl
KTsKKworICAgIHJlc3VsdC0+YXBwZW5kRGF0YShlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWRE
YXRhLnNpemUoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNvcHkoKSBjb25zdAogewogICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRm9ybURhdGEoKnRoaXMpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgK
aW5kZXggNzI3OGYyZS4uMzdkMDk1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgK
QEAgLTI3LDYgKzI3LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2hyb21lQ2xp
ZW50OworY2xhc3MgRE9NRm9ybURhdGE7CitjbGFzcyBEb2N1bWVudDsKIAogY2xhc3MgRm9ybURh
dGFFbGVtZW50IHsKIHB1YmxpYzoKQEAgLTY3LDYgKzY5LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qgdm9pZCosIHNpemVfdCk7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBDU3RyaW5nJik7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IERPTUZvcm1EYXRh
JiwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50Kik7CiAgICAgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gY29weSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRlZXBDb3B5KCkg
Y29uc3Q7CiAgICAgfkZvcm1EYXRhKCk7CkBAIC03OSw2ICs4Miw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMuaXNFbXB0eSgpOyB9CiAg
ICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50czsgfQorICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgYm91bmRhcnkoKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kYXJ5OyB9CiAKICAgICB2b2lkIGdlbmVyYXRlRmlsZXMoQ2hyb21l
Q2xpZW50Kik7CiAgICAgdm9pZCByZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CkBAIC05
OSw2ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIGJv
b2wgbV9oYXNHZW5lcmF0ZWRGaWxlczsKICAgICBib29sIG1fYWx3YXlzU3RyZWFtOworICAgIFZl
Y3RvcjxjaGFyPiBtX2JvdW5kYXJ5OwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3ht
bC9ET01Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3htbC9ET01Gb3JtRGF0YS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNTIyYgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUveG1sL0RPTUZvcm1EYXRhLmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitET01Gb3Jt
RGF0YTo6RE9NRm9ybURhdGEoKSA6IG1fbGlzdChVVEY4RW5jb2RpbmcoKSkKK3sKK30KKworRE9N
Rm9ybURhdGE6OkRPTUZvcm1EYXRhKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCkgOiBtX2xpc3Qo
bGlzdCkKK3sKK30KKwordm9pZCBET01Gb3JtRGF0YTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQorICAg
ICAgICBtX2xpc3QuYXBwZW5kRGF0YShuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgRE9NRm9ybURh
dGE6OmFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2IqIGJsb2IpCit7CisgICAgaWYgKCFu
YW1lLmlzRW1wdHkoKSAmJiAhYmxvYi0+cGF0aCgpLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQ
dHI8RmlsZT4gZmlsZSA9IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKTsKKyAgICAgICAgbV9saXN0
LmFwcGVuZEZpbGUobmFtZSwgZmlsZS5yZWxlYXNlKCkpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvRE9NRm9ybURhdGEuaCBiL1dl
YkNvcmUveG1sL0RPTUZvcm1EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMmI2ZDg3OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUveG1sL0RPTUZvcm1EYXRhLmgK
QEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgRE9NRm9ybURhdGFfaAorI2RlZmluZSBET01Gb3JtRGF0
YV9oCisKKyNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2Rpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYjsKK2NsYXNzIFN0cmluZzsK
KworY2xhc3MgRE9NRm9ybURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxET01Gb3JtRGF0YT4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUZvcm1EYXRhPiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01Gb3JtRGF0YSgpKTsKKyAgICB9Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NRm9ybURhdGE+IGNyZWF0ZShjb25zdCBGb3JtRGF0YUxp
c3QmIGxpc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUZvcm1EYXRh
KGxpc3QpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwg
QmxvYiogYmxvYik7CisKKyAgICBjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QoKSBjb25zdCB7IHJl
dHVybiBtX2xpc3Q7IH0KKworcHJpdmF0ZToKKyAgICBET01Gb3JtRGF0YSgpOworICAgIERPTUZv
cm1EYXRhKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCk7CisKKyAgICBGb3JtRGF0YUxpc3QgbV9s
aXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NRm9ybURh
dGFfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDMyODE4ZGYuLmJlM2QzNWEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDYWNoZS5oIgogI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIK
KyNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgpAQCAtNDUwLDYgKzQ1
MSwyNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwogfQogCit2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpzZW5kKERPTUZvcm1EYXRhKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
IWluaXRTZW5kKGVjKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWV0aG9kICE9ICJH
RVQiICYmIG1fbWV0aG9kICE9ICJIRUFEIiAmJiBtX3VybC5wcm90b2NvbEluSFRUUEZhbWlseSgp
KSB7CisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCpib2R5
LCB0cnVlLCBkb2N1bWVudCgpKTsKKworICAgICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBnZXRS
ZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiKTsKKyAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgY29udGVudFR5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0
YTsgYm91bmRhcnk9IjsKKyAgICAgICAgICAgIGNvbnRlbnRUeXBlICs9IG1fcmVxdWVzdEVudGl0
eUJvZHktPmJvdW5kYXJ5KCkuZGF0YSgpOworICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlcklu
dGVybmFsKCJDb250ZW50LVR5cGUiLCBjb250ZW50VHlwZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBjcmVhdGVSZXF1ZXN0KGVjKTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRl
UmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgdXBs
b2FkIGV2ZW50IGxpc3RlbmVycyBmb3JjZXMgdXMgdG8gdXNlIHByZWZsaWdodGluZyBiZWNhdXNl
IFBPU1RpbmcgdG8gYW4gVVJMIHRoYXQgZG9lcyBub3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmggYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCmluZGV4IDJj
ZWE1YzYuLjQ3ZmI2NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgK
KysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJsb2I7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERP
TUZvcm1EYXRhOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgVGV4dFJlc291cmNlRGVj
b2RlcjsKIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CkBAIC03Myw2ICs3NCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNlbmQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZW5k
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNlbmQoQmxvYiosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNlbmQoRE9NRm9ybURhdGEqLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBhYm9ydCgpOwogICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcihjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2b2lkIG92ZXJyaWRlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBvdmVycmlkZSk7Cg==
</data>
<flag name="commit-queue"
          id="32975"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49961</attachid>
            <date>2010-03-03 16:37:37 -0800</date>
            <delta_ts>2010-03-04 18:04:02 -0800</delta_ts>
            <desc>Fix style error</desc>
            <filename>35707_2</filename>
            <type>text/plain</type>
            <size>30652</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCBmMjY3NWUwLi44NzJlNWRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC04OTIsNiArODkyLDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwIFwK
IAl3b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgXAogCVwKKwl4bWwvRE9NRm9ybURhdGEuY3BwIFwK
IAl4bWwvRE9NUGFyc2VyLmNwcCBcCiAJeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAJeG1sL1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDcxYzQyOTguLjczZTAyMzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAK
KzIwMTAtMDMtMDMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGluZyBET01Gb3Jt
RGF0YSBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM1NzA3CisKKyAgICAgICAgVGhpcyBwYXRjaCBvbmx5IGFkZHJlc3NlcyB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgRE9NRm9ybURhdGEgY2xhc3MgYW5kCisgICAgICAgIG1vdmVzIHRoZSBGb3Jt
RGF0YSBjb25zdHJ1Y3Rpb24gbG9naWMgZnJvbSBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1E
YXRhCisgICAgICAgIHRvIEZvcm1EYXRhOjpjcmVhdGUoKSBzbyB0aGF0IGl0IGNhbiBiZSB1c2Vk
IGJ5IGJvdGggSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGFuZCBYTUxIdHRwUmVxdWVzdC4KKwor
ICAgICAgICBUaGUgRE9NRm9ybURhdGEgSURMIGludGVyZmFjZSB3aWxsIGJlIGV4cG9zZWQgaW4g
YW5vdGhlciBwYXRjaCBhbmQgdGhlCisgICAgICAgIHRlc3Qgd2lsbCBiZSBhZGRlZCB0aGVuLgor
CisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6Rm9ybURhdGFMaXN0KToKKyAgICAgICAgKiBodG1s
L0Zvcm1EYXRhTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjplbmNvZGlu
Zyk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OmNyZWF0ZURPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5o
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGE6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmJvdW5kYXJ5KToKKyAgICAgICAg
KiB4bWwvRE9NRm9ybURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB4bWwvRE9NRm9ybURhdGEu
aDogQWRkZWQuCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVl
c3QuaDoKKwogMjAxMC0wMy0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4ZWQgTWFjIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYTBhY2U1Yy4uNDkwNDVmZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC0xOTUzLDYgKzE5NTMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlVHJhbnNmb3JtRGF0YS5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZVZpc3VhbERhdGEuaCBcCisJV2ViQ29yZS94bWwvRE9NRm9ybURhdGEuY3BwIFwKKwlXZWJDb3Jl
L3htbC9ET01Gb3JtRGF0YS5oIFwKIAlXZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwIFwKIAlXZWJD
b3JlL3htbC9ET01QYXJzZXIuaCBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggOWRkNTI1OS4uNGQwNjc4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2NjEsNiArMzY2MSw4IEBACiAgICAgICAg
ICAgICAnd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAn
d29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwJywKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclRo
cmVhZC5oJywKKyAgICAgICAgICAgICd4bWwvRE9NRm9ybURhdGEuY3BwJywKKyAgICAgICAgICAg
ICd4bWwvRE9NRm9ybURhdGEuaCcsCiAgICAgICAgICAgICAneG1sL0RPTVBhcnNlci5jcHAnLAog
ICAgICAgICAgICAgJ3htbC9ET01QYXJzZXIuaCcsCiAgICAgICAgICAgICAneG1sL05hdGl2ZVhQ
YXRoTlNSZXNvbHZlci5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGYyMzI0Mi4uNWQwNzk3MCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC05NzUsNiArOTc1
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlU3Vycm91bmREYXRh
LmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlVHJhbnNmb3JtRGF0YS5jcHAgXAogICAg
IHJlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwIFwKKyAgICB4bWwvRE9NRm9ybURh
dGEuY3BwIFwKICAgICB4bWwvRE9NUGFyc2VyLmNwcCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCkBAIC0xOTUxLDYgKzE5
NTIsNyBAQCBIRUFERVJTICs9IFwKICAgICB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuaCBcCiAgICAg
d29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBcCiAgICAgd29ya2Vycy9Xb3JrZXJUaHJlYWQu
aCBcCisgICAgeG1sL0RPTUZvcm1EYXRhLmggXAogICAgIHhtbC9ET01QYXJzZXIuaCBcCiAgICAg
eG1sL05hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3QuaCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1M2FiYzMyLi40NDdiNmM5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI4MjY3LDYgKzI4MjY3
LDE0IEBACiAJCQlOYW1lPSJ4bWwiDQogCQkJPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ceG1sXERPTUZvcm1EYXRhLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxET01Gb3JtRGF0YS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXERPTVBhcnNlci5j
cHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBhYWQ0MjYxLi4xMzg3NWE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjI1LDYgKzYyNSw4IEBACiAJCTJFQ0Y3QUREMTAx
NjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURCMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9y
RXZlbnQuaCAqLzsgfTsKIAkJMkVDRjdBRTExMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdB
REUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNGN0FFMjEw
MTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdBREYxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZl
bnQuaCAqLzsgfTsKKwkJMkVENjA5NTUxMTNGMjg0OTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRDYwOTUz
MTEzRjI4NDkwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgKi87IH07CisJCTJFRDYwOTU2MTEz
RjI4NDkwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVENjA5NTQxMTNGMjg0OTAwQzg2ODRFIC8qIERPTUZvcm1E
YXRhLmggKi87IH07CiAJCTMxMjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAg
Ki87IH07CiAJCTMxMjg4RTczMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4
RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsKIAkJ
MzEyODhFNzQwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNzAwRTMw
MDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovOyB9OwpAQCAtNTk3
MCw2ICs1OTcyLDggQEAKIAkJMkVDRjdBREUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXJyb3JFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RFNyAv
KiBFcnJvckV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9yRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVDRjdBRTAxMDE2MkI1ODAwNDI3
REU3IC8qIEVycm9yRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVycm9yRXZlbnQu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUQ2MDk1MzExM0YyODQ5MDBDODY4
NEUgLyogRE9NRm9ybURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRE9NRm9ybURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUQ2MDk1
NDExM0YyODQ5MDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NRm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RjBFMzAwNUQ2MDAzNjE5
QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYktpdENTU0tleWZyYW1lUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MzMyLDYgKzE1MzM2
LDggQEAKIAkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVBIC8qIHhtbCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMkVENjA5NTMxMTNGMjg0OTAwQzg2ODRF
IC8qIERPTUZvcm1EYXRhLmNwcCAqLywKKwkJCQkyRUQ2MDk1NDExM0YyODQ5MDBDODY4NEUgLyog
RE9NRm9ybURhdGEuaCAqLywKIAkJCQkxQUNFNTNFMTBBOEQxOEU3MDAyMjk0N0QgLyogRE9NUGFy
c2VyLmNwcCAqLywKIAkJCQkxQUNFNTNFMjBBOEQxOEU3MDAyMjk0N0QgLyogRE9NUGFyc2VyLmgg
Ki8sCiAJCQkJMUFDRTUzRTMwQThEMThFNzAwMjI5NDdEIC8qIERPTVBhcnNlci5pZGwgKi8sCkBA
IC0xODYwOSw2ICsxODYxNSw3IEBACiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpv
b21Nb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUQzNjAxQTExMkY4QjU2MDA0OERFQTggLyog
RGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjVEMzYwMUQxMTJGOEJBMDAw
NDhERUE4IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVENjA5
NTYxMTNGMjg0OTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIw
Nzk5LDYgKzIwODA2LDcgQEAKIAkJCQk1OTYyMjk3ODExMzNFRkQ3MDBEQzRDQkIgLyogR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCQzJDNzc3MTEzNEE4
RkMwMDBCMkY2MSAvKiBDYW52YXNTdXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1RDM2
MDFGMTEyRjhCQTgwMDQ4REVBOCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMkVENjA5NTUxMTNGMjg0OTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgYi9X
ZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAppbmRleCAyODFjOWZlLi45N2I1YzZhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
Rm9ybURhdGFMaXN0LmNwcApAQCAtMjgsNiArMjgsMTMgQEAgRm9ybURhdGFMaXN0OjpGb3JtRGF0
YUxpc3QoY29uc3QgVGV4dEVuY29kaW5nJiBjKQogewogfQogCitGb3JtRGF0YUxpc3Q6OkZvcm1E
YXRhTGlzdChjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QpCisgICAgOiBtX2VuY29kaW5nKGxpc3Qu
ZW5jb2RpbmcoKSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC5tX2xpc3Qu
c2l6ZSgpOyBpKyspCisgICAgICAgIG1fbGlzdC5hcHBlbmQobGlzdC5tX2xpc3RbaV0pOworfQor
CiB2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmIHMpCiB7CiAg
ICAgbV9saXN0LmFwcGVuZChzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxp
c3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAppbmRleCBhZWMxYTUyLi44ZDJiMDk0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKKysrIGIvV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEZvcm1EYXRhTGlzdCB7CiBwdWJsaWM6CiAgICAgRm9ybURhdGFMaXN0KGNvbnN0IFRl
eHRFbmNvZGluZyYpOworICAgIEZvcm1EYXRhTGlzdChjb25zdCBGb3JtRGF0YUxpc3QmKTsKIAog
ICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICAgeyBhcHBlbmRTdHJpbmcoa2V5KTsgYXBwZW5kU3RyaW5nKHZhbHVlKTsgfQpA
QCAtNTUsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIGNvbnN0IFZlY3RvcjxJdGVt
PiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIGNvbnN0IFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAppbmRleCAyZjg4ODk0Li40MWFhYTM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApA
QCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiQ1NTSGVscGVyLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNDYsNyArNDUs
NiBAQAogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiVmFsaWRpdHlT
dGF0ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTIwMSw4MyArMTk5LDExIEBAIFRleHRFbmNv
ZGluZyBIVE1MRm9ybUVsZW1lbnQ6OmRhdGFFbmNvZGluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
Zm9ybURhdGFCdWlsZGVyLmRhdGFFbmNvZGluZyhkb2N1bWVudCgpKTsKIH0KIAotUGFzc1JlZlB0
cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5n
JiBib3VuZGFyeSkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRl
Rm9ybURhdGEoKQogewotICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKLSAgICBUZXh0RW5j
b2RpbmcgZW5jb2RpbmcgPSBkYXRhRW5jb2RpbmcoKS5lbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9u
KCk7CisgICAgUmVmUHRyPERPTUZvcm1EYXRhPiBkb21Gb3JtRGF0YSA9IGNyZWF0ZURPTUZvcm1E
YXRhKCk7CiAKLSAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IEZvcm1EYXRhOjpjcmVhdGUo
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm1FbGVt
ZW50c1tpXTsKLSAgICAgICAgRm9ybURhdGFMaXN0IGxpc3QoZW5jb2RpbmcpOwotCi0gICAgICAg
IGlmICghY29udHJvbC0+ZGlzYWJsZWQoKSAmJiBjb250cm9sLT5hcHBlbmRGb3JtRGF0YShsaXN0
LCBtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkpIHsKLSAgICAgICAgICAgIHNp
emVfdCBmb3JtRGF0YUxpc3RTaXplID0gbGlzdC5saXN0KCkuc2l6ZSgpOwotICAgICAgICAgICAg
QVNTRVJUKGZvcm1EYXRhTGlzdFNpemUgJSAyID09IDApOwotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBmb3JtRGF0YUxpc3RTaXplOyBqICs9IDIpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIGtleSA9IGxpc3QubGlzdCgpW2pdOwotICAgICAg
ICAgICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBsaXN0Lmxpc3QoKVtq
ICsgMV07Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFy
dEZvcm0oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBPbWl0IHRoZSBuYW1lICJpc2luZGV4
IiBpZiBpdCdzIHRoZSBmaXJzdCBmb3JtIGRhdGEgZWxlbWVudC4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5v
dz8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmlzRW1wdHkoKSAmJiBrZXku
ZGF0YSgpID09ICJpc2luZGV4IikKLSAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVp
bGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwgdmFsdWUuZGF0YSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mb3Jt
RGF0YUJ1aWxkZXIuYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwga2V5LmRh
dGEoKSwgdmFsdWUuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwotICAgICAgICAgICAgICAgICAgICBtX2Zv
cm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIGJvdW5kYXJ5LCBrZXku
ZGF0YSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJ
TEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5maWxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmZpbGUoKS0+cGF0aCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdmFsdWUuZmlsZSgpLT5maWxlTmFtZSgpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBm
aWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3Ig
dGhlIHVwbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50
KCktPnBhZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ2Vu
ZXJhdGVkRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEdl
bmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+c2hvdWxkUmVwbGFjZVdpdGhH
ZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlRmlsZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZ2VuZXJhdGVkRmlsZU5hbWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZp
bGVuYW1lPSIuLiIgcGFydCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBl
bXB0eQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5h
bWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBNSU1FVHlwZVJlZ2lzdHJ5IGZ1bmN0aW9u
J3MgbmFtZSBtYWtlcyBpdCBzb3VuZCBsaWtlIGl0IHRha2VzIGEgcGF0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBub3QganVzdCBhIGJhc2VuYW1lLiBCdXQgZmlsZW5hbWUgaXMg
bm90IHRoZSBwYXRoLiBCdXQgbm90ZSB0aGF0IGl0J3Mgbm90IHNhZmUgdG8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBqdXN0IHVzZSBwYXRoIGluc3RlYWQgc2luY2UgaW4gdGhlIGdl
bmVyYXRlZC1maWxlIGNhc2UgaXQgd2lsbCBub3QgcmVmbGVjdCB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBNSU1FIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCBmaWxlLgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoaGVh
ZGVyLCBtaW1lVHlwZS5sYXRpbjEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRl
ci5maW5pc2hNdWx0aVBhcnRIZWFkZXIoaGVhZGVyKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBBcHBlbmQgYm9keQotICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoaGVh
ZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaXpl
X3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQtPmFwcGVuZERhdGEodmFsdWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5maWxlKCkgJiYgIXZhbHVlLmZpbGUo
KS0+cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBw
ZW5kRmlsZSh2YWx1ZS5maWxlKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLQotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9m
b3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpCi0gICAgICAgIG1fZm9ybURhdGFCdWls
ZGVyLmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIGJvdW5kYXJ5LCB0
cnVlKTsKLQotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29k
ZWREYXRhLnNpemUoKSk7CisgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBGb3JtRGF0YTo6
Y3JlYXRlKCpkb21Gb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCks
IGRvY3VtZW50KCkpOwogCiAgICAgcmVzdWx0LT5zZXRJZGVudGlmaWVyKGdlbmVyYXRlRm9ybURh
dGFJZGVudGlmaWVyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zODksOCArMzE1LDggQEAg
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wgYWN0aXZhdGVT
dWJtaXRCdXR0b24sIGJvb2wgbG9ja0gKICAgICAgICAgICAgIEFTU0VSVCghbV9mb3JtRGF0YUJ1
aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpOwogICAgICAgICB9CiAKKyAgICAgICAgUmVmUHRyPEZv
cm1EYXRhPiBkYXRhID0gY3JlYXRlRm9ybURhdGEoKTsKICAgICAgICAgaWYgKCFtX2Zvcm1EYXRh
QnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkgewotICAgICAgICAgICAgUmVmUHRyPEZvcm1EYXRh
PiBkYXRhID0gY3JlYXRlRm9ybURhdGEoQ1N0cmluZygpKTsKIAogICAgICAgICAgICAgaWYgKGlz
TWFpbHRvRm9ybSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgZm9ybSBkYXRh
IGludG8gYSBzdHJpbmcgdGhhdCB3ZSBwdXQgaW50byB0aGUgVVJMLgpAQCAtNDAwLDEzICszMjYs
MTEgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wgYWN0
aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgbG9ja0gKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEucmVsZWFz
ZSgpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIFN0cmluZygp
LCBsb2NrSGlzdG9yeSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5ID0gbV9mb3JtRGF0YUJ1aWxk
ZXIuZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgICAgICAgICAgZnJhbWUtPmxv
YWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKGJvdW5kYXJ5
LmRhdGEoKSksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgYm91
bmRhcnkuZGF0YSgpLCBsb2NrSGlzdG9yeSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwot
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5z
dWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEuZ2V0KCksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRh
QnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgZGF0YS0+Ym91bmRhcnkoKS5kYXRhKCksIGxvY2tIaXN0
b3J5LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
bV9mb3JtRGF0YUJ1aWxkZXIuc2V0SXNNdWx0aVBhcnRGb3JtKGZhbHNlKTsKLSAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJHRVQiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoQ1N0
cmluZygpKSwgbV90YXJnZXQsIFN0cmluZygpLCBTdHJpbmcoKSwgbG9ja0hpc3RvcnksIGV2ZW50
LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRG
b3JtKCJHRVQiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoKSwgbV90YXJnZXQsIFN0cmluZygpLCBT
dHJpbmcoKSwgbG9ja0hpc3RvcnksIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICB9
CiAKICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0
QnV0dG9uKQpAQCAtNjg1LDQgKzYwOSwxNSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZGlkTW92
ZVRvTmV3T3duZXJEb2N1bWVudCgpCiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKIH0KIAorUGFzc1JlZlB0cjxET01Gb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50
OjpjcmVhdGVET01Gb3JtRGF0YSgpCit7CisgICAgRm9ybURhdGFMaXN0IGxpc3QoZGF0YUVuY29k
aW5nKCkuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVudHNbaV07CisgICAgICAgIGlmICghY29u
dHJvbC0+ZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRyb2wtPmFwcGVuZEZvcm1EYXRhKGxp
c3QsIG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIERPTUZvcm1EYXRhOjpjcmVhdGUobGlzdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmgKaW5kZXggYzBjZTNlMy4uNWU5NzdhYiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuaApAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERP
TUZvcm1EYXRhOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGb3JtRGF0YTsKIGNsYXNzIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ7CkBAIC0xMjUsNiArMTI2LDggQEAgcHVibGljOgogICAgIENoZWNrZWRS
YWRpb0J1dHRvbnMmIGNoZWNrZWRSYWRpb0J1dHRvbnMoKSB7IHJldHVybiBtX2NoZWNrZWRSYWRp
b0J1dHRvbnM7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnREaWRCZWNvbWVBY3Rp
dmUoKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPERPTUZvcm1EYXRhPiBjcmVhdGVET01Gb3JtRGF0
YSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRv
Y3VtZW50KCk7CkBAIC0xMzUsNyArMTM4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNNYWls
dG9Gb3JtKCkgY29uc3Q7CiAgICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZygpIGNvbnN0Owot
ICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZUZvcm1EYXRhKGNvbnN0IENTdHJpbmcmIGJv
dW5kYXJ5KTsKKyAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0YSgpOwogICAg
IHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXgoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOwogCiAg
ICAgZnJpZW5kIGNsYXNzIEhUTUxGb3JtQ29sbGVjdGlvbjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuY3BwCmluZGV4IGFmM2I3ZjAuLjUyNDVhZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcApAQCAtMjIsOCArMjIsMTUgQEAKICNpbmNsdWRlICJGb3JtRGF0YS5o
IgogCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUg
IkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRm9ybURhdGFCdWls
ZGVyLmgiCisjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsNiArOTUsODUgQEAgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKICAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6
OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRG
b3JtLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQg
PSBjcmVhdGUoKTsKKyAgICAKKyAgICBGb3JtRGF0YUJ1aWxkZXIgZm9ybURhdGFCdWlsZGVyOwor
ICAgIGlmIChpc011bHRpUGFydEZvcm0pCisgICAgICAgIHJlc3VsdC0+bV9ib3VuZGFyeSA9IGZv
cm1EYXRhQnVpbGRlci5nZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CisKKyAgICBWZWN0
b3I8Y2hhcj4gZW5jb2RlZERhdGE7CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0gZG9tRm9y
bURhdGEubGlzdCgpLmVuY29kaW5nKCk7CisKKyAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0
OjpJdGVtPiYgbGlzdCA9IGRvbUZvcm1EYXRhLmxpc3QoKS5saXN0KCk7CisgICAgc2l6ZV90IGZv
cm1EYXRhTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKKyAgICBBU1NFUlQoIShmb3JtRGF0YUxpc3RT
aXplICUgMikpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybURhdGFMaXN0U2l6ZTsg
aSArPSAyKSB7CisgICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYga2V5ID0gbGlzdFtp
XTsKKyAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2YWx1ZSA9IGxpc3RbaSArIDFd
OworICAgICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKSB7CisgICAgICAgICAgICBWZWN0b3I8Y2hh
cj4gaGVhZGVyOworICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJlZ2luTXVsdGlQYXJ0SGVh
ZGVyKGhlYWRlciwgcmVzdWx0LT5tX2JvdW5kYXJ5LmRhdGEoKSwga2V5LmRhdGEoKSk7CisKKyAg
ICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CisgICAgICAgICAgICAv
LyBJZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1
ZGUgdGhlIGZpbGVuYW1lCisgICAgICAgICAgICBpZiAodmFsdWUuZmlsZSgpKSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuZmlsZSgpLT5wYXRoKCk7CisgICAg
ICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdmFsdWUuZmlsZSgpLT5maWxlTmFtZSgpOwor
CisgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5h
bWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1
cGxvYWQuCisgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNob3VsZEdlbmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+
c2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZp
bGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZUZpbGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFt
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWU9Ii4uIiBwYXJ0IGluIHRo
ZSBoZWFkZXIsIGV2ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5CisgICAgICAgICAgICAgICAg
Zm9ybURhdGFCdWlsZGVyLmFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBlbmNv
ZGluZywgZmlsZU5hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBNSU1FVHlwZVJlZ2lzdHJ5
IGZ1bmN0aW9uJ3MgbmFtZSBtYWtlcyBpdCBzb3VuZCBsaWtlIGl0IHRha2VzIGEgcGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgLy8gbm90IGp1c3QgYSBiYXNlbmFtZS4gQnV0IGZpbGVuYW1lIGlz
IG5vdCB0aGUgcGF0aC4gQnV0IG5vdGUgdGhhdCBpdCdzIG5vdCBzYWZlIHRvCisgICAgICAgICAg
ICAgICAgICAgIC8vIGp1c3QgdXNlIHBhdGggaW5zdGVhZCBzaW5jZSBpbiB0aGUgZ2VuZXJhdGVk
LWZpbGUgY2FzZSBpdCB3aWxsIG5vdCByZWZsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAv
LyBNSU1FIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoZmls
ZU5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRDb250ZW50VHlwZVRvTXVs
dGlQYXJ0SGVhZGVyKGhlYWRlciwgbWltZVR5cGUubGF0aW4xKCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmZpbmlzaE11
bHRpUGFydEhlYWRlcihoZWFkZXIpOworCisgICAgICAgICAgICAvLyBBcHBlbmQgYm9keQorICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkp
OworICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgo
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEodmFsdWUuZGF0YSgpLmRhdGEo
KSwgZGF0YVNpemUpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZmlsZSgpICYmICF2YWx1
ZS5maWxlKCktPnBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBl
bmRGaWxlKHZhbHVlLmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworCisgICAg
ICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0
IGZvcm0gZGF0YSBlbGVtZW50LgorICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEg
Z29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5vdz8KKyAgICAgICAgICAgIGlmIChlbmNvZGVk
RGF0YS5pc0VtcHR5KCkgJiYga2V5LmRhdGEoKSA9PSAiaXNpbmRleCIpCisgICAgICAgICAgICAg
ICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCB2
YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvcm1EYXRh
QnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgp
LCB2YWx1ZS5kYXRhKCkpOworICAgICAgICB9CisgICAgfSAKKworICAgIGlmIChpc011bHRpUGFy
dEZvcm0pCisgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVh
ZGVyKGVuY29kZWREYXRhLCByZXN1bHQtPm1fYm91bmRhcnkuZGF0YSgpLCB0cnVlKTsKKworICAg
IHJlc3VsdC0+YXBwZW5kRGF0YShlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUo
KSk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gRm9ybURhdGE6OmNvcHkoKSBjb25zdAogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Rm9ybURhdGEoKnRoaXMpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5kZXggNzI3
OGYyZS4uMzdkMDk1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKQEAgLTI3LDYg
KzI3LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2hyb21lQ2xpZW50OworY2xh
c3MgRE9NRm9ybURhdGE7CitjbGFzcyBEb2N1bWVudDsKIAogY2xhc3MgRm9ybURhdGFFbGVtZW50
IHsKIHB1YmxpYzoKQEAgLTY3LDYgKzY5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qgdm9pZCosIHNpemVfdCk7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBDU3RyaW5nJik7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiwgYm9vbCBp
c011bHRpUGFydEZvcm0sIERvY3VtZW50Kik7CiAgICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY29w
eSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRlZXBDb3B5KCkgY29uc3Q7CiAg
ICAgfkZvcm1EYXRhKCk7CkBAIC03OSw2ICs4Miw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMuaXNFbXB0eSgpOyB9CiAgICAgY29uc3Qg
VmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50czsgfQorICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgYm91bmRhcnkoKSBjb25zdCB7IHJldHVy
biBtX2JvdW5kYXJ5OyB9CiAKICAgICB2b2lkIGdlbmVyYXRlRmlsZXMoQ2hyb21lQ2xpZW50Kik7
CiAgICAgdm9pZCByZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CkBAIC05OSw2ICsxMDMs
NyBAQCBwcml2YXRlOgogICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIGJvb2wgbV9oYXNH
ZW5lcmF0ZWRGaWxlczsKICAgICBib29sIG1fYWx3YXlzU3RyZWFtOworICAgIFZlY3RvcjxjaGFy
PiBtX2JvdW5kYXJ5OwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0
YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9ET01Gb3Jt
RGF0YS5jcHAgYi9XZWJDb3JlL3htbC9ET01Gb3JtRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDhhNTIyYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUveG1s
L0RPTUZvcm1EYXRhLmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRPTUZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitET01Gb3JtRGF0YTo6RE9N
Rm9ybURhdGEoKSA6IG1fbGlzdChVVEY4RW5jb2RpbmcoKSkKK3sKK30KKworRE9NRm9ybURhdGE6
OkRPTUZvcm1EYXRhKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCkgOiBtX2xpc3QobGlzdCkKK3sK
K30KKwordm9pZCBET01Gb3JtRGF0YTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQorICAgICAgICBtX2xp
c3QuYXBwZW5kRGF0YShuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OmFwcGVu
ZChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2IqIGJsb2IpCit7CisgICAgaWYgKCFuYW1lLmlzRW1w
dHkoKSAmJiAhYmxvYi0+cGF0aCgpLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8RmlsZT4g
ZmlsZSA9IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKTsKKyAgICAgICAgbV9saXN0LmFwcGVuZEZp
bGUobmFtZSwgZmlsZS5yZWxlYXNlKCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvRE9NRm9ybURhdGEuaCBiL1dlYkNvcmUveG1s
L0RPTUZvcm1EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2ZDg3
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUveG1sL0RPTUZvcm1EYXRhLmgKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
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
ICovCisKKyNpZm5kZWYgRE9NRm9ybURhdGFfaAorI2RlZmluZSBET01Gb3JtRGF0YV9oCisKKyNp
bmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYjsKK2NsYXNzIFN0cmluZzsKKworY2xhc3Mg
RE9NRm9ybURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxET01Gb3JtRGF0YT4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUZvcm1EYXRhPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01Gb3JtRGF0YSgpKTsKKyAgICB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RE9NRm9ybURhdGE+IGNyZWF0ZShjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3Qp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUZvcm1EYXRhKGxpc3QpKTsK
KyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgQmxvYiogYmxv
Yik7CisKKyAgICBjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Q7IH0KKworcHJpdmF0ZToKKyAgICBET01Gb3JtRGF0YSgpOworICAgIERPTUZvcm1EYXRhKGNv
bnN0IEZvcm1EYXRhTGlzdCYgbGlzdCk7CisKKyAgICBGb3JtRGF0YUxpc3QgbV9saXN0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NRm9ybURhdGFfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCmluZGV4IDMyODE4ZGYuLmJlM2QzNWEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkNT
dHJpbmcuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKKyNpbmNsdWRl
ICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgpAQCAtNDUwLDYgKzQ1MSwyNSBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwogfQogCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKERP
TUZvcm1EYXRhKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWluaXRTZW5k
KGVjKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWV0aG9kICE9ICJHRVQiICYmIG1f
bWV0aG9kICE9ICJIRUFEIiAmJiBtX3VybC5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7CisgICAg
ICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCpib2R5LCB0cnVlLCBk
b2N1bWVudCgpKTsKKworICAgICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBnZXRSZXF1ZXN0SGVh
ZGVyKCJDb250ZW50LVR5cGUiKTsKKyAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgY29udGVudFR5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRh
cnk9IjsKKyAgICAgICAgICAgIGNvbnRlbnRUeXBlICs9IG1fcmVxdWVzdEVudGl0eUJvZHktPmJv
dW5kYXJ5KCkuZGF0YSgpOworICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlckludGVybmFsKCJD
b250ZW50LVR5cGUiLCBjb250ZW50VHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjcmVh
dGVSZXF1ZXN0KGVjKTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdChF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgdXBsb2FkIGV2ZW50
IGxpc3RlbmVycyBmb3JjZXMgdXMgdG8gdXNlIHByZWZsaWdodGluZyBiZWNhdXNlIFBPU1Rpbmcg
dG8gYW4gVVJMIHRoYXQgZG9lcyBub3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmggYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCmluZGV4IDJjZWE1YzYuLjQ3
ZmI2NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKKysrIGIvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEJsb2I7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERPTUZvcm1EYXRh
OwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIGNs
YXNzIFRocmVhZGFibGVMb2FkZXI7CkBAIC03Myw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNlbmQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZW5kKGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNlbmQoQmxvYiosIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHNlbmQoRE9NRm9ybURhdGEqLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dm9pZCBhYm9ydCgpOwogICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lk
IG92ZXJyaWRlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBvdmVycmlkZSk7Cg==
</data>
<flag name="review"
          id="32976"
          type_id="1"
          status="-"
          setter="dimich"
    />
    <flag name="commit-queue"
          id="32977"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50074</attachid>
            <date>2010-03-04 18:04:02 -0800</date>
            <delta_ts>2010-03-08 14:41:32 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>35707_4</filename>
            <type>text/plain</type>
            <size>29266</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCA5MTczNTBmLi5lNmZiZmI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0zMjYsNiArMzI2LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcGFnZS9DaHJvbWUuY3BwIFwKIAlwYWdlL0NvbnNvbGUu
Y3BwIFwKIAlwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgXAorCXBhZ2UvRE9NRm9ybURh
dGEuY3BwIFwKIAlwYWdlL0RPTVNlbGVjdGlvbi5jcHAgXAogCXBhZ2UvRE9NVGltZXIuY3BwIFwK
IAlwYWdlL0RPTVdpbmRvdy5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZWUyOTUxLi40NTc0ODc5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisy
MDEwLTAzLTA0ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRpbmcgRE9NRm9ybURh
dGEgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTcwNworCisgICAgICAgIFRoaXMgcGF0Y2ggb25seSBhZGRyZXNzZXMgdGhlIGltcGxlbWVu
dGF0aW9uIG9mIERPTUZvcm1EYXRhIGNsYXNzIGFuZAorICAgICAgICBtb3ZlcyB0aGUgRm9ybURh
dGEgY29uc3RydWN0aW9uIGxvZ2ljIGZyb20gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0
YQorICAgICAgICB0byBGb3JtRGF0YTo6Y3JlYXRlKCkgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBi
eSBib3RoIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBhbmQgWE1MSHR0cFJlcXVlc3QuCisKKyAg
ICAgICAgVGhlIERPTUZvcm1EYXRhIElETCBpbnRlcmZhY2Ugd2lsbCBiZSBleHBvc2VkIGluIGFu
b3RoZXIgcGF0Y2ggYW5kIHRoZQorICAgICAgICB0ZXN0IHdpbGwgYmUgYWRkZWQgdGhlbi4KKwor
ICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFMaXN0OjplbmNvZGluZyk6CisgICAgICAgICogaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVG
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBwYWdlL0RPTUZvcm1E
YXRhLmNwcDogQWRkZWQuCisgICAgICAgICogcGFnZS9ET01Gb3JtRGF0YS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpib3VuZGFyeSk6CisgICAgICAgICogeG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpz
ZW5kKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoKKwogMjAxMC0wMy0wNCAgTWFy
ayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQppbmRleCA4ZmQzNmJjLi4wYmQ3NTIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEzNDksNiArMTM0OSw4
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5oIFwKIAlXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVQcm92aWRlci5oIFwKIAlXZWJDb3Jl
L3BhZ2UvQ29vcmRpbmF0ZXMuaCBcCisJV2ViQ29yZS9wYWdlL0RPTUZvcm1EYXRhLmNwcCBcCisJ
V2ViQ29yZS9wYWdlL0RPTUZvcm1EYXRhLmggXAogCVdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwIFwKIAlXZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmggXAogCVdlYkNvcmUvcGFnZS9ET01U
aW1lci5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCAxMzEzMWE4Li5iMThlNGYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTgxMyw2ICsxODEzLDgg
QEAKICAgICAgICAgICAgICdwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAnLAogICAgICAg
ICAgICAgJ3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BhZ2Uv
Q29udGV4dE1lbnVQcm92aWRlci5oJywKKyAgICAgICAgICAgICdwYWdlL0RPTUZvcm1EYXRhLmNw
cCcsCisgICAgICAgICAgICAncGFnZS9ET01Gb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwYWdl
L0RPTVNlbGVjdGlvbi5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvRE9NU2VsZWN0aW9uLmgnLAog
ICAgICAgICAgICAgJ3BhZ2UvRE9NVGltZXIuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGIzMDY5N2YuLmJkMDYxOTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtNzQ2LDYgKzc0Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvQ2hyb21lLmNwcCBcCiAg
ICAgcGFnZS9Db25zb2xlLmNwcCBcCiAgICAgcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
IFwKKyAgICBwYWdlL0RPTUZvcm1EYXRhLmNwcCBcCiAgICAgcGFnZS9ET01TZWxlY3Rpb24uY3Bw
IFwKICAgICBwYWdlL0RPTVRpbWVyLmNwcCBcCiAgICAgcGFnZS9ET01XaW5kb3cuY3BwIFwKQEAg
LTE0NTIsNiArMTQ1Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmggXAogICAgIHBhZ2UvQ29udGV4dE1lbnVQcm92aWRlci5oIFwKICAgICBwYWdlL0Nv
b3JkaW5hdGVzLmggXAorICAgIHBhZ2UvRE9NRm9ybURhdGEuaCBcCiAgICAgcGFnZS9ET01TZWxl
Y3Rpb24uaCBcCiAgICAgcGFnZS9ET01UaW1lci5oIFwKICAgICBwYWdlL0RPTVdpbmRvdy5oIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGJjMTY2NjMuLjgwMjNjODIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjA2NzMsNiArMjA2NzMs
MTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGFnZVxET01Gb3JtRGF0YS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXERPTUZvcm1EYXRhLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXERPTVNlbGVjdGlv
bi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAwNWE5OTA5Li41NmUwNjI4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjI1LDYgKzYyNSw4IEBACiAJCTJFQ0Y3QURE
MTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURCMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vy
cm9yRXZlbnQuaCAqLzsgfTsKIAkJMkVDRjdBRTExMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVD
RjdBREUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNGN0FF
MjEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdBREYxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9y
RXZlbnQuaCAqLzsgfTsKKwkJMkVENjA5QTkxMTQwOTJBRTAwQzg2ODRFIC8qIERPTUZvcm1EYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRDYw
OUE3MTE0MDkyQUUwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgKi87IH07CisJCTJFRDYwOUFB
MTE0MDkyQUUwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVENjA5QTgxMTQwOTJBRTAwQzg2ODRFIC8qIERPTUZv
cm1EYXRhLmggKi87IH07CiAJCTMxMjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5j
cHAgKi87IH07CiAJCTMxMjg4RTczMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
Mjg4RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsK
IAkJMzEyODhFNzQwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNzAw
RTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovOyB9OwpAQCAt
NTk3NSw2ICs1OTc3LDggQEAKIAkJMkVDRjdBREUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXJyb3JFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RF
NyAvKiBFcnJvckV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9y
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVDRjdBRTAxMDE2MkI1ODAw
NDI3REU3IC8qIEVycm9yRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVycm9yRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUQ2MDlBNzExNDA5MkFFMDBD
ODY4NEUgLyogRE9NRm9ybURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRE9NRm9ybURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUQ2
MDlBODExNDA5MkFFMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRE9NRm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RjBFMzAwNUQ2MDAz
NjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNDk4LDYgKzEx
NTAyLDggQEAKIAkJCQk3QURFNzIyNTEwQ0JCQjlCMDA2QjNCM0EgLyogQ29udGV4dE1lbnVQcm92
aWRlci5oICovLAogCQkJCUZFNkZENDg1MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29yZGluYXRlcy5o
ICovLAogCQkJCUZFNkZENDg2MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29yZGluYXRlcy5pZGwgKi8s
CisJCQkJMkVENjA5QTcxMTQwOTJBRTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNwcCAqLywKKwkJ
CQkyRUQ2MDlBODExNDA5MkFFMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLywKIAkJCQlCQzVB
ODY4MTBDMzM2NzYwMDBFRUE2NDkgLyogRE9NU2VsZWN0aW9uLmNwcCAqLywKIAkJCQlCQzVBODY4
MjBDMzM2NzYwMDBFRUE2NDkgLyogRE9NU2VsZWN0aW9uLmggKi8sCiAJCQkJQkM1QTg2ODMwQzMz
Njc2MDAwRUVBNjQ5IC8qIERPTVNlbGVjdGlvbi5pZGwgKi8sCkBAIC0xODYxNiw2ICsxODYyMiw3
IEBACiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3NjM3QzU0MzExMkU3QjdFMDAzRDZDREMgLyogV2ViU29ja2V0SGFuZHNoYWtl
UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjI2Q0RFMEYxMTQwNDI0QzAwMUU1QTY4IC8q
IFNwYXRpYWxOYXZpZ2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUQ2MDlBQTExNDA5MkFF
MDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjA4MDcsNiArMjA4
MTQsNyBAQAogCQkJCTBCQzJDNzc3MTEzNEE4RkMwMDBCMkY2MSAvKiBDYW52YXNTdXJmYWNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTc2MzdDNTQxMTEyRTdCNzQwMDNENkNEQyAvKiBXZWJTb2Nr
ZXRIYW5kc2hha2VSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyNkNERTBFMTE0MDQy
NEMwMDFFNUE2OCAvKiBTcGF0aWFsTmF2aWdhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQky
RUQ2MDlBOTExNDA5MkFFMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmggYi9XZWJDb3JlL2h0bWwv
Rm9ybURhdGFMaXN0LmgKaW5kZXggYWVjMWE1Mi4uODM5OGRiYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0Zvcm1EYXRhTGlzdC5oCisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaApA
QCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIGNvbnN0IFZlY3RvcjxJdGVt
PiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIGNvbnN0IFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAppbmRleCAyZjg4ODk0Li4xOWIyZjA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApA
QCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiQ1NTSGVscGVyLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNDYsNyArNDUs
NiBAQAogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiVmFsaWRpdHlT
dGF0ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTIwMSw4MyArMTk5LDE2IEBAIFRleHRFbmNv
ZGluZyBIVE1MRm9ybUVsZW1lbnQ6OmRhdGFFbmNvZGluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
Zm9ybURhdGFCdWlsZGVyLmRhdGFFbmNvZGluZyhkb2N1bWVudCgpKTsKIH0KIAotUGFzc1JlZlB0
cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5n
JiBib3VuZGFyeSkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRl
Rm9ybURhdGEoKQogewotICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKLSAgICBUZXh0RW5j
b2RpbmcgZW5jb2RpbmcgPSBkYXRhRW5jb2RpbmcoKS5lbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9u
KCk7Ci0KLSAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IEZvcm1EYXRhOjpjcmVhdGUoKTsK
LQorICAgIFJlZlB0cjxET01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBET01Gb3JtRGF0YTo6Y3Jl
YXRlKGRhdGFFbmNvZGluZygpLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKSk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ldOwotICAg
ICAgICBGb3JtRGF0YUxpc3QgbGlzdChlbmNvZGluZyk7Ci0KLSAgICAgICAgaWYgKCFjb250cm9s
LT5kaXNhYmxlZCgpICYmIGNvbnRyb2wtPmFwcGVuZEZvcm1EYXRhKGxpc3QsIG1fZm9ybURhdGFC
dWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSkgewotICAgICAgICAgICAgc2l6ZV90IGZvcm1EYXRh
TGlzdFNpemUgPSBsaXN0Lmxpc3QoKS5zaXplKCk7Ci0gICAgICAgICAgICBBU1NFUlQoZm9ybURh
dGFMaXN0U2l6ZSAlIDIgPT0gMCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGZvcm1EYXRhTGlzdFNpemU7IGogKz0gMikgewotICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1E
YXRhTGlzdDo6SXRlbSYga2V5ID0gbGlzdC5saXN0KClbal07Ci0gICAgICAgICAgICAgICAgY29u
c3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2YWx1ZSA9IGxpc3QubGlzdCgpW2ogKyAxXTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3MgdGhl
IGZpcnN0IGZvcm0gZGF0YSBlbGVtZW50LgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2h5IGlzIHRoaXMgYSBnb29kIHJ1bGU/IElzIHRoaXMgb2Jzb2xldGUgbm93PwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS5kYXRhKCkgPT0gImlz
aW5kZXgiKQotICAgICAgICAgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkpOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5h
ZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5k
YXRhKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPiBoZWFkZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVy
LmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgYm91bmRhcnksIGtleS5kYXRhKCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5cGUgaXMgRklMRSwgdGhlbiB3ZSBh
bHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlLmZpbGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBw
YXRoID0gdmFsdWUuZmlsZSgpLT5wYXRoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgZmlsZU5hbWUgPSB2YWx1ZS5maWxlKCktPmZpbGVOYW1lKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0
J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFt
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVGaWxlID0g
cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVG
b3JVcGxvYWQocGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGVGaWxlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFtZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWU9Ii4uIiBw
YXJ0IGluIHRoZSBoZWFkZXIsIGV2ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0
SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhlIE1JTUVUeXBlUmVnaXN0cnkgZnVuY3Rpb24ncyBuYW1lIG1ha2Vz
IGl0IHNvdW5kIGxpa2UgaXQgdGFrZXMgYSBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG5vdCBqdXN0IGEgYmFzZW5hbWUuIEJ1dCBmaWxlbmFtZSBpcyBub3QgdGhlIHBhdGgu
IEJ1dCBub3RlIHRoYXQgaXQncyBub3Qgc2FmZSB0bwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGp1c3QgdXNlIHBhdGggaW5zdGVhZCBzaW5jZSBpbiB0aGUgZ2VuZXJhdGVkLWZpbGUg
Y2FzZSBpdCB3aWxsIG5vdCByZWZsZWN0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE1JTUUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIGZpbGUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVG
b3JQYXRoKGZpbGVOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1pbWVU
eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mb3JtRGF0
YUJ1aWxkZXIuYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIG1pbWVUeXBl
LmxhdGluMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmZpbmlzaE11bHRp
UGFydEhlYWRlcihoZWFkZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBo
ZWFkZXIuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9
IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlLmZpbGUoKSAmJiAhdmFsdWUuZmlsZSgpLT5wYXRoKCkuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmRGaWxlKHZhbHVl
LmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwotCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC0+YXBwZW5kRGF0YSgiXHJcbiIsIDIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2FibGVkKCkp
CisgICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3JtRGF0YSgqZG9tRm9ybURhdGEsIG1fZm9y
bURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKTsKICAgICB9CiAKLSAgICBpZiAobV9mb3Jt
RGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpCi0gICAgICAgIG1fZm9ybURhdGFCdWlsZGVy
LmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIGJvdW5kYXJ5LCB0cnVl
KTsKLQotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWRE
YXRhLnNpemUoKSk7CisgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBGb3JtRGF0YTo6Y3Jl
YXRlKCpkb21Gb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCksIGRv
Y3VtZW50KCkpOwogCiAgICAgcmVzdWx0LT5zZXRJZGVudGlmaWVyKGdlbmVyYXRlRm9ybURhdGFJ
ZGVudGlmaWVyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zODksOCArMzIwLDggQEAgdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wgYWN0aXZhdGVTdWJt
aXRCdXR0b24sIGJvb2wgbG9ja0gKICAgICAgICAgICAgIEFTU0VSVCghbV9mb3JtRGF0YUJ1aWxk
ZXIuaXNNdWx0aVBhcnRGb3JtKCkpOwogICAgICAgICB9CiAKKyAgICAgICAgUmVmUHRyPEZvcm1E
YXRhPiBkYXRhID0gY3JlYXRlRm9ybURhdGEoKTsKICAgICAgICAgaWYgKCFtX2Zvcm1EYXRhQnVp
bGRlci5pc011bHRpUGFydEZvcm0oKSkgewotICAgICAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBk
YXRhID0gY3JlYXRlRm9ybURhdGEoQ1N0cmluZygpKTsKIAogICAgICAgICAgICAgaWYgKGlzTWFp
bHRvRm9ybSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgZm9ybSBkYXRhIGlu
dG8gYSBzdHJpbmcgdGhhdCB3ZSBwdXQgaW50byB0aGUgVVJMLgpAQCAtNDAwLDEzICszMzEsMTEg
QEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wgYWN0aXZh
dGVTdWJtaXRCdXR0b24sIGJvb2wgbG9ja0gKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEucmVsZWFzZSgp
LCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIFN0cmluZygpLCBs
b2NrSGlzdG9yeSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5ID0gbV9mb3JtRGF0YUJ1aWxkZXIu
Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKGJvdW5kYXJ5LmRh
dGEoKSksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgYm91bmRh
cnkuZGF0YSgpLCBsb2NrSGlzdG9yeSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwotICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJt
aXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEuZ2V0KCksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVp
bGRlci5lbmNvZGluZ1R5cGUoKSwgZGF0YS0+Ym91bmRhcnkoKS5kYXRhKCksIGxvY2tIaXN0b3J5
LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9m
b3JtRGF0YUJ1aWxkZXIuc2V0SXNNdWx0aVBhcnRGb3JtKGZhbHNlKTsKLSAgICAgICAgZnJhbWUt
PmxvYWRlcigpLT5zdWJtaXRGb3JtKCJHRVQiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoQ1N0cmlu
ZygpKSwgbV90YXJnZXQsIFN0cmluZygpLCBTdHJpbmcoKSwgbG9ja0hpc3RvcnksIGV2ZW50LCBm
b3JtU3RhdGUucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3Jt
KCJHRVQiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoKSwgbV90YXJnZXQsIFN0cmluZygpLCBTdHJp
bmcoKSwgbG9ja0hpc3RvcnksIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICB9CiAK
ICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0
dG9uKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oIGIvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCmluZGV4IGMwY2UzZTMuLjc1MGZkOTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIEV2ZW50OwogY2xhc3MgRm9ybURhdGE7CiBjbGFz
cyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OwpAQCAtMTI1LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAg
ICBDaGVja2VkUmFkaW9CdXR0b25zJiBjaGVja2VkUmFkaW9CdXR0b25zKCkgeyByZXR1cm4gbV9j
aGVja2VkUmFkaW9CdXR0b25zOyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlk
QmVjb21lQWN0aXZlKCk7Ci0KKyAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2ls
bE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3
T3duZXJEb2N1bWVudCgpOwpAQCAtMTM1LDcgKzEzNiw3IEBAIHByaXZhdGU6CiAKICAgICBib29s
IGlzTWFpbHRvRm9ybSgpIGNvbnN0OwogICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2RpbmcoKSBj
b25zdDsKLSAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0YShjb25zdCBDU3Ry
aW5nJiBib3VuZGFyeSk7CisgICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlRm9ybURhdGEo
KTsKICAgICB1bnNpZ25lZCBmb3JtRWxlbWVudEluZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
KTsKIAogICAgIGZyaWVuZCBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvRE9NRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wYWdlL0RPTUZvcm1EYXRhLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2EyOTFjCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wYWdlL0RPTUZvcm1EYXRhLmNwcApAQCAtMCwwICsxLDU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJC
bG9iLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEo
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykgOiBGb3JtRGF0YUxpc3QoZW5jb2RpbmcpCit7
Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OmFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgYXBw
ZW5kRGF0YShuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OmFwcGVuZChjb25z
dCBTdHJpbmcmIG5hbWUsIEJsb2IqIGJsb2IpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gc3Vw
cG9ydCBzbGljZWQgZmlsZSB3aGVuIEJsb2Iuc2xpY2Ugc3VwcG9ydCBpcyBsYW5kZWQuCisgICAg
aWYgKCFuYW1lLmlzRW1wdHkoKSAmJiAhYmxvYi0+cGF0aCgpLmlzRW1wdHkoKSkgeworICAgICAg
ICBSZWZQdHI8RmlsZT4gZmlsZSA9IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKTsKKyAgICAgICAg
YXBwZW5kRmlsZShuYW1lLCBmaWxlLnJlbGVhc2UoKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NRm9ybURhdGEuaCBiL1dl
YkNvcmUvcGFnZS9ET01Gb3JtRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmYwNzFkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NRm9ybURhdGEu
aApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
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
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01Gb3JtRGF0YV9oCisjZGVmaW5lIERPTUZvcm1E
YXRhX2gKKworI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBCbG9iOworY2xhc3MgU3RyaW5nOworY2xhc3MgVGV4dEVuY29kaW5nOworCitj
bGFzcyBET01Gb3JtRGF0YSA6IHB1YmxpYyBGb3JtRGF0YUxpc3QsIHB1YmxpYyBSZWZDb3VudGVk
PERPTUZvcm1EYXRhPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NRm9ybURh
dGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01Gb3JtRGF0YShVVEY4RW5jb2Rp
bmcoKSkpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NRm9ybURhdGE+IGNyZWF0ZShjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRE9NRm9ybURh
dGEoZW5jb2RpbmcpKTsgfQorCisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUs
IEJsb2IqKTsKKworcHJpdmF0ZToKKyAgICBET01Gb3JtRGF0YShjb25zdCBUZXh0RW5jb2Rpbmcm
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERPTUZvcm1EYXRh
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IGFmM2I3ZjAuLjcyMmQ0
NmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMjIsOCArMjIsMTUg
QEAKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRPTUZv
cm1EYXRhLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiRm9ybURhdGFCdWlsZGVyLmgiCisjaW5jbHVkZSAiRm9ybURhdGFMaXN0Lmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJUZXh0RW5jb2RpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsNiArOTUs
ODUgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8
Y2hhcj4mIHZlY3RvcikKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAorUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9y
bURhdGEsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
UmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKKyAgICAKKyAgICBGb3JtRGF0YUJ1
aWxkZXIgZm9ybURhdGFCdWlsZGVyOworICAgIGlmIChpc011bHRpUGFydEZvcm0pCisgICAgICAg
IHJlc3VsdC0+bV9ib3VuZGFyeSA9IGZvcm1EYXRhQnVpbGRlci5nZW5lcmF0ZVVuaXF1ZUJvdW5k
YXJ5U3RyaW5nKCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7CisgICAgVGV4dEVu
Y29kaW5nIGVuY29kaW5nID0gZG9tRm9ybURhdGEuZW5jb2RpbmcoKTsKKworICAgIGNvbnN0IFZl
Y3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+JiBsaXN0ID0gZG9tRm9ybURhdGEubGlzdCgpOworICAg
IHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gbGlzdC5zaXplKCk7CisgICAgQVNTRVJUKCEoZm9y
bURhdGFMaXN0U2l6ZSAlIDIpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm1EYXRh
TGlzdFNpemU7IGkgKz0gMikgeworICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIGtl
eSA9IGxpc3RbaV07CisgICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBs
aXN0W2kgKyAxXTsKKyAgICAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkgeworICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGhlYWRlcjsKKyAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5iZWdpbk11
bHRpUGFydEhlYWRlcihoZWFkZXIsIHJlc3VsdC0+bV9ib3VuZGFyeS5kYXRhKCksIGtleS5kYXRh
KCkpOworCisgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOworICAg
ICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVl
ZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQorICAgICAgICAgICAgaWYgKHZhbHVlLmZpbGUoKSkg
eworICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmZpbGUoKS0+cGF0
aCgpOworICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHZhbHVlLmZpbGUoKS0+Zmls
ZU5hbWUoKTsKKworICAgICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lm
eSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxl
IGZvciB0aGUgdXBsb2FkLgorICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ2VuZXJhdGVkRmlsZU5hbWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZUZpbGUgPSBwYWdlLT5jaHJvbWUoKS0+
Y2xpZW50KCktPnNob3VsZFJlcGxhY2VXaXRoR2VuZXJhdGVkRmlsZUZvclVwbG9hZChwYXRoLCBn
ZW5lcmF0ZWRGaWxlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR2Vu
ZXJhdGVGaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZ2VuZXJh
dGVkRmlsZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lPSIuLiIg
cGFydCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQorICAgICAg
ICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhl
YWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKKworICAgICAgICAgICAgICAgIGlmICghZmlsZU5h
bWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgTUlNRVR5
cGVSZWdpc3RyeSBmdW5jdGlvbidzIG5hbWUgbWFrZXMgaXQgc291bmQgbGlrZSBpdCB0YWtlcyBh
IHBhdGgsCisgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBqdXN0IGEgYmFzZW5hbWUuIEJ1dCBm
aWxlbmFtZSBpcyBub3QgdGhlIHBhdGguIEJ1dCBub3RlIHRoYXQgaXQncyBub3Qgc2FmZSB0bwor
ICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHVzZSBwYXRoIGluc3RlYWQgc2luY2UgaW4gdGhl
IGdlbmVyYXRlZC1maWxlIGNhc2UgaXQgd2lsbCBub3QgcmVmbGVjdCB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTUlNRSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgZmlsZS4KKyAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVG
b3JQYXRoKGZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkQ29udGVu
dFR5cGVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIG1pbWVUeXBlLmxhdGluMSgpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRl
ci5maW5pc2hNdWx0aVBhcnRIZWFkZXIoaGVhZGVyKTsKKworICAgICAgICAgICAgLy8gQXBwZW5k
IGJvZHkKKyAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFk
ZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRh
KCkubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKHZhbHVlLmRh
dGEoKS5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmZpbGUo
KSAmJiAhdmFsdWUuZmlsZSgpLT5wYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJl
c3VsdC0+YXBwZW5kRmlsZSh2YWx1ZS5maWxlKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxl
KTsKKworICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKCJcclxuIiwgMik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPbWl0IHRoZSBuYW1lICJpc2luZGV4IiBpZiBpdCdz
IHRoZSBmaXJzdCBmb3JtIGRhdGEgZWxlbWVudC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkg
aXMgdGhpcyBhIGdvb2QgcnVsZT8gSXMgdGhpcyBvYnNvbGV0ZSBub3c/CisgICAgICAgICAgICBp
ZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS5kYXRhKCkgPT0gImlzaW5kZXgiKQorICAg
ICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShlbmNv
ZGVkRGF0YSwgdmFsdWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBmb3JtRGF0YUJ1aWxkZXIuYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwg
a2V5LmRhdGEoKSwgdmFsdWUuZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0gCisKKyAgICBpZiAo
aXNNdWx0aVBhcnRGb3JtKQorICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkQm91bmRhcnlUb011
bHRpUGFydEhlYWRlcihlbmNvZGVkRGF0YSwgcmVzdWx0LT5tX2JvdW5kYXJ5LmRhdGEoKSwgdHJ1
ZSk7CisKKyAgICByZXN1bHQtPmFwcGVuZERhdGEoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVk
RGF0YS5zaXplKCkpOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjb3B5KCkgY29uc3QKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZvcm1EYXRhKCp0aGlzKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CmluZGV4IDcyNzhmMmUuLjM3ZDA5NTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CkBAIC0yNyw2ICsyNyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENocm9tZUNs
aWVudDsKK2NsYXNzIERPTUZvcm1EYXRhOworY2xhc3MgRG9jdW1lbnQ7CiAKIGNsYXNzIEZvcm1E
YXRhRWxlbWVudCB7CiBwdWJsaWM6CkBAIC02Nyw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IHZvaWQqLCBzaXplX3QpOwogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgQ1N0cmluZyYpOwogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBET01Gb3JtRGF0
YSYsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCopOwogICAgIFBhc3NSZWZQdHI8Rm9y
bURhdGE+IGNvcHkoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBkZWVwQ29weSgp
IGNvbnN0OwogICAgIH5Gb3JtRGF0YSgpOwpAQCAtNzksNiArODIsNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzLmlzRW1wdHkoKTsgfQog
ICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+JiBlbGVtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fZWxlbWVudHM7IH0KKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIGJvdW5kYXJ5KCkgY29u
c3QgeyByZXR1cm4gbV9ib3VuZGFyeTsgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUZpbGVzKENocm9t
ZUNsaWVudCopOwogICAgIHZvaWQgcmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwpAQCAt
OTksNiArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBpbnQ2NF90IG1faWRlbnRpZmllcjsKICAgICBi
b29sIG1faGFzR2VuZXJhdGVkRmlsZXM7CiAgICAgYm9vbCBtX2Fsd2F5c1N0cmVhbTsKKyAgICBW
ZWN0b3I8Y2hhcj4gbV9ib3VuZGFyeTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmlu
ZGV4IDMyODE4ZGYuLmJlM2QzNWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRl
ICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKKyNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgog
I2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFdmVudC5oIgpAQCAtNDUwLDYgKzQ1MSwyNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGNyZWF0ZVJlcXVlc3Qo
ZWMpOwogfQogCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKERPTUZvcm1EYXRhKiBib2R5LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWluaXRTZW5kKGVjKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fbWV0aG9kICE9ICJHRVQiICYmIG1fbWV0aG9kICE9ICJIRUFEIiAm
JiBtX3VybC5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7CisgICAgICAgIG1fcmVxdWVzdEVudGl0
eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCpib2R5LCB0cnVlLCBkb2N1bWVudCgpKTsKKworICAg
ICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBnZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUi
KTsKKyAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29u
dGVudFR5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IjsKKyAgICAgICAgICAg
IGNvbnRlbnRUeXBlICs9IG1fcmVxdWVzdEVudGl0eUJvZHktPmJvdW5kYXJ5KCkuZGF0YSgpOwor
ICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlckludGVybmFsKCJDb250ZW50LVR5cGUiLCBjb250
ZW50VHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjcmVhdGVSZXF1ZXN0KGVjKTsKK30K
Kwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgdXBsb2FkIGV2ZW50IGxpc3RlbmVycyBmb3JjZXMg
dXMgdG8gdXNlIHByZWZsaWdodGluZyBiZWNhdXNlIFBPU1RpbmcgdG8gYW4gVVJMIHRoYXQgZG9l
cyBub3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmggYi9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5oCmluZGV4IDJjZWE1YzYuLjQ3ZmI2NzcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJs
b2I7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERPTUZvcm1EYXRhOwogY2xhc3MgUmVzb3VyY2VS
ZXF1ZXN0OwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIGNsYXNzIFRocmVhZGFibGVMb2Fk
ZXI7CkBAIC03Myw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmQoRG9jdW1lbnQqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZW5kKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2b2lkIHNlbmQoQmxvYiosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNl
bmQoRE9NRm9ybURhdGEqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhYm9ydCgpOwogICAg
IHZvaWQgc2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIG92ZXJyaWRlTWltZVR5cGUo
Y29uc3QgU3RyaW5nJiBvdmVycmlkZSk7Cg==
</data>
<flag name="commit-queue"
          id="33122"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50249</attachid>
            <date>2010-03-08 14:41:32 -0800</date>
            <delta_ts>2010-03-10 15:14:31 -0800</delta_ts>
            <desc>Move DOMFormData to html/</desc>
            <filename>35707_5</filename>
            <type>text/plain</type>
            <size>28941</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCA5MTczNTBmLi44NGNiYTljIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yMzksNiArMjM5LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJXAogCWh0bWwvQmxvYi5jcHAgXAogCWh0bWwvQ29sbGVj
dGlvbkNhY2hlLmNwcCBcCisJaHRtbC9ET01Gb3JtRGF0YS5jcHAgXAogCWh0bWwvRmlsZS5jcHAg
XAogCWh0bWwvRmlsZUxpc3QuY3BwIFwKIAlodG1sL0Zvcm1EYXRhTGlzdC5jcHAgXApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOGU1MDA0
Li44MDgzNWI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEwLTAzLTA4ICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnRpbmcgRE9NRm9ybURhdGEgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTcwNworCisgICAgICAgIFRoaXMgcGF0Y2gg
b25seSBhZGRyZXNzZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIERPTUZvcm1EYXRhIGNsYXNzIGFu
ZAorICAgICAgICBtb3ZlcyB0aGUgRm9ybURhdGEgY29uc3RydWN0aW9uIGxvZ2ljIGZyb20gSFRN
TEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YQorICAgICAgICB0byBGb3JtRGF0YTo6Y3JlYXRl
KCkgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieSBib3RoIEhUTUxGb3JtRWxlbWVudAorICAgICAg
ICBhbmQgWE1MSHR0cFJlcXVlc3QuCisKKyAgICAgICAgVGhlIERPTUZvcm1EYXRhIElETCBpbnRl
cmZhY2Ugd2lsbCBiZSBleHBvc2VkIGluIGFub3RoZXIgcGF0Y2ggYW5kIHRoZQorICAgICAgICB0
ZXN0IHdpbGwgYmUgYWRkZWQgdGhlbi4KKworICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L0RPTUZvcm1EYXRhLmNwcDogQWRkZWQuCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybURhdGFMaXN0OjplbmNvZGluZyk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6CisgICAgICAgICog
aHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
Ojpib3VuZGFyeSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJl
cXVlc3QuaDoKKwogMjAxMC0wMy0wOCAgSm9hbm1hcmllIERpZ2dzICA8am9hbm1hcmllLmRpZ2dz
QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBl
NGQ3NzcwLi4xNDc1MzJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwMDgsNiArMTAwOCw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9odG1sL0RhdGVDb21wb25lbnRzLmggXAogCVdlYkNvcmUvaHRt
bC9ET01EYXRhR3JpZERhdGFTb3VyY2UuY3BwIFwKIAlXZWJDb3JlL2h0bWwvRE9NRGF0YUdyaWRE
YXRhU291cmNlLmggXAorCVdlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAgXAorCVdlYkNvcmUv
aHRtbC9ET01Gb3JtRGF0YS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZS5jcHAgXAogCVdlYkNvcmUv
aHRtbC9GaWxlLmggXAogCVdlYkNvcmUvaHRtbC9GaWxlTGlzdC5jcHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkMDVmOGQ5
Li45M2JjY2UzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMTQwNiw2ICsxNDA2LDggQEAKICAgICAgICAgICAgICdodG1sL0Rh
dGFHcmlkQ29sdW1uLmgnLAogICAgICAgICAgICAgJ2h0bWwvRE9NRGF0YUdyaWREYXRhU291cmNl
LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9ET01EYXRhR3JpZERhdGFTb3VyY2UuaCcsCisgICAg
ICAgICAgICAnaHRtbC9ET01Gb3JtRGF0YS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvRE9NRm9y
bURhdGEuaCcsCiAgICAgICAgICAgICAnaHRtbC9EYXRhR3JpZENvbHVtbkxpc3QuY3BwJywKICAg
ICAgICAgICAgICdodG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5oJywKICAgICAgICAgICAgICdodG1s
L0RhdGVDb21wb25lbnRzLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIv
V2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBkZTBiZjAxLi41N2M2NTgxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTU5OCw2ICs1
OTgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5jcHAgXAog
ICAgIGh0bWwvRGF0ZUNvbXBvbmVudHMuY3BwIFwKICAgICBodG1sL0RPTURhdGFHcmlkRGF0YVNv
dXJjZS5jcHAgXAorICAgIGh0bWwvRE9NRm9ybURhdGEuY3BwIFwKICAgICBodG1sL0ZpbGUuY3Bw
IFwKICAgICBodG1sL0ZpbGVMaXN0LmNwcCBcCiAgICAgaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIFwK
QEAgLTEyOTUsNiArMTI5Niw3IEBAIEhFQURFUlMgKz0gXAogICAgIGh0bWwvRGF0YUdyaWRDb2x1
bW5MaXN0LmggXAogICAgIGh0bWwvRGF0ZUNvbXBvbmVudHMuaCBcCiAgICAgaHRtbC9ET01EYXRh
R3JpZERhdGFTb3VyY2UuaCBcCisgICAgaHRtbC9ET01Gb3JtRGF0YS5oIFwKICAgICBodG1sL0Zp
bGUuaCBcCiAgICAgaHRtbC9GaWxlTGlzdC5oIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5oIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGNmZjg4OWUuLmNjMzEyMGUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjk5NzMsNiArMjk5NzMs
MTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxET01Gb3JtRGF0YS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXERPTUZvcm1EYXRhLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZpbGUuY3BwIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYWY2MjI3NC4uYTYxMjdlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTYyNSw2ICs2MjUsOCBAQAogCQkyRUNGN0FERDEwMTYyQjM4
MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50
LmggKi87IH07CiAJCTJFQ0Y3QUUxMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURFMTAx
NjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCAqLzsgfTsKIAkJMkVDRjdBRTIxMDE2MkI1
ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50Lmgg
Ki87IH07CisJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUQ2MDlCQTExNDVC
MDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwICovOyB9OworCQkyRUQ2MDlCRDExNDVCMDcx
MDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5o
ICovOyB9OwogCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
Mjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwICovOyB9
OwogCQkzMTI4OEU3MzBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4OEU2RjBF
MzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CiAJCTMxMjg4
RTc0MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcwMEUzMDA1RDYw
MDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCAqLzsgfTsKQEAgLTU5OTAsNiAr
NTk5Miw4IEBACiAJCTJFQ0Y3QURFMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9yRXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUNGN0FERjEwMTYyQjU4MDA0MjdERTcgLyogRXJy
b3JFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFcnJvckV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQ0Y3QUUwMTAxNjJCNTgwMDQyN0RFNyAv
KiBFcnJvckV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFcnJvckV2ZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkVENjA5QkExMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TUZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkVENjA5QkIxMTQ1
QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERPTUZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjg4
RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyODhFNkYwRTMwMDVENjAwMzYxOUFFIC8q
IFdlYktpdENTU0tleWZyYW1lUnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzEyODhFNzAwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjg3NCw2ICsxMjg3OCw4IEBA
CiAJCQkJRjVEM0E1N0IxMDZCODNCMzAwNTQ1Mjk3IC8qIERhdGVDb21wb25lbnRzLmggKi8sCiAJ
CQkJQkM3REFBRUMwRkY5NjE1RDAwQ0UwMTM4IC8qIERPTURhdGFHcmlkRGF0YVNvdXJjZS5jcHAg
Ki8sCiAJCQkJQkM3REFBRUQwRkY5NjE1RDAwQ0UwMTM4IC8qIERPTURhdGFHcmlkRGF0YVNvdXJj
ZS5oICovLAorCQkJCTJFRDYwOUJBMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAg
Ki8sCisJCQkJMkVENjA5QkIxMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggKi8sCiAJ
CQkJQkNEQkI4Q0MwRTA4OTU4NDAwQzYwRkY2IC8qIEZpbGUuY3BwICovLAogCQkJCUJDREJCOENC
MEUwODk1ODQwMEM2MEZGNiAvKiBGaWxlLmggKi8sCiAJCQkJQkMxODgxRDkwRTA4QzRFRDAwMDQ4
QzEzIC8qIEZpbGUuaWRsICovLApAQCAtMTg2NjgsNiArMTg2NzQsNyBAQAogCQkJCUJDNTNEQTJF
MTE0MzEyMUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNTNEQTYwMTE0MzE0MUEwMDBEODE3RSAvKiBET01PYmplY3RIYXNoVGFibGVNYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNTNEQUMyMTE0MzJFRUUwMDBEODE3RSAvKiBKU0RlYnVnV3JhcHBl
clNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVENjA5QkQxMTQ1QjA3MTAwQzg2ODRFIC8qIERP
TUZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwODY3LDYgKzIwODc0LDcgQEAKIAkJCQlC
QzUzREE2MjExNDMxNEJEMDAwRDgxN0UgLyogRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDNTNEQUM1MTE0MzJGRDkwMDBEODE3RSAvKiBKU0RlYnVnV3JhcHBl
clNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzUzREFDNzExNDMzMDY0MDAwRDgxN0UgLyog
SlNET01XcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4
Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTI5MWMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkJsb2Iu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RPTUZvcm1EYXRhOjpET01Gb3JtRGF0YShjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKSA6IEZvcm1EYXRhTGlzdChlbmNvZGluZykKK3sKK30K
Kwordm9pZCBET01Gb3JtRGF0YTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQorICAgICAgICBhcHBlbmRE
YXRhKG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBET01Gb3JtRGF0YTo6YXBwZW5kKGNvbnN0IFN0
cmluZyYgbmFtZSwgQmxvYiogYmxvYikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0
IHNsaWNlZCBmaWxlIHdoZW4gQmxvYi5zbGljZSBzdXBwb3J0IGlzIGxhbmRlZC4KKyAgICBpZiAo
IW5hbWUuaXNFbXB0eSgpICYmICFibG9iLT5wYXRoKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIFJl
ZlB0cjxGaWxlPiBmaWxlID0gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IpOworICAgICAgICBhcHBl
bmRGaWxlKG5hbWUsIGZpbGUucmVsZWFzZSgpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5oIGIvV2ViQ29y
ZS9odG1sL0RPTUZvcm1EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZjA3MWQ0YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5oCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
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
TUFHRS4KKyAqLworCisjaWZuZGVmIERPTUZvcm1EYXRhX2gKKyNkZWZpbmUgRE9NRm9ybURhdGFf
aAorCisjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEJsb2I7CitjbGFzcyBTdHJpbmc7CitjbGFzcyBUZXh0RW5jb2Rpbmc7CisKK2NsYXNz
IERPTUZvcm1EYXRhIDogcHVibGljIEZvcm1EYXRhTGlzdCwgcHVibGljIFJlZkNvdW50ZWQ8RE9N
Rm9ybURhdGE+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01Gb3JtRGF0YT4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERPTUZvcm1EYXRhKFVURjhFbmNvZGluZygp
KSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01Gb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01Gb3JtRGF0YShl
bmNvZGluZykpOyB9CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgQmxv
YiopOworCitwcml2YXRlOgorICAgIERPTUZvcm1EYXRhKGNvbnN0IFRleHRFbmNvZGluZyYpOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NRm9ybURhdGFfaApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9odG1sL0Zv
cm1EYXRhTGlzdC5oCmluZGV4IGFlYzFhNTIuLjgzOThkYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKQEAg
LTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBjb25zdCBWZWN0b3I8SXRlbT4m
IGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0KKyAgICBjb25zdCBUZXh0RW5jb2Rpbmcm
IGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCiBwcml2YXRlOgogICAg
IHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKaW5kZXggMmY4ODg5NC4uMTliMmYwNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAg
LTI2LDggKzI2LDcgQEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKIAogI2luY2x1ZGUg
IkNTU0hlbHBlci5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTQ2LDcgKzQ1LDYg
QEAKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlZhbGlkaXR5U3Rh
dGUuaCIKICNpbmNsdWRlIDxsaW1pdHM+CkBAIC0yMDEsODMgKzE5OSwxNiBAQCBUZXh0RW5jb2Rp
bmcgSFRNTEZvcm1FbGVtZW50OjpkYXRhRW5jb2RpbmcoKSBjb25zdAogICAgIHJldHVybiBtX2Zv
cm1EYXRhQnVpbGRlci5kYXRhRW5jb2RpbmcoZG9jdW1lbnQoKSk7CiB9CiAKLVBhc3NSZWZQdHI8
Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEoY29uc3QgQ1N0cmluZyYg
Ym91bmRhcnkpCitQYXNzUmVmUHRyPEZvcm1EYXRhPiBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZv
cm1EYXRhKCkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7Ci0gICAgVGV4dEVuY29k
aW5nIGVuY29kaW5nID0gZGF0YUVuY29kaW5nKCkuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigp
OwotCi0gICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7Ci0K
KyAgICBSZWZQdHI8RE9NRm9ybURhdGE+IGRvbUZvcm1EYXRhID0gRE9NRm9ybURhdGE6OmNyZWF0
ZShkYXRhRW5jb2RpbmcoKS5lbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9uKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAg
ICAgRm9ybURhdGFMaXN0IGxpc3QoZW5jb2RpbmcpOwotCi0gICAgICAgIGlmICghY29udHJvbC0+
ZGlzYWJsZWQoKSAmJiBjb250cm9sLT5hcHBlbmRGb3JtRGF0YShsaXN0LCBtX2Zvcm1EYXRhQnVp
bGRlci5pc011bHRpUGFydEZvcm0oKSkpIHsKLSAgICAgICAgICAgIHNpemVfdCBmb3JtRGF0YUxp
c3RTaXplID0gbGlzdC5saXN0KCkuc2l6ZSgpOwotICAgICAgICAgICAgQVNTRVJUKGZvcm1EYXRh
TGlzdFNpemUgJSAyID09IDApOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBm
b3JtRGF0YUxpc3RTaXplOyBqICs9IDIpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBGb3JtRGF0
YUxpc3Q6Okl0ZW0mIGtleSA9IGxpc3QubGlzdCgpW2pdOwotICAgICAgICAgICAgICAgIGNvbnN0
IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBsaXN0Lmxpc3QoKVtqICsgMV07Ci0gICAgICAg
ICAgICAgICAgaWYgKCFtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBPbWl0IHRoZSBuYW1lICJpc2luZGV4IiBpZiBpdCdzIHRoZSBm
aXJzdCBmb3JtIGRhdGEgZWxlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdo
eSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5vdz8KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGVuY29kZWREYXRhLmlzRW1wdHkoKSAmJiBrZXkuZGF0YSgpID09ICJpc2lu
ZGV4IikKLSAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3Ry
aW5nQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwgdmFsdWUuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuYWRk
S2V5VmFsdWVQYWlyQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwga2V5LmRhdGEoKSwgdmFsdWUuZGF0
YSgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gaGVhZGVyOwotICAgICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5i
ZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIGJvdW5kYXJ5LCBrZXkuZGF0YSgpKTsKLQotICAg
ICAgICAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxz
byBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICAgICAgICAgIGlmICh2
YWx1ZS5maWxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0
aCA9IHZhbHVlLmZpbGUoKS0+cGF0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
IGZpbGVOYW1lID0gdmFsdWUuZmlsZSgpLT5maWxlTmFtZSgpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdz
IGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ2VuZXJhdGVkRmlsZU5hbWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlRmlsZSA9IHBh
Z2UtPmNocm9tZSgpLT5jbGllbnQoKS0+c2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9y
VXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlRmlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGVOYW1lID0gZ2VuZXJhdGVkRmlsZU5hbWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lPSIuLiIgcGFy
dCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5hbWVUb011bHRpUGFydEhl
YWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZSBNSU1FVHlwZVJlZ2lzdHJ5IGZ1bmN0aW9uJ3MgbmFtZSBtYWtlcyBp
dCBzb3VuZCBsaWtlIGl0IHRha2VzIGEgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBub3QganVzdCBhIGJhc2VuYW1lLiBCdXQgZmlsZW5hbWUgaXMgbm90IHRoZSBwYXRoLiBC
dXQgbm90ZSB0aGF0IGl0J3Mgbm90IHNhZmUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBqdXN0IHVzZSBwYXRoIGluc3RlYWQgc2luY2UgaW4gdGhlIGdlbmVyYXRlZC1maWxlIGNh
c2UgaXQgd2lsbCBub3QgcmVmbGVjdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBNSU1FIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCBmaWxlLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9y
UGF0aChmaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlw
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZm9ybURhdGFC
dWlsZGVyLmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtaW1lVHlwZS5s
YXRpbjEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5maW5pc2hNdWx0aVBh
cnRIZWFkZXIoaGVhZGVyKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgYm9keQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVh
ZGVyLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2
YWx1ZS5kYXRhKCkubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFw
cGVuZERhdGEodmFsdWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmICh2YWx1ZS5maWxlKCkgJiYgIXZhbHVlLmZpbGUoKS0+cGF0aCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRmlsZSh2YWx1ZS5m
aWxlKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLQotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQor
ICAgICAgICAgICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKmRvbUZvcm1EYXRhLCBtX2Zvcm1E
YXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSk7CiAgICAgfQogCi0gICAgaWYgKG1fZm9ybURh
dGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKQotICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5h
ZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRhLCBib3VuZGFyeSwgdHJ1ZSk7
Ci0KLSAgICByZXN1bHQtPmFwcGVuZERhdGEoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0
YS5zaXplKCkpOworICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gRm9ybURhdGE6OmNyZWF0
ZSgqZG9tRm9ybURhdGEsIG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpLCBkb2N1
bWVudCgpKTsKIAogICAgIHJlc3VsdC0+c2V0SWRlbnRpZmllcihnZW5lcmF0ZUZvcm1EYXRhSWRl
bnRpZmllcigpKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzg5LDggKzMyMCw4IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW50LCBib29sIGFjdGl2YXRlU3VibWl0
QnV0dG9uLCBib29sIGxvY2tICiAgICAgICAgICAgICBBU1NFUlQoIW1fZm9ybURhdGFCdWlsZGVy
LmlzTXVsdGlQYXJ0Rm9ybSgpKTsKICAgICAgICAgfQogCisgICAgICAgIFJlZlB0cjxGb3JtRGF0
YT4gZGF0YSA9IGNyZWF0ZUZvcm1EYXRhKCk7CiAgICAgICAgIGlmICghbV9mb3JtRGF0YUJ1aWxk
ZXIuaXNNdWx0aVBhcnRGb3JtKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gZGF0
YSA9IGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSk7CiAKICAgICAgICAgICAgIGlmIChpc01haWx0
b0Zvcm0oKSkgewogICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGZvcm0gZGF0YSBpbnRv
IGEgc3RyaW5nIHRoYXQgd2UgcHV0IGludG8gdGhlIFVSTC4KQEAgLTQwMCwxMyArMzMxLDExIEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW50LCBib29sIGFjdGl2YXRl
U3VibWl0QnV0dG9uLCBib29sIGxvY2tICiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZy
YW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiUE9TVCIsIG1fdXJsLCBkYXRhLnJlbGVhc2UoKSwg
bV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgbG9j
a0hpc3RvcnksIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeSA9IG1fZm9ybURhdGFCdWlsZGVyLmdl
bmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKTsKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+c3VibWl0Rm9ybSgiUE9TVCIsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShib3VuZGFyeS5kYXRh
KCkpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIGJvdW5kYXJ5
LmRhdGEoKSwgbG9ja0hpc3RvcnksIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKLSAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0
Rm9ybSgiUE9TVCIsIG1fdXJsLCBkYXRhLmdldCgpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxk
ZXIuZW5jb2RpbmdUeXBlKCksIGRhdGEtPmJvdW5kYXJ5KCkuZGF0YSgpLCBsb2NrSGlzdG9yeSwg
ZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZm9y
bURhdGFCdWlsZGVyLnNldElzTXVsdGlQYXJ0Rm9ybShmYWxzZSk7Ci0gICAgICAgIGZyYW1lLT5s
b2FkZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKENTdHJpbmco
KSksIG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3RyaW5nKCksIGxvY2tIaXN0b3J5LCBldmVudCwgZm9y
bVN0YXRlLnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgi
R0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKCksIG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3RyaW5n
KCksIGxvY2tIaXN0b3J5LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAgICAgfQogCiAg
ICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaCBiL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuaAppbmRleCBjMGNlM2UzLi5kYTlhNTllIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5oCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgRE9NRm9ybURhdGE7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEZvcm1EYXRhOwogY2xhc3Mg
SFRNTEZvcm1Db250cm9sRWxlbWVudDsKQEAgLTEzNSw3ICsxMzYsNyBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBpc01haWx0b0Zvcm0oKSBjb25zdDsKICAgICBUZXh0RW5jb2RpbmcgZGF0YUVuY29k
aW5nKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlRm9ybURhdGEoY29u
c3QgQ1N0cmluZyYgYm91bmRhcnkpOworICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZUZv
cm1EYXRhKCk7CiAgICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kik7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9uOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggYTg0NTZiMi4uNjI1YzgxZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0yMyw4ICsyMywxNCBAQAogCiAjaW5j
bHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIK
ICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkZv
cm1EYXRhQnVpbGRlci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTg5LDYgKzk1LDg1IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVh
dGUoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7CiB9CiAKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgRE9N
Rm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQoreworICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7CisgICAg
CisgICAgRm9ybURhdGFCdWlsZGVyIGZvcm1EYXRhQnVpbGRlcjsKKyAgICBpZiAoaXNNdWx0aVBh
cnRGb3JtKQorICAgICAgICByZXN1bHQtPm1fYm91bmRhcnkgPSBmb3JtRGF0YUJ1aWxkZXIuZ2Vu
ZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOworCisgICAgVmVjdG9yPGNoYXI+IGVuY29kZWRE
YXRhOworICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9IGRvbUZvcm1EYXRhLmVuY29kaW5nKCk7
CisKKyAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgbGlzdCA9IGRvbUZvcm1E
YXRhLmxpc3QoKTsKKyAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGxpc3Quc2l6ZSgpOwor
ICAgIEFTU0VSVCghKGZvcm1EYXRhTGlzdFNpemUgJSAyKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmb3JtRGF0YUxpc3RTaXplOyBpICs9IDIpIHsKKyAgICAgICAgY29uc3QgRm9ybURh
dGFMaXN0OjpJdGVtJiBrZXkgPSBsaXN0W2ldOworICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6
Okl0ZW0mIHZhbHVlID0gbGlzdFtpICsgMV07CisgICAgICAgIGlmIChpc011bHRpUGFydEZvcm0p
IHsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7CisgICAgICAgICAgICBmb3JtRGF0
YUJ1aWxkZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCByZXN1bHQtPm1fYm91bmRhcnku
ZGF0YSgpLCBrZXkuZGF0YSgpKTsKKworICAgICAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZUZp
bGUgPSBmYWxzZTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgRklMRSwg
dGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5maWxlKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSB2
YWx1ZS5maWxlKCktPnBhdGgoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSB2
YWx1ZS5maWxlKCktPmZpbGVOYW1lKCk7CisKKyAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFw
cGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEg
cmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KKyAgICAgICAgICAgICAgICBpZiAoIXBh
dGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9j
dW1lbnQtPnBhZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdlbmVyYXRl
ZEZpbGVOYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVGaWxlID0g
cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVG
b3JVcGxvYWQocGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZEdlbmVyYXRlRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWxlTmFtZSA9IGdlbmVyYXRlZEZpbGVOYW1lOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNsdWRlIHRo
ZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmlsZW5hbWUg
aXMgZW1wdHkKKyAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5hbWVUb011
bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogVGhlIE1JTUVUeXBlUmVnaXN0cnkgZnVuY3Rpb24ncyBuYW1lIG1ha2VzIGl0IHNvdW5k
IGxpa2UgaXQgdGFrZXMgYSBwYXRoLAorICAgICAgICAgICAgICAgICAgICAvLyBub3QganVzdCBh
IGJhc2VuYW1lLiBCdXQgZmlsZW5hbWUgaXMgbm90IHRoZSBwYXRoLiBCdXQgbm90ZSB0aGF0IGl0
J3Mgbm90IHNhZmUgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8ganVzdCB1c2UgcGF0aCBpbnN0
ZWFkIHNpbmNlIGluIHRoZSBnZW5lcmF0ZWQtZmlsZSBjYXNlIGl0IHdpbGwgbm90IHJlZmxlY3Qg
dGhlCisgICAgICAgICAgICAgICAgICAgIC8vIE1JTUUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIGZp
bGUuCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGFC
dWlsZGVyLmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtaW1lVHlwZS5s
YXRpbjEoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3JtRGF0YUJ1aWxkZXIuZmluaXNoTXVsdGlQYXJ0SGVhZGVyKGhlYWRlcik7CisKKyAgICAg
ICAgICAgIC8vIEFwcGVuZCBib2R5CisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoaGVh
ZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7CisgICAgICAgICAgICBpZiAoc2l6ZV90IGRhdGFT
aXplID0gdmFsdWUuZGF0YSgpLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBw
ZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgICAgICBlbHNl
IGlmICh2YWx1ZS5maWxlKCkgJiYgIXZhbHVlLmZpbGUoKS0+cGF0aCgpLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZEZpbGUodmFsdWUuZmlsZSgpLT5wYXRoKCksIHNo
b3VsZEdlbmVyYXRlRmlsZSk7CisKKyAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSgiXHJc
biIsIDIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT21pdCB0aGUgbmFtZSAi
aXNpbmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9ybSBkYXRhIGVsZW1lbnQuCisgICAgICAgICAg
ICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSBnb29kIHJ1bGU/IElzIHRoaXMgb2Jzb2xldGUgbm93
PworICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmlzRW1wdHkoKSAmJiBrZXkuZGF0YSgpID09
ICJpc2luZGV4IikKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmlu
Z0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHZhbHVlLmRhdGEoKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFpckFzRm9ybURh
dGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEoKSk7CisgICAgICAgIH0KKyAg
ICB9IAorCisgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKKyAgICAgICAgZm9ybURhdGFCdWlsZGVy
LmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIHJlc3VsdC0+bV9ib3Vu
ZGFyeS5kYXRhKCksIHRydWUpOworCisgICAgcmVzdWx0LT5hcHBlbmREYXRhKGVuY29kZWREYXRh
LmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6ZSgpKTsKKworICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZSgpOworfQorCiBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y29weSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGb3JtRGF0YSgqdGhpcykpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaAppbmRleCA0OGU1MTU0Li45MjI2ZmMzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaApAQCAtMjcsNiArMjcsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDaHJvbWVDbGllbnQ7CitjbGFzcyBET01Gb3JtRGF0YTsKK2NsYXNzIERvY3VtZW50
OwogCiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgpAQCAtODAsNiArODIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCB2b2lk
Kiwgc2l6ZV90KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0
IENTdHJpbmcmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0
IFZlY3RvcjxjaGFyPiYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUo
Y29uc3QgRE9NRm9ybURhdGEmLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqKTsKICAg
ICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjb3B5KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gZGVlcENvcHkoKSBjb25zdDsKICAgICB+Rm9ybURhdGEoKTsKQEAgLTk1LDYgKzk4LDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
cy5pc0VtcHR5KCk7IH0KICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiYgZWxlbWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzOyB9CisgICAgY29uc3QgVmVjdG9yPGNoYXI+
JiBib3VuZGFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRhcnk7IH0KIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGaWxlcyhDaHJvbWVDbGllbnQqKTsKICAgICB2b2lkIHJlbW92ZUdlbmVyYXRlZEZpbGVz
SWZOZWVkZWQoKTsKQEAgLTExNSw2ICsxMTksNyBAQCBwcml2YXRlOgogICAgIGludDY0X3QgbV9p
ZGVudGlmaWVyOwogICAgIGJvb2wgbV9oYXNHZW5lcmF0ZWRGaWxlczsKICAgICBib29sIG1fYWx3
YXlzU3RyZWFtOworICAgIFZlY3RvcjxjaGFyPiBtX2JvdW5kYXJ5OwogfTsKIAogaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKaW5kZXggYWJkYjU4YS4uY2Q3NGRkZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ1N0
cmluZy5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgorI2luY2x1ZGUg
IkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC00NTksNiArNDYwLDI1IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgY3JlYXRlUmVxdWVzdChlYyk7CiB9CiAKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRE9N
Rm9ybURhdGEqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghaW5pdFNlbmQo
ZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tZXRob2QgIT0gIkdFVCIgJiYgbV9t
ZXRob2QgIT0gIkhFQUQiICYmIG1fdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKKyAgICAg
ICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKmJvZHksIHRydWUsIGRv
Y3VtZW50KCkpOworCisgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IGdldFJlcXVlc3RIZWFk
ZXIoIkNvbnRlbnQtVHlwZSIpOworICAgICAgICBpZiAoY29udGVudFR5cGUuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBjb250ZW50VHlwZSA9ICJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFy
eT0iOworICAgICAgICAgICAgY29udGVudFR5cGUgKz0gbV9yZXF1ZXN0RW50aXR5Qm9keS0+Ym91
bmRhcnkoKS5kYXRhKCk7CisgICAgICAgICAgICBzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoIkNv
bnRlbnQtVHlwZSIsIGNvbnRlbnRUeXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNyZWF0
ZVJlcXVlc3QoZWMpOworfQorCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIFRoZSBwcmVzZW5jZSBvZiB1cGxvYWQgZXZlbnQg
bGlzdGVuZXJzIGZvcmNlcyB1cyB0byB1c2UgcHJlZmxpZ2h0aW5nIGJlY2F1c2UgUE9TVGluZyB0
byBhbiBVUkwgdGhhdCBkb2VzIG5vdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuaCBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXggNWU0N2Q0MS4uZGNl
MWEwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAorKysgYi9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQmxvYjsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgRE9NRm9ybURhdGE7
CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogY2xh
c3MgVGhyZWFkYWJsZUxvYWRlcjsKQEAgLTc0LDYgKzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2VuZChEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNlbmQoY29uc3QgU3Ry
aW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2VuZChCbG9iKiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgc2VuZChET01Gb3JtRGF0YSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGFib3J0KCk7CiAgICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQg
b3ZlcnJpZGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG92ZXJyaWRlKTsK
</data>
<flag name="review"
          id="33329"
          type_id="1"
          status="+"
          setter="dimich"
    />
    <flag name="commit-queue"
          id="33330"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>