<?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>43941</bug_id>
          
          <creation_ts>2010-08-12 16:35:22 -0700</creation_ts>
          <short_desc>Handle blob resource</short_desc>
          <delta_ts>2010-08-23 13:11:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>43985</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>dimich</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>264081</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 16:35:22 -0700</bug_when>
    <thetext>Need to add the support to handle blob resource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267338</commentid>
    <comment_count>1</comment_count>
      <attachid>64971</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-20 12:20:57 -0700</bug_when>
    <thetext>Created attachment 64971
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267339</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-20 12:22:22 -0700</bug_when>
    <thetext>Attachment 64971 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/ResourceHandleClient.h:47:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/platform/network/ResourceHandle.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/network/BlobResourceHandle.cpp:209:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/network/BlobResourceHandle.cpp:237:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/network/BlobResourceHandle.cpp:398:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/network/BlobResourceHandle.cpp:443:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/platform/network/BlobResourceHandle.cpp:446:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 7 in 19 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>267341</commentid>
    <comment_count>3</comment_count>
      <attachid>64972</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-20 12:25:40 -0700</bug_when>
    <thetext>Created attachment 64972
Proposed Patch

Fix style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267345</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-20 12:28:14 -0700</bug_when>
    <thetext>Attachment 64972 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/ResourceHandleClient.h:47:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/platform/network/ResourceHandle.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 19 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>267351</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-20 12:40:29 -0700</bug_when>
    <thetext>Attachment 64971 did not build on mac:
Build output: http://queues.webkit.org/results/3722453</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267356</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-20 12:51:18 -0700</bug_when>
    <thetext>Attachment 64972 did not build on mac:
Build output: http://queues.webkit.org/results/3719462</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267360</commentid>
    <comment_count>7</comment_count>
      <attachid>64976</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-20 13:00:38 -0700</bug_when>
    <thetext>Created attachment 64976
Proposed Patch

Fix mac warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267361</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-20 13:03:16 -0700</bug_when>
    <thetext>Attachment 64976 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/ResourceHandleClient.h:47:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/platform/network/ResourceHandle.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 19 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>267425</commentid>
    <comment_count>9</comment_count>
      <attachid>64976</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-20 14:43:42 -0700</bug_when>
    <thetext>Comment on attachment 64976
Proposed Patch

WebCore/page/SecurityOrigin.cpp:128
 +      if (url.protocolIs(&quot;blob&quot;))
I thought we were using the &quot;blobdata&quot; scheme.

WebCore/platform/network/BlobResourceHandle.cpp:53
 +  static const int ok = 200;
nit: might be nice to name these http status codes with a prefix like httpOK, httpPartialContent, etc.

WebCore/platform/network/BlobResourceHandle.cpp:74
 +  class BlobResourceSynchronousLoader : public ResourceHandleClient {
can this class be in an anonymous namespace?

WebCore/platform/network/BlobResourceHandle.cpp:108
 +      m_data.resize(static_cast&lt;size_t&gt;(response.expectedContentLength()));
do you need to worry if expected content length is outrageously large?  it is a 64-bit value, so this could be large.  is there a security concern?

WebCore/platform/network/BlobResourceHandle.cpp:216
 +  bool BlobResourceHandle::parseRangeHeader(const String&amp; range)
should this code be in HTTPParsers.{h,cpp}?

those are just nits, so R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268077</commentid>
    <comment_count>10</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-23 13:10:35 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/65827.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268080</commentid>
    <comment_count>11</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-23 13:11:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 64976 [details])
&gt; WebCore/page/SecurityOrigin.cpp:128
&gt;  +      if (url.protocolIs(&quot;blob&quot;))
&gt; I thought we were using the &quot;blobdata&quot; scheme.
The latest version of File API uses &quot;blob&quot; scheme.

&gt; 
&gt; WebCore/platform/network/BlobResourceHandle.cpp:53
&gt;  +  static const int ok = 200;
&gt; nit: might be nice to name these http status codes with a prefix like httpOK, httpPartialContent, etc.
Fixed.

&gt; 
&gt; WebCore/platform/network/BlobResourceHandle.cpp:74
&gt;  +  class BlobResourceSynchronousLoader : public ResourceHandleClient {
&gt; can this class be in an anonymous namespace?
Fixed.

&gt; 
&gt; WebCore/platform/network/BlobResourceHandle.cpp:108
&gt;  +      m_data.resize(static_cast&lt;size_t&gt;(response.expectedContentLength()));
&gt; do you need to worry if expected content length is outrageously large?  it is a 64-bit value, so this could be large.  is there a security concern?
Yes. I&apos;ve already handled it with a check right before this.

&gt; 
&gt; WebCore/platform/network/BlobResourceHandle.cpp:216
&gt;  +  bool BlobResourceHandle::parseRangeHeader(const String&amp; range)
&gt; should this code be in HTTPParsers.{h,cpp}?
Fixed.

&gt; 
&gt; those are just nits, so R=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64971</attachid>
            <date>2010-08-20 12:20:57 -0700</date>
            <delta_ts>2010-08-20 12:25:40 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43941</filename>
            <type>text/plain</type>
            <size>42315</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzNzhmNDUwLi43NWEwZjFkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTAtMDgtMjAgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNj
cmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5l
eHA6CisKKzIwMTAtMDgtMjAgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBk
ZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5leHA6CisKIDIwMTAtMDgtMTkgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAppbmRleCA1Y2ZhMWMyLi40MTMxZTIzIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCkBAIC01MzQsNiArNTM0LDcgQEAgX19aTkszSlNDOUhhc2hUYWJsZTExZGVsZXRl
VGFibGVFdgogX19aTkszV1RGMTJBdG9taWNTdHJpbmc1bG93ZXJFdgogX19aTkszV1RGNlN0cmlu
ZzExdG9JbnRTdHJpY3RFUGJpCiBfX1pOSzNXVEY2U3RyaW5nMTJ0b1VJbnRTdHJpY3RFUGJpCitf
X1pOSzNXVEY2U3RyaW5nMTN0b0ludDY0U3RyaWN0RVBiaQogX19aTkszV1RGNlN0cmluZzE0dGhy
ZWFkc2FmZUNvcHlFdgogX19aTkszV1RGNlN0cmluZzE1c3RyaXBXaGl0ZVNwYWNlRXYKIF9fWk5L
M1dURjZTdHJpbmcxNnJlbW92ZUNoYXJhY3RlcnNFUEZidEUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
QW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRleCBhYzEwNjBhLi5jMWIzNzEwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIvV2ViQ29yZS9BbmRyb2lkLm1rCkBA
IC01MzEsNiArNTMxLDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBc
CiAJcGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwIFwKIAlw
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcCBcCiAJcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcCBcCisJcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3Bw
IFwKIAlwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuY3BwIFwKIAlwbGF0Zm9ybS9uZXR3b3Jr
L0NyZWRlbnRpYWxTdG9yYWdlLmNwcCBcCiAJcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAg
XApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKaW5kZXggM2ZlNmMyYy4uOWE4NjRjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMzA3LDYgKzEzMDcsNyBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUJhc2UuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisgICAgcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9DcmVkZW50
aWFsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGViNzNjOWIuLmQ0YzM5MWEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDgg
QEAKIDIwMTAtMDgtMjAgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhbmRsZSBibG9iIHJlc291
cmNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5
NDEKKworICAgICAgICBUbyBwcm92aWRlIGxvd2VyIGxldmVsIGJsb2IgcmVvc3VyY2UgaGFuZGxp
bmcgZm9yIGFsbCBwb3NzaWJsZSBwb3J0cywKKyAgICAgICAgQmxvYlJlc291cmNlSGFuZGxlIGRl
cml2ZWQgZnJvbSBSZXNvdXJjZUhhbmRsZSBpcyBpbXBsZW1lbnRlZC4gSXQgcHJvdmlkZXMKKyAg
ICAgICAgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlc291cmNlIGxvYWRpbmcg
Zm9yIGJsb2IgVVJMLgorCisgICAgICAgIEJsb2JSZXNvdXJjZUhhbmRsZSBuZWVkcyB0byBjcmVh
dGUgYSBGaWxlU3RyZWFtUHJveHkgaW5zdGFuY2UgaW4gb3JkZXIgdG8KKyAgICAgICAgYXN5bmNo
cm9ub3VzIGZpbGUgc3RyZWFtIG9wZXJhdGlvbi4gVG8gYWNoaXZlIHRoaXMsIGEgaG9vayBjcmVh
dGVBc3luY0ZpbGVTdHJlYW0KKyAgICAgICAgaXMgYWRkZWQgdG8gUmVzb3VyY2VIYW5kbGVDbGll
bnQgaW50ZXJmYWNlLiBXaGVuIFJlc291cmNlTG9hZGVyIGltcGxlbWVudHMKKyAgICAgICAgdGhz
IGhvb2ssIGl0IGNyZWF0ZXMgYW5kIHJldHVybnMgRmlsZVN0cmVhbVByb3h5LgorCisgICAgICAg
IEJsb2JSZXNvdXJjZUhhbmRsZS4qIGlzIG5vdCBhZGRlZCB0byBjaHJvbWl1bSBwb3J0IHNpbmNl
IGl0IHdpbGwgaW1wbGVtZW50CisgICAgICAgIGl0cyBvd24gYmxvYiByZXNvdXJjZSBoYW5kbGlu
Zy4KKworICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3Ry
ZWFtKTogQ3JlYXRlIGFuZCByZXR1cm4gRmlsZVN0cmVhbVByb3h5LgorICAgICAgICAqIGxvYWRl
ci9SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOiBB
ZGQgdGhlIHN1cHBvcnQgdG8gZ2V0IGFuZCB2YWxpZGF0ZSB0aGUgb3JpZ2luIG9mIGJsb2IgVVJM
LgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3Ry
eUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyk6IEZpeCBhIGJ1ZyB0aGF0IHRoZSBsZW5ndGggaXMg
bm90IHN1YnRyYWN0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VI
YW5kbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmNwcDogSG9vayB1cCB3aXRoIGFzeW5jaHJvbm91cyBibG9iIHJlc291cmNlIGhhbmRsaW5n
LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlQ2xpZW50OjpjcmVhdGVBc3luY0ZpbGVTdHJlYW0pOiBBZGQgYSBob29rLgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOiBIb29r
IHVwIHdpdGggc3luY2hyb25vdXMgYmxvYiByZXNvdXJjZSBoYW5kbGluZy4KKworMjAxMC0wOC0y
MCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGF2aWQgTGV2aW4uCiAKICAgICAgICAgTW92ZSBGaWxlU3RyZWFtQ2xpZW50IHRvIHBsYXRmb3Jt
IGFuZCBhZGQgQXN5bmNGaWxlU3RyZWFtIGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDVhY2VmYzEuLjI2
OTdlYjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtMjA5OSw2ICsyMDk5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVz
b3VyY2VIYW5kbGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JTdG9yYWdlRGF0
YS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYTBlMzU1Ni4uMzliM2Q2MSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJv
CkBAIC05MzEsNiArOTMxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JEYXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCBc
CisgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwIFwKQEAg
LTE3MjksNiArMTczMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxv
YkRhdGEuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaCBcCiAgICAgcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsv
QmxvYlJlc291cmNlSGFuZGxlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlN0b3JhZ2VE
YXRhLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5oIFwKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCmluZGV4IDcxOTc5M2UuLmE3NjE5NTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtMjY4NzIsNiArMjY4NzIsMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+
DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcQmxv
YlJlc291cmNlSGFuZGxlLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0K
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXEJsb2JSZXNvdXJjZUhhbmRs
ZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcQmxvYlN0b3JhZ2VEYXRhLmgiDQogCQkJCQk+DQogCQkJ
CTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDNjOWRlYmMuLjJmZmI5YTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC03MDQsNiArNzA0LDggQEAKIAkJMkVBNzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8q
IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlw
dExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxv
Yi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFG
QUYwQjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgKi87IH07CiAJCTJFQUZBRjBGMTBFMkFG
MkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oICovOyB9OworCQky
RUI0QkNEMjEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQjRCQ0QwMTIxRjAzRTMw
MEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwICovOyB9OworCQkyRUI0QkNEMzEyMUYw
M0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUI0QkNEMTEyMUYwM0UzMDBFQzQ4ODUgLyogQmxv
YlJlc291cmNlSGFuZGxlLmggKi87IH07CiAJCTJFQ0Y3QURDMTAxNjJCMzgwMDQyN0RFNyAvKiBK
U0Vycm9yRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkVDRjdBREExMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5jcHAgKi87IH07
CiAJCTJFQ0Y3QUREMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURCMTAxNjJCMzgwMDQy
N0RFNyAvKiBKU0Vycm9yRXZlbnQuaCAqLzsgfTsKIAkJMkVDRjdBRTExMDE2MkI1ODAwNDI3REU3
IC8qIEVycm9yRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkVDRjdBREUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwICovOyB9
OwpAQCAtNjUxOSw2ICs2NTIxLDggQEAKIAkJMkVBRkFGMEIxMEUyQUYyRDAwN0VEM0Q2IC8qIEJs
b2IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvYi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQUZBRjBDMTBFMkFGMkQwMDdFRDNENiAvKiBC
bG9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVBRkFGMEQxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEJsb2IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRUI0QkNEMDEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhhbmRs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFQjRCQ0QxMTIxRjAzRTMwMEVD
NDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmxvYlJlc291cmNlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJFQ0Y3QURBMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFcnJvckV2ZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkVDRjdBREIxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Vycm9yRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVDRjdBREUxMDE2MkI1ODAwNDI3REU3IC8qIEVy
cm9yRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXJyb3JF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjQ1Miw2ICsxMjQ1Niw4
IEBACiAJCQkJMkVERUYxRUYxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeS5oICovLAog
CQkJCTJFREVGMUYwMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmNwcCAqLywK
IAkJCQkyRURFRjFGMTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovLAor
CQkJCTJFQjRCQ0QwMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwICov
LAorCQkJCTJFQjRCQ0QxMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCAq
LywKIAkJCQkyRURFRjFGMjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlN0b3JhZ2VEYXRhLmggKi8s
CiAJCQkJNTE0Qzc2NTgwQ0U5MjNBMTAwN0VGM0NEIC8qIENyZWRlbnRpYWwuY3BwICovLAogCQkJ
CTUxNEM3NjU5MENFOTIzQTEwMDdFRjNDRCAvKiBDcmVkZW50aWFsLmggKi8sCkBAIC0yMDMzMyw2
ICsyMDMzOSw3IEBACiAJCQkJNDZBMjY5MDYxMjFCNkI0MzAwQzQxRjNBIC8qIEZpbGVXcml0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJFRjFCRkY3MTIxQ0IwQkQwMEMyNzYyNyAvKiBBc3luY0Zp
bGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRjFCRkY5MTIxQ0IwQ0UwMEMyNzYyNyAv
KiBGaWxlU3RyZWFtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUI0QkNEMzEyMUYwM0Uz
MDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIyNzg0
LDYgKzIyNzkxLDcgQEAKIAkJCQkyRURFRjFGNjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRUYxQkZFQTEyMUM5RjQyMDBDMjc2Mjcg
LyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NkEyNjkwNTEyMUI2QjQzMDBD
NDFGM0EgLyogRmlsZVdyaXRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRUI0QkNEMjEyMUYw
M0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDU3ZTUzZWIuLmM3MzA4YjkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkFwcGxpY2F0
aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJG
aWxlU3RyZWFtUHJveHkuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtNTExLDQgKzUx
MiwxMiBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhh
bmRsZSosIENhY2hlU3RvcmFnZVBvbGljeSYgcG9saQogICAgICAgICBwb2xpY3kgPSBTdG9yYWdl
QWxsb3dlZEluTWVtb3J5T25seTsgICAgCiB9CiAKKyNpZiBFTkFCTEUoQkxPQikKK0FzeW5jRmls
ZVN0cmVhbSogUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZUFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFt
Q2xpZW50KiBjbGllbnQpCit7CisgICAgLy8gSXQgaXMgT0sgdG8gc2ltcGx5IHJldHVybiBhIHBv
aW50ZXIgc2luY2UgRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUgYWRkcyBhbiBleHRyYSByZWYuCisg
ICAgcmV0dXJuIEZpbGVTdHJlYW1Qcm94eTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY2xpZW50KS5nZXQoKTsKK30KKyNlbmRpZgorCiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oIGIvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuaAppbmRleCBjYmRkOGMyLi45NTEzZmRiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmgKQEAgLTExOCw2ICsxMTgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYg
VVNFKENGTkVUV09SSykKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9uc2Uo
UmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKTsKICNlbmRpZgorI2lmIEVO
QUJMRShCTE9CKQorICAgICAgICB2aXJ0dWFsIEFzeW5jRmlsZVN0cmVhbSogY3JlYXRlQXN5bmNG
aWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqKTsKKyNlbmRpZgogCiAgICAgICAgIFJlc291cmNl
SGFuZGxlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQogICAgICAg
ICBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3NlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3M7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHAgYi9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCmluZGV4IGY3NTk0
MDIuLjViNTE1MDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcApAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKKyNpbmNs
dWRlICJCbG9iVVJMLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMTIzLDYgKzEyNCwxMCBAQCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnN0IEtVUkwmIHVybCwg
U2FuZGJveEZsYWdzCiB7CiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKEtVUkwoKSwgc2FuZGJveEZsYWdzKSk7CisjaWYg
RU5BQkxFKEJMT0IpCisgICAgaWYgKHVybC5wcm90b2NvbElzKCJibG9iIikpCisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4oQmxvYlVSTDo6Z2V0T3JpZ2luKHVybCks
IHNhbmRib3hGbGFncykpOworI2VuZGlmCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWN1cml0
eU9yaWdpbih1cmwsIHNhbmRib3hGbGFncykpOwogfQogCkBAIC0yNzUsNiArMjgwLDE0IEBAIGJv
b2wgU2VjdXJpdHlPcmlnaW46OmlzQWNjZXNzV2hpdGVMaXN0ZWQoY29uc3QgU2VjdXJpdHlPcmln
aW4qIHRhcmdldE9yaWdpbikgY29uCiAgIAogYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBpZiAodXJsLnByb3RvY29sSXMoImJsb2IiKSAm
JiBkb2N1bWVudCkgeworICAgICAgICBTZWN1cml0eU9yaWdpbiogZG9jdW1lbnRPcmlnaW4gPSBk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiB0YXJnZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCk7CisgICAgICAgIHJl
dHVybiBkb2N1bWVudE9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQodGFyZ2V0T3JpZ2luLmdl
dCgpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmICghU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRy
ZWF0VVJMQXNMb2NhbCh1cmwuc3RyaW5nKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDAwYzBi
NzUuLmVlODcyZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAKQEAgLTExMyw2ICsxMTMsNyBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OmFwcGVu
ZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdlRGF0YSwgY29ucwogICAg
ICAgICAgICAgQVNTRVJUKGl0ZXItPnR5cGUgPT0gQmxvYkRhdGFJdGVtOjpGaWxlKTsKICAgICAg
ICAgICAgIGJsb2JTdG9yYWdlRGF0YS0+bV9kYXRhLmFwcGVuZEZpbGUoaXRlci0+cGF0aCwgaXRl
ci0+b2Zmc2V0ICsgb2Zmc2V0LCBuZXdMZW5ndGgsIGl0ZXItPmV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZSk7CiAgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoIC09IG5ld0xlbmd0aDsKICAgICAgICAg
b2Zmc2V0ID0gMDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVzb3VyY2VIYW5kbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4
MWZkY2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
c291cmNlSGFuZGxlLmNwcApAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiQmxvYlJlc291cmNlSGFuZGxlLmgiCisKKyNp
bmNsdWRlICJBc3luY0ZpbGVTdHJlYW0uaCIKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnlJbXBsLmgi
CisjaW5jbHVkZSAiRmlsZVN0cmVhbS5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBidWZmZXJTaXplID0gMTAyNDsKK3N0YXRpYyBjb25zdCBpbnQgbWF4VmVjdG9yTGVu
Z3RoID0gMHg3ZmZmZmZmZjsKK3N0YXRpYyBjb25zdCBsb25nIGxvbmcgcG9zaXRpb25Ob3RTcGVj
aWZpZWQgPSAtMTsKKworc3RhdGljIGNvbnN0IGludCBvayA9IDIwMDsKK3N0YXRpYyBjb25zdCBp
bnQgcGFydGlhbENvbnRlbnQgPSAyMDY7CitzdGF0aWMgY29uc3QgaW50IG5vdEFsbG93ZWQgPSA0
MDM7CitzdGF0aWMgY29uc3QgaW50IG5vdEZvdW5kID0gNDA0Oworc3RhdGljIGNvbnN0IGludCBy
ZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlID0gNDE2Oworc3RhdGljIGNvbnN0IGludCBpbnRl
cm5hbEVycm9yID0gNTAwOworc3RhdGljIGNvbnN0IGNoYXIqIG9rVGV4dCA9ICJPSyI7CitzdGF0
aWMgY29uc3QgY2hhciogcGFydGlhbENvbnRlbnRUZXh0ID0gIlBhcnRpYWwgQ29udGVudCI7Citz
dGF0aWMgY29uc3QgY2hhciogbm90QWxsb3dlZFRleHQgPSAiTm90IEFsbG93ZWQiOworc3RhdGlj
IGNvbnN0IGNoYXIqIG5vdEZvdW5kVGV4dCA9ICJOb3QgRm91bmQiOworc3RhdGljIGNvbnN0IGNo
YXIqIHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVUZXh0ID0gIlJlcXVlc3RlZCBSYW5nZSBO
b3QgU2F0aXNmaWFibGUiOworc3RhdGljIGNvbnN0IGNoYXIqIGludGVybmFsRXJyb3JUZXh0ID0g
IkludGVybmFsIFNlcnZlciBFcnJvciI7CisKK3N0YXRpYyBjb25zdCBpbnQgbm90Rm91bmRFcnJv
ciA9IDE7CitzdGF0aWMgY29uc3QgaW50IHNlY3VyaXR5RXJyb3IgPSAyOworc3RhdGljIGNvbnN0
IGludCByYW5nZUVycm9yID0gMzsKK3N0YXRpYyBjb25zdCBpbnQgbm90UmVhZGFibGVFcnJvciA9
IDQ7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEJsb2JSZXNvdXJjZVN5bmNocm9ub3Vz
TG9hZGVyCisKK2NsYXNzIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyIDogcHVibGljIFJl
c291cmNlSGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBCbG9iUmVzb3VyY2VTeW5jaHJvbm91
c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYp
OworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURh
dGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZl
ZCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSop
OworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOworCitwcml2YXRlOgorICAgIFJlc291cmNlRXJyb3ImIG1fZXJyb3I7CisgICAg
UmVzb3VyY2VSZXNwb25zZSYgbV9yZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hhcj4mIG1fZGF0YTsK
K307CisKK0Jsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpCbG9iUmVzb3VyY2VTeW5jaHJv
bm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKKyAgICA6IG1fZXJyb3IoZXJyb3IpCisgICAgLCBtX3Jl
c3BvbnNlKHJlc3BvbnNlKQorICAgICwgbV9kYXRhKGRhdGEpCit7Cit9CisKK3ZvaWQgQmxvYlJl
c291cmNlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICAvLyBX
ZSBjYW5ub3QgaGFuZGxlIHRoZSBzaXplIHRoYXQgaXMgbW9yZSB0aGFuIG1heGltdW0gaW50ZWdl
ci4KKyAgICBjb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZmZmZmZjsKKyAgICBpZiAo
cmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgPiBpbnRNYXhGb3JMZW5ndGgpIHsKKyAg
ICAgICAgbV9lcnJvciA9IFJlc291cmNlRXJyb3IoU3RyaW5nKCksIG5vdFJlYWRhYmxlRXJyb3Is
IHJlc3BvbnNlLnVybCgpLCBTdHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CisKKyAgICAvLyBSZWFkIGFsbCB0aGUgZGF0YS4KKyAg
ICBtX2RhdGEucmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4ocmVzcG9uc2UuZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCkpKTsKKyAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihoYW5k
bGUpLT5yZWFkU3luYyhtX2RhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS5zaXpl
KCkpKTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2
ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQpCit7Cit9CisKK3Zv
aWQgQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3Vy
Y2VIYW5kbGUqKQoreworfQorCit2b2lkIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyOjpk
aWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7Cisg
ICAgbV9lcnJvciA9IGVycm9yOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQmxvYlJlc291cmNlSGFu
ZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRh
PiBibG9iRGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9y
JiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkK
K3sKKyAgICBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlciBsb2FkZXIoZXJyb3IsIHJlc3Bv
bnNlLCBkYXRhKTsKKyAgICBSZWZQdHI8QmxvYlJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBCbG9i
UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShibG9iRGF0YSwgcmVxdWVzdCwgJmxvYWRlciwgZmFsc2Up
OworICAgIGhhbmRsZS0+c3RhcnQoKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8g
QmxvYlJlc291cmNlSGFuZGxlCisKK3N0YXRpYyB2b2lkIGRlbGF5ZWRTdGFydCh2b2lkKiBjb250
ZXh0KQoreworICAgIHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGNvbnRleHQpLT5z
dGFydCgpOworfQorCitCbG9iUmVzb3VyY2VIYW5kbGU6OkJsb2JSZXNvdXJjZUhhbmRsZShQYXNz
UmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBhc3luYykKKyAgICA6
IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZmFsc2UsIGZhbHNlKQorICAgICwgbV9i
bG9iRGF0YShibG9iRGF0YSkKKyAgICAsIG1fYXN5bmMoYXN5bmMpCisgICAgLCBtX2Vycm9yQ29k
ZSgwKQorICAgICwgbV9hYm9ydGVkKGZhbHNlKQorICAgICwgbV9yYW5nZU9mZnNldChwb3NpdGlv
bk5vdFNwZWNpZmllZCkKKyAgICAsIG1fcmFuZ2VFbmQocG9zaXRpb25Ob3RTcGVjaWZpZWQpCisg
ICAgLCBtX3JhbmdlU3VmZml4TGVuZ3RoKHBvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICwgbV90
b3RhbFJlbWFpbmluZ1NpemUoMCkKKyAgICAsIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSgwKQorICAg
ICwgbV9zaXplSXRlbUNvdW50KDApCisgICAgLCBtX3JlYWRJdGVtQ291bnQoMCkKKyAgICAsIG1f
ZmlsZU9wZW5lZChmYWxzZSkKK3sgICAgCisgICAgaWYgKG1fYXN5bmMpIHsKKyAgICAgICAgbV9h
c3luY1N0cmVhbSA9IGFkb3B0UmVmKGNsaWVudC0+Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKHRoaXMp
KTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChkZWxheWVkU3RhcnQsIHRoaXMpOworICAgIH0g
ZWxzZQorICAgICAgICBtX3N0cmVhbSA9IEZpbGVTdHJlYW06OmNyZWF0ZSgpOworfQorCitCbG9i
UmVzb3VyY2VIYW5kbGU6On5CbG9iUmVzb3VyY2VIYW5kbGUoKQoreworICAgIGlmIChtX2FzeW5j
KSB7CisgICAgICAgIGlmIChtX2FzeW5jU3RyZWFtKQorICAgICAgICAgICAgbV9hc3luY1N0cmVh
bS0+c3RvcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0cmVhbSkKKyAgICAgICAg
ICAgIG1fc3RyZWFtLT5zdG9wKCk7CisgICAgfQorfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRs
ZTo6Y2FuY2VsKCkKK3sKKyAgICBpZiAobV9hc3luYykgeworICAgICAgICBpZiAobV9hc3luY1N0
cmVhbSkgeworICAgICAgICAgICAgbV9hc3luY1N0cmVhbS0+c3RvcCgpOworICAgICAgICAgICAg
bV9hc3luY1N0cmVhbSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2Fib3J0ZWQgPSB0
cnVlOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQoreworICAgIC8vIERv
IG5vdCBjb250aW51ZSBpZiB0aGUgcmVxdWVzdCBpcyBhYm9ydGVkIG9yIGFuIGVycm9yIG9jY3Vy
cy4KKyAgICBpZiAobV9hYm9ydGVkIHx8IG1fZXJyb3JDb2RlKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBJZiB0aGUgYmxvYiBkYXRhIGlzIG5vdCBmb3VuZCwgZmFpbCBub3cuCisgICAgaWYg
KCFtX2Jsb2JEYXRhKSB7CisgICAgICAgIG1fZXJyb3JDb2RlID0gbm90Rm91bmRFcnJvcjsKKyAg
ICAgICAgbm90aWZ5UmVzcG9uc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFBhcnNlIHRoZSAiUmFuZ2UiIGhlYWRlciB3ZSBjYXJlIGFib3V0LgorICAgIFN0cmluZyByYW5n
ZSA9IGZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZCgiUmFuZ2UiKTsKKyAgICBpZiAoIXJh
bmdlLmlzRW1wdHkoKSAmJiAhcGFyc2VSYW5nZUhlYWRlcihyYW5nZSkpIHsKKyAgICAgICAgbV9l
cnJvckNvZGUgPSByYW5nZUVycm9yOworICAgICAgICBub3RpZnlSZXNwb25zZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fYXN5bmMpIHsKKyAgICAgICAgZ2V0U2l6ZUZv
ck5leHQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpICYmICFtX2Fib3J0ZWQgJiYgIW1fZXJyb3JDb2RlOyAr
K2kpCisgICAgICAgICAgICBnZXRTaXplRm9yTmV4dCgpOworICAgICAgICBub3RpZnlSZXNwb25z
ZSgpOworICAgIH0KK30KKworYm9vbCBCbG9iUmVzb3VyY2VIYW5kbGU6OnBhcnNlUmFuZ2VIZWFk
ZXIoY29uc3QgU3RyaW5nJiByYW5nZSkKK3sKKyAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhl
ICJSYW5nZSIgaGVhZGVyLgorICAgIC8vIFRoZSBmb3JtYXQgb2YgIlJhbmdlIiBoZWFkZXIgaXMg
ZGVmaW5lZCBpbiBSRkMgMjYxNiBTZWN0aW9uIDE0LjM1LjEuCisgICAgLy8gaHR0cDovL3d3dy53
My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxNC5odG1sI3NlYzE0LjM1LjEKKyAg
ICAvLyBXZSBkb24ndCBzdXBwb3J0IG11bHRpcGxlIHJhbmdlIHJlcXVlc3RzLgorCisgICAgLy8g
VGhlICJieXRlcyIgdW5pdCBpZGVudGlmaWVyIHNob3VsZCBiZSBwcmVzZW50LgorICAgIHN0YXRp
YyBjb25zdCBjaGFyIGJ5dGVzU3RhcnRbXSA9ICJieXRlcz0iOyAKKyAgICBpZiAoIXJhbmdlLnN0
YXJ0c1dpdGgoYnl0ZXNTdGFydCwgZmFsc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
U3RyaW5nIGJ5dGVSYW5nZSA9IHJhbmdlLnN1YnN0cmluZyhzaXplb2YoYnl0ZXNTdGFydCkgLSAx
KTsKKworICAgIC8vIFRoZSAnLScgY2hhcmFjdGVyIG5lZWRzIHRvIGJlIHByZXNlbnQuCisgICAg
aW50IGluZGV4ID0gYnl0ZVJhbmdlLmZpbmQoJy0nKTsKKyAgICBpZiAoaW5kZXggPT0gLTEpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHRoZSAnLScgY2hhcmFjdGVyIGlzIGF0
IHRoZSBiZWdpbm5pbmcsIHRoZSBzdWZmaXggbGVuZ3RoLCB3aGljaCBzcGVjaWZpZXMgdGhlIGxh
c3QgTiBieXRlcywgaXMgcHJvdmlkZWQuCisgICAgLy8gRXhhbXBsZToKKyAgICAvLyAgICAgLTUw
MAorICAgIGlmIChpbmRleCA9PSAwKSB7CisgICAgICAgIFN0cmluZyBzdWZmaXhMZW5ndGhTdHJp
bmcgPSBieXRlUmFuZ2Uuc3Vic3RyaW5nKGluZGV4ICsgMSkuc3RyaXBXaGl0ZVNwYWNlKCk7Cisg
ICAgICAgIGJvb2wgb2s7CisgICAgICAgIGxvbmcgbG9uZyB2YWx1ZSA9IHN1ZmZpeExlbmd0aFN0
cmluZy50b0ludDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgIG1f
cmFuZ2VTdWZmaXhMZW5ndGggPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgZmlyc3QtYnl0ZS1wb3NpdGlvbiBhbmQgdGhlIGxhc3Qt
Ynl0ZS1wb3NpdGlvbiBhcmUgcHJvdmllZC4KKyAgICAvLyBFeGFtcGxlczoKKyAgICAvLyAgICAg
MC00OTkKKyAgICAvLyAgICAgNTAwLQorICAgIFN0cmluZyBmaXJzdEJ5dGVQb3NTdHIgPSBieXRl
UmFuZ2UubGVmdChpbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgYm9vbCBvazsKKyAgICBs
b25nIGxvbmcgZmlyc3RCeXRlUG9zID0gZmlyc3RCeXRlUG9zU3RyLnRvSW50NjRTdHJpY3QoJm9r
KTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgbGFz
dEJ5dGVQb3NTdHIgPSBieXRlUmFuZ2Uuc3Vic3RyaW5nKGluZGV4ICsgMSkuc3RyaXBXaGl0ZVNw
YWNlKCk7CisgICAgbG9uZyBsb25nIGxhc3RCeXRlUG9zID0gcG9zaXRpb25Ob3RTcGVjaWZpZWQ7
CisgICAgaWYgKCFsYXN0Qnl0ZVBvc1N0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgbGFzdEJ5dGVQ
b3MgPSBsYXN0Qnl0ZVBvc1N0ci50b0ludDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmICghb2sp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZpcnN0Qnl0ZVBv
cyA8IDAgfHwgIShsYXN0Qnl0ZVBvcyA9PSBwb3NpdGlvbk5vdFNwZWNpZmllZCB8fCBsYXN0Qnl0
ZVBvcyA+PSBmaXJzdEJ5dGVQb3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3Jh
bmdlT2Zmc2V0ID0gZmlyc3RCeXRlUG9zOworICAgIG1fcmFuZ2VFbmQgPSBsYXN0Qnl0ZVBvczsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmdldFNpemVG
b3JOZXh0KCkKK3sKKyAgICAvLyBEbyB3ZSBmaW5pc2ggdmFsaWRhdGluZyBhbmQgY291bnRpbmcg
c2l6ZSBmb3IgYWxsIGl0ZW1zPworICAgIGlmIChtX3NpemVJdGVtQ291bnQgPj0gbV9ibG9iRGF0
YS0+aXRlbXMoKS5zaXplKCkpIHsKKyAgICAgICAgc2VlaygpOworCisgICAgICAgIC8vIFN0YXJ0
IHJlYWRpbmcgaWYgaW4gYXN5bmNocm9ub3VzIG1vZGUuCisgICAgICAgIGlmIChtX2FzeW5jKSB7
CisgICAgICAgICAgICBub3RpZnlSZXNwb25zZSgpOworICAgICAgICAgICAgbV9idWZmZXIucmVz
aXplKGJ1ZmZlclNpemUpOworICAgICAgICAgICAgcmVhZEFzeW5jKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1f
YmxvYkRhdGEtPml0ZW1zKCkuYXQobV9zaXplSXRlbUNvdW50KTsKKyAgICBzd2l0Y2ggKGl0ZW0u
dHlwZSkgeworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgorICAgICAgICBkaWRHZXRTaXpl
KGl0ZW0ubGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZp
bGU6CisgICAgICAgIGlmIChtX2FzeW5jKQorICAgICAgICAgICAgbV9hc3luY1N0cmVhbS0+Z2V0
U2l6ZShpdGVtLnBhdGgsIGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZGlkR2V0U2l6ZShtX3N0cmVhbS0+Z2V0U2l6ZShpdGVtLnBhdGgs
IGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBC
bG9iUmVzb3VyY2VIYW5kbGU6OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUpCit7CisgICAgLy8g
RG8gbm90IGNvbnRpbnVlIGlmIHRoZSByZXF1ZXN0IGlzIGFib3J0ZWQgb3IgYW4gZXJyb3Igb2Nj
dXJzLgorICAgIGlmIChtX2Fib3J0ZWQgfHwgbV9lcnJvckNvZGUpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIElmIHRoZSBzaXplIGlzIC0xLCBpdCBtZWFucyB0aGUgZmlsZSBoYXMgYmVlbiBt
b3ZlZCBvciBjaGFuZ2VkLiBGYWlsIG5vdy4KKyAgICBpZiAoc2l6ZSA9PSAtMSkgeworICAgICAg
ICBtX2Vycm9yQ29kZSA9IG5vdEZvdW5kRXJyb3I7CisgICAgICAgIG5vdGlmeVJlc3BvbnNlKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgc2l6ZSBwYXNzZWQgYmFjayBp
cyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgZmlsZS4gSWYgdGhlIHVuZGVybHlpbmcgaXRlbSBpcyBh
IHNsaWNlZCBmaWxlLCB3ZSBuZWVkIHRvIHVzZSB0aGUgc2xpY2UgbGVuZ3RoLgorICAgIGNvbnN0
IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQobV9zaXplSXRlbUNv
dW50KTsKKyAgICBpZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6RmlsZSAmJiBpdGVtLmxl
bmd0aCAhPSBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKQorICAgICAgICBzaXplID0gaXRlbS5s
ZW5ndGg7CisKKyAgICAvLyBDYWNoZSB0aGUgc2l6ZS4KKyAgICBtX2l0ZW1MZW5ndGhMaXN0LmFw
cGVuZChzaXplKTsKKworICAgIC8vIENvdW50IHRoZSBzaXplLgorICAgIG1fdG90YWxSZW1haW5p
bmdTaXplICs9IHNpemU7CisgICAgbV9zaXplSXRlbUNvdW50Kys7CisKKyAgICAvLyBDb250aW51
ZSB3aXRoIHRoZSBuZXh0IGl0ZW0uCisgICAgZ2V0U2l6ZUZvck5leHQoKTsKK30KKwordm9pZCBC
bG9iUmVzb3VyY2VIYW5kbGU6OnNlZWsoKQoreworICAgIC8vIENvbnZlcnQgZnJvbSB0aGUgc3Vm
Zml4IGxlbmd0aCB0byB0aGUgcmFuZ2UuCisgICAgaWYgKG1fcmFuZ2VTdWZmaXhMZW5ndGggIT0g
cG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbV9yYW5nZU9mZnNldCA9IG1fdG90YWxS
ZW1haW5pbmdTaXplIC0gbV9yYW5nZVN1ZmZpeExlbmd0aDsKKyAgICAgICAgbV9yYW5nZUVuZCA9
IG1fcmFuZ2VPZmZzZXQgKyBtX3JhbmdlU3VmZml4TGVuZ3RoIC0gMTsKKyAgICB9CisKKyAgICAv
LyBCYWlsIG91dCBpZiB0aGUgcmFuZ2UgaXMgbm90IHByb3ZpZGVkLgorICAgIGlmIChtX3Jhbmdl
T2Zmc2V0ID09IHBvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBTa2lwIHRoZSBpbml0aWFsIGl0ZW1zIHRoYXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2UuCisgICAg
bG9uZyBsb25nIG9mZnNldCA9IG1fcmFuZ2VPZmZzZXQ7CisgICAgZm9yIChtX3JlYWRJdGVtQ291
bnQgPSAwOyBtX3JhbmdlT2Zmc2V0ID4gMCAmJiBtX3JlYWRJdGVtQ291bnQgPj0gbV9ibG9iRGF0
YS0+aXRlbXMoKS5zaXplKCkgJiYgb2Zmc2V0ID49IG1faXRlbUxlbmd0aExpc3RbbV9yZWFkSXRl
bUNvdW50XTsgKyttX3JlYWRJdGVtQ291bnQpCisgICAgICAgIG9mZnNldCAtPSBtX2l0ZW1MZW5n
dGhMaXN0W21fcmVhZEl0ZW1Db3VudF07CisKKyAgICAvLyBTZXQgdGhlIG9mZnNldCB0aGF0IG5l
ZWQgdG8ganVtcCB0byBmb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHJhbmdlLgorICAgIG1fY3Vy
cmVudEl0ZW1SZWFkU2l6ZSA9IG9mZnNldDsKKworICAgIC8vIEFkanVzdCB0aGUgdG90YWwgcmVt
YWluaW5nIHNpemUgaW4gb3JkZXIgbm90IHRvIGdvIGJleW9uZCB0aGUgcmFuZ2UuCisgICAgaWYg
KG1fcmFuZ2VFbmQgIT0gcG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbG9uZyBsb25n
IHJhbmdlU2l6ZSA9IG1fcmFuZ2VFbmQgLSBtX3JhbmdlT2Zmc2V0ICsgMTsKKyAgICAgICAgaWYg
KG1fdG90YWxSZW1haW5pbmdTaXplID4gcmFuZ2VTaXplKQorICAgICAgICAgICAgbV90b3RhbFJl
bWFpbmluZ1NpemUgPSByYW5nZVNpemU7CisgICAgfSBlbHNlCisgICAgICAgIG1fdG90YWxSZW1h
aW5pbmdTaXplIC09IG1fcmFuZ2VPZmZzZXQ7Cit9CisKK2ludCBCbG9iUmVzb3VyY2VIYW5kbGU6
OnJlYWRTeW5jKGNoYXIqIGJ1ZiwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoIW1fYXN5bmMp
OworCisgICAgaW50IG9mZnNldCA9IDA7CisgICAgaW50IHJlbWFpbmluZyA9IGxlbmd0aDsKKyAg
ICB3aGlsZSAocmVtYWluaW5nKSB7CisgICAgICAgIC8vIERvIG5vdCBjb250aW51ZSBpZiB0aGUg
cmVxdWVzdCBpcyBhYm9ydGVkIG9yIGFuIGVycm9yIG9jY3Vycy4KKyAgICAgICAgaWYgKG1fYWJv
cnRlZCB8fCBtX2Vycm9yQ29kZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vIG1vcmUgcmVtYWluaW5nIGRhdGEgdG8gcmVhZCwgd2UgYXJlIGRvbmUuCisg
ICAgICAgIGlmICghbV90b3RhbFJlbWFpbmluZ1NpemUgfHwgbV9yZWFkSXRlbUNvdW50ID49IG1f
YmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgICAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX2Jsb2JEYXRhLT5pdGVtcygpLmF0
KG1fcmVhZEl0ZW1Db3VudCk7CisgICAgICAgIGludCBieXRlc1JlYWQgPSAwOworICAgICAgICBp
ZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6RGF0YSkKKyAgICAgICAgICAgIGJ5dGVzUmVh
ZCA9IHJlYWREYXRhU3luYyhpdGVtLCBidWYgKyBvZmZzZXQsIHJlbWFpbmluZyk7CisgICAgICAg
IGVsc2UgaWYgKGl0ZW0udHlwZSA9PSBCbG9iRGF0YUl0ZW06OkZpbGUpCisgICAgICAgICAgICBi
eXRlc1JlYWQgPSByZWFkRmlsZVN5bmMoaXRlbSwgYnVmICsgb2Zmc2V0LCByZW1haW5pbmcpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAg
ICBpZiAoYnl0ZXNSZWFkID4gMCkgeworICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzUmVhZDsK
KyAgICAgICAgICAgIHJlbWFpbmluZyAtPSBieXRlc1JlYWQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpbnQgcmVzdWx0OworICAgIGlmIChtX2Fib3J0ZWQgfHwgbV9lcnJvckNvZGUpCisgICAg
ICAgIHJlc3VsdCA9IC0xOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gbGVuZ3RoIC0gcmVt
YWluaW5nOworCisgICAgbm90aWZ5UmVjZWl2ZURhdGEoYnVmLCByZXN1bHQpOworICAgIGlmIChy
ZXN1bHQgPT0gMCkKKyAgICAgICAgbm90aWZ5RmluaXNoKCk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitpbnQgQmxvYlJlc291cmNlSGFuZGxlOjpyZWFkRGF0YVN5bmMoY29uc3QgQmxvYkRh
dGFJdGVtJiBpdGVtLCBjaGFyKiBidWYsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKCFtX2Fz
eW5jKTsKKworICAgIGxvbmcgcmVtYWluaW5nID0gaXRlbS5sZW5ndGggLSBtX2N1cnJlbnRJdGVt
UmVhZFNpemU7CisgICAgaW50IGJ5dGVzVG9SZWFkID0gKGxlbmd0aCA+IHJlbWFpbmluZykgPyBz
dGF0aWNfY2FzdDxpbnQ+KHJlbWFpbmluZykgOiBsZW5ndGg7CisgICAgaWYgKGJ5dGVzVG9SZWFk
ID4gbV90b3RhbFJlbWFpbmluZ1NpemUpCisgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nh
c3Q8aW50PihtX3RvdGFsUmVtYWluaW5nU2l6ZSk7CisgICAgbWVtY3B5KGJ1ZiwgaXRlbS5kYXRh
LmRhdGEoKSArIGl0ZW0ub2Zmc2V0ICsgbV9jdXJyZW50SXRlbVJlYWRTaXplLCBieXRlc1RvUmVh
ZCk7CisgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgLT0gYnl0ZXNUb1JlYWQ7CisKKyAgICBtX2N1
cnJlbnRJdGVtUmVhZFNpemUgKz0gYnl0ZXNUb1JlYWQ7CisgICAgaWYgKG1fY3VycmVudEl0ZW1S
ZWFkU2l6ZSA9PSBpdGVtLmxlbmd0aCkgeworICAgICAgICBtX3JlYWRJdGVtQ291bnQrKzsKKyAg
ICAgICAgbV9jdXJyZW50SXRlbVJlYWRTaXplID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYnl0
ZXNUb1JlYWQ7Cit9CisKK2ludCBCbG9iUmVzb3VyY2VIYW5kbGU6OnJlYWRGaWxlU3luYyhjb25z
dCBCbG9iRGF0YUl0ZW0mIGl0ZW0sIGNoYXIqIGJ1ZiwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NF
UlQoIW1fYXN5bmMpOworCisgICAgaWYgKCFtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgbG9uZyBs
b25nIGJ5dGVzVG9SZWFkID0gbV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRdIC0gbV9j
dXJyZW50SXRlbVJlYWRTaXplOworICAgICAgICBpZiAoYnl0ZXNUb1JlYWQgPiBtX3RvdGFsUmVt
YWluaW5nU2l6ZSkKKyAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gbV90b3RhbFJlbWFpbmluZ1Np
emU7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT5vcGVuRm9yUmVhZChpdGVtLnBh
dGgsIGl0ZW0ub2Zmc2V0ICsgbV9jdXJyZW50SXRlbVJlYWRTaXplLCBieXRlc1RvUmVhZCk7Cisg
ICAgICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IDA7CisgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgbV9lcnJvckNvZGUgPSBub3RSZWFkYWJsZUVycm9yOworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBtX2ZpbGVPcGVuZWQgPSB0cnVlOwor
ICAgIH0KKworICAgIGludCBieXRlc1JlYWQgPSBtX3N0cmVhbS0+cmVhZChidWYsIGxlbmd0aCk7
CisgICAgaWYgKGJ5dGVzUmVhZCA8IDApIHsKKyAgICAgICAgbV9lcnJvckNvZGUgPSBub3RSZWFk
YWJsZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKGJ5dGVzUmVhZCA9
PSAwKSB7CisgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworICAgICAgICBtX2ZpbGVPcGVuZWQg
PSBmYWxzZTsKKyAgICAgICAgbV9yZWFkSXRlbUNvdW50Kys7CisgICAgfSBlbHNlCisgICAgICAg
IG1fdG90YWxSZW1haW5pbmdTaXplIC09IGJ5dGVzUmVhZDsKKworICAgIHJldHVybiBieXRlc1Jl
YWQ7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpyZWFkQXN5bmMoKQoreworICAgIEFT
U0VSVChtX2FzeW5jKTsKKworICAgIC8vIERvIG5vdCBjb250aW51ZSBpZiB0aGUgcmVxdWVzdCBp
cyBhYm9ydGVkIG9yIGFuIGVycm9yIG9jY3Vycy4KKyAgICBpZiAobV9hYm9ydGVkIHx8IG1fZXJy
b3JDb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBtb3JlIHJl
bWFpbmluZyBkYXRhIHRvIHJlYWQsIHdlIGFyZSBkb25lLgorICAgIGlmICghbV90b3RhbFJlbWFp
bmluZ1NpemUgfHwgbV9yZWFkSXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgp
KSB7CisgICAgICAgIG5vdGlmeUZpbmlzaCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9ibG9iRGF0YS0+aXRlbXMoKS5hdChtX3Jl
YWRJdGVtQ291bnQpOworICAgIGlmIChpdGVtLnR5cGUgPT0gQmxvYkRhdGFJdGVtOjpEYXRhKQor
ICAgICAgICByZWFkRGF0YUFzeW5jKGl0ZW0pOworICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PSBC
bG9iRGF0YUl0ZW06OkZpbGUpCisgICAgICAgIHJlYWRGaWxlQXN5bmMoaXRlbSk7CisgICAgZWxz
ZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VI
YW5kbGU6OnJlYWREYXRhQXN5bmMoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtKQoreworICAgIEFT
U0VSVChtX2FzeW5jKTsKKworICAgIGludCBieXRlc1RvUmVhZCA9IGl0ZW0ubGVuZ3RoIC0gbV9j
dXJyZW50SXRlbVJlYWRTaXplOworICAgIGlmIChieXRlc1RvUmVhZCA+IG1fdG90YWxSZW1haW5p
bmdTaXplKQorICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0PGludD4obV90b3RhbFJl
bWFpbmluZ1NpemUpOworICAgIGNvbnN1bWVEYXRhKGl0ZW0uZGF0YS5kYXRhKCkgKyBpdGVtLm9m
ZnNldCArIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSwgYnl0ZXNUb1JlYWQpOworICAgIG1fY3VycmVu
dEl0ZW1SZWFkU2l6ZSA9IDA7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpyZWFkRmls
ZUFzeW5jKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSkKK3sKKyAgICBBU1NFUlQobV9hc3luYyk7
CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAgIG1fYXN5bmNTdHJlYW0tPnJlYWQo
bV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbG9uZyBsb25nIGJ5dGVzVG9SZWFkID0gbV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJ
dGVtQ291bnRdIC0gbV9jdXJyZW50SXRlbVJlYWRTaXplOworICAgIGlmIChieXRlc1RvUmVhZCA+
IG1fdG90YWxSZW1haW5pbmdTaXplKQorICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0
PGludD4obV90b3RhbFJlbWFpbmluZ1NpemUpOworICAgIG1fYXN5bmNTdHJlYW0tPm9wZW5Gb3JS
ZWFkKGl0ZW0ucGF0aCwgaXRlbS5vZmZzZXQgKyBtX2N1cnJlbnRJdGVtUmVhZFNpemUsIGJ5dGVz
VG9SZWFkKTsKKyAgICBtX2ZpbGVPcGVuZWQgPSB0cnVlOworICAgIG1fY3VycmVudEl0ZW1SZWFk
U2l6ZSA9IDA7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpkaWRPcGVuKGJvb2wgc3Vj
Y2VzcykKK3sKKyAgICBBU1NFUlQobV9hc3luYyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgZmFpbGVkKG5vdFJlYWRhYmxlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gQ29udGludWUgdGhlIHJlYWRpbmcuCisgICAgcmVhZEFzeW5jKCk7Cit9CisKK3Zv
aWQgQmxvYlJlc291cmNlSGFuZGxlOjpkaWRSZWFkKGludCBieXRlc1JlYWQpCit7CisgICAgY29u
c3VtZURhdGEobV9idWZmZXIuZGF0YSgpLCBieXRlc1JlYWQpOworfQorCit2b2lkIEJsb2JSZXNv
dXJjZUhhbmRsZTo6Y29uc3VtZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCkK
K3sKKyAgICBBU1NFUlQobV9hc3luYyk7CisKKyAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSAtPSBi
eXRlc1JlYWQ7CisKKyAgICAvLyBOb3RpZnkgdGhlIGNsaWVudC4KKyAgICBpZiAoYnl0ZXNSZWFk
KQorICAgICAgICBub3RpZnlSZWNlaXZlRGF0YShkYXRhLCBieXRlc1JlYWQpOworCisgICAgaWYg
KG1fZmlsZU9wZW5lZCkgeworICAgICAgICAvLyBXaGVuIHRoZSBjdXJyZW50IGl0ZW0gaXMgYSBm
aWxlIGl0ZW0sIHRoZSByZWFkaW5nIGlzIGNvbXBsZXRlZCBvbmx5IGlmIGJ5dGVzUmVhZCBpcyAw
LgorICAgICAgICBpZiAoIWJ5dGVzUmVhZCkgeworICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGZp
bGUuCisgICAgICAgICAgICBtX2ZpbGVPcGVuZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fYXN5
bmNTdHJlYW0tPmNsb3NlKCk7CisKKyAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgaXRl
bS4KKyAgICAgICAgICAgIG1fcmVhZEl0ZW1Db3VudCsrOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSByZWFkIHRoZSBjdXJyZW50IHRleHQgaXRlbSBh
cyBhIHdob2xlIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisgICAgICAgIG1fcmVhZEl0ZW1D
b3VudCsrOworICAgIH0KKworICAgIC8vIENvbnRpbnVlIHRoZSByZWFkaW5nLgorICAgIHJlYWRB
c3luYygpOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6ZmFpbGVkKGludCBlcnJvckNv
ZGUpCit7CisgICAgQVNTRVJUKG1fYXN5bmMpOworCisgICAgLy8gTm90aWZ5IHRoZSBjbGllbnQu
CisgICAgbm90aWZ5RmFpbChlcnJvckNvZGUpOworCisgICAgLy8gQ2xvc2UgdGhlIGZpbGUgaWYg
bmVlZGVkLgorICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgbV9maWxlT3BlbmVkID0g
ZmFsc2U7CisgICAgICAgIG1fYXN5bmNTdHJlYW0tPmNsb3NlKCk7CisgICAgfQorfQorCit2b2lk
IEJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5UmVzcG9uc2UoKQoreworICAgIGlmICghY2xpZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Vycm9yQ29kZSkgeworICAgICAgICBu
b3RpZnlSZXNwb25zZU9uRXJyb3IoKTsKKyAgICAgICAgbm90aWZ5RmluaXNoKCk7CisgICAgfSBl
bHNlCisgICAgICAgIG5vdGlmeVJlc3BvbnNlT25TdWNjZXNzKCk7Cit9CisKK3ZvaWQgQmxvYlJl
c291cmNlSGFuZGxlOjpub3RpZnlSZXNwb25zZU9uU3VjY2VzcygpCit7CisgICAgYm9vbCBpc1Jh
bmdlUmVxdWVzdCA9IG1fcmFuZ2VPZmZzZXQgIT0gcG9zaXRpb25Ob3RTcGVjaWZpZWQ7CisgICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShmaXJzdFJlcXVlc3QoKS51cmwoKSwgbV9ibG9iRGF0
YS0+Y29udGVudFR5cGUoKSwgbV90b3RhbFJlbWFpbmluZ1NpemUsIFN0cmluZygpLCBTdHJpbmco
KSk7CisgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKG1fdG90YWxSZW1haW5p
bmdTaXplKTsKKyAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShpc1JhbmdlUmVxdWVzdCA/
IHBhcnRpYWxDb250ZW50IDogb2spOworICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGlz
UmFuZ2VSZXF1ZXN0ID8gcGFydGlhbENvbnRlbnRUZXh0IDogb2tUZXh0KTsKKyAgICBpZiAoIW1f
YmxvYkRhdGEtPmNvbnRlbnREaXNwb3NpdGlvbigpLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzcG9u
c2Uuc2V0SFRUUEhlYWRlckZpZWxkKCJDb250ZW50LURpc3Bvc2l0aW9uIiwgbV9ibG9iRGF0YS0+
Y29udGVudERpc3Bvc2l0aW9uKCkpOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2Uo
dGhpcywgcmVzcG9uc2UpOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5UmVz
cG9uc2VPbkVycm9yKCkKK3sKKyAgICBBU1NFUlQobV9lcnJvckNvZGUpOworCisgICAgUmVzb3Vy
Y2VSZXNwb25zZSByZXNwb25zZShmaXJzdFJlcXVlc3QoKS51cmwoKSwgU3RyaW5nKCksIDAsIFN0
cmluZygpLCBTdHJpbmcoKSk7CisgICAgc3dpdGNoIChtX2Vycm9yQ29kZSkgeworICAgIGNhc2Ug
cmFuZ2VFcnJvcjoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUocmVxdWVzdGVk
UmFuZ2VOb3RTYXRpc2ZpYWJsZSk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0
KHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVUZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBub3RGb3VuZEVycm9yOgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShu
b3RGb3VuZCk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KG5vdEZvdW5kVGV4
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc2VjdXJpdHlFcnJvcjoKKyAgICAgICAgcmVz
cG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUobm90QWxsb3dlZCk7CisgICAgICAgIHJlc3BvbnNlLnNl
dEhUVFBTdGF0dXNUZXh0KG5vdEFsbG93ZWRUZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaW50ZXJuYWxFcnJvcik7
CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGludGVybmFsRXJyb3JUZXh0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2Uo
dGhpcywgcmVzcG9uc2UpOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5UmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBpZiAoY2xp
ZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBkYXRhLCBieXRl
c1JlYWQsIGJ5dGVzUmVhZCk7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpub3RpZnlG
YWlsKGludCBlcnJvckNvZGUpCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQo
KS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yKFN0cmluZygpLCBlcnJvckNvZGUsIGZpcnN0
UmVxdWVzdCgpLnVybCgpLCBTdHJpbmcoKSkpOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRs
ZTo6bm90aWZ5RmluaXNoKCkKK3sKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgp
LT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5
YWExYTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
c291cmNlSGFuZGxlLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JSZXNvdXJjZUhhbmRs
ZV9oCisjZGVmaW5lIEJsb2JSZXNvdXJjZUhhbmRsZV9oCisKKyNpZiBFTkFCTEUoQkxPQikKKwor
I2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQXN5bmNGaWxlU3RyZWFtOworY2xhc3MgQmxvYkRhdGFJdGVtOworY2xhc3MgQmxvYlN0b3Jh
Z2VEYXRhOworY2xhc3MgRmlsZVN0cmVhbTsKK2NsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50Owor
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworCitjbGFzcyBCbG9iUmVzb3VyY2VIYW5kbGUgOiBwdWJs
aWMgRmlsZVN0cmVhbUNsaWVudCwgcHVibGljIFJlc291cmNlSGFuZGxlICB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYlJlc291cmNlSGFuZGxlPiBjcmVhdGUoUGFzc1JlZlB0
cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgYXN5bmMgPSB0cnVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iUmVzb3VyY2VIYW5kbGUoYmxvYkRh
dGEsIHJlcXVlc3QsIGNsaWVudCwgYXN5bmMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9i
RGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJv
ciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisKKyAg
ICAvLyBGaWxlU3RyZWFtQ2xpZW50IG1ldGhvZHMuCisgICAgdmlydHVhbCB2b2lkIGRpZEdldFNp
emUobG9uZyBsb25nKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkT3Blbihib29sKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVhZChpbnQpOworCisgICAgLy8gUmVzb3VyY2VIYW5kbGUgbWV0aG9kcy4K
KyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CisKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAgaW50
IHJlYWRTeW5jKGNoYXIqLCBpbnQpOworCitwcml2YXRlOgorICAgIEJsb2JSZXNvdXJjZUhhbmRs
ZShQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4sIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJl
c291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBhc3luYyk7CisgICAgdmlydHVhbCB+QmxvYlJlc291
cmNlSGFuZGxlKCk7CisKKyAgICBib29sIHBhcnNlUmFuZ2VIZWFkZXIoY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBnZXRTaXplRm9yTmV4dCgpOworICAgIHZvaWQgc2VlaygpOworICAgIHZvaWQg
Y29uc3VtZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCk7CisgICAgdm9pZCBm
YWlsZWQoaW50IGVycm9yQ29kZSk7CisKKyAgICB2b2lkIHJlYWRBc3luYygpOworICAgIHZvaWQg
cmVhZERhdGFBc3luYyhjb25zdCBCbG9iRGF0YUl0ZW0mKTsKKyAgICB2b2lkIHJlYWRGaWxlQXN5
bmMoY29uc3QgQmxvYkRhdGFJdGVtJik7CisKKyAgICBpbnQgcmVhZERhdGFTeW5jKGNvbnN0IEJs
b2JEYXRhSXRlbSYsIGNoYXIqLCBpbnQpOworICAgIGludCByZWFkRmlsZVN5bmMoY29uc3QgQmxv
YkRhdGFJdGVtJiwgY2hhciosIGludCk7CisKKyAgICB2b2lkIG5vdGlmeVJlc3BvbnNlKCk7Cisg
ICAgdm9pZCBub3RpZnlSZXNwb25zZU9uU3VjY2VzcygpOworICAgIHZvaWQgbm90aWZ5UmVzcG9u
c2VPbkVycm9yKCk7CisgICAgdm9pZCBub3RpZnlSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50
KTsKKyAgICB2b2lkIG5vdGlmeUZhaWwoaW50IGVycm9yQ29kZSk7CisgICAgdm9pZCBub3RpZnlG
aW5pc2goKTsKKworICAgIFJlZlB0cjxCbG9iU3RvcmFnZURhdGE+IG1fYmxvYkRhdGE7CisgICAg
Ym9vbCBtX2FzeW5jOworICAgIFJlZlB0cjxBc3luY0ZpbGVTdHJlYW0+IG1fYXN5bmNTdHJlYW07
IC8vIEZvciBhc3luY2hyb25vdXMgbG9hZGluZy4KKyAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9z
dHJlYW07IC8vIEZvciBzeW5jaHJvbm91cyBsb2FkaW5nLgorICAgIFZlY3RvcjxjaGFyPiBtX2J1
ZmZlcjsKKyAgICBWZWN0b3I8bG9uZyBsb25nPiBtX2l0ZW1MZW5ndGhMaXN0OworICAgIGludCBt
X2Vycm9yQ29kZTsKKyAgICBib29sIG1fYWJvcnRlZDsKKyAgICBsb25nIGxvbmcgbV9yYW5nZU9m
ZnNldDsKKyAgICBsb25nIGxvbmcgbV9yYW5nZUVuZDsKKyAgICBsb25nIGxvbmcgbV9yYW5nZVN1
ZmZpeExlbmd0aDsKKyAgICBsb25nIGxvbmcgbV90b3RhbFJlbWFpbmluZ1NpemU7CisgICAgbG9u
ZyBsb25nIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICB1bnNpZ25lZCBtX3NpemVJdGVtQ291
bnQ7CisgICAgdW5zaWduZWQgbV9yZWFkSXRlbUNvdW50OworICAgIGJvb2wgbV9maWxlT3BlbmVk
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0Ip
CisKKyNlbmRpZiAvLyBCbG9iUmVzb3VyY2VIYW5kbGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggMDU3NTUyMy4uYWFkYzRmYSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJETlMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiQmxv
YlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRl
ICJUaW1lci5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTU0LDYgKzU1LDE0IEBAIFJlc291
cmNlSGFuZGxlOjpSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFJlc291cmNlSGFuZGxlQ2xpCiBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhh
bmRsZTo6Y3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5k
bGVDbGllbnQqIGNsaWVudCwKICAgICBGcmFtZSogZnJhbWUsIGJvb2wgZGVmZXJzTG9hZGluZywg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYpCiB7CisjaWYgRU5BQkxFKEJMT0IpCisgICAgaWYgKHJl
cXVlc3QudXJsKCkucHJvdG9jb2xJcygiYmxvYiIpKSB7CisgICAgICAgIFBhc3NSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGhhbmRsZSA9IGJsb2JSZWdpc3RyeSgpLmNyZWF0ZVJlc291cmNlSGFuZGxl
KHJlcXVlc3QsIGNsaWVudCk7CisgICAgICAgIGlmIChoYW5kbGUpCisgICAgICAgICAgICByZXR1
cm4gaGFuZGxlOworICAgIH0KKyNlbmRpZgorCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBu
ZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVm
ZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwogCiAgICAgaWYgKG5ld0hhbmRsZS0+
ZC0+bV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCmluZGV4IDJlZGQ0YzkuLmQ1MjA3NmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCkBAIC05OCw5ICs5OCwxMCBAQCBj
bGFzcyBSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPgog
ICAgICwgcHVibGljIEF1dGhlbnRpY2F0aW9uQ2xpZW50CiAjZW5kaWYKICAgICB7Ci1wcml2YXRl
OgorcHJvdGVjdGVkOgogICAgIFJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENv
bnRlbnRTbmlmZik7CiAKK3ByaXZhdGU6CiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAgICAgICAg
IE5vRmFpbHVyZSwKICAgICAgICAgQmxvY2tlZEZhaWx1cmUsCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCmluZGV4IDAwOTgwMTAuLjk3YzBmNTQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVu
dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5o
CkBAIC00NCw4ICs0NCwxMCBAQCBjbGFzcyBOU0NhY2hlZFVSTFJlc3BvbnNlOwogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBBc3luY0ZpbGVTdHJlYW07CiAgICAgY2xh
c3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ3JlZGVudGlhbDsKKyAgICBj
bGFzcyBGaWxlU3RyZWFtQ2xpZW50OwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUHJvdGVj
dGlvblNwYWNlOwogICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOwpAQCAtOTIsNiArOTQsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgVVNFKENGTkVUV09SSykKICAgICAgICAgdmlydHVhbCBi
b29sIHNob3VsZENhY2hlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3Bv
bnNlUmVmIHJlc3BvbnNlKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoQkxP
QikKKyAgICAgICAgdmlydHVhbCBBc3luY0ZpbGVTdHJlYW0qIGNyZWF0ZUFzeW5jRmlsZVN0cmVh
bShGaWxlU3RyZWFtQ2xpZW50KikgeyByZXR1cm4gMDsgfQorI2VuZGlmCiAgICAgfTsKIAogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1h
Yy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0K
aW5kZXggZjcxNjFlYy4uZDAxNGJiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgogI2ltcG9ydCAiQXV0aGVudGljYXRpb25NYWMuaCIK
ICNpbXBvcnQgIkJhc2U2NC5oIgorI2ltcG9ydCAiQmxvYlJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJC
bG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAjaW1wb3J0
ICJEb2NMb2FkZXIuaCIKQEAgLTQ2NCw2ICs0NjUsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFMKIHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5OiVAIGFsbG93U3RvcmVkQ3JlZGVudGlhbHM6JXUiLCByZXF1ZXN0Lm5zVVJMUmVx
dWVzdCgpLCBzdG9yZWRDcmVkZW50aWFscyk7CiAKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBpZiAo
cmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJibG9iIikpCisgICAgICAgIGlmIChibG9iUmVnaXN0
cnkoKS5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIE5TRXJyb3IgKm5zRXJy
b3IgPSBuaWw7CiAgICAgTlNVUkxSZXNwb25zZSAqbnNVUkxSZXNwb25zZSA9IG5pbDsKICAgICBO
U0RhdGEgKnJlc3VsdCA9IG5pbDsK
</data>
<flag name="commit-queue"
          id="53654"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64972</attachid>
            <date>2010-08-20 12:25:40 -0700</date>
            <delta_ts>2010-08-20 13:00:38 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43941_2</filename>
            <type>text/plain</type>
            <size>42232</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzNzhmNDUwLi4xNTA5Nzc3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTAtMDgtMjAgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhbmRsZSBibG9iIHJlc291
cmNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5
NDEKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogQWRkIGFuIGV4cG9ydCB0aGF0IGlz
IG5lZWRlIGJ5IEJsb2JSZXNvdXJjZUhhbmRsZS4KKwogMjAxMC0wOC0xOSAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2Zm
cmV5IEdhcmVuLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
IGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDVjZmExYzIuLjQxMzFl
MjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTUzNCw2ICs1MzQsNyBAQCBfX1pO
SzNKU0M5SGFzaFRhYmxlMTFkZWxldGVUYWJsZUV2CiBfX1pOSzNXVEYxMkF0b21pY1N0cmluZzVs
b3dlckV2CiBfX1pOSzNXVEY2U3RyaW5nMTF0b0ludFN0cmljdEVQYmkKIF9fWk5LM1dURjZTdHJp
bmcxMnRvVUludFN0cmljdEVQYmkKK19fWk5LM1dURjZTdHJpbmcxM3RvSW50NjRTdHJpY3RFUGJp
CiBfX1pOSzNXVEY2U3RyaW5nMTR0aHJlYWRzYWZlQ29weUV2CiBfX1pOSzNXVEY2U3RyaW5nMTVz
dHJpcFdoaXRlU3BhY2VFdgogX19aTkszV1RGNlN0cmluZzE2cmVtb3ZlQ2hhcmFjdGVyc0VQRmJ0
RQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9BbmRyb2lkLm1rIGIvV2ViQ29yZS9BbmRyb2lkLm1rCmlu
ZGV4IGFjMTA2MGEuLmMxYjM3MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQW5kcm9pZC5taworKysg
Yi9XZWJDb3JlL0FuZHJvaWQubWsKQEAgLTUzMSw2ICs1MzEsNyBAQCBMT0NBTF9TUkNfRklMRVMg
Oj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlQmFzZS5jcHAgXAogCXBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwIFwKIAlw
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwKKwlwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAgXAogCXBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5j
cHAgXAogCXBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIFwKIAlwbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzZmU2YzJjLi45YTg2NGNjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTEzMDcsNiArMTMwNyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JEYXRhLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWI3M2M5
Yi4uZDRjMzkxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsNSArMSw0OCBAQAogMjAxMC0wOC0yMCAgSmlhbiBMaSAgPGppYW5saUBj
aHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSGFuZGxlIGJsb2IgcmVzb3VyY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mzk0MQorCisgICAgICAgIFRvIHByb3ZpZGUgbG93ZXIgbGV2
ZWwgYmxvYiByZW9zdXJjZSBoYW5kbGluZyBmb3IgYWxsIHBvc3NpYmxlIHBvcnRzLAorICAgICAg
ICBCbG9iUmVzb3VyY2VIYW5kbGUgZGVyaXZlZCBmcm9tIFJlc291cmNlSGFuZGxlIGlzIGltcGxl
bWVudGVkLiBJdCBwcm92aWRlcworICAgICAgICBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hy
b25vdXMgcmVzb3VyY2UgbG9hZGluZyBmb3IgYmxvYiBVUkwuCisKKyAgICAgICAgQmxvYlJlc291
cmNlSGFuZGxlIG5lZWRzIHRvIGNyZWF0ZSBhIEZpbGVTdHJlYW1Qcm94eSBpbnN0YW5jZSBpbiBv
cmRlciB0bworICAgICAgICBhc3luY2hyb25vdXMgZmlsZSBzdHJlYW0gb3BlcmF0aW9uLiBUbyBh
Y2hpdmUgdGhpcywgYSBob29rIGNyZWF0ZUFzeW5jRmlsZVN0cmVhbQorICAgICAgICBpcyBhZGRl
ZCB0byBSZXNvdXJjZUhhbmRsZUNsaWVudCBpbnRlcmZhY2UuIFdoZW4gUmVzb3VyY2VMb2FkZXIg
aW1wbGVtZW50cworICAgICAgICB0aHMgaG9vaywgaXQgY3JlYXRlcyBhbmQgcmV0dXJucyBGaWxl
U3RyZWFtUHJveHkuCisKKyAgICAgICAgQmxvYlJlc291cmNlSGFuZGxlLiogaXMgbm90IGFkZGVk
IHRvIGNocm9taXVtIHBvcnQgc2luY2UgaXQgd2lsbCBpbXBsZW1lbnQKKyAgICAgICAgaXRzIG93
biBibG9iIHJlc291cmNlIGhhbmRsaW5nLgorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZGVyOjpjcmVhdGVBc3luY0ZpbGVTdHJlYW0pOiBDcmVhdGUgYW5kIHJldHVybiBGaWxlU3RyZWFt
UHJveHkuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogcGFn
ZS9TZWN1cml0eU9yaWdpbi5jcHA6IEFkZCB0aGUgc3VwcG9ydCB0byBnZXQgYW5kIHZhbGlkYXRl
IHRoZSBvcmlnaW4gb2YgYmxvYiBVUkwuCisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW1zKTogRml4IGEg
YnVnIHRoYXQgdGhlIGxlbmd0aCBpcyBub3Qgc3VidHJhY3RlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOiBIb29rIHVwIHdpdGggYXN5bmNocm9ub3Vz
IGJsb2IgcmVzb3VyY2UgaGFuZGxpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OmNyZWF0ZUFzeW5jRmlsZVN0cmVh
bSk6IEFkZCBhIGhvb2suCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VI
YW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseSk6IEhvb2sgdXAgd2l0aCBzeW5jaHJvbm91cyBibG9iIHJlc291cmNl
IGhhbmRsaW5nLgorCisyMDEwLTA4LTIwICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4K
KwogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KIAogICAgICAgICBNb3ZlIEZpbGVT
dHJlYW1DbGllbnQgdG8gcGxhdGZvcm0gYW5kIGFkZCBBc3luY0ZpbGVTdHJlYW0gaW50ZXJmYWNl
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KaW5kZXggNWFjZWZjMS4uMjY5N2ViNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMDk5LDYgKzIwOTksOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnkuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlN0b3JhZ2VEYXRhLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9D
cmVkZW50aWFsLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpp
bmRleCBhMGUzNTU2Li4zOWIzZDYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTkzMSw2ICs5MzEsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5jcHAgXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAgXAogICAg
IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhQnVpbGRlci5jcHAgXApAQCAtMTcyOSw2ICsxNzMwLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeS5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaCBc
CisgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaCBcCiAgICAgcGxhdGZv
cm0vbmV0d29yay9CbG9iU3RvcmFnZURhdGEuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9DcmVk
ZW50aWFsLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmggXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNzE5NzkzZS4uYTc2MTk1OSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNjg3Miw2ICsyNjg3MiwxNCBA
QAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cbmV0d29ya1xCbG9iUmVzb3VyY2VIYW5kbGUuY3BwIg0KKwkJCQkJPg0KKwkJ
CQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5l
dHdvcmtcQmxvYlJlc291cmNlSGFuZGxlLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJ
PEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xCbG9iU3RvcmFn
ZURhdGEuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2M5ZGViYy4uMmZmYjlhMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcwNCw2ICs3MDQsOCBAQAogCQkyRUE3
NjgwNDBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUE3NjgwMzBGRTcxMjY0
MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi87IH07CiAJCTJFQUZBRjBF
MTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFQUZBRjBCMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmNwcCAq
LzsgfTsKIAkJMkVBRkFGMEYxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQUZBRjBDMTBFMkFGMkQwMDdFRDNE
NiAvKiBCbG9iLmggKi87IH07CisJCTJFQjRCQ0QyMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVz
b3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAg
Ki87IH07CisJCTJFQjRCQ0QzMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQjRCQ0Qx
MTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCAqLzsgfTsKIAkJMkVDRjdB
REMxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQTEwMTYyQjM4MDA0MjdERTcgLyog
SlNFcnJvckV2ZW50LmNwcCAqLzsgfTsKIAkJMkVDRjdBREQxMDE2MkIzODAwNDI3REU3IC8qIEpT
RXJyb3JFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkVDRjdBREIxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5oICovOyB9OwogCQky
RUNGN0FFMTEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FERTEwMTYyQjU4MDA0MjdERTcg
LyogRXJyb3JFdmVudC5jcHAgKi87IH07CkBAIC02NTE5LDYgKzY1MjEsOCBAQAogCQkyRUFGQUYw
QjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCbG9iLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVBRkFG
MEMxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmxvYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUFGQUYwRDEwRTJB
RjJEMDA3RUQzRDYgLyogQmxvYi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQmxvYi5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFQjRCQ0QwMTIxRjAzRTMwMEVDNDg4NSAv
KiBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQmxvYlJlc291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iUmVzb3VyY2VIYW5kbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVDRjdBREExMDE2MkIzODAwNDI3REU3IC8qIEpTRXJy
b3JFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Vycm9y
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUNGN0FEQjEwMTYyQjM4
MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRXJyb3JFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUNGN0FE
RTEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFcnJvckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyNDUyLDYgKzEyNDU2LDggQEAKIAkJCQkyRURFRjFFRjEyMUIwRUZDMDA3MjZEQjIg
LyogQmxvYlJlZ2lzdHJ5LmggKi8sCiAJCQkJMkVERUYxRjAxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JSZWdpc3RyeUltcGwuY3BwICovLAogCQkJCTJFREVGMUYxMTIxQjBFRkMwMDcyNkRCMiAvKiBC
bG9iUmVnaXN0cnlJbXBsLmggKi8sCisJCQkJMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJs
b2JSZXNvdXJjZUhhbmRsZS5jcHAgKi8sCisJCQkJMkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8q
IEJsb2JSZXNvdXJjZUhhbmRsZS5oICovLAogCQkJCTJFREVGMUYyMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iU3RvcmFnZURhdGEuaCAqLywKIAkJCQk1MTRDNzY1ODBDRTkyM0ExMDA3RUYzQ0QgLyog
Q3JlZGVudGlhbC5jcHAgKi8sCiAJCQkJNTE0Qzc2NTkwQ0U5MjNBMTAwN0VGM0NEIC8qIENyZWRl
bnRpYWwuaCAqLywKQEAgLTIwMzMzLDYgKzIwMzM5LDcgQEAKIAkJCQk0NkEyNjkwNjEyMUI2QjQz
MDBDNDFGM0EgLyogRmlsZVdyaXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVGMUJGRjcxMjFD
QjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVG
MUJGRjkxMjFDQjBDRTAwQzI3NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTJFQjRCQ0QzMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMjI3ODQsNiArMjI3OTEsNyBAQAogCQkJCTJFREVGMUY2MTIxQjBF
RkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJF
RjFCRkVBMTIxQzlGNDIwMEMyNzYyNyAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQ2QTI2OTA1MTIxQjZCNDMwMEM0MUYzQSAvKiBGaWxlV3JpdGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTJFQjRCQ0QyMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggNTdlNTNl
Yi4uYzczMDhiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CisrKyBiL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcApAQCAtMzIsNiArMzIsNyBA
QAogCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgorI2luY2x1ZGUgIkZpbGVTdHJlYW1Qcm94eS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmgiCkBAIC01MTEsNCArNTEyLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxD
YWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgQ2FjaGVTdG9yYWdlUG9saWN5JiBwb2xpCiAg
ICAgICAgIHBvbGljeSA9IFN0b3JhZ2VBbGxvd2VkSW5NZW1vcnlPbmx5OyAgICAKIH0KIAorI2lm
IEVOQUJMRShCTE9CKQorQXN5bmNGaWxlU3RyZWFtKiBSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlQXN5
bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKK3sKKyAgICAvLyBJdCBpcyBP
SyB0byBzaW1wbHkgcmV0dXJuIGEgcG9pbnRlciBzaW5jZSBGaWxlU3RyZWFtUHJveHk6OmNyZWF0
ZSBhZGRzIGFuIGV4dHJhIHJlZi4KKyAgICByZXR1cm4gRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUo
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjbGllbnQpLmdl
dCgpOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmggYi9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCmluZGV4IGNiZGQ4YzIu
Ljk1MTNmZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKKysr
IGIvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaApAQCAtMTE4LDYgKzExOCw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIENGQ2FjaGVkVVJMUmVzcG9u
c2VSZWYpOwogI2VuZGlmCisjaWYgRU5BQkxFKEJMT0IpCisgICAgICAgIHZpcnR1YWwgQXN5bmNG
aWxlU3RyZWFtKiBjcmVhdGVBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCopOworI2Vu
ZGlmCiAKICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFuZGxlLmdldCgpOyB9CiAgICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcCBiL1dlYkNvcmUvcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHAKaW5kZXggZjc1OTQwMi4uNWI1MTUwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL1NlY3VyaXR5T3JpZ2luLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKIAorI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJLVVJMLmgiCkBAIC0xMjMs
NiArMTI0LDEwIEBAIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGUoY29uc3QgS1VSTCYgdXJsLCBTYW5kYm94RmxhZ3MKIHsKICAgICBpZiAoIXVybC5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4oS1VSTCgp
LCBzYW5kYm94RmxhZ3MpKTsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBpZiAodXJsLnByb3RvY29s
SXMoImJsb2IiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWN1cml0eU9yaWdpbihC
bG9iVVJMOjpnZXRPcmlnaW4odXJsKSwgc2FuZGJveEZsYWdzKSk7CisjZW5kaWYKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKHVybCwgc2FuZGJveEZsYWdzKSk7CiB9CiAK
QEAgLTI3NSw2ICsyODAsMTQgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNBY2Nlc3NXaGl0ZUxp
c3RlZChjb25zdCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKSBjb24KICAgCiBib29sIFNl
Y3VyaXR5T3JpZ2luOjpjYW5Mb2FkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgRG9jdW1lbnQqIGRvY3VtZW50KQogeworI2lmIEVOQUJMRShCTE9CKQorICAgIGlmICh1
cmwucHJvdG9jb2xJcygiYmxvYiIpICYmIGRvY3VtZW50KSB7CisgICAgICAgIFNlY3VyaXR5T3Jp
Z2luKiBkb2N1bWVudE9yaWdpbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpOworICAgICAg
ICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGUodXJsKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50T3JpZ2luLT5pc1NhbWVTY2hlbWVI
b3N0UG9ydCh0YXJnZXRPcmlnaW4uZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKCFT
Y2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvY2FsKHVybC5zdHJpbmcoKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAKaW5kZXggMDBjMGI3NS4uZWU4NzJlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMTEzLDYgKzExMyw3IEBAIHZvaWQg
QmxvYlJlZ2lzdHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW1zKEJsb2JTdG9yYWdlRGF0YSogYmxv
YlN0b3JhZ2VEYXRhLCBjb25zCiAgICAgICAgICAgICBBU1NFUlQoaXRlci0+dHlwZSA9PSBCbG9i
RGF0YUl0ZW06OkZpbGUpOwogICAgICAgICAgICAgYmxvYlN0b3JhZ2VEYXRhLT5tX2RhdGEuYXBw
ZW5kRmlsZShpdGVyLT5wYXRoLCBpdGVyLT5vZmZzZXQgKyBvZmZzZXQsIG5ld0xlbmd0aCwgaXRl
ci0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKICAgICAgICAgfQorICAgICAgICBsZW5ndGgg
LT0gbmV3TGVuZ3RoOwogICAgICAgICBvZmZzZXQgPSAwOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxMWQ3NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC0wLDAgKzEsNjQwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9i
UmVzb3VyY2VIYW5kbGUuaCIKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN0cmVhbS5oIgorI2luY2x1
ZGUgIkJsb2JSZWdpc3RyeUltcGwuaCIKKyNpbmNsdWRlICJGaWxlU3RyZWFtLmgiCisjaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVy
cm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJ1ZmZlclNpemUgPSAxMDI0Oworc3RhdGlj
IGNvbnN0IGludCBtYXhWZWN0b3JMZW5ndGggPSAweDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGxv
bmcgbG9uZyBwb3NpdGlvbk5vdFNwZWNpZmllZCA9IC0xOworCitzdGF0aWMgY29uc3QgaW50IG9r
ID0gMjAwOworc3RhdGljIGNvbnN0IGludCBwYXJ0aWFsQ29udGVudCA9IDIwNjsKK3N0YXRpYyBj
b25zdCBpbnQgbm90QWxsb3dlZCA9IDQwMzsKK3N0YXRpYyBjb25zdCBpbnQgbm90Rm91bmQgPSA0
MDQ7CitzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTY7
CitzdGF0aWMgY29uc3QgaW50IGludGVybmFsRXJyb3IgPSA1MDA7CitzdGF0aWMgY29uc3QgY2hh
ciogb2tUZXh0ID0gIk9LIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBwYXJ0aWFsQ29udGVudFRleHQg
PSAiUGFydGlhbCBDb250ZW50IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBub3RBbGxvd2VkVGV4dCA9
ICJOb3QgQWxsb3dlZCI7CitzdGF0aWMgY29uc3QgY2hhciogbm90Rm91bmRUZXh0ID0gIk5vdCBG
b3VuZCI7CitzdGF0aWMgY29uc3QgY2hhciogcmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZVRl
eHQgPSAiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSI7CitzdGF0aWMgY29uc3QgY2hh
ciogaW50ZXJuYWxFcnJvclRleHQgPSAiSW50ZXJuYWwgU2VydmVyIEVycm9yIjsKKworc3RhdGlj
IGNvbnN0IGludCBub3RGb3VuZEVycm9yID0gMTsKK3N0YXRpYyBjb25zdCBpbnQgc2VjdXJpdHlF
cnJvciA9IDI7CitzdGF0aWMgY29uc3QgaW50IHJhbmdlRXJyb3IgPSAzOworc3RhdGljIGNvbnN0
IGludCBub3RSZWFkYWJsZUVycm9yID0gNDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8g
QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIKKworY2xhc3MgQmxvYlJlc291cmNlU3luY2hy
b25vdXNMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworcHVibGljOgorICAg
IEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJl
c3BvbnNlJiwgVmVjdG9yPGNoYXI+Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBp
bnQsIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisKK3ByaXZhdGU6CisgICAgUmVzb3Vy
Y2VFcnJvciYgbV9lcnJvcjsKKyAgICBSZXNvdXJjZVJlc3BvbnNlJiBtX3Jlc3BvbnNlOworICAg
IFZlY3RvcjxjaGFyPiYgbV9kYXRhOworfTsKKworQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2Fk
ZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQorICAgIDogbV9l
cnJvcihlcnJvcikKKyAgICAsIG1fcmVzcG9uc2UocmVzcG9uc2UpCisgICAgLCBtX2RhdGEoZGF0
YSkKK3sKK30KKwordm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIC8vIFdlIGNhbm5vdCBoYW5kbGUgdGhlIHNpemUgdGhhdCBpcyBt
b3JlIHRoYW4gbWF4aW11bSBpbnRlZ2VyLgorICAgIGNvbnN0IGludCBpbnRNYXhGb3JMZW5ndGgg
PSAweDdmZmZmZmZmOworICAgIGlmIChyZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSA+
IGludE1heEZvckxlbmd0aCkgeworICAgICAgICBtX2Vycm9yID0gUmVzb3VyY2VFcnJvcihTdHJp
bmcoKSwgbm90UmVhZGFibGVFcnJvciwgcmVzcG9uc2UudXJsKCksIFN0cmluZygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIC8v
IFJlYWQgYWxsIHRoZSBkYXRhLgorICAgIG1fZGF0YS5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90
PihyZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSkpOworICAgIHN0YXRpY19jYXN0PEJs
b2JSZXNvdXJjZUhhbmRsZSo+KGhhbmRsZSktPnJlYWRTeW5jKG1fZGF0YS5kYXRhKCksIHN0YXRp
Y19jYXN0PGludD4obV9kYXRhLnNpemUoKSkpOworfQorCit2b2lkIEJsb2JSZXNvdXJjZVN5bmNo
cm9ub3VzTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIq
LCBpbnQsIGludCkKK3sKK30KKwordm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6
ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopCit7Cit9CisKK3ZvaWQgQmxvYlJlc291
cmNlU3luY2hyb25vdXNMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBtX2Vycm9yID0gZXJyb3I7Cit9CisKKy8vIHN0YXRp
Ywordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoUGFz
c1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyIGxvYWRlcihlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgIFJlZlB0cjxCbG9iUmVzb3Vy
Y2VIYW5kbGU+IGhhbmRsZSA9IEJsb2JSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKGJsb2JEYXRhLCBy
ZXF1ZXN0LCAmbG9hZGVyLCBmYWxzZSk7CisgICAgaGFuZGxlLT5zdGFydCgpOworfQorCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLyBCbG9iUmVzb3VyY2VIYW5kbGUKKworc3RhdGljIHZvaWQg
ZGVsYXllZFN0YXJ0KHZvaWQqIGNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8QmxvYlJlc291
cmNlSGFuZGxlKj4oY29udGV4dCktPnN0YXJ0KCk7Cit9CisKK0Jsb2JSZXNvdXJjZUhhbmRsZTo6
QmxvYlJlc291cmNlSGFuZGxlKFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iRGF0YSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xp
ZW50LCBib29sIGFzeW5jKQorICAgIDogUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LCBm
YWxzZSwgZmFsc2UpCisgICAgLCBtX2Jsb2JEYXRhKGJsb2JEYXRhKQorICAgICwgbV9hc3luYyhh
c3luYykKKyAgICAsIG1fZXJyb3JDb2RlKDApCisgICAgLCBtX2Fib3J0ZWQoZmFsc2UpCisgICAg
LCBtX3JhbmdlT2Zmc2V0KHBvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICwgbV9yYW5nZUVuZChw
b3NpdGlvbk5vdFNwZWNpZmllZCkKKyAgICAsIG1fcmFuZ2VTdWZmaXhMZW5ndGgocG9zaXRpb25O
b3RTcGVjaWZpZWQpCisgICAgLCBtX3RvdGFsUmVtYWluaW5nU2l6ZSgwKQorICAgICwgbV9jdXJy
ZW50SXRlbVJlYWRTaXplKDApCisgICAgLCBtX3NpemVJdGVtQ291bnQoMCkKKyAgICAsIG1fcmVh
ZEl0ZW1Db3VudCgwKQorICAgICwgbV9maWxlT3BlbmVkKGZhbHNlKQoreyAgICAKKyAgICBpZiAo
bV9hc3luYykgeworICAgICAgICBtX2FzeW5jU3RyZWFtID0gYWRvcHRSZWYoY2xpZW50LT5jcmVh
dGVBc3luY0ZpbGVTdHJlYW0odGhpcykpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRlbGF5
ZWRTdGFydCwgdGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc3RyZWFtID0gRmlsZVN0cmVh
bTo6Y3JlYXRlKCk7Cit9CisKK0Jsb2JSZXNvdXJjZUhhbmRsZTo6fkJsb2JSZXNvdXJjZUhhbmRs
ZSgpCit7CisgICAgaWYgKG1fYXN5bmMpIHsKKyAgICAgICAgaWYgKG1fYXN5bmNTdHJlYW0pCisg
ICAgICAgICAgICBtX2FzeW5jU3RyZWFtLT5zdG9wKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKG1fc3RyZWFtKQorICAgICAgICAgICAgbV9zdHJlYW0tPnN0b3AoKTsKKyAgICB9Cit9CisK
K3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQoreworICAgIGlmIChtX2FzeW5jKSB7
CisgICAgICAgIGlmIChtX2FzeW5jU3RyZWFtKSB7CisgICAgICAgICAgICBtX2FzeW5jU3RyZWFt
LT5zdG9wKCk7CisgICAgICAgICAgICBtX2FzeW5jU3RyZWFtID0gMDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fYWJvcnRlZCA9IHRydWU7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxl
OjpzdGFydCgpCit7CisgICAgLy8gRG8gbm90IGNvbnRpbnVlIGlmIHRoZSByZXF1ZXN0IGlzIGFi
b3J0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgorICAgIGlmIChtX2Fib3J0ZWQgfHwgbV9lcnJvckNv
ZGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBibG9iIGRhdGEgaXMgbm90IGZv
dW5kLCBmYWlsIG5vdy4KKyAgICBpZiAoIW1fYmxvYkRhdGEpIHsKKyAgICAgICAgbV9lcnJvckNv
ZGUgPSBub3RGb3VuZEVycm9yOworICAgICAgICBub3RpZnlSZXNwb25zZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gUGFyc2UgdGhlICJSYW5nZSIgaGVhZGVyIHdlIGNhcmUg
YWJvdXQuCisgICAgU3RyaW5nIHJhbmdlID0gZmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxk
KCJSYW5nZSIpOworICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpICYmICFwYXJzZVJhbmdlSGVhZGVy
KHJhbmdlKSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IHJhbmdlRXJyb3I7CisgICAgICAgIG5v
dGlmeVJlc3BvbnNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9hc3lu
YykKKyAgICAgICAgZ2V0U2l6ZUZvck5leHQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Jsb2JEYXRhLT5pdGVtcygpLnNpemUoKSAmJiAhbV9hYm9ydGVk
ICYmICFtX2Vycm9yQ29kZTsgKytpKQorICAgICAgICAgICAgZ2V0U2l6ZUZvck5leHQoKTsKKyAg
ICAgICAgbm90aWZ5UmVzcG9uc2UoKTsKKyAgICB9Cit9CisKK2Jvb2wgQmxvYlJlc291cmNlSGFu
ZGxlOjpwYXJzZVJhbmdlSGVhZGVyKGNvbnN0IFN0cmluZyYgcmFuZ2UpCit7CisgICAgLy8gV2Ug
b25seSBjYXJlIGFib3V0IHRoZSAiUmFuZ2UiIGhlYWRlci4KKyAgICAvLyBUaGUgZm9ybWF0IG9m
ICJSYW5nZSIgaGVhZGVyIGlzIGRlZmluZWQgaW4gUkZDIDI2MTYgU2VjdGlvbiAxNC4zNS4xLgor
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTQu
aHRtbCNzZWMxNC4zNS4xCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSByYW5nZSBy
ZXF1ZXN0cy4KKworICAgIC8vIFRoZSAiYnl0ZXMiIHVuaXQgaWRlbnRpZmllciBzaG91bGQgYmUg
cHJlc2VudC4KKyAgICBzdGF0aWMgY29uc3QgY2hhciBieXRlc1N0YXJ0W10gPSAiYnl0ZXM9Ijsg
CisgICAgaWYgKCFyYW5nZS5zdGFydHNXaXRoKGJ5dGVzU3RhcnQsIGZhbHNlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFN0cmluZyBieXRlUmFuZ2UgPSByYW5nZS5zdWJzdHJpbmcoc2l6
ZW9mKGJ5dGVzU3RhcnQpIC0gMSk7CisKKyAgICAvLyBUaGUgJy0nIGNoYXJhY3RlciBuZWVkcyB0
byBiZSBwcmVzZW50LgorICAgIGludCBpbmRleCA9IGJ5dGVSYW5nZS5maW5kKCctJyk7CisgICAg
aWYgKGluZGV4ID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUg
Jy0nIGNoYXJhY3RlciBpcyBhdCB0aGUgYmVnaW5uaW5nLCB0aGUgc3VmZml4IGxlbmd0aCwgd2hp
Y2ggc3BlY2lmaWVzIHRoZSBsYXN0IE4gYnl0ZXMsIGlzIHByb3ZpZGVkLgorICAgIC8vIEV4YW1w
bGU6CisgICAgLy8gICAgIC01MDAKKyAgICBpZiAoIWluZGV4KSB7CisgICAgICAgIFN0cmluZyBz
dWZmaXhMZW5ndGhTdHJpbmcgPSBieXRlUmFuZ2Uuc3Vic3RyaW5nKGluZGV4ICsgMSkuc3RyaXBX
aGl0ZVNwYWNlKCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIGxvbmcgbG9uZyB2YWx1ZSA9
IHN1ZmZpeExlbmd0aFN0cmluZy50b0ludDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmIChvaykK
KyAgICAgICAgICAgIG1fcmFuZ2VTdWZmaXhMZW5ndGggPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgZmlyc3QtYnl0ZS1wb3NpdGlv
biBhbmQgdGhlIGxhc3QtYnl0ZS1wb3NpdGlvbiBhcmUgcHJvdmllZC4KKyAgICAvLyBFeGFtcGxl
czoKKyAgICAvLyAgICAgMC00OTkKKyAgICAvLyAgICAgNTAwLQorICAgIFN0cmluZyBmaXJzdEJ5
dGVQb3NTdHIgPSBieXRlUmFuZ2UubGVmdChpbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAg
Ym9vbCBvazsKKyAgICBsb25nIGxvbmcgZmlyc3RCeXRlUG9zID0gZmlyc3RCeXRlUG9zU3RyLnRv
SW50NjRTdHJpY3QoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBTdHJpbmcgbGFzdEJ5dGVQb3NTdHIgPSBieXRlUmFuZ2Uuc3Vic3RyaW5nKGluZGV4ICsg
MSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgbG9uZyBsb25nIGxhc3RCeXRlUG9zID0gcG9zaXRp
b25Ob3RTcGVjaWZpZWQ7CisgICAgaWYgKCFsYXN0Qnl0ZVBvc1N0ci5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbGFzdEJ5dGVQb3MgPSBsYXN0Qnl0ZVBvc1N0ci50b0ludDY0U3RyaWN0KCZvayk7Cisg
ICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKGZpcnN0Qnl0ZVBvcyA8IDAgfHwgIShsYXN0Qnl0ZVBvcyA9PSBwb3NpdGlvbk5vdFNwZWNp
ZmllZCB8fCBsYXN0Qnl0ZVBvcyA+PSBmaXJzdEJ5dGVQb3MpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBtX3JhbmdlT2Zmc2V0ID0gZmlyc3RCeXRlUG9zOworICAgIG1fcmFuZ2VFbmQg
PSBsYXN0Qnl0ZVBvczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VI
YW5kbGU6OmdldFNpemVGb3JOZXh0KCkKK3sKKyAgICAvLyBEbyB3ZSBmaW5pc2ggdmFsaWRhdGlu
ZyBhbmQgY291bnRpbmcgc2l6ZSBmb3IgYWxsIGl0ZW1zPworICAgIGlmIChtX3NpemVJdGVtQ291
bnQgPj0gbV9ibG9iRGF0YS0+aXRlbXMoKS5zaXplKCkpIHsKKyAgICAgICAgc2VlaygpOworCisg
ICAgICAgIC8vIFN0YXJ0IHJlYWRpbmcgaWYgaW4gYXN5bmNocm9ub3VzIG1vZGUuCisgICAgICAg
IGlmIChtX2FzeW5jKSB7CisgICAgICAgICAgICBub3RpZnlSZXNwb25zZSgpOworICAgICAgICAg
ICAgbV9idWZmZXIucmVzaXplKGJ1ZmZlclNpemUpOworICAgICAgICAgICAgcmVhZEFzeW5jKCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEJsb2JEYXRh
SXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQobV9zaXplSXRlbUNvdW50KTsKKyAg
ICBzd2l0Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgorICAg
ICAgICBkaWRHZXRTaXplKGl0ZW0ubGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
bG9iRGF0YUl0ZW06OkZpbGU6CisgICAgICAgIGlmIChtX2FzeW5jKQorICAgICAgICAgICAgbV9h
c3luY1N0cmVhbS0+Z2V0U2l6ZShpdGVtLnBhdGgsIGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25U
aW1lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlkR2V0U2l6ZShtX3N0cmVhbS0+Z2V0
U2l6ZShpdGVtLnBhdGgsIGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmRpZEdldFNpemUobG9uZyBsb25nIHNp
emUpCit7CisgICAgLy8gRG8gbm90IGNvbnRpbnVlIGlmIHRoZSByZXF1ZXN0IGlzIGFib3J0ZWQg
b3IgYW4gZXJyb3Igb2NjdXJzLgorICAgIGlmIChtX2Fib3J0ZWQgfHwgbV9lcnJvckNvZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBzaXplIGlzIC0xLCBpdCBtZWFucyB0aGUg
ZmlsZSBoYXMgYmVlbiBtb3ZlZCBvciBjaGFuZ2VkLiBGYWlsIG5vdy4KKyAgICBpZiAoc2l6ZSA9
PSAtMSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IG5vdEZvdW5kRXJyb3I7CisgICAgICAgIG5v
dGlmeVJlc3BvbnNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgc2l6
ZSBwYXNzZWQgYmFjayBpcyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgZmlsZS4gSWYgdGhlIHVuZGVy
bHlpbmcgaXRlbSBpcyBhIHNsaWNlZCBmaWxlLCB3ZSBuZWVkIHRvIHVzZSB0aGUgc2xpY2UgbGVu
Z3RoLgorICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCku
YXQobV9zaXplSXRlbUNvdW50KTsKKyAgICBpZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6
RmlsZSAmJiBpdGVtLmxlbmd0aCAhPSBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKQorICAgICAg
ICBzaXplID0gaXRlbS5sZW5ndGg7CisKKyAgICAvLyBDYWNoZSB0aGUgc2l6ZS4KKyAgICBtX2l0
ZW1MZW5ndGhMaXN0LmFwcGVuZChzaXplKTsKKworICAgIC8vIENvdW50IHRoZSBzaXplLgorICAg
IG1fdG90YWxSZW1haW5pbmdTaXplICs9IHNpemU7CisgICAgbV9zaXplSXRlbUNvdW50Kys7CisK
KyAgICAvLyBDb250aW51ZSB3aXRoIHRoZSBuZXh0IGl0ZW0uCisgICAgZ2V0U2l6ZUZvck5leHQo
KTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OnNlZWsoKQoreworICAgIC8vIENvbnZl
cnQgZnJvbSB0aGUgc3VmZml4IGxlbmd0aCB0byB0aGUgcmFuZ2UuCisgICAgaWYgKG1fcmFuZ2VT
dWZmaXhMZW5ndGggIT0gcG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbV9yYW5nZU9m
ZnNldCA9IG1fdG90YWxSZW1haW5pbmdTaXplIC0gbV9yYW5nZVN1ZmZpeExlbmd0aDsKKyAgICAg
ICAgbV9yYW5nZUVuZCA9IG1fcmFuZ2VPZmZzZXQgKyBtX3JhbmdlU3VmZml4TGVuZ3RoIC0gMTsK
KyAgICB9CisKKyAgICAvLyBCYWlsIG91dCBpZiB0aGUgcmFuZ2UgaXMgbm90IHByb3ZpZGVkLgor
ICAgIGlmIChtX3JhbmdlT2Zmc2V0ID09IHBvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBTa2lwIHRoZSBpbml0aWFsIGl0ZW1zIHRoYXQgYXJlIG5vdCBpbiB0
aGUgcmFuZ2UuCisgICAgbG9uZyBsb25nIG9mZnNldCA9IG1fcmFuZ2VPZmZzZXQ7CisgICAgZm9y
IChtX3JlYWRJdGVtQ291bnQgPSAwOyBtX3JhbmdlT2Zmc2V0ID4gMCAmJiBtX3JlYWRJdGVtQ291
bnQgPj0gbV9ibG9iRGF0YS0+aXRlbXMoKS5zaXplKCkgJiYgb2Zmc2V0ID49IG1faXRlbUxlbmd0
aExpc3RbbV9yZWFkSXRlbUNvdW50XTsgKyttX3JlYWRJdGVtQ291bnQpCisgICAgICAgIG9mZnNl
dCAtPSBtX2l0ZW1MZW5ndGhMaXN0W21fcmVhZEl0ZW1Db3VudF07CisKKyAgICAvLyBTZXQgdGhl
IG9mZnNldCB0aGF0IG5lZWQgdG8ganVtcCB0byBmb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHJh
bmdlLgorICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IG9mZnNldDsKKworICAgIC8vIEFkanVz
dCB0aGUgdG90YWwgcmVtYWluaW5nIHNpemUgaW4gb3JkZXIgbm90IHRvIGdvIGJleW9uZCB0aGUg
cmFuZ2UuCisgICAgaWYgKG1fcmFuZ2VFbmQgIT0gcG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAg
ICAgICAgbG9uZyBsb25nIHJhbmdlU2l6ZSA9IG1fcmFuZ2VFbmQgLSBtX3JhbmdlT2Zmc2V0ICsg
MTsKKyAgICAgICAgaWYgKG1fdG90YWxSZW1haW5pbmdTaXplID4gcmFuZ2VTaXplKQorICAgICAg
ICAgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgPSByYW5nZVNpemU7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fdG90YWxSZW1haW5pbmdTaXplIC09IG1fcmFuZ2VPZmZzZXQ7Cit9CisKK2ludCBCbG9i
UmVzb3VyY2VIYW5kbGU6OnJlYWRTeW5jKGNoYXIqIGJ1ZiwgaW50IGxlbmd0aCkKK3sKKyAgICBB
U1NFUlQoIW1fYXN5bmMpOworCisgICAgaW50IG9mZnNldCA9IDA7CisgICAgaW50IHJlbWFpbmlu
ZyA9IGxlbmd0aDsKKyAgICB3aGlsZSAocmVtYWluaW5nKSB7CisgICAgICAgIC8vIERvIG5vdCBj
b250aW51ZSBpZiB0aGUgcmVxdWVzdCBpcyBhYm9ydGVkIG9yIGFuIGVycm9yIG9jY3Vycy4KKyAg
ICAgICAgaWYgKG1fYWJvcnRlZCB8fCBtX2Vycm9yQ29kZSkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1vcmUgcmVtYWluaW5nIGRhdGEgdG8gcmVhZCwg
d2UgYXJlIGRvbmUuCisgICAgICAgIGlmICghbV90b3RhbFJlbWFpbmluZ1NpemUgfHwgbV9yZWFk
SXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX2Jsb2JE
YXRhLT5pdGVtcygpLmF0KG1fcmVhZEl0ZW1Db3VudCk7CisgICAgICAgIGludCBieXRlc1JlYWQg
PSAwOworICAgICAgICBpZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6RGF0YSkKKyAgICAg
ICAgICAgIGJ5dGVzUmVhZCA9IHJlYWREYXRhU3luYyhpdGVtLCBidWYgKyBvZmZzZXQsIHJlbWFp
bmluZyk7CisgICAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PSBCbG9iRGF0YUl0ZW06OkZpbGUp
CisgICAgICAgICAgICBieXRlc1JlYWQgPSByZWFkRmlsZVN5bmMoaXRlbSwgYnVmICsgb2Zmc2V0
LCByZW1haW5pbmcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICBpZiAoYnl0ZXNSZWFkID4gMCkgeworICAgICAgICAgICAgb2Zmc2V0
ICs9IGJ5dGVzUmVhZDsKKyAgICAgICAgICAgIHJlbWFpbmluZyAtPSBieXRlc1JlYWQ7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpbnQgcmVzdWx0OworICAgIGlmIChtX2Fib3J0ZWQgfHwgbV9l
cnJvckNvZGUpCisgICAgICAgIHJlc3VsdCA9IC0xOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0
ID0gbGVuZ3RoIC0gcmVtYWluaW5nOworCisgICAgbm90aWZ5UmVjZWl2ZURhdGEoYnVmLCByZXN1
bHQpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBub3RpZnlGaW5pc2goKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2ludCBCbG9iUmVzb3VyY2VIYW5kbGU6OnJlYWREYXRhU3luYyhj
b25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0sIGNoYXIqIGJ1ZiwgaW50IGxlbmd0aCkKK3sKKyAgICBB
U1NFUlQoIW1fYXN5bmMpOworCisgICAgbG9uZyByZW1haW5pbmcgPSBpdGVtLmxlbmd0aCAtIG1f
Y3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICBpbnQgYnl0ZXNUb1JlYWQgPSAobGVuZ3RoID4gcmVt
YWluaW5nKSA/IHN0YXRpY19jYXN0PGludD4ocmVtYWluaW5nKSA6IGxlbmd0aDsKKyAgICBpZiAo
Ynl0ZXNUb1JlYWQgPiBtX3RvdGFsUmVtYWluaW5nU2l6ZSkKKyAgICAgICAgYnl0ZXNUb1JlYWQg
PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdG90YWxSZW1haW5pbmdTaXplKTsKKyAgICBtZW1jcHkoYnVm
LCBpdGVtLmRhdGEuZGF0YSgpICsgaXRlbS5vZmZzZXQgKyBtX2N1cnJlbnRJdGVtUmVhZFNpemUs
IGJ5dGVzVG9SZWFkKTsKKyAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSAtPSBieXRlc1RvUmVhZDsK
KworICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSArPSBieXRlc1RvUmVhZDsKKyAgICBpZiAobV9j
dXJyZW50SXRlbVJlYWRTaXplID09IGl0ZW0ubGVuZ3RoKSB7CisgICAgICAgIG1fcmVhZEl0ZW1D
b3VudCsrOworICAgICAgICBtX2N1cnJlbnRJdGVtUmVhZFNpemUgPSAwOworICAgIH0KKworICAg
IHJldHVybiBieXRlc1RvUmVhZDsKK30KKworaW50IEJsb2JSZXNvdXJjZUhhbmRsZTo6cmVhZEZp
bGVTeW5jKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSwgY2hhciogYnVmLCBpbnQgbGVuZ3RoKQor
eworICAgIEFTU0VSVCghbV9hc3luYyk7CisKKyAgICBpZiAoIW1fZmlsZU9wZW5lZCkgeworICAg
ICAgICBsb25nIGxvbmcgYnl0ZXNUb1JlYWQgPSBtX2l0ZW1MZW5ndGhMaXN0W21fcmVhZEl0ZW1D
b3VudF0gLSBtX2N1cnJlbnRJdGVtUmVhZFNpemU7CisgICAgICAgIGlmIChieXRlc1RvUmVhZCA+
IG1fdG90YWxSZW1haW5pbmdTaXplKQorICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBtX3RvdGFs
UmVtYWluaW5nU2l6ZTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9zdHJlYW0tPm9wZW5Gb3JS
ZWFkKGl0ZW0ucGF0aCwgaXRlbS5vZmZzZXQgKyBtX2N1cnJlbnRJdGVtUmVhZFNpemUsIGJ5dGVz
VG9SZWFkKTsKKyAgICAgICAgbV9jdXJyZW50SXRlbVJlYWRTaXplID0gMDsKKyAgICAgICAgaWYg
KCFzdWNjZXNzKSB7CisgICAgICAgICAgICBtX2Vycm9yQ29kZSA9IG5vdFJlYWRhYmxlRXJyb3I7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIG1fZmlsZU9wZW5l
ZCA9IHRydWU7CisgICAgfQorCisgICAgaW50IGJ5dGVzUmVhZCA9IG1fc3RyZWFtLT5yZWFkKGJ1
ZiwgbGVuZ3RoKTsKKyAgICBpZiAoYnl0ZXNSZWFkIDwgMCkgeworICAgICAgICBtX2Vycm9yQ29k
ZSA9IG5vdFJlYWRhYmxlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAo
IWJ5dGVzUmVhZCkgeworICAgICAgICBtX3N0cmVhbS0+Y2xvc2UoKTsKKyAgICAgICAgbV9maWxl
T3BlbmVkID0gZmFsc2U7CisgICAgICAgIG1fcmVhZEl0ZW1Db3VudCsrOworICAgIH0gZWxzZQor
ICAgICAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSAtPSBieXRlc1JlYWQ7CisKKyAgICByZXR1cm4g
Ynl0ZXNSZWFkOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6cmVhZEFzeW5jKCkKK3sK
KyAgICBBU1NFUlQobV9hc3luYyk7CisKKyAgICAvLyBEbyBub3QgY29udGludWUgaWYgdGhlIHJl
cXVlc3QgaXMgYWJvcnRlZCBvciBhbiBlcnJvciBvY2N1cnMuCisgICAgaWYgKG1fYWJvcnRlZCB8
fCBtX2Vycm9yQ29kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8g
bW9yZSByZW1haW5pbmcgZGF0YSB0byByZWFkLCB3ZSBhcmUgZG9uZS4KKyAgICBpZiAoIW1fdG90
YWxSZW1haW5pbmdTaXplIHx8IG1fcmVhZEl0ZW1Db3VudCA+PSBtX2Jsb2JEYXRhLT5pdGVtcygp
LnNpemUoKSkgeworICAgICAgICBub3RpZnlGaW5pc2goKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCku
YXQobV9yZWFkSXRlbUNvdW50KTsKKyAgICBpZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6
RGF0YSkKKyAgICAgICAgcmVhZERhdGFBc3luYyhpdGVtKTsKKyAgICBlbHNlIGlmIChpdGVtLnR5
cGUgPT0gQmxvYkRhdGFJdGVtOjpGaWxlKQorICAgICAgICByZWFkRmlsZUFzeW5jKGl0ZW0pOwor
ICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQmxvYlJl
c291cmNlSGFuZGxlOjpyZWFkRGF0YUFzeW5jKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSkKK3sK
KyAgICBBU1NFUlQobV9hc3luYyk7CisKKyAgICBpbnQgYnl0ZXNUb1JlYWQgPSBpdGVtLmxlbmd0
aCAtIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICBpZiAoYnl0ZXNUb1JlYWQgPiBtX3RvdGFs
UmVtYWluaW5nU2l6ZSkKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
dG90YWxSZW1haW5pbmdTaXplKTsKKyAgICBjb25zdW1lRGF0YShpdGVtLmRhdGEuZGF0YSgpICsg
aXRlbS5vZmZzZXQgKyBtX2N1cnJlbnRJdGVtUmVhZFNpemUsIGJ5dGVzVG9SZWFkKTsKKyAgICBt
X2N1cnJlbnRJdGVtUmVhZFNpemUgPSAwOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6
cmVhZEZpbGVBc3luYyhjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKG1f
YXN5bmMpOworCisgICAgaWYgKG1fZmlsZU9wZW5lZCkgeworICAgICAgICBtX2FzeW5jU3RyZWFt
LT5yZWFkKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGxvbmcgbG9uZyBieXRlc1RvUmVhZCA9IG1faXRlbUxlbmd0aExpc3Rb
bV9yZWFkSXRlbUNvdW50XSAtIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICBpZiAoYnl0ZXNU
b1JlYWQgPiBtX3RvdGFsUmVtYWluaW5nU2l6ZSkKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSBzdGF0
aWNfY2FzdDxpbnQ+KG1fdG90YWxSZW1haW5pbmdTaXplKTsKKyAgICBtX2FzeW5jU3RyZWFtLT5v
cGVuRm9yUmVhZChpdGVtLnBhdGgsIGl0ZW0ub2Zmc2V0ICsgbV9jdXJyZW50SXRlbVJlYWRTaXpl
LCBieXRlc1RvUmVhZCk7CisgICAgbV9maWxlT3BlbmVkID0gdHJ1ZTsKKyAgICBtX2N1cnJlbnRJ
dGVtUmVhZFNpemUgPSAwOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6ZGlkT3Blbihi
b29sIHN1Y2Nlc3MpCit7CisgICAgQVNTRVJUKG1fYXN5bmMpOworCisgICAgaWYgKCFzdWNjZXNz
KSB7CisgICAgICAgIGZhaWxlZChub3RSZWFkYWJsZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIENvbnRpbnVlIHRoZSByZWFkaW5nLgorICAgIHJlYWRBc3luYygpOwor
fQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6ZGlkUmVhZChpbnQgYnl0ZXNSZWFkKQorewor
ICAgIGNvbnN1bWVEYXRhKG1fYnVmZmVyLmRhdGEoKSwgYnl0ZXNSZWFkKTsKK30KKwordm9pZCBC
bG9iUmVzb3VyY2VIYW5kbGU6OmNvbnN1bWVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRl
c1JlYWQpCit7CisgICAgQVNTRVJUKG1fYXN5bmMpOworCisgICAgbV90b3RhbFJlbWFpbmluZ1Np
emUgLT0gYnl0ZXNSZWFkOworCisgICAgLy8gTm90aWZ5IHRoZSBjbGllbnQuCisgICAgaWYgKGJ5
dGVzUmVhZCkKKyAgICAgICAgbm90aWZ5UmVjZWl2ZURhdGEoZGF0YSwgYnl0ZXNSZWFkKTsKKwor
ICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVudCBpdGVt
IGlzIGEgZmlsZSBpdGVtLCB0aGUgcmVhZGluZyBpcyBjb21wbGV0ZWQgb25seSBpZiBieXRlc1Jl
YWQgaXMgMC4KKyAgICAgICAgaWYgKCFieXRlc1JlYWQpIHsKKyAgICAgICAgICAgIC8vIENsb3Nl
IHRoZSBmaWxlLgorICAgICAgICAgICAgbV9maWxlT3BlbmVkID0gZmFsc2U7CisgICAgICAgICAg
ICBtX2FzeW5jU3RyZWFtLT5jbG9zZSgpOworCisgICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBu
ZXh0IGl0ZW0uCisgICAgICAgICAgICBtX3JlYWRJdGVtQ291bnQrKzsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgcmVhZCB0aGUgY3VycmVudCB0ZXh0
IGl0ZW0gYXMgYSB3aG9sZSBhbmQgbW92ZSB0byB0aGUgbmV4dCBpdGVtLgorICAgICAgICBtX3Jl
YWRJdGVtQ291bnQrKzsKKyAgICB9CisKKyAgICAvLyBDb250aW51ZSB0aGUgcmVhZGluZy4KKyAg
ICByZWFkQXN5bmMoKTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmZhaWxlZChpbnQg
ZXJyb3JDb2RlKQoreworICAgIEFTU0VSVChtX2FzeW5jKTsKKworICAgIC8vIE5vdGlmeSB0aGUg
Y2xpZW50LgorICAgIG5vdGlmeUZhaWwoZXJyb3JDb2RlKTsKKworICAgIC8vIENsb3NlIHRoZSBm
aWxlIGlmIG5lZWRlZC4KKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAgIG1fZmlsZU9w
ZW5lZCA9IGZhbHNlOworICAgICAgICBtX2FzeW5jU3RyZWFtLT5jbG9zZSgpOworICAgIH0KK30K
Kwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6Om5vdGlmeVJlc3BvbnNlKCkKK3sKKyAgICBpZiAo
IWNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9lcnJvckNvZGUpIHsKKyAg
ICAgICAgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CisgICAgICAgIG5vdGlmeUZpbmlzaCgpOwor
ICAgIH0gZWxzZQorICAgICAgICBub3RpZnlSZXNwb25zZU9uU3VjY2VzcygpOworfQorCit2b2lk
IEJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5UmVzcG9uc2VPblN1Y2Nlc3MoKQoreworICAgIGJv
b2wgaXNSYW5nZVJlcXVlc3QgPSBtX3JhbmdlT2Zmc2V0ICE9IHBvc2l0aW9uTm90U3BlY2lmaWVk
OworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UoZmlyc3RSZXF1ZXN0KCkudXJsKCksIG1f
YmxvYkRhdGEtPmNvbnRlbnRUeXBlKCksIG1fdG90YWxSZW1haW5pbmdTaXplLCBTdHJpbmcoKSwg
U3RyaW5nKCkpOworICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChtX3RvdGFs
UmVtYWluaW5nU2l6ZSk7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaXNSYW5nZVJl
cXVlc3QgPyBwYXJ0aWFsQ29udGVudCA6IG9rKTsKKyAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVz
VGV4dChpc1JhbmdlUmVxdWVzdCA/IHBhcnRpYWxDb250ZW50VGV4dCA6IG9rVGV4dCk7CisgICAg
aWYgKCFtX2Jsb2JEYXRhLT5jb250ZW50RGlzcG9zaXRpb24oKS5pc0VtcHR5KCkpCisgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZCgiQ29udGVudC1EaXNwb3NpdGlvbiIsIG1fYmxv
YkRhdGEtPmNvbnRlbnREaXNwb3NpdGlvbigpKTsKKyAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJl
c3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6Om5v
dGlmeVJlc3BvbnNlT25FcnJvcigpCit7CisgICAgQVNTRVJUKG1fZXJyb3JDb2RlKTsKKworICAg
IFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UoZmlyc3RSZXF1ZXN0KCkudXJsKCksIFN0cmluZygp
LCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkpOworICAgIHN3aXRjaCAobV9lcnJvckNvZGUpIHsKKyAg
ICBjYXNlIHJhbmdlRXJyb3I6CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKHJl
cXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3Rh
dHVzVGV4dChyZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlVGV4dCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugbm90Rm91bmRFcnJvcjoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1
c0NvZGUobm90Rm91bmQpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChub3RG
b3VuZFRleHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHNlY3VyaXR5RXJyb3I6CisgICAg
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKG5vdEFsbG93ZWQpOworICAgICAgICByZXNw
b25zZS5zZXRIVFRQU3RhdHVzVGV4dChub3RBbGxvd2VkVGV4dCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGludGVybmFs
RXJyb3IpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChpbnRlcm5hbEVycm9y
VGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJl
c3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6Om5v
dGlmeVJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpCit7CisgICAg
aWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0
YSwgYnl0ZXNSZWFkLCBieXRlc1JlYWQpOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6
bm90aWZ5RmFpbChpbnQgZXJyb3JDb2RlKQoreworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAg
Y2xpZW50KCktPmRpZEZhaWwodGhpcywgUmVzb3VyY2VFcnJvcihTdHJpbmcoKSwgZXJyb3JDb2Rl
LCBmaXJzdFJlcXVlc3QoKS51cmwoKSwgU3RyaW5nKCkpKTsKK30KKwordm9pZCBCbG9iUmVzb3Vy
Y2VIYW5kbGU6Om5vdGlmeUZpbmlzaCgpCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBj
bGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wOWFhMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iUmVzb3Vy
Y2VIYW5kbGVfaAorI2RlZmluZSBCbG9iUmVzb3VyY2VIYW5kbGVfaAorCisjaWYgRU5BQkxFKEJM
T0IpCisKKyNpbmNsdWRlICJGaWxlU3RyZWFtQ2xpZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEFzeW5jRmlsZVN0cmVhbTsKK2NsYXNzIEJsb2JEYXRhSXRlbTsKK2NsYXNzIEJs
b2JTdG9yYWdlRGF0YTsKK2NsYXNzIEZpbGVTdHJlYW07CitjbGFzcyBSZXNvdXJjZUhhbmRsZUNs
aWVudDsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKKworY2xhc3MgQmxvYlJlc291cmNlSGFuZGxl
IDogcHVibGljIEZpbGVTdHJlYW1DbGllbnQsIHB1YmxpYyBSZXNvdXJjZUhhbmRsZSAgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKFBh
c3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iRGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LCBib29sIGFzeW5jID0gdHJ1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYlJlc291cmNlSGFuZGxl
KGJsb2JEYXRhLCByZXF1ZXN0LCBjbGllbnQsIGFzeW5jKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0
YT4gYmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJv
ciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEp
OworCisgICAgLy8gRmlsZVN0cmVhbUNsaWVudCBtZXRob2RzLgorICAgIHZpcnR1YWwgdm9pZCBk
aWRHZXRTaXplKGxvbmcgbG9uZyk7CisgICAgdmlydHVhbCB2b2lkIGRpZE9wZW4oYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlYWQoaW50KTsKKworICAgIC8vIFJlc291cmNlSGFuZGxlIG1l
dGhvZHMuCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpOworCisgICAgdm9pZCBzdGFydCgpOwor
ICAgIGludCByZWFkU3luYyhjaGFyKiwgaW50KTsKKworcHJpdmF0ZToKKyAgICBCbG9iUmVzb3Vy
Y2VIYW5kbGUoUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgYXN5bmMpOworICAgIHZpcnR1YWwgfkJs
b2JSZXNvdXJjZUhhbmRsZSgpOworCisgICAgYm9vbCBwYXJzZVJhbmdlSGVhZGVyKGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgZ2V0U2l6ZUZvck5leHQoKTsKKyAgICB2b2lkIHNlZWsoKTsKKyAg
ICB2b2lkIGNvbnN1bWVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpOworICAg
IHZvaWQgZmFpbGVkKGludCBlcnJvckNvZGUpOworCisgICAgdm9pZCByZWFkQXN5bmMoKTsKKyAg
ICB2b2lkIHJlYWREYXRhQXN5bmMoY29uc3QgQmxvYkRhdGFJdGVtJik7CisgICAgdm9pZCByZWFk
RmlsZUFzeW5jKGNvbnN0IEJsb2JEYXRhSXRlbSYpOworCisgICAgaW50IHJlYWREYXRhU3luYyhj
b25zdCBCbG9iRGF0YUl0ZW0mLCBjaGFyKiwgaW50KTsKKyAgICBpbnQgcmVhZEZpbGVTeW5jKGNv
bnN0IEJsb2JEYXRhSXRlbSYsIGNoYXIqLCBpbnQpOworCisgICAgdm9pZCBub3RpZnlSZXNwb25z
ZSgpOworICAgIHZvaWQgbm90aWZ5UmVzcG9uc2VPblN1Y2Nlc3MoKTsKKyAgICB2b2lkIG5vdGlm
eVJlc3BvbnNlT25FcnJvcigpOworICAgIHZvaWQgbm90aWZ5UmVjZWl2ZURhdGEoY29uc3QgY2hh
ciosIGludCk7CisgICAgdm9pZCBub3RpZnlGYWlsKGludCBlcnJvckNvZGUpOworICAgIHZvaWQg
bm90aWZ5RmluaXNoKCk7CisKKyAgICBSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBtX2Jsb2JEYXRh
OworICAgIGJvb2wgbV9hc3luYzsKKyAgICBSZWZQdHI8QXN5bmNGaWxlU3RyZWFtPiBtX2FzeW5j
U3RyZWFtOyAvLyBGb3IgYXN5bmNocm9ub3VzIGxvYWRpbmcuCisgICAgUmVmUHRyPEZpbGVTdHJl
YW0+IG1fc3RyZWFtOyAvLyBGb3Igc3luY2hyb25vdXMgbG9hZGluZy4KKyAgICBWZWN0b3I8Y2hh
cj4gbV9idWZmZXI7CisgICAgVmVjdG9yPGxvbmcgbG9uZz4gbV9pdGVtTGVuZ3RoTGlzdDsKKyAg
ICBpbnQgbV9lcnJvckNvZGU7CisgICAgYm9vbCBtX2Fib3J0ZWQ7CisgICAgbG9uZyBsb25nIG1f
cmFuZ2VPZmZzZXQ7CisgICAgbG9uZyBsb25nIG1fcmFuZ2VFbmQ7CisgICAgbG9uZyBsb25nIG1f
cmFuZ2VTdWZmaXhMZW5ndGg7CisgICAgbG9uZyBsb25nIG1fdG90YWxSZW1haW5pbmdTaXplOwor
ICAgIGxvbmcgbG9uZyBtX2N1cnJlbnRJdGVtUmVhZFNpemU7CisgICAgdW5zaWduZWQgbV9zaXpl
SXRlbUNvdW50OworICAgIHVuc2lnbmVkIG1fcmVhZEl0ZW1Db3VudDsKKyAgICBib29sIG1fZmls
ZU9wZW5lZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShCTE9CKQorCisjZW5kaWYgLy8gQmxvYlJlc291cmNlSGFuZGxlX2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IDA1NzU1MjMuLjJkYTFkNzcgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIgogCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
RE5TLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xp
ZW50LmgiCkBAIC01NCw2ICs1NSwxNCBAQCBSZXNvdXJjZUhhbmRsZTo6UmVzb3VyY2VIYW5kbGUo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaQogUGFzc1Jl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsCiAgICAgRnJh
bWUqIGZyYW1lLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQog
eworI2lmIEVOQUJMRShCTE9CKQorICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImJs
b2IiKSkgeworICAgICAgICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBibG9i
UmVnaXN0cnkoKS5jcmVhdGVSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQpOworICAgICAg
ICBpZiAoaGFuZGxlKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9CisjZW5kaWYK
KwogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxlKGFkb3B0UmVmKG5ldyBSZXNv
dXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRT
bmlmZikpKTsKIAogICAgIGlmIChuZXdIYW5kbGUtPmQtPm1fc2NoZWR1bGVkRmFpbHVyZVR5cGUg
IT0gTm9GYWlsdXJlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApp
bmRleCAyZWRkNGM5Li5kNTIwNzZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuaApAQCAtOTgsOSArOTgsMTAgQEAgY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJs
aWMgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT4KICAgICAsIHB1YmxpYyBBdXRoZW50aWNhdGlv
bkNsaWVudAogI2VuZGlmCiAgICAgewotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBSZXNvdXJj
ZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJv
b2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpOwogCitwcml2YXRlOgog
ICAgIGVudW0gRmFpbHVyZVR5cGUgewogICAgICAgICBOb0ZhaWx1cmUsCiAgICAgICAgIEJsb2Nr
ZWRGYWlsdXJlLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlQ2xpZW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVD
bGllbnQuaAppbmRleCAwMDk4MDEwLi45N2MwZjU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaApAQCAtNDQsOCArNDQsMTAgQEAgY2xhc3Mg
TlNDYWNoZWRVUkxSZXNwb25zZTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
Y2xhc3MgQXN5bmNGaWxlU3RyZWFtOwogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OwogICAgIGNsYXNzIENyZWRlbnRpYWw7CisgICAgY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKICAg
ICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBjbGFzcyBSZXNv
dXJjZUhhbmRsZTsKQEAgLTkyLDYgKzk0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVT
RShDRk5FVFdPUkspCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKFJl
c291cmNlSGFuZGxlKiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiByZXNwb25zZSkgeyByZXR1cm4g
dHJ1ZTsgfQogI2VuZGlmCisjaWYgRU5BQkxFKEJMT0IpCisgICAgICAgIHZpcnR1YWwgQXN5bmNG
aWxlU3RyZWFtKiBjcmVhdGVBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCopIHsgcmV0
dXJuIDA7IH0KKyNlbmRpZgogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCmluZGV4IGY3MTYxZWMuLmQwMTRiYjMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMu
bW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5t
bQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIK
ICNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uTWFjLmgiCiAjaW1wb3J0ICJCYXNlNjQuaCIKKyNpbXBv
cnQgIkJsb2JSZWdpc3RyeS5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0
ICJDcmVkZW50aWFsU3RvcmFnZS5oIgogI2ltcG9ydCAiRG9jTG9hZGVyLmgiCkBAIC00NjQsNiAr
NDY1LDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTCiB7CiAgICAgTE9HKE5ldHdvcmssICJS
ZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseTolQCBhbGxvd1N0b3JlZENy
ZWRlbnRpYWxzOiV1IiwgcmVxdWVzdC5uc1VSTFJlcXVlc3QoKSwgc3RvcmVkQ3JlZGVudGlhbHMp
OwogCisjaWYgRU5BQkxFKEJMT0IpCisgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygi
YmxvYiIpKQorICAgICAgICBpZiAoYmxvYlJlZ2lzdHJ5KCkubG9hZFJlc291cmNlU3luY2hyb25v
dXNseShyZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpKQorICAgICAgICAgICAgcmV0dXJu
OworI2VuZGlmCisKICAgICBOU0Vycm9yICpuc0Vycm9yID0gbmlsOwogICAgIE5TVVJMUmVzcG9u
c2UgKm5zVVJMUmVzcG9uc2UgPSBuaWw7CiAgICAgTlNEYXRhICpyZXN1bHQgPSBuaWw7Cg==
</data>
<flag name="commit-queue"
          id="53656"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64976</attachid>
            <date>2010-08-20 13:00:38 -0700</date>
            <delta_ts>2010-08-20 14:43:42 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43941_3</filename>
            <type>text/plain</type>
            <size>42243</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzNzhmNDUwLi4xNTA5Nzc3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTAtMDgtMjAgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhbmRsZSBibG9iIHJlc291
cmNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5
NDEKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogQWRkIGFuIGV4cG9ydCB0aGF0IGlz
IG5lZWRlIGJ5IEJsb2JSZXNvdXJjZUhhbmRsZS4KKwogMjAxMC0wOC0xOSAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2Zm
cmV5IEdhcmVuLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
IGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDVjZmExYzIuLjQxMzFl
MjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTUzNCw2ICs1MzQsNyBAQCBfX1pO
SzNKU0M5SGFzaFRhYmxlMTFkZWxldGVUYWJsZUV2CiBfX1pOSzNXVEYxMkF0b21pY1N0cmluZzVs
b3dlckV2CiBfX1pOSzNXVEY2U3RyaW5nMTF0b0ludFN0cmljdEVQYmkKIF9fWk5LM1dURjZTdHJp
bmcxMnRvVUludFN0cmljdEVQYmkKK19fWk5LM1dURjZTdHJpbmcxM3RvSW50NjRTdHJpY3RFUGJp
CiBfX1pOSzNXVEY2U3RyaW5nMTR0aHJlYWRzYWZlQ29weUV2CiBfX1pOSzNXVEY2U3RyaW5nMTVz
dHJpcFdoaXRlU3BhY2VFdgogX19aTkszV1RGNlN0cmluZzE2cmVtb3ZlQ2hhcmFjdGVyc0VQRmJ0
RQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9BbmRyb2lkLm1rIGIvV2ViQ29yZS9BbmRyb2lkLm1rCmlu
ZGV4IGFjMTA2MGEuLmMxYjM3MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQW5kcm9pZC5taworKysg
Yi9XZWJDb3JlL0FuZHJvaWQubWsKQEAgLTUzMSw2ICs1MzEsNyBAQCBMT0NBTF9TUkNfRklMRVMg
Oj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlQmFzZS5jcHAgXAogCXBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwIFwKIAlw
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwKKwlwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAgXAogCXBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5j
cHAgXAogCXBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIFwKIAlwbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzZmU2YzJjLi45YTg2NGNjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTEzMDcsNiArMTMwNyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JEYXRhLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWI3M2M5
Yi4uZDRjMzkxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsNSArMSw0OCBAQAogMjAxMC0wOC0yMCAgSmlhbiBMaSAgPGppYW5saUBj
aHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSGFuZGxlIGJsb2IgcmVzb3VyY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mzk0MQorCisgICAgICAgIFRvIHByb3ZpZGUgbG93ZXIgbGV2
ZWwgYmxvYiByZW9zdXJjZSBoYW5kbGluZyBmb3IgYWxsIHBvc3NpYmxlIHBvcnRzLAorICAgICAg
ICBCbG9iUmVzb3VyY2VIYW5kbGUgZGVyaXZlZCBmcm9tIFJlc291cmNlSGFuZGxlIGlzIGltcGxl
bWVudGVkLiBJdCBwcm92aWRlcworICAgICAgICBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hy
b25vdXMgcmVzb3VyY2UgbG9hZGluZyBmb3IgYmxvYiBVUkwuCisKKyAgICAgICAgQmxvYlJlc291
cmNlSGFuZGxlIG5lZWRzIHRvIGNyZWF0ZSBhIEZpbGVTdHJlYW1Qcm94eSBpbnN0YW5jZSBpbiBv
cmRlciB0bworICAgICAgICBhc3luY2hyb25vdXMgZmlsZSBzdHJlYW0gb3BlcmF0aW9uLiBUbyBh
Y2hpdmUgdGhpcywgYSBob29rIGNyZWF0ZUFzeW5jRmlsZVN0cmVhbQorICAgICAgICBpcyBhZGRl
ZCB0byBSZXNvdXJjZUhhbmRsZUNsaWVudCBpbnRlcmZhY2UuIFdoZW4gUmVzb3VyY2VMb2FkZXIg
aW1wbGVtZW50cworICAgICAgICB0aHMgaG9vaywgaXQgY3JlYXRlcyBhbmQgcmV0dXJucyBGaWxl
U3RyZWFtUHJveHkuCisKKyAgICAgICAgQmxvYlJlc291cmNlSGFuZGxlLiogaXMgbm90IGFkZGVk
IHRvIGNocm9taXVtIHBvcnQgc2luY2UgaXQgd2lsbCBpbXBsZW1lbnQKKyAgICAgICAgaXRzIG93
biBibG9iIHJlc291cmNlIGhhbmRsaW5nLgorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZGVyOjpjcmVhdGVBc3luY0ZpbGVTdHJlYW0pOiBDcmVhdGUgYW5kIHJldHVybiBGaWxlU3RyZWFt
UHJveHkuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogcGFn
ZS9TZWN1cml0eU9yaWdpbi5jcHA6IEFkZCB0aGUgc3VwcG9ydCB0byBnZXQgYW5kIHZhbGlkYXRl
IHRoZSBvcmlnaW4gb2YgYmxvYiBVUkwuCisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW1zKTogRml4IGEg
YnVnIHRoYXQgdGhlIGxlbmd0aCBpcyBub3Qgc3VidHJhY3RlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOiBIb29rIHVwIHdpdGggYXN5bmNocm9ub3Vz
IGJsb2IgcmVzb3VyY2UgaGFuZGxpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OmNyZWF0ZUFzeW5jRmlsZVN0cmVh
bSk6IEFkZCBhIGhvb2suCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VI
YW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseSk6IEhvb2sgdXAgd2l0aCBzeW5jaHJvbm91cyBibG9iIHJlc291cmNl
IGhhbmRsaW5nLgorCisyMDEwLTA4LTIwICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4K
KwogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KIAogICAgICAgICBNb3ZlIEZpbGVT
dHJlYW1DbGllbnQgdG8gcGxhdGZvcm0gYW5kIGFkZCBBc3luY0ZpbGVTdHJlYW0gaW50ZXJmYWNl
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KaW5kZXggNWFjZWZjMS4uMjY5N2ViNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMDk5LDYgKzIwOTksOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnkuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlN0b3JhZ2VEYXRhLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9D
cmVkZW50aWFsLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpp
bmRleCBhMGUzNTU2Li4zOWIzZDYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTkzMSw2ICs5MzEsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5jcHAgXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJj
ZUhhbmRsZS5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAgXAogICAg
IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhQnVpbGRlci5jcHAgXApAQCAtMTcyOSw2ICsxNzMwLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeS5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaCBc
CisgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaCBcCiAgICAgcGxhdGZv
cm0vbmV0d29yay9CbG9iU3RvcmFnZURhdGEuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9DcmVk
ZW50aWFsLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmggXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNzE5NzkzZS4uYTc2MTk1OSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNjg3Miw2ICsyNjg3MiwxNCBA
QAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cbmV0d29ya1xCbG9iUmVzb3VyY2VIYW5kbGUuY3BwIg0KKwkJCQkJPg0KKwkJ
CQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5l
dHdvcmtcQmxvYlJlc291cmNlSGFuZGxlLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJ
PEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xCbG9iU3RvcmFn
ZURhdGEuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2M5ZGViYy4uMmZmYjlhMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcwNCw2ICs3MDQsOCBAQAogCQkyRUE3
NjgwNDBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUE3NjgwMzBGRTcxMjY0
MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi87IH07CiAJCTJFQUZBRjBF
MTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFQUZBRjBCMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmNwcCAq
LzsgfTsKIAkJMkVBRkFGMEYxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQUZBRjBDMTBFMkFGMkQwMDdFRDNE
NiAvKiBCbG9iLmggKi87IH07CisJCTJFQjRCQ0QyMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVz
b3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAg
Ki87IH07CisJCTJFQjRCQ0QzMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQjRCQ0Qx
MTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCAqLzsgfTsKIAkJMkVDRjdB
REMxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQTEwMTYyQjM4MDA0MjdERTcgLyog
SlNFcnJvckV2ZW50LmNwcCAqLzsgfTsKIAkJMkVDRjdBREQxMDE2MkIzODAwNDI3REU3IC8qIEpT
RXJyb3JFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkVDRjdBREIxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5oICovOyB9OwogCQky
RUNGN0FFMTEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FERTEwMTYyQjU4MDA0MjdERTcg
LyogRXJyb3JFdmVudC5jcHAgKi87IH07CkBAIC02NTE5LDYgKzY1MjEsOCBAQAogCQkyRUFGQUYw
QjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCbG9iLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVBRkFG
MEMxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmxvYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUFGQUYwRDEwRTJB
RjJEMDA3RUQzRDYgLyogQmxvYi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQmxvYi5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFQjRCQ0QwMTIxRjAzRTMwMEVDNDg4NSAv
KiBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQmxvYlJlc291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iUmVzb3VyY2VIYW5kbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVDRjdBREExMDE2MkIzODAwNDI3REU3IC8qIEpTRXJy
b3JFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Vycm9y
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUNGN0FEQjEwMTYyQjM4
MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRXJyb3JFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUNGN0FE
RTEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFcnJvckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyNDUyLDYgKzEyNDU2LDggQEAKIAkJCQkyRURFRjFFRjEyMUIwRUZDMDA3MjZEQjIg
LyogQmxvYlJlZ2lzdHJ5LmggKi8sCiAJCQkJMkVERUYxRjAxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JSZWdpc3RyeUltcGwuY3BwICovLAogCQkJCTJFREVGMUYxMTIxQjBFRkMwMDcyNkRCMiAvKiBC
bG9iUmVnaXN0cnlJbXBsLmggKi8sCisJCQkJMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJs
b2JSZXNvdXJjZUhhbmRsZS5jcHAgKi8sCisJCQkJMkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8q
IEJsb2JSZXNvdXJjZUhhbmRsZS5oICovLAogCQkJCTJFREVGMUYyMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iU3RvcmFnZURhdGEuaCAqLywKIAkJCQk1MTRDNzY1ODBDRTkyM0ExMDA3RUYzQ0QgLyog
Q3JlZGVudGlhbC5jcHAgKi8sCiAJCQkJNTE0Qzc2NTkwQ0U5MjNBMTAwN0VGM0NEIC8qIENyZWRl
bnRpYWwuaCAqLywKQEAgLTIwMzMzLDYgKzIwMzM5LDcgQEAKIAkJCQk0NkEyNjkwNjEyMUI2QjQz
MDBDNDFGM0EgLyogRmlsZVdyaXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVGMUJGRjcxMjFD
QjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVG
MUJGRjkxMjFDQjBDRTAwQzI3NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTJFQjRCQ0QzMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMjI3ODQsNiArMjI3OTEsNyBAQAogCQkJCTJFREVGMUY2MTIxQjBF
RkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJF
RjFCRkVBMTIxQzlGNDIwMEMyNzYyNyAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQ2QTI2OTA1MTIxQjZCNDMwMEM0MUYzQSAvKiBGaWxlV3JpdGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTJFQjRCQ0QyMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggNTdlNTNl
Yi4uYzczMDhiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CisrKyBiL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcApAQCAtMzIsNiArMzIsNyBA
QAogCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgorI2luY2x1ZGUgIkZpbGVTdHJlYW1Qcm94eS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmgiCkBAIC01MTEsNCArNTEyLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxD
YWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgQ2FjaGVTdG9yYWdlUG9saWN5JiBwb2xpCiAg
ICAgICAgIHBvbGljeSA9IFN0b3JhZ2VBbGxvd2VkSW5NZW1vcnlPbmx5OyAgICAKIH0KIAorI2lm
IEVOQUJMRShCTE9CKQorQXN5bmNGaWxlU3RyZWFtKiBSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlQXN5
bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKK3sKKyAgICAvLyBJdCBpcyBP
SyB0byBzaW1wbHkgcmV0dXJuIGEgcG9pbnRlciBzaW5jZSBGaWxlU3RyZWFtUHJveHk6OmNyZWF0
ZSBhZGRzIGFuIGV4dHJhIHJlZi4KKyAgICByZXR1cm4gRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUo
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjbGllbnQpLmdl
dCgpOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmggYi9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCmluZGV4IGNiZGQ4YzIu
Ljk1MTNmZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKKysr
IGIvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaApAQCAtMTE4LDYgKzExOCw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIENGQ2FjaGVkVVJMUmVzcG9u
c2VSZWYpOwogI2VuZGlmCisjaWYgRU5BQkxFKEJMT0IpCisgICAgICAgIHZpcnR1YWwgQXN5bmNG
aWxlU3RyZWFtKiBjcmVhdGVBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCopOworI2Vu
ZGlmCiAKICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFuZGxlLmdldCgpOyB9CiAgICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcCBiL1dlYkNvcmUvcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHAKaW5kZXggZjc1OTQwMi4uNWI1MTUwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL1NlY3VyaXR5T3JpZ2luLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKIAorI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJLVVJMLmgiCkBAIC0xMjMs
NiArMTI0LDEwIEBAIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGUoY29uc3QgS1VSTCYgdXJsLCBTYW5kYm94RmxhZ3MKIHsKICAgICBpZiAoIXVybC5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4oS1VSTCgp
LCBzYW5kYm94RmxhZ3MpKTsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBpZiAodXJsLnByb3RvY29s
SXMoImJsb2IiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWN1cml0eU9yaWdpbihC
bG9iVVJMOjpnZXRPcmlnaW4odXJsKSwgc2FuZGJveEZsYWdzKSk7CisjZW5kaWYKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKHVybCwgc2FuZGJveEZsYWdzKSk7CiB9CiAK
QEAgLTI3NSw2ICsyODAsMTQgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNBY2Nlc3NXaGl0ZUxp
c3RlZChjb25zdCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKSBjb24KICAgCiBib29sIFNl
Y3VyaXR5T3JpZ2luOjpjYW5Mb2FkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgRG9jdW1lbnQqIGRvY3VtZW50KQogeworI2lmIEVOQUJMRShCTE9CKQorICAgIGlmICh1
cmwucHJvdG9jb2xJcygiYmxvYiIpICYmIGRvY3VtZW50KSB7CisgICAgICAgIFNlY3VyaXR5T3Jp
Z2luKiBkb2N1bWVudE9yaWdpbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpOworICAgICAg
ICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGUodXJsKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50T3JpZ2luLT5pc1NhbWVTY2hlbWVI
b3N0UG9ydCh0YXJnZXRPcmlnaW4uZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKCFT
Y2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvY2FsKHVybC5zdHJpbmcoKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAKaW5kZXggMDBjMGI3NS4uZWU4NzJlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMTEzLDYgKzExMyw3IEBAIHZvaWQg
QmxvYlJlZ2lzdHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW1zKEJsb2JTdG9yYWdlRGF0YSogYmxv
YlN0b3JhZ2VEYXRhLCBjb25zCiAgICAgICAgICAgICBBU1NFUlQoaXRlci0+dHlwZSA9PSBCbG9i
RGF0YUl0ZW06OkZpbGUpOwogICAgICAgICAgICAgYmxvYlN0b3JhZ2VEYXRhLT5tX2RhdGEuYXBw
ZW5kRmlsZShpdGVyLT5wYXRoLCBpdGVyLT5vZmZzZXQgKyBvZmZzZXQsIG5ld0xlbmd0aCwgaXRl
ci0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKICAgICAgICAgfQorICAgICAgICBsZW5ndGgg
LT0gbmV3TGVuZ3RoOwogICAgICAgICBvZmZzZXQgPSAwOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDMwMTU3MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC0wLDAgKzEsNjQwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9i
UmVzb3VyY2VIYW5kbGUuaCIKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN0cmVhbS5oIgorI2luY2x1
ZGUgIkJsb2JSZWdpc3RyeUltcGwuaCIKKyNpbmNsdWRlICJGaWxlU3RyZWFtLmgiCisjaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVy
cm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJ1ZmZlclNpemUgPSAxMDI0Oworc3RhdGlj
IGNvbnN0IGludCBtYXhWZWN0b3JMZW5ndGggPSAweDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGxv
bmcgbG9uZyBwb3NpdGlvbk5vdFNwZWNpZmllZCA9IC0xOworCitzdGF0aWMgY29uc3QgaW50IG9r
ID0gMjAwOworc3RhdGljIGNvbnN0IGludCBwYXJ0aWFsQ29udGVudCA9IDIwNjsKK3N0YXRpYyBj
b25zdCBpbnQgbm90QWxsb3dlZCA9IDQwMzsKK3N0YXRpYyBjb25zdCBpbnQgbm90Rm91bmQgPSA0
MDQ7CitzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTY7
CitzdGF0aWMgY29uc3QgaW50IGludGVybmFsRXJyb3IgPSA1MDA7CitzdGF0aWMgY29uc3QgY2hh
ciogb2tUZXh0ID0gIk9LIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBwYXJ0aWFsQ29udGVudFRleHQg
PSAiUGFydGlhbCBDb250ZW50IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBub3RBbGxvd2VkVGV4dCA9
ICJOb3QgQWxsb3dlZCI7CitzdGF0aWMgY29uc3QgY2hhciogbm90Rm91bmRUZXh0ID0gIk5vdCBG
b3VuZCI7CitzdGF0aWMgY29uc3QgY2hhciogcmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZVRl
eHQgPSAiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSI7CitzdGF0aWMgY29uc3QgY2hh
ciogaW50ZXJuYWxFcnJvclRleHQgPSAiSW50ZXJuYWwgU2VydmVyIEVycm9yIjsKKworc3RhdGlj
IGNvbnN0IGludCBub3RGb3VuZEVycm9yID0gMTsKK3N0YXRpYyBjb25zdCBpbnQgc2VjdXJpdHlF
cnJvciA9IDI7CitzdGF0aWMgY29uc3QgaW50IHJhbmdlRXJyb3IgPSAzOworc3RhdGljIGNvbnN0
IGludCBub3RSZWFkYWJsZUVycm9yID0gNDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8g
QmxvYlJlc291cmNlU3luY2hyb25vdXNMb2FkZXIKKworY2xhc3MgQmxvYlJlc291cmNlU3luY2hy
b25vdXNMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworcHVibGljOgorICAg
IEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJl
c3BvbnNlJiwgVmVjdG9yPGNoYXI+Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBp
bnQsIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisKK3ByaXZhdGU6CisgICAgUmVzb3Vy
Y2VFcnJvciYgbV9lcnJvcjsKKyAgICBSZXNvdXJjZVJlc3BvbnNlJiBtX3Jlc3BvbnNlOworICAg
IFZlY3RvcjxjaGFyPiYgbV9kYXRhOworfTsKKworQmxvYlJlc291cmNlU3luY2hyb25vdXNMb2Fk
ZXI6OkJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQorICAgIDogbV9l
cnJvcihlcnJvcikKKyAgICAsIG1fcmVzcG9uc2UocmVzcG9uc2UpCisgICAgLCBtX2RhdGEoZGF0
YSkKK3sKK30KKwordm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIC8vIFdlIGNhbm5vdCBoYW5kbGUgdGhlIHNpemUgdGhhdCBpcyBt
b3JlIHRoYW4gbWF4aW11bSBpbnRlZ2VyLgorICAgIGNvbnN0IGludCBpbnRNYXhGb3JMZW5ndGgg
PSAweDdmZmZmZmZmOworICAgIGlmIChyZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSA+
IGludE1heEZvckxlbmd0aCkgeworICAgICAgICBtX2Vycm9yID0gUmVzb3VyY2VFcnJvcihTdHJp
bmcoKSwgbm90UmVhZGFibGVFcnJvciwgcmVzcG9uc2UudXJsKCksIFN0cmluZygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIC8v
IFJlYWQgYWxsIHRoZSBkYXRhLgorICAgIG1fZGF0YS5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90
PihyZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSkpOworICAgIHN0YXRpY19jYXN0PEJs
b2JSZXNvdXJjZUhhbmRsZSo+KGhhbmRsZSktPnJlYWRTeW5jKG1fZGF0YS5kYXRhKCksIHN0YXRp
Y19jYXN0PGludD4obV9kYXRhLnNpemUoKSkpOworfQorCit2b2lkIEJsb2JSZXNvdXJjZVN5bmNo
cm9ub3VzTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIq
LCBpbnQsIGludCkKK3sKK30KKwordm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6
ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopCit7Cit9CisKK3ZvaWQgQmxvYlJlc291
cmNlU3luY2hyb25vdXNMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBtX2Vycm9yID0gZXJyb3I7Cit9CisKKy8vIHN0YXRp
Ywordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoUGFz
c1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIEJsb2JSZXNvdXJjZVN5bmNocm9ub3VzTG9h
ZGVyIGxvYWRlcihlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgIFJlZlB0cjxCbG9iUmVzb3Vy
Y2VIYW5kbGU+IGhhbmRsZSA9IEJsb2JSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKGJsb2JEYXRhLCBy
ZXF1ZXN0LCAmbG9hZGVyLCBmYWxzZSk7CisgICAgaGFuZGxlLT5zdGFydCgpOworfQorCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLyBCbG9iUmVzb3VyY2VIYW5kbGUKKworc3RhdGljIHZvaWQg
ZGVsYXllZFN0YXJ0KHZvaWQqIGNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8QmxvYlJlc291
cmNlSGFuZGxlKj4oY29udGV4dCktPnN0YXJ0KCk7Cit9CisKK0Jsb2JSZXNvdXJjZUhhbmRsZTo6
QmxvYlJlc291cmNlSGFuZGxlKFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iRGF0YSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xp
ZW50LCBib29sIGFzeW5jKQorICAgIDogUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LCBm
YWxzZSwgZmFsc2UpCisgICAgLCBtX2Jsb2JEYXRhKGJsb2JEYXRhKQorICAgICwgbV9hc3luYyhh
c3luYykKKyAgICAsIG1fZXJyb3JDb2RlKDApCisgICAgLCBtX2Fib3J0ZWQoZmFsc2UpCisgICAg
LCBtX3JhbmdlT2Zmc2V0KHBvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICwgbV9yYW5nZUVuZChw
b3NpdGlvbk5vdFNwZWNpZmllZCkKKyAgICAsIG1fcmFuZ2VTdWZmaXhMZW5ndGgocG9zaXRpb25O
b3RTcGVjaWZpZWQpCisgICAgLCBtX3RvdGFsUmVtYWluaW5nU2l6ZSgwKQorICAgICwgbV9jdXJy
ZW50SXRlbVJlYWRTaXplKDApCisgICAgLCBtX3NpemVJdGVtQ291bnQoMCkKKyAgICAsIG1fcmVh
ZEl0ZW1Db3VudCgwKQorICAgICwgbV9maWxlT3BlbmVkKGZhbHNlKQoreyAgICAKKyAgICBpZiAo
bV9hc3luYykgeworICAgICAgICBtX2FzeW5jU3RyZWFtID0gYWRvcHRSZWYoY2xpZW50LT5jcmVh
dGVBc3luY0ZpbGVTdHJlYW0odGhpcykpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRlbGF5
ZWRTdGFydCwgdGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc3RyZWFtID0gRmlsZVN0cmVh
bTo6Y3JlYXRlKCk7Cit9CisKK0Jsb2JSZXNvdXJjZUhhbmRsZTo6fkJsb2JSZXNvdXJjZUhhbmRs
ZSgpCit7CisgICAgaWYgKG1fYXN5bmMpIHsKKyAgICAgICAgaWYgKG1fYXN5bmNTdHJlYW0pCisg
ICAgICAgICAgICBtX2FzeW5jU3RyZWFtLT5zdG9wKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKG1fc3RyZWFtKQorICAgICAgICAgICAgbV9zdHJlYW0tPnN0b3AoKTsKKyAgICB9Cit9CisK
K3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQoreworICAgIGlmIChtX2FzeW5jKSB7
CisgICAgICAgIGlmIChtX2FzeW5jU3RyZWFtKSB7CisgICAgICAgICAgICBtX2FzeW5jU3RyZWFt
LT5zdG9wKCk7CisgICAgICAgICAgICBtX2FzeW5jU3RyZWFtID0gMDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fYWJvcnRlZCA9IHRydWU7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxl
OjpzdGFydCgpCit7CisgICAgLy8gRG8gbm90IGNvbnRpbnVlIGlmIHRoZSByZXF1ZXN0IGlzIGFi
b3J0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgorICAgIGlmIChtX2Fib3J0ZWQgfHwgbV9lcnJvckNv
ZGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBibG9iIGRhdGEgaXMgbm90IGZv
dW5kLCBmYWlsIG5vdy4KKyAgICBpZiAoIW1fYmxvYkRhdGEpIHsKKyAgICAgICAgbV9lcnJvckNv
ZGUgPSBub3RGb3VuZEVycm9yOworICAgICAgICBub3RpZnlSZXNwb25zZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gUGFyc2UgdGhlICJSYW5nZSIgaGVhZGVyIHdlIGNhcmUg
YWJvdXQuCisgICAgU3RyaW5nIHJhbmdlID0gZmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxk
KCJSYW5nZSIpOworICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpICYmICFwYXJzZVJhbmdlSGVhZGVy
KHJhbmdlKSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IHJhbmdlRXJyb3I7CisgICAgICAgIG5v
dGlmeVJlc3BvbnNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9hc3lu
YykKKyAgICAgICAgZ2V0U2l6ZUZvck5leHQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Jsb2JEYXRhLT5pdGVtcygpLnNpemUoKSAmJiAhbV9hYm9ydGVk
ICYmICFtX2Vycm9yQ29kZTsgKytpKQorICAgICAgICAgICAgZ2V0U2l6ZUZvck5leHQoKTsKKyAg
ICAgICAgbm90aWZ5UmVzcG9uc2UoKTsKKyAgICB9Cit9CisKK2Jvb2wgQmxvYlJlc291cmNlSGFu
ZGxlOjpwYXJzZVJhbmdlSGVhZGVyKGNvbnN0IFN0cmluZyYgcmFuZ2UpCit7CisgICAgLy8gV2Ug
b25seSBjYXJlIGFib3V0IHRoZSAiUmFuZ2UiIGhlYWRlci4KKyAgICAvLyBUaGUgZm9ybWF0IG9m
ICJSYW5nZSIgaGVhZGVyIGlzIGRlZmluZWQgaW4gUkZDIDI2MTYgU2VjdGlvbiAxNC4zNS4xLgor
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTQu
aHRtbCNzZWMxNC4zNS4xCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSByYW5nZSBy
ZXF1ZXN0cy4KKworICAgIC8vIFRoZSAiYnl0ZXMiIHVuaXQgaWRlbnRpZmllciBzaG91bGQgYmUg
cHJlc2VudC4KKyAgICBzdGF0aWMgY29uc3QgY2hhciBieXRlc1N0YXJ0W10gPSAiYnl0ZXM9Ijsg
CisgICAgaWYgKCFyYW5nZS5zdGFydHNXaXRoKGJ5dGVzU3RhcnQsIGZhbHNlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFN0cmluZyBieXRlUmFuZ2UgPSByYW5nZS5zdWJzdHJpbmcoc2l6
ZW9mKGJ5dGVzU3RhcnQpIC0gMSk7CisKKyAgICAvLyBUaGUgJy0nIGNoYXJhY3RlciBuZWVkcyB0
byBiZSBwcmVzZW50LgorICAgIGludCBpbmRleCA9IGJ5dGVSYW5nZS5maW5kKCctJyk7CisgICAg
aWYgKGluZGV4ID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUg
Jy0nIGNoYXJhY3RlciBpcyBhdCB0aGUgYmVnaW5uaW5nLCB0aGUgc3VmZml4IGxlbmd0aCwgd2hp
Y2ggc3BlY2lmaWVzIHRoZSBsYXN0IE4gYnl0ZXMsIGlzIHByb3ZpZGVkLgorICAgIC8vIEV4YW1w
bGU6CisgICAgLy8gICAgIC01MDAKKyAgICBpZiAoIWluZGV4KSB7CisgICAgICAgIFN0cmluZyBz
dWZmaXhMZW5ndGhTdHJpbmcgPSBieXRlUmFuZ2Uuc3Vic3RyaW5nKGluZGV4ICsgMSkuc3RyaXBX
aGl0ZVNwYWNlKCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIGxvbmcgbG9uZyB2YWx1ZSA9
IHN1ZmZpeExlbmd0aFN0cmluZy50b0ludDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmIChvaykK
KyAgICAgICAgICAgIG1fcmFuZ2VTdWZmaXhMZW5ndGggPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgZmlyc3QtYnl0ZS1wb3NpdGlv
biBhbmQgdGhlIGxhc3QtYnl0ZS1wb3NpdGlvbiBhcmUgcHJvdmllZC4KKyAgICAvLyBFeGFtcGxl
czoKKyAgICAvLyAgICAgMC00OTkKKyAgICAvLyAgICAgNTAwLQorICAgIFN0cmluZyBmaXJzdEJ5
dGVQb3NTdHIgPSBieXRlUmFuZ2UubGVmdChpbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAg
Ym9vbCBvazsKKyAgICBsb25nIGxvbmcgZmlyc3RCeXRlUG9zID0gZmlyc3RCeXRlUG9zU3RyLnRv
SW50NjRTdHJpY3QoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBTdHJpbmcgbGFzdEJ5dGVQb3NTdHIgPSBieXRlUmFuZ2Uuc3Vic3RyaW5nKGluZGV4ICsg
MSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgbG9uZyBsb25nIGxhc3RCeXRlUG9zID0gcG9zaXRp
b25Ob3RTcGVjaWZpZWQ7CisgICAgaWYgKCFsYXN0Qnl0ZVBvc1N0ci5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbGFzdEJ5dGVQb3MgPSBsYXN0Qnl0ZVBvc1N0ci50b0ludDY0U3RyaWN0KCZvayk7Cisg
ICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKGZpcnN0Qnl0ZVBvcyA8IDAgfHwgIShsYXN0Qnl0ZVBvcyA9PSBwb3NpdGlvbk5vdFNwZWNp
ZmllZCB8fCBsYXN0Qnl0ZVBvcyA+PSBmaXJzdEJ5dGVQb3MpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBtX3JhbmdlT2Zmc2V0ID0gZmlyc3RCeXRlUG9zOworICAgIG1fcmFuZ2VFbmQg
PSBsYXN0Qnl0ZVBvczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VI
YW5kbGU6OmdldFNpemVGb3JOZXh0KCkKK3sKKyAgICAvLyBEbyB3ZSBmaW5pc2ggdmFsaWRhdGlu
ZyBhbmQgY291bnRpbmcgc2l6ZSBmb3IgYWxsIGl0ZW1zPworICAgIGlmIChtX3NpemVJdGVtQ291
bnQgPj0gbV9ibG9iRGF0YS0+aXRlbXMoKS5zaXplKCkpIHsKKyAgICAgICAgc2VlaygpOworCisg
ICAgICAgIC8vIFN0YXJ0IHJlYWRpbmcgaWYgaW4gYXN5bmNocm9ub3VzIG1vZGUuCisgICAgICAg
IGlmIChtX2FzeW5jKSB7CisgICAgICAgICAgICBub3RpZnlSZXNwb25zZSgpOworICAgICAgICAg
ICAgbV9idWZmZXIucmVzaXplKGJ1ZmZlclNpemUpOworICAgICAgICAgICAgcmVhZEFzeW5jKCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEJsb2JEYXRh
SXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQobV9zaXplSXRlbUNvdW50KTsKKyAg
ICBzd2l0Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgorICAg
ICAgICBkaWRHZXRTaXplKGl0ZW0ubGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
bG9iRGF0YUl0ZW06OkZpbGU6CisgICAgICAgIGlmIChtX2FzeW5jKQorICAgICAgICAgICAgbV9h
c3luY1N0cmVhbS0+Z2V0U2l6ZShpdGVtLnBhdGgsIGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25U
aW1lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlkR2V0U2l6ZShtX3N0cmVhbS0+Z2V0
U2l6ZShpdGVtLnBhdGgsIGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmRpZEdldFNpemUobG9uZyBsb25nIHNp
emUpCit7CisgICAgLy8gRG8gbm90IGNvbnRpbnVlIGlmIHRoZSByZXF1ZXN0IGlzIGFib3J0ZWQg
b3IgYW4gZXJyb3Igb2NjdXJzLgorICAgIGlmIChtX2Fib3J0ZWQgfHwgbV9lcnJvckNvZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBzaXplIGlzIC0xLCBpdCBtZWFucyB0aGUg
ZmlsZSBoYXMgYmVlbiBtb3ZlZCBvciBjaGFuZ2VkLiBGYWlsIG5vdy4KKyAgICBpZiAoc2l6ZSA9
PSAtMSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IG5vdEZvdW5kRXJyb3I7CisgICAgICAgIG5v
dGlmeVJlc3BvbnNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgc2l6
ZSBwYXNzZWQgYmFjayBpcyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgZmlsZS4gSWYgdGhlIHVuZGVy
bHlpbmcgaXRlbSBpcyBhIHNsaWNlZCBmaWxlLCB3ZSBuZWVkIHRvIHVzZSB0aGUgc2xpY2UgbGVu
Z3RoLgorICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCku
YXQobV9zaXplSXRlbUNvdW50KTsKKyAgICBpZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6
RmlsZSAmJiBpdGVtLmxlbmd0aCAhPSBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKQorICAgICAg
ICBzaXplID0gaXRlbS5sZW5ndGg7CisKKyAgICAvLyBDYWNoZSB0aGUgc2l6ZS4KKyAgICBtX2l0
ZW1MZW5ndGhMaXN0LmFwcGVuZChzaXplKTsKKworICAgIC8vIENvdW50IHRoZSBzaXplLgorICAg
IG1fdG90YWxSZW1haW5pbmdTaXplICs9IHNpemU7CisgICAgbV9zaXplSXRlbUNvdW50Kys7CisK
KyAgICAvLyBDb250aW51ZSB3aXRoIHRoZSBuZXh0IGl0ZW0uCisgICAgZ2V0U2l6ZUZvck5leHQo
KTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OnNlZWsoKQoreworICAgIC8vIENvbnZl
cnQgZnJvbSB0aGUgc3VmZml4IGxlbmd0aCB0byB0aGUgcmFuZ2UuCisgICAgaWYgKG1fcmFuZ2VT
dWZmaXhMZW5ndGggIT0gcG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbV9yYW5nZU9m
ZnNldCA9IG1fdG90YWxSZW1haW5pbmdTaXplIC0gbV9yYW5nZVN1ZmZpeExlbmd0aDsKKyAgICAg
ICAgbV9yYW5nZUVuZCA9IG1fcmFuZ2VPZmZzZXQgKyBtX3JhbmdlU3VmZml4TGVuZ3RoIC0gMTsK
KyAgICB9CisKKyAgICAvLyBCYWlsIG91dCBpZiB0aGUgcmFuZ2UgaXMgbm90IHByb3ZpZGVkLgor
ICAgIGlmIChtX3JhbmdlT2Zmc2V0ID09IHBvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBTa2lwIHRoZSBpbml0aWFsIGl0ZW1zIHRoYXQgYXJlIG5vdCBpbiB0
aGUgcmFuZ2UuCisgICAgbG9uZyBsb25nIG9mZnNldCA9IG1fcmFuZ2VPZmZzZXQ7CisgICAgZm9y
IChtX3JlYWRJdGVtQ291bnQgPSAwOyBtX3JhbmdlT2Zmc2V0ID4gMCAmJiBtX3JlYWRJdGVtQ291
bnQgPj0gbV9ibG9iRGF0YS0+aXRlbXMoKS5zaXplKCkgJiYgb2Zmc2V0ID49IG1faXRlbUxlbmd0
aExpc3RbbV9yZWFkSXRlbUNvdW50XTsgKyttX3JlYWRJdGVtQ291bnQpCisgICAgICAgIG9mZnNl
dCAtPSBtX2l0ZW1MZW5ndGhMaXN0W21fcmVhZEl0ZW1Db3VudF07CisKKyAgICAvLyBTZXQgdGhl
IG9mZnNldCB0aGF0IG5lZWQgdG8ganVtcCB0byBmb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHJh
bmdlLgorICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IG9mZnNldDsKKworICAgIC8vIEFkanVz
dCB0aGUgdG90YWwgcmVtYWluaW5nIHNpemUgaW4gb3JkZXIgbm90IHRvIGdvIGJleW9uZCB0aGUg
cmFuZ2UuCisgICAgaWYgKG1fcmFuZ2VFbmQgIT0gcG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAg
ICAgICAgbG9uZyBsb25nIHJhbmdlU2l6ZSA9IG1fcmFuZ2VFbmQgLSBtX3JhbmdlT2Zmc2V0ICsg
MTsKKyAgICAgICAgaWYgKG1fdG90YWxSZW1haW5pbmdTaXplID4gcmFuZ2VTaXplKQorICAgICAg
ICAgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgPSByYW5nZVNpemU7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fdG90YWxSZW1haW5pbmdTaXplIC09IG1fcmFuZ2VPZmZzZXQ7Cit9CisKK2ludCBCbG9i
UmVzb3VyY2VIYW5kbGU6OnJlYWRTeW5jKGNoYXIqIGJ1ZiwgaW50IGxlbmd0aCkKK3sKKyAgICBB
U1NFUlQoIW1fYXN5bmMpOworCisgICAgaW50IG9mZnNldCA9IDA7CisgICAgaW50IHJlbWFpbmlu
ZyA9IGxlbmd0aDsKKyAgICB3aGlsZSAocmVtYWluaW5nKSB7CisgICAgICAgIC8vIERvIG5vdCBj
b250aW51ZSBpZiB0aGUgcmVxdWVzdCBpcyBhYm9ydGVkIG9yIGFuIGVycm9yIG9jY3Vycy4KKyAg
ICAgICAgaWYgKG1fYWJvcnRlZCB8fCBtX2Vycm9yQ29kZSkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1vcmUgcmVtYWluaW5nIGRhdGEgdG8gcmVhZCwg
d2UgYXJlIGRvbmUuCisgICAgICAgIGlmICghbV90b3RhbFJlbWFpbmluZ1NpemUgfHwgbV9yZWFk
SXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX2Jsb2JE
YXRhLT5pdGVtcygpLmF0KG1fcmVhZEl0ZW1Db3VudCk7CisgICAgICAgIGludCBieXRlc1JlYWQg
PSAwOworICAgICAgICBpZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6RGF0YSkKKyAgICAg
ICAgICAgIGJ5dGVzUmVhZCA9IHJlYWREYXRhU3luYyhpdGVtLCBidWYgKyBvZmZzZXQsIHJlbWFp
bmluZyk7CisgICAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PSBCbG9iRGF0YUl0ZW06OkZpbGUp
CisgICAgICAgICAgICBieXRlc1JlYWQgPSByZWFkRmlsZVN5bmMoaXRlbSwgYnVmICsgb2Zmc2V0
LCByZW1haW5pbmcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICBpZiAoYnl0ZXNSZWFkID4gMCkgeworICAgICAgICAgICAgb2Zmc2V0
ICs9IGJ5dGVzUmVhZDsKKyAgICAgICAgICAgIHJlbWFpbmluZyAtPSBieXRlc1JlYWQ7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpbnQgcmVzdWx0OworICAgIGlmIChtX2Fib3J0ZWQgfHwgbV9l
cnJvckNvZGUpCisgICAgICAgIHJlc3VsdCA9IC0xOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0
ID0gbGVuZ3RoIC0gcmVtYWluaW5nOworCisgICAgbm90aWZ5UmVjZWl2ZURhdGEoYnVmLCByZXN1
bHQpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBub3RpZnlGaW5pc2goKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2ludCBCbG9iUmVzb3VyY2VIYW5kbGU6OnJlYWREYXRhU3luYyhj
b25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0sIGNoYXIqIGJ1ZiwgaW50IGxlbmd0aCkKK3sKKyAgICBB
U1NFUlQoIW1fYXN5bmMpOworCisgICAgbG9uZyBsb25nIHJlbWFpbmluZyA9IGl0ZW0ubGVuZ3Ro
IC0gbV9jdXJyZW50SXRlbVJlYWRTaXplOworICAgIGludCBieXRlc1RvUmVhZCA9IChsZW5ndGgg
PiByZW1haW5pbmcpID8gc3RhdGljX2Nhc3Q8aW50PihyZW1haW5pbmcpIDogbGVuZ3RoOworICAg
IGlmIChieXRlc1RvUmVhZCA+IG1fdG90YWxSZW1haW5pbmdTaXplKQorICAgICAgICBieXRlc1Rv
UmVhZCA9IHN0YXRpY19jYXN0PGludD4obV90b3RhbFJlbWFpbmluZ1NpemUpOworICAgIG1lbWNw
eShidWYsIGl0ZW0uZGF0YS5kYXRhKCkgKyBpdGVtLm9mZnNldCArIG1fY3VycmVudEl0ZW1SZWFk
U2l6ZSwgYnl0ZXNUb1JlYWQpOworICAgIG1fdG90YWxSZW1haW5pbmdTaXplIC09IGJ5dGVzVG9S
ZWFkOworCisgICAgbV9jdXJyZW50SXRlbVJlYWRTaXplICs9IGJ5dGVzVG9SZWFkOworICAgIGlm
IChtX2N1cnJlbnRJdGVtUmVhZFNpemUgPT0gaXRlbS5sZW5ndGgpIHsKKyAgICAgICAgbV9yZWFk
SXRlbUNvdW50Kys7CisgICAgICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IDA7CisgICAgfQor
CisgICAgcmV0dXJuIGJ5dGVzVG9SZWFkOworfQorCitpbnQgQmxvYlJlc291cmNlSGFuZGxlOjpy
ZWFkRmlsZVN5bmMoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtLCBjaGFyKiBidWYsIGludCBsZW5n
dGgpCit7CisgICAgQVNTRVJUKCFtX2FzeW5jKTsKKworICAgIGlmICghbV9maWxlT3BlbmVkKSB7
CisgICAgICAgIGxvbmcgbG9uZyBieXRlc1RvUmVhZCA9IG1faXRlbUxlbmd0aExpc3RbbV9yZWFk
SXRlbUNvdW50XSAtIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICAgICAgaWYgKGJ5dGVzVG9S
ZWFkID4gbV90b3RhbFJlbWFpbmluZ1NpemUpCisgICAgICAgICAgICBieXRlc1RvUmVhZCA9IG1f
dG90YWxSZW1haW5pbmdTaXplOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+b3Bl
bkZvclJlYWQoaXRlbS5wYXRoLCBpdGVtLm9mZnNldCArIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSwg
Ynl0ZXNUb1JlYWQpOworICAgICAgICBtX2N1cnJlbnRJdGVtUmVhZFNpemUgPSAwOworICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIG1fZXJyb3JDb2RlID0gbm90UmVhZGFibGVF
cnJvcjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgbV9maWxl
T3BlbmVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gbV9zdHJlYW0tPnJl
YWQoYnVmLCBsZW5ndGgpOworICAgIGlmIChieXRlc1JlYWQgPCAwKSB7CisgICAgICAgIG1fZXJy
b3JDb2RlID0gbm90UmVhZGFibGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghYnl0ZXNSZWFkKSB7CisgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworICAgICAgICBt
X2ZpbGVPcGVuZWQgPSBmYWxzZTsKKyAgICAgICAgbV9yZWFkSXRlbUNvdW50Kys7CisgICAgfSBl
bHNlCisgICAgICAgIG1fdG90YWxSZW1haW5pbmdTaXplIC09IGJ5dGVzUmVhZDsKKworICAgIHJl
dHVybiBieXRlc1JlYWQ7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpyZWFkQXN5bmMo
KQoreworICAgIEFTU0VSVChtX2FzeW5jKTsKKworICAgIC8vIERvIG5vdCBjb250aW51ZSBpZiB0
aGUgcmVxdWVzdCBpcyBhYm9ydGVkIG9yIGFuIGVycm9yIG9jY3Vycy4KKyAgICBpZiAobV9hYm9y
dGVkIHx8IG1fZXJyb3JDb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGVyZSBp
cyBubyBtb3JlIHJlbWFpbmluZyBkYXRhIHRvIHJlYWQsIHdlIGFyZSBkb25lLgorICAgIGlmICgh
bV90b3RhbFJlbWFpbmluZ1NpemUgfHwgbV9yZWFkSXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0
ZW1zKCkuc2l6ZSgpKSB7CisgICAgICAgIG5vdGlmeUZpbmlzaCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9ibG9iRGF0YS0+aXRl
bXMoKS5hdChtX3JlYWRJdGVtQ291bnQpOworICAgIGlmIChpdGVtLnR5cGUgPT0gQmxvYkRhdGFJ
dGVtOjpEYXRhKQorICAgICAgICByZWFkRGF0YUFzeW5jKGl0ZW0pOworICAgIGVsc2UgaWYgKGl0
ZW0udHlwZSA9PSBCbG9iRGF0YUl0ZW06OkZpbGUpCisgICAgICAgIHJlYWRGaWxlQXN5bmMoaXRl
bSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBC
bG9iUmVzb3VyY2VIYW5kbGU6OnJlYWREYXRhQXN5bmMoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVt
KQoreworICAgIEFTU0VSVChtX2FzeW5jKTsKKworICAgIGxvbmcgbG9uZyBieXRlc1RvUmVhZCA9
IGl0ZW0ubGVuZ3RoIC0gbV9jdXJyZW50SXRlbVJlYWRTaXplOworICAgIGlmIChieXRlc1RvUmVh
ZCA+IG1fdG90YWxSZW1haW5pbmdTaXplKQorICAgICAgICBieXRlc1RvUmVhZCA9IG1fdG90YWxS
ZW1haW5pbmdTaXplOworICAgIGNvbnN1bWVEYXRhKGl0ZW0uZGF0YS5kYXRhKCkgKyBpdGVtLm9m
ZnNldCArIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSwgc3RhdGljX2Nhc3Q8aW50PihieXRlc1RvUmVh
ZCkpOworICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IDA7Cit9CisKK3ZvaWQgQmxvYlJlc291
cmNlSGFuZGxlOjpyZWFkRmlsZUFzeW5jKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSkKK3sKKyAg
ICBBU1NFUlQobV9hc3luYyk7CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAgIG1f
YXN5bmNTdHJlYW0tPnJlYWQobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbG9uZyBsb25nIGJ5dGVzVG9SZWFkID0gbV9pdGVt
TGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRdIC0gbV9jdXJyZW50SXRlbVJlYWRTaXplOworICAg
IGlmIChieXRlc1RvUmVhZCA+IG1fdG90YWxSZW1haW5pbmdTaXplKQorICAgICAgICBieXRlc1Rv
UmVhZCA9IHN0YXRpY19jYXN0PGludD4obV90b3RhbFJlbWFpbmluZ1NpemUpOworICAgIG1fYXN5
bmNTdHJlYW0tPm9wZW5Gb3JSZWFkKGl0ZW0ucGF0aCwgaXRlbS5vZmZzZXQgKyBtX2N1cnJlbnRJ
dGVtUmVhZFNpemUsIGJ5dGVzVG9SZWFkKTsKKyAgICBtX2ZpbGVPcGVuZWQgPSB0cnVlOworICAg
IG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IDA7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxl
OjpkaWRPcGVuKGJvb2wgc3VjY2VzcykKK3sKKyAgICBBU1NFUlQobV9hc3luYyk7CisKKyAgICBp
ZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgZmFpbGVkKG5vdFJlYWRhYmxlRXJyb3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ29udGludWUgdGhlIHJlYWRpbmcuCisgICAgcmVh
ZEFzeW5jKCk7Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpkaWRSZWFkKGludCBieXRl
c1JlYWQpCit7CisgICAgY29uc3VtZURhdGEobV9idWZmZXIuZGF0YSgpLCBieXRlc1JlYWQpOwor
fQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6Y29uc3VtZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBBU1NFUlQobV9hc3luYyk7CisKKyAgICBtX3RvdGFs
UmVtYWluaW5nU2l6ZSAtPSBieXRlc1JlYWQ7CisKKyAgICAvLyBOb3RpZnkgdGhlIGNsaWVudC4K
KyAgICBpZiAoYnl0ZXNSZWFkKQorICAgICAgICBub3RpZnlSZWNlaXZlRGF0YShkYXRhLCBieXRl
c1JlYWQpOworCisgICAgaWYgKG1fZmlsZU9wZW5lZCkgeworICAgICAgICAvLyBXaGVuIHRoZSBj
dXJyZW50IGl0ZW0gaXMgYSBmaWxlIGl0ZW0sIHRoZSByZWFkaW5nIGlzIGNvbXBsZXRlZCBvbmx5
IGlmIGJ5dGVzUmVhZCBpcyAwLgorICAgICAgICBpZiAoIWJ5dGVzUmVhZCkgeworICAgICAgICAg
ICAgLy8gQ2xvc2UgdGhlIGZpbGUuCisgICAgICAgICAgICBtX2ZpbGVPcGVuZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIG1fYXN5bmNTdHJlYW0tPmNsb3NlKCk7CisKKyAgICAgICAgICAgIC8vIE1v
dmUgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgICAgICAgIG1fcmVhZEl0ZW1Db3VudCsrOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSByZWFkIHRoZSBj
dXJyZW50IHRleHQgaXRlbSBhcyBhIHdob2xlIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisg
ICAgICAgIG1fcmVhZEl0ZW1Db3VudCsrOworICAgIH0KKworICAgIC8vIENvbnRpbnVlIHRoZSBy
ZWFkaW5nLgorICAgIHJlYWRBc3luYygpOworfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6
ZmFpbGVkKGludCBlcnJvckNvZGUpCit7CisgICAgQVNTRVJUKG1fYXN5bmMpOworCisgICAgLy8g
Tm90aWZ5IHRoZSBjbGllbnQuCisgICAgbm90aWZ5RmFpbChlcnJvckNvZGUpOworCisgICAgLy8g
Q2xvc2UgdGhlIGZpbGUgaWYgbmVlZGVkLgorICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAg
ICAgbV9maWxlT3BlbmVkID0gZmFsc2U7CisgICAgICAgIG1fYXN5bmNTdHJlYW0tPmNsb3NlKCk7
CisgICAgfQorfQorCit2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5UmVzcG9uc2UoKQor
eworICAgIGlmICghY2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Vycm9y
Q29kZSkgeworICAgICAgICBub3RpZnlSZXNwb25zZU9uRXJyb3IoKTsKKyAgICAgICAgbm90aWZ5
RmluaXNoKCk7CisgICAgfSBlbHNlCisgICAgICAgIG5vdGlmeVJlc3BvbnNlT25TdWNjZXNzKCk7
Cit9CisKK3ZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpub3RpZnlSZXNwb25zZU9uU3VjY2Vzcygp
Cit7CisgICAgYm9vbCBpc1JhbmdlUmVxdWVzdCA9IG1fcmFuZ2VPZmZzZXQgIT0gcG9zaXRpb25O
b3RTcGVjaWZpZWQ7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShmaXJzdFJlcXVlc3Qo
KS51cmwoKSwgbV9ibG9iRGF0YS0+Y29udGVudFR5cGUoKSwgbV90b3RhbFJlbWFpbmluZ1NpemUs
IFN0cmluZygpLCBTdHJpbmcoKSk7CisgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVu
Z3RoKG1fdG90YWxSZW1haW5pbmdTaXplKTsKKyAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZShpc1JhbmdlUmVxdWVzdCA/IHBhcnRpYWxDb250ZW50IDogb2spOworICAgIHJlc3BvbnNlLnNl
dEhUVFBTdGF0dXNUZXh0KGlzUmFuZ2VSZXF1ZXN0ID8gcGFydGlhbENvbnRlbnRUZXh0IDogb2tU
ZXh0KTsKKyAgICBpZiAoIW1fYmxvYkRhdGEtPmNvbnRlbnREaXNwb3NpdGlvbigpLmlzRW1wdHko
KSkKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKCJDb250ZW50LURpc3Bvc2l0
aW9uIiwgbV9ibG9iRGF0YS0+Y29udGVudERpc3Bvc2l0aW9uKCkpOworICAgIGNsaWVudCgpLT5k
aWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworfQorCit2b2lkIEJsb2JSZXNvdXJj
ZUhhbmRsZTo6bm90aWZ5UmVzcG9uc2VPbkVycm9yKCkKK3sKKyAgICBBU1NFUlQobV9lcnJvckNv
ZGUpOworCisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShmaXJzdFJlcXVlc3QoKS51cmwo
KSwgU3RyaW5nKCksIDAsIFN0cmluZygpLCBTdHJpbmcoKSk7CisgICAgc3dpdGNoIChtX2Vycm9y
Q29kZSkgeworICAgIGNhc2UgcmFuZ2VFcnJvcjoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0
YXR1c0NvZGUocmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSk7CisgICAgICAgIHJlc3BvbnNl
LnNldEhUVFBTdGF0dXNUZXh0KHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVUZXh0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBub3RGb3VuZEVycm9yOgorICAgICAgICByZXNwb25zZS5z
ZXRIVFRQU3RhdHVzQ29kZShub3RGb3VuZCk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0
dXNUZXh0KG5vdEZvdW5kVGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc2VjdXJpdHlF
cnJvcjoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUobm90QWxsb3dlZCk7Cisg
ICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KG5vdEFsbG93ZWRUZXh0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0Nv
ZGUoaW50ZXJuYWxFcnJvcik7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGlu
dGVybmFsRXJyb3JUZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNsaWVudCgpLT5k
aWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworfQorCit2b2lkIEJsb2JSZXNvdXJj
ZUhhbmRsZTo6bm90aWZ5UmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVh
ZCkKK3sKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0
YSh0aGlzLCBkYXRhLCBieXRlc1JlYWQsIGJ5dGVzUmVhZCk7Cit9CisKK3ZvaWQgQmxvYlJlc291
cmNlSGFuZGxlOjpub3RpZnlGYWlsKGludCBlcnJvckNvZGUpCit7CisgICAgaWYgKGNsaWVudCgp
KQorICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yKFN0cmluZygp
LCBlcnJvckNvZGUsIGZpcnN0UmVxdWVzdCgpLnVybCgpLCBTdHJpbmcoKSkpOworfQorCit2b2lk
IEJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5RmluaXNoKCkKK3sKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjA5YWExYTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisg
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
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEJsb2JSZXNvdXJjZUhhbmRsZV9oCisjZGVmaW5lIEJsb2JSZXNvdXJjZUhhbmRsZV9oCisKKyNp
ZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXN5bmNGaWxlU3RyZWFtOworY2xhc3MgQmxvYkRhdGFJdGVt
OworY2xhc3MgQmxvYlN0b3JhZ2VEYXRhOworY2xhc3MgRmlsZVN0cmVhbTsKK2NsYXNzIFJlc291
cmNlSGFuZGxlQ2xpZW50OworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworCitjbGFzcyBCbG9iUmVz
b3VyY2VIYW5kbGUgOiBwdWJsaWMgRmlsZVN0cmVhbUNsaWVudCwgcHVibGljIFJlc291cmNlSGFu
ZGxlICB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYlJlc291cmNlSGFuZGxl
PiBjcmVhdGUoUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JEYXRhLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wg
YXN5bmMgPSB0cnVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iUmVz
b3VyY2VIYW5kbGUoYmxvYkRhdGEsIHJlcXVlc3QsIGNsaWVudCwgYXN5bmMpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFBhc3NSZWZQdHI8Qmxv
YlN0b3JhZ2VEYXRhPiBibG9iRGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBS
ZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjxj
aGFyPiYgZGF0YSk7CisKKyAgICAvLyBGaWxlU3RyZWFtQ2xpZW50IG1ldGhvZHMuCisgICAgdmly
dHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkT3Bl
bihib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZChpbnQpOworCisgICAgLy8gUmVzb3Vy
Y2VIYW5kbGUgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CisKKyAgICB2b2lk
IHN0YXJ0KCk7CisgICAgaW50IHJlYWRTeW5jKGNoYXIqLCBpbnQpOworCitwcml2YXRlOgorICAg
IEJsb2JSZXNvdXJjZUhhbmRsZShQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4sIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBhc3luYyk7CisgICAg
dmlydHVhbCB+QmxvYlJlc291cmNlSGFuZGxlKCk7CisKKyAgICBib29sIHBhcnNlUmFuZ2VIZWFk
ZXIoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBnZXRTaXplRm9yTmV4dCgpOworICAgIHZvaWQg
c2VlaygpOworICAgIHZvaWQgY29uc3VtZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVz
UmVhZCk7CisgICAgdm9pZCBmYWlsZWQoaW50IGVycm9yQ29kZSk7CisKKyAgICB2b2lkIHJlYWRB
c3luYygpOworICAgIHZvaWQgcmVhZERhdGFBc3luYyhjb25zdCBCbG9iRGF0YUl0ZW0mKTsKKyAg
ICB2b2lkIHJlYWRGaWxlQXN5bmMoY29uc3QgQmxvYkRhdGFJdGVtJik7CisKKyAgICBpbnQgcmVh
ZERhdGFTeW5jKGNvbnN0IEJsb2JEYXRhSXRlbSYsIGNoYXIqLCBpbnQpOworICAgIGludCByZWFk
RmlsZVN5bmMoY29uc3QgQmxvYkRhdGFJdGVtJiwgY2hhciosIGludCk7CisKKyAgICB2b2lkIG5v
dGlmeVJlc3BvbnNlKCk7CisgICAgdm9pZCBub3RpZnlSZXNwb25zZU9uU3VjY2VzcygpOworICAg
IHZvaWQgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CisgICAgdm9pZCBub3RpZnlSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2b2lkIG5vdGlmeUZhaWwoaW50IGVycm9yQ29kZSk7
CisgICAgdm9pZCBub3RpZnlGaW5pc2goKTsKKworICAgIFJlZlB0cjxCbG9iU3RvcmFnZURhdGE+
IG1fYmxvYkRhdGE7CisgICAgYm9vbCBtX2FzeW5jOworICAgIFJlZlB0cjxBc3luY0ZpbGVTdHJl
YW0+IG1fYXN5bmNTdHJlYW07IC8vIEZvciBhc3luY2hyb25vdXMgbG9hZGluZy4KKyAgICBSZWZQ
dHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07IC8vIEZvciBzeW5jaHJvbm91cyBsb2FkaW5nLgorICAg
IFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBWZWN0b3I8bG9uZyBsb25nPiBtX2l0ZW1MZW5n
dGhMaXN0OworICAgIGludCBtX2Vycm9yQ29kZTsKKyAgICBib29sIG1fYWJvcnRlZDsKKyAgICBs
b25nIGxvbmcgbV9yYW5nZU9mZnNldDsKKyAgICBsb25nIGxvbmcgbV9yYW5nZUVuZDsKKyAgICBs
b25nIGxvbmcgbV9yYW5nZVN1ZmZpeExlbmd0aDsKKyAgICBsb25nIGxvbmcgbV90b3RhbFJlbWFp
bmluZ1NpemU7CisgICAgbG9uZyBsb25nIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICB1bnNp
Z25lZCBtX3NpemVJdGVtQ291bnQ7CisgICAgdW5zaWduZWQgbV9yZWFkSXRlbUNvdW50OworICAg
IGJvb2wgbV9maWxlT3BlbmVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEJMT0IpCisKKyNlbmRpZiAvLyBCbG9iUmVzb3VyY2VIYW5kbGVfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggMDU3NTUyMy4u
MmRhMWQ3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJETlMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGVDbGllbnQuaCIKQEAgLTU0LDYgKzU1LDE0IEBAIFJlc291cmNlSGFuZGxlOjpSZXNv
dXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxl
Q2xpCiBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVu
dCwKICAgICBGcmFtZSogZnJhbWUsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250
ZW50U25pZmYpCiB7CisjaWYgRU5BQkxFKEJMT0IpCisgICAgaWYgKHJlcXVlc3QudXJsKCkucHJv
dG9jb2xJcygiYmxvYiIpKSB7CisgICAgICAgIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhh
bmRsZSA9IGJsb2JSZWdpc3RyeSgpLmNyZWF0ZVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVu
dCk7CisgICAgICAgIGlmIChoYW5kbGUpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlOworICAg
IH0KKyNlbmRpZgorCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBuZXdIYW5kbGUoYWRvcHRS
ZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hv
dWxkQ29udGVudFNuaWZmKSkpOwogCiAgICAgaWYgKG5ld0hhbmRsZS0+ZC0+bV9zY2hlZHVsZWRG
YWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCmluZGV4IDJlZGQ0YzkuLmQ1MjA3NmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZS5oCkBAIC05OCw5ICs5OCwxMCBAQCBjbGFzcyBSZXNvdXJjZUhh
bmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPgogICAgICwgcHVibGljIEF1
dGhlbnRpY2F0aW9uQ2xpZW50CiAjZW5kaWYKICAgICB7Ci1wcml2YXRlOgorcHJvdGVjdGVkOgog
ICAgIFJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxl
Q2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZik7CiAK
K3ByaXZhdGU6CiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAgICAgICAgIE5vRmFpbHVyZSwKICAg
ICAgICAgQmxvY2tlZEZhaWx1cmUsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZUNsaWVudC5oCmluZGV4IDAwOTgwMTAuLjk3YzBmNTQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCkBAIC00NCw4ICs0NCwx
MCBAQCBjbGFzcyBOU0NhY2hlZFVSTFJlc3BvbnNlOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICBjbGFzcyBBc3luY0ZpbGVTdHJlYW07CiAgICAgY2xhc3MgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ3JlZGVudGlhbDsKKyAgICBjbGFzcyBGaWxlU3RyZWFt
Q2xpZW50OwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUHJvdGVjdGlvblNwYWNlOwogICAg
IGNsYXNzIFJlc291cmNlSGFuZGxlOwpAQCAtOTIsNiArOTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjaWYgVVNFKENGTkVUV09SSykKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZENhY2hl
UmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNl
KSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAgICAgdmly
dHVhbCBBc3luY0ZpbGVTdHJlYW0qIGNyZWF0ZUFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xp
ZW50KikgeyByZXR1cm4gMDsgfQorI2VuZGlmCiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbSBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KaW5kZXggZjcxNjFlYy4u
ZDAxNGJiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJj
ZUhhbmRsZU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
SGFuZGxlTWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgogI2ltcG9ydCAiQXV0aGVudGljYXRpb25NYWMuaCIKICNpbXBvcnQgIkJhc2U2
NC5oIgorI2ltcG9ydCAiQmxvYlJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMu
aCIKICNpbXBvcnQgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAjaW1wb3J0ICJEb2NMb2FkZXIuaCIK
QEAgLTQ2NCw2ICs0NjUsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFMKIHsKICAgICBMT0co
TmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiVAIGFs
bG93U3RvcmVkQ3JlZGVudGlhbHM6JXUiLCByZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpLCBzdG9yZWRD
cmVkZW50aWFscyk7CiAKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBpZiAocmVxdWVzdC51cmwoKS5w
cm90b2NvbElzKCJibG9iIikpCisgICAgICAgIGlmIChibG9iUmVnaXN0cnkoKS5sb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSkpCisgICAgICAg
ICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIE5TRXJyb3IgKm5zRXJyb3IgPSBuaWw7CiAgICAg
TlNVUkxSZXNwb25zZSAqbnNVUkxSZXNwb25zZSA9IG5pbDsKICAgICBOU0RhdGEgKnJlc3VsdCA9
IG5pbDsK
</data>
<flag name="review"
          id="53663"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="53664"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>