<?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>153910</bug_id>
          
          <creation_ts>2016-02-04 21:28:28 -0800</creation_ts>
          <short_desc>Clean up Blob code</short_desc>
          <delta_ts>2016-02-05 08:57:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1162312</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-04 21:28:28 -0800</bug_when>
    <thetext>Clean up Blob code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162313</commentid>
    <comment_count>1</comment_count>
      <attachid>270725</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-04 21:37:58 -0800</bug_when>
    <thetext>Created attachment 270725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162334</commentid>
    <comment_count>2</comment_count>
      <attachid>270736</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-04 22:42:51 -0800</bug_when>
    <thetext>Created attachment 270736
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162335</commentid>
    <comment_count>3</comment_count>
      <attachid>270737</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-04 22:51:30 -0800</bug_when>
    <thetext>Created attachment 270737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162338</commentid>
    <comment_count>4</comment_count>
      <attachid>270737</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-02-04 23:01:09 -0800</bug_when>
    <thetext>Comment on attachment 270737
Patch

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

&gt; Source/WebCore/fileapi/Blob.h:79
&gt; +#ifndef NDEBUG

If this is for assertions only, then it should be using ASSERT_DISABLED macro (name from memory).

&gt; Source/WebCore/platform/network/BlobRegistry.h:69
&gt; +    virtual ~BlobRegistry() { };

This is not an improvement - constructors and destructors of polymorphic classes should not be inline, because of code size bloat.

&gt; Source/WebCore/platform/network/BlobRegistryImpl.cpp:78
&gt; +        return nullptr;

Does return value optimization work in functions with multiple exit points?

&gt; Source/WebCore/platform/network/BlobRegistryImpl.h:70
&gt; +    HashMap&lt;URL, RefPtr&lt;BlobData&gt;&gt; m_blobs;

Why is this better? URL is a large object. Do we waste time reparsing them later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162392</commentid>
    <comment_count>5</comment_count>
      <attachid>270737</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-05 08:46:15 -0800</bug_when>
    <thetext>Comment on attachment 270737
Patch

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

&gt;&gt; Source/WebCore/platform/network/BlobRegistryImpl.cpp:78
&gt;&gt; +        return nullptr;
&gt; 
&gt; Does return value optimization work in functions with multiple exit points?

Yes.

&gt; Source/WebCore/platform/network/BlobRegistryImpl.cpp:149
&gt; -            if (!m_blobs.contains(part.url().string()))
&gt; +            if (!m_blobs.contains(part.url()))
&gt;                  return;
&gt; -            for (const BlobDataItem&amp; item : m_blobs.get(part.url().string())-&gt;items())
&gt; +            for (const BlobDataItem&amp; item : m_blobs.get(part.url())-&gt;items())

I am going to make this only lookup the url once in the HashMap, though.

&gt;&gt; Source/WebCore/platform/network/BlobRegistryImpl.h:70
&gt;&gt; +    HashMap&lt;URL, RefPtr&lt;BlobData&gt;&gt; m_blobs;
&gt; 
&gt; Why is this better? URL is a large object. Do we waste time reparsing them later?

I thought it was more clear, and we don&apos;t reparse them, but you&apos;re right: this is a memory regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162396</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-05 08:57:26 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/196174</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270725</attachid>
            <date>2016-02-04 21:37:58 -0800</date>
            <delta_ts>2016-02-04 22:42:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153910-20160204213735.patch</filename>
            <type>text/plain</type>
            <size>17281</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjE2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE2LTAyLTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ2xlYW4gdXAg
QmxvYiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTM5MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGNzcy9T
dHlsZVNoZWV0Lmg6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bm9ybWFsaXplZENvbnRl
bnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmlzTm9ybWFsaXplZENvbnRlbnRUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnJlZ2lzdHJ5KToKKyAgICAgICAgKiBmaWxlYXBp
L0Jsb2IuaDoKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2JVUkwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6
OmNyZWF0ZUJsb2JVUkwpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYlVSTC5oOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYlVSTDo6QmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpi
bG9iUHJvdG9jb2wpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtU3RyYXRl
Z2llcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0Zm9ybVN0cmF0ZWdpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6aGFzUGxhdGZvcm1TdHJhdGVnaWVzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibG9iUmVnaXN0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5Ojp+QmxvYlJlZ2lzdHJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iUmVnaXN0cnlJbXBsOjp+QmxvYlJlZ2lzdHJ5SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVSZXNvdXJjZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RlckJsb2JSZXNv
dXJjZUhhbmRsZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUlt
cGw6OmNyZWF0ZVJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3Ry
eUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0
cnlJbXBsOjpyZWdpc3RlckZpbGVCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdp
c3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0
cnlJbXBsOjpyZWdpc3RlckJsb2JVUkxGb3JTbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
UmVnaXN0cnlJbXBsOjp1bnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
UmVnaXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZyb21VUkwpOgorICAgICAgICAoV2ViQ29yZTo6Qmxv
YlJlZ2lzdHJ5SW1wbDo6YmxvYlNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNl
SGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5k
bGU6OkJsb2JSZXNvdXJjZUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRCbG9iUmVzb2x2ZWQpOgorICAgICAg
ICBBIEJsb2JSZWdpc3RyeSBpcyBhbHdheXMgYSBCbG9iUmVnaXN0cnlJbXBsLiAgVGhpcyBjaGVj
ayBpcyBsZWZ0b3ZlciBmcm9tIHRoZSBjaHJvbWl1bSBkYXlzLgorICAgICAgICBJIHBsYW4gdG8g
Z2V0IHJpZCBvZiBCbG9iUmVnaXN0cnlJbXBsLiAgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTExMDAKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmg6CisKIDIwMTYtMDItMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3JUaW1lbGluZUFnZW50
IGRvZXNuJ3QgbmVlZCB0byByZWNvbXBpbGUgZnVuY3Rpb25zIGJlY2F1c2UgaXQgbm93IHVzZXMg
dGhlIHNhbXBsaW5nIHByb2ZpbGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgJKHJldmlz
aW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNkZWZpbmUgU3R5bGVTaGVldF9oCiAKICNpbmNsdWRl
ICJDU1NQYXJzZXJNb2RlLmgiCi0jaW5jbHVkZSAiVVJMSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gMTk2MDkz
KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwLDcgKzEwMCw3IEBAIEJsb2I6OkJsb2IoRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciwgY28K
ICAgICAsIG1fc2l6ZShzaXplKQogewogICAgIG1faW50ZXJuYWxVUkwgPSBCbG9iVVJMOjpjcmVh
dGVJbnRlcm5hbFVSTCgpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxv
YlVSTCgwLCBtX2ludGVybmFsVVJMLCBzcmNVUkwpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0
cnk6OnJlZ2lzdGVyQmxvYlVSTChudWxscHRyLCBtX2ludGVybmFsVVJMLCBzcmNVUkwpOwogfQog
CiBCbG9iOjpCbG9iKGNvbnN0IFVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9u
ZyBlbmQsIGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTE0Niw2ICsxNDYsNyBAQCBTdHJpbmcgQmxv
Yjo6bm9ybWFsaXplZENvbnRlbnRUeXBlKGNvbnN0CiAgICAgcmV0dXJuIGNvbnRlbnRUeXBlLmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCiBib29sIEJsb2I6
OmlzTm9ybWFsaXplZENvbnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7CiAg
ICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSB3YW50IHRvIHRyZWF0IHRoZSBlbXB0eSBzdHJpbmcg
YW5kIG51bGwgc3RyaW5nIGFzIHZhbGlkIGNvbnRlbnQgdHlwZXM/CkBAIC0xNzIsNiArMTczLDcg
QEAgYm9vbCBCbG9iOjppc05vcm1hbGl6ZWRDb250ZW50VHlwZShjb25zdAogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgogCiBVUkxSZWdpc3RyeSYgQmxvYjo6cmVnaXN0cnkoKSBj
b25zdAogewpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDE5NjA5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niwx
MCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZENvbnRlbnRUeXBlKGNvbnN0IFN0
cmluZyYpOwogICAgIC8vIFRoZSBub3JtYWxpemF0aW9uIHByb2NlZHVyZSBkZXNjcmliZWQgaW4g
dGhlIEZpbGUgQVBJIHNwZWMuCiAgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVkQ29udGVudFR5
cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgLy8gSW50ZW5kZWQgZm9yIHVzZSBpbiBBU1NFUlQgc3Rh
dGVtZW50cy4KKyNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGJvb2wgaXNOb3JtYWxpemVkQ29u
dGVudFR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIGJvb2wgaXNOb3JtYWxpemVkQ29u
dGVudFR5cGUoY29uc3QgQ1N0cmluZyYpOworI2VuZGlmCiAKICAgICAvLyBVUkxSZWdpc3RyYWJs
ZQogICAgIHZpcnR1YWwgVVJMUmVnaXN0cnkmIHJlZ2lzdHJ5KCkgY29uc3Qgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBjaGFyIEJsb2JVUkw6OmtC
bG9iUHJvdG9jb2xbXSA9ICJibG9iIjsKK2NvbnN0IGNoYXIqIGtCbG9iUHJvdG9jb2wgPSAiYmxv
YiI7CiAKIFVSTCBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luKQogewpAQCAtNzIsNyArNzIsNyBAQCBTdHJpbmcgQmxvYlVSTDo6Z2V0SWRlbnRp
Zmllcihjb25zdCBVUkwmCiBVUkwgQmxvYlVSTDo6Y3JlYXRlQmxvYlVSTChjb25zdCBTdHJpbmcm
IG9yaWdpblN0cmluZykKIHsKICAgICBBU1NFUlQoIW9yaWdpblN0cmluZy5pc0VtcHR5KCkpOwot
ICAgIFN0cmluZyB1cmxTdHJpbmcgPSAiYmxvYjoiICsgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVl
bmNlcyhvcmlnaW5TdHJpbmcpICsgJy8nICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwor
ICAgIFN0cmluZyB1cmxTdHJpbmcgPSBrQmxvYlByb3RvY29sICsgZW5jb2RlV2l0aFVSTEVzY2Fw
ZVNlcXVlbmNlcyhvcmlnaW5TdHJpbmcpICsgJy8nICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpOwogICAgIHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDExICs1Miw5
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVVJMIGNyZWF0ZUludGVybmFsVVJMKCk7CiAgICAgc3Rh
dGljIFN0cmluZyBnZXRPcmlnaW4oY29uc3QgVVJMJik7CiAgICAgc3RhdGljIFN0cmluZyBnZXRJ
ZGVudGlmaWVyKGNvbnN0IFVSTCYpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBibG9iUHJvdG9j
b2woKSB7IHJldHVybiBrQmxvYlByb3RvY29sOyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFVS
TCBjcmVhdGVCbG9iVVJMKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKTsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciBrQmxvYlByb3RvY29sW107CiAgICAgQmxvYlVSTCgpIHsgfQogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShy
ZXZpc2lvbiAxOTYwOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksNSBAQCB2b2lkIHNldFBsYXRm
b3JtU3RyYXRlZ2llcyhQbGF0Zm9ybVN0cmF0CiAgICAgQVNTRVJUKHBsYXRmb3JtU3RyYXRlZ2ll
cyA9PSBzX3BsYXRmb3JtU3RyYXRlZ2llcyk7CiB9CiAKLWJvb2wgaGFzUGxhdGZvcm1TdHJhdGVn
aWVzKCkKLXsKLSAgICByZXR1cm4gc19wbGF0Zm9ybVN0cmF0ZWdpZXM7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1T
dHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBA
IHByaXZhdGU6CiAKIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtU3RyYXRlZ2llcyogcGxhdGZvcm1T
dHJhdGVnaWVzKCk7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBsYXRmb3JtU3RyYXRlZ2llcyhQ
bGF0Zm9ybVN0cmF0ZWdpZXMqKTsKLWJvb2wgaGFzUGxhdGZvcm1TdHJhdGVnaWVzKCk7CiAgICAg
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTUgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJC
bG9iUmVnaXN0cnkuaCIKIAotI2luY2x1ZGUgIkJsb2JSZWdpc3RyeUltcGwuaCIKLSNpbmNsdWRl
ICJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAi
V2ViQ29yZVRocmVhZC5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQmxvYlJl
Z2lzdHJ5JiBibG9iUmVnaXN0cnkoKQpAQCAtNDMsOCArMzcsNCBAQCBCbG9iUmVnaXN0cnkmIGJs
b2JSZWdpc3RyeSgpCiAgICAgcmV0dXJuICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+YmxvYlJlZ2lz
dHJ5KCk7CiB9CiAKLUJsb2JSZWdpc3RyeTo6fkJsb2JSZWdpc3RyeSgpCi17Ci19Ci0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaAko
cmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDE1IEBAIGNsYXNzIFVSTDsK
IAogV0VCQ09SRV9FWFBPUlQgQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKTsKIAorLy8gRklY
TUU6IFRoaXMgaW50ZXJmYWNlIGlzbid0IHZlcnkgdXNlZnVsLiBCbG9iUmVnaXN0cnlJbXBsIGlz
IHRoZSBvbmx5IEJsb2JSZWdpc3RyeSByaWdodCBub3cuCisvLyBFaXRoZXIgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeSBzaG91bGQgYmUgYSBCbG9iUmVnaXN0cnkgb3IgQmxvYlJlZ2lzdHJ5SW1wbCBz
aG91bGQgcmVwbGFjZSBCbG9iUmVnaXN0cnkuCisKIC8vIEJsb2JSZWdpc3RyeSBpcyBub3QgdGhy
ZWFkLXNhZmUuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgogY2xh
c3MgV0VCQ09SRV9FWFBPUlQgQmxvYlJlZ2lzdHJ5IHsKIHB1YmxpYzoKIAogICAgIC8vIFJlZ2lz
dGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWVkIGZpbGUuCi0gICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiwgUGFzc1JlZlB0cjxCbG9i
RGF0YUZpbGVSZWZlcmVuY2U+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiwgUmVmUHRyPEJsb2JE
YXRhRmlsZVJlZmVyZW5jZT4mJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgPSAwOwogCiAg
ICAgLy8gUmVnaXN0ZXJzIGEgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpZWQgYmxv
YiBkYXRhLgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgVmVj
dG9yPEJsb2JQYXJ0PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgPSAwOwpAQCAtNjMsMTAg
KzY2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvYlNp
emUoY29uc3QgVVJMJikgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzQmxvYlJlZ2lzdHJ5SW1w
bCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5C
bG9iUmVnaXN0cnkoKTsKKyAgICB2aXJ0dWFsIH5CbG9iUmVnaXN0cnkoKSB7IH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDE3ICs0NCwxMyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgUExBVEZPUk0oSU9TKQot
I2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEJsb2JSZWdpc3RyeUltcGw6On5CbG9iUmVnaXN0cnlJbXBsKCkKIHsKIH0KIAotc3RhdGlj
IFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKK3N0
YXRpYyBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKIHsK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmxvYlJlZ2lzdHJ5SW1wbCY+KGJsb2JSZWdpc3RyeSgp
KS5jcmVhdGVSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQpOwogfQpAQCAtNzUsMTQgKzcx
LDE0IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlJlc291cmNlSGFuZGxlQ28KICAgICB9CiB9
CiAKLVBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IEJsb2JSZWdpc3RyeUltcGw6OmNyZWF0ZVJl
c291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5k
bGVDbGllbnQqIGNsaWVudCkKK1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJlZ2lzdHJ5SW1w
bDo6Y3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBS
ZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KQogewotICAgIFJlZlB0cjxCbG9iUmVzb3VyY2VI
YW5kbGU+IGhhbmRsZSA9IEJsb2JSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQXN5bmMoZ2V0QmxvYkRh
dGFGcm9tVVJMKHJlcXVlc3QudXJsKCkpLCByZXF1ZXN0LCBjbGllbnQpOworICAgIGF1dG8gaGFu
ZGxlID0gQmxvYlJlc291cmNlSGFuZGxlOjpjcmVhdGVBc3luYyhnZXRCbG9iRGF0YUZyb21VUkwo
cmVxdWVzdC51cmwoKSksIHJlcXVlc3QsIGNsaWVudCk7CiAgICAgaWYgKCFoYW5kbGUpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGhhbmRsZS0+c3Rh
cnQoKTsKLSAgICByZXR1cm4gaGFuZGxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gaGFuZGxlOwog
fQogCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iRGF0YSog
YmxvYkRhdGEsIGNvbnN0IEJsb2JEYXRhSXRlbUxpc3QmIGl0ZW1zLCBsb25nIGxvbmcgb2Zmc2V0
LCBsb25nIGxvbmcgbGVuZ3RoKQpAQCAtMTE0LDcgKzExMCw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5
SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW0KICAgICBBU1NFUlQoIWxlbmd0aCk7CiB9CiAKLXZvaWQg
QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmIHVybCwgUGFz
c1JlZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+IGZpbGUsIGNvbnN0IFN0cmluZyYgY29udGVu
dFR5cGUpCit2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3Qg
VVJMJiB1cmwsIFJlZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+JiYgZmlsZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJl
Z2lzdGVyQmxvYlJlc291cmNlSGFuZGxlQ29uc3RydWN0b3IoKTsKQEAgLTEyMyw3ICsxMTksNyBA
QCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyRmlsZUJsb2JVCiAgICAgYmxvYkRhdGEt
PnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKIAogICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxl
KGZpbGUpOwotICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwgYmxvYkRhdGEucmVsZWFzZSgp
KTsKKyAgICBtX2Jsb2JzLnNldCh1cmwsIGJsb2JEYXRhLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQg
QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8
QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKQEAgLTE0OCwx
NiArMTQ0LDE2IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGMKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQmxvYlBhcnQ6OkJsb2I6
IHsKLSAgICAgICAgICAgIGlmICghbV9ibG9icy5jb250YWlucyhwYXJ0LnVybCgpLnN0cmluZygp
KSkKKyAgICAgICAgICAgIGlmICghbV9ibG9icy5jb250YWlucyhwYXJ0LnVybCgpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IEJsb2JEYXRhSXRlbSYg
aXRlbSA6IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpLT5pdGVtcygpKQorICAgICAg
ICAgICAgZm9yIChjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gOiBtX2Jsb2JzLmdldChwYXJ0LnVy
bCgpKS0+aXRlbXMoKSkKICAgICAgICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVtcy5hcHBlbmQo
aXRlbSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgbV9ibG9icy5zZXQodXJsLnN0cmluZygpLCBibG9iRGF0YS5yZWxlYXNlKCkpOworICAg
IG1fYmxvYnMuc2V0KHVybCwgYmxvYkRhdGEucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBCbG9iUmVn
aXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3Jj
VVJMKQpAQCAtMTY4LDcgKzE2NCw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJC
bG9iVVJMKGMKICAgICBpZiAoIXNyYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ibG9icy5z
ZXQodXJsLnN0cmluZygpLCBzcmMpOworICAgIG1fYmxvYnMuc2V0KHVybCwgc3JjKTsKIH0KIAog
dm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwm
IHVybCwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkK
QEAgLTIwNSwxOSArMjAxLDE5IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9i
VVJMRm8KIAogICAgIGFwcGVuZFN0b3JhZ2VJdGVtcyhuZXdEYXRhLmdldCgpLCBvcmlnaW5hbERh
dGEtPml0ZW1zKCksIHN0YXJ0LCBuZXdMZW5ndGgpOwogCi0gICAgbV9ibG9icy5zZXQodXJsLnN0
cmluZygpLCBuZXdEYXRhLnJlbGVhc2UoKSk7CisgICAgbV9ibG9icy5zZXQodXJsLCBuZXdEYXRh
LnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3RlckJsb2JV
UkwoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBt
X2Jsb2JzLnJlbW92ZSh1cmwuc3RyaW5nKCkpOworICAgIG1fYmxvYnMucmVtb3ZlKHVybCk7CiB9
CiAKIEJsb2JEYXRhKiBCbG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZyb21VUkwoY29uc3Qg
VVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICByZXR1
cm4gbV9ibG9icy5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gbV9ibG9icy5nZXQodXJs
KTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIEJsb2JSZWdpc3RyeUltcGw6OmJsb2JTaXplKGNv
bnN0IFVSTCYgdXJsKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVnaXN0cnlJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmgJKHJldmlzaW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkJsb2JS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIlVSTEhhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KQEAgLTUyLDIxICs1MywyMCBAQCBwdWJsaWM6CiAKICAgICBCbG9iRGF0YSog
Z2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IFVSTCYpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNy
ZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxl
Q2xpZW50Kik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRTdG9yYWdlSXRlbXMoQmxvYkRh
dGEqLCBjb25zdCBCbG9iRGF0YUl0ZW1MaXN0JiwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25n
IGxlbmd0aCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBX
ZWJDb3JlOjpVUkwmLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4sIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZp
bGVCbG9iVVJMKGNvbnN0IFVSTCYsIFJlZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+JiYsIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckJsb2JVUkwoY29uc3QgVVJMJiwgVmVjdG9yPEJsb2JQYXJ0PiwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChj
b25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMLCBs
b25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNCbG9iUmVnaXN0cnlJbXBsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvYlNpemUoY29uc3QgVVJMJikgb3Zl
cnJpZGU7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEJsb2JEYXRhPj4gbV9ibG9iczsK
KyAgICBIYXNoTWFwPFVSTCwgUmVmUHRyPEJsb2JEYXRhPj4gbV9ibG9iczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxl
Ojpsb2FkUmVzb3VyY2VTeW4KIH0KIAogQmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VI
YW5kbGUoQmxvYkRhdGEqIGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgYXN5bmMpCi0gICAgOiBSZXNvdXJj
ZUhhbmRsZSgwLCByZXF1ZXN0LCBjbGllbnQsIGZhbHNlLCBmYWxzZSkKKyAgICA6IFJlc291cmNl
SGFuZGxlKG51bGxwdHIsIHJlcXVlc3QsIGNsaWVudCwgZmFsc2UsIGZhbHNlKQogICAgICwgbV9i
bG9iRGF0YShibG9iRGF0YSkKICAgICAsIG1fYXN5bmMoYXN5bmMpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNpb24gMTk2MDkz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3OSwxMCArMjc5LDYgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9T
dHJpbmcoKSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRCbG9iUmVzb2x2ZWQoRm9ybURhdGEq
IGZvcm1EYXRhLCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBpZiAoIWJsb2JSZWdpc3RyeSgpLmlz
QmxvYlJlZ2lzdHJ5SW1wbCgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiVHJpZWQgdG8gcmVzb2x2
ZSBhIGJsb2Igd2l0aG91dCBhIHVzYWJsZSByZWdpc3RyeSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgIEJsb2JEYXRhKiBibG9iRGF0YSA9IHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUlt
cGwmPihibG9iUmVnaXN0cnkoKSkuZ2V0QmxvYkRhdGFGcm9tVVJMKHVybCk7CiAgICAgaWYgKCFi
bG9iRGF0YSkgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBnZXQgYmxvYiBkYXRhIGZy
b20gYSByZWdpc3RyeSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDAsNyArMjQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVm
IGNyZWF0ZVNTTFByb3BlcnRpZXNGcm9tTlNVUkxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOwogI2VuZGlmCiAKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+ICgq
QnVpbHRpbkNvbnN0cnVjdG9yKShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpOworICAgIHR5cGVkZWYgUmVmUHRyPFJlc291cmNlSGFu
ZGxlPiAoKkJ1aWx0aW5Db25zdHJ1Y3RvcikoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ckJ1aWx0aW5Db25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3RvY29sLCBCdWlsdGlu
Q29uc3RydWN0b3IpOwogCiAgICAgdHlwZWRlZiB2b2lkICgqQnVpbHRpblN5bmNocm9ub3VzTG9h
ZGVyKShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYgZGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270736</attachid>
            <date>2016-02-04 22:42:51 -0800</date>
            <delta_ts>2016-02-04 22:51:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153910-20160204224227.patch</filename>
            <type>text/plain</type>
            <size>23348</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjE2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE2LTAyLTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ2xlYW4gdXAg
QmxvYiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTM5MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGNzcy9T
dHlsZVNoZWV0Lmg6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bm9ybWFsaXplZENvbnRl
bnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmlzTm9ybWFsaXplZENvbnRlbnRUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnJlZ2lzdHJ5KToKKyAgICAgICAgKiBmaWxlYXBp
L0Jsb2IuaDoKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2JVUkwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6
OmNyZWF0ZUJsb2JVUkwpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYlVSTC5oOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYlVSTDo6QmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpi
bG9iUHJvdG9jb2wpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtU3RyYXRl
Z2llcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0Zm9ybVN0cmF0ZWdpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6aGFzUGxhdGZvcm1TdHJhdGVnaWVzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibG9iUmVnaXN0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5Ojp+QmxvYlJlZ2lzdHJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iUmVnaXN0cnlJbXBsOjp+QmxvYlJlZ2lzdHJ5SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVSZXNvdXJjZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RlckJsb2JSZXNv
dXJjZUhhbmRsZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUlt
cGw6OmNyZWF0ZVJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3Ry
eUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0
cnlJbXBsOjpyZWdpc3RlckZpbGVCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdp
c3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0
cnlJbXBsOjpyZWdpc3RlckJsb2JVUkxGb3JTbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
UmVnaXN0cnlJbXBsOjp1bnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
UmVnaXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZyb21VUkwpOgorICAgICAgICAoV2ViQ29yZTo6Qmxv
YlJlZ2lzdHJ5SW1wbDo6YmxvYlNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNl
SGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5k
bGU6OkJsb2JSZXNvdXJjZUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRCbG9iUmVzb2x2ZWQpOgorICAgICAg
ICBBIEJsb2JSZWdpc3RyeSBpcyBhbHdheXMgYSBCbG9iUmVnaXN0cnlJbXBsLiAgVGhpcyBjaGVj
ayBpcyBsZWZ0b3ZlciBmcm9tIHRoZSBjaHJvbWl1bSBkYXlzLgorICAgICAgICBJIHBsYW4gdG8g
Z2V0IHJpZCBvZiBCbG9iUmVnaXN0cnlJbXBsLiAgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTExMDAKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmg6CisKIDIwMTYtMDItMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3JUaW1lbGluZUFnZW50
IGRvZXNuJ3QgbmVlZCB0byByZWNvbXBpbGUgZnVuY3Rpb25zIGJlY2F1c2UgaXQgbm93IHVzZXMg
dGhlIHNhbXBsaW5nIHByb2ZpbGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgJKHJldmlz
aW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNkZWZpbmUgU3R5bGVTaGVldF9oCiAKICNpbmNsdWRl
ICJDU1NQYXJzZXJNb2RlLmgiCi0jaW5jbHVkZSAiVVJMSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gMTk2MDkz
KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwLDcgKzEwMCw3IEBAIEJsb2I6OkJsb2IoRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciwgY28K
ICAgICAsIG1fc2l6ZShzaXplKQogewogICAgIG1faW50ZXJuYWxVUkwgPSBCbG9iVVJMOjpjcmVh
dGVJbnRlcm5hbFVSTCgpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxv
YlVSTCgwLCBtX2ludGVybmFsVVJMLCBzcmNVUkwpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0
cnk6OnJlZ2lzdGVyQmxvYlVSTChudWxscHRyLCBtX2ludGVybmFsVVJMLCBzcmNVUkwpOwogfQog
CiBCbG9iOjpCbG9iKGNvbnN0IFVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9u
ZyBlbmQsIGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTE0Niw2ICsxNDYsNyBAQCBTdHJpbmcgQmxv
Yjo6bm9ybWFsaXplZENvbnRlbnRUeXBlKGNvbnN0CiAgICAgcmV0dXJuIGNvbnRlbnRUeXBlLmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCiBib29sIEJsb2I6
OmlzTm9ybWFsaXplZENvbnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7CiAg
ICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSB3YW50IHRvIHRyZWF0IHRoZSBlbXB0eSBzdHJpbmcg
YW5kIG51bGwgc3RyaW5nIGFzIHZhbGlkIGNvbnRlbnQgdHlwZXM/CkBAIC0xNzIsNiArMTczLDcg
QEAgYm9vbCBCbG9iOjppc05vcm1hbGl6ZWRDb250ZW50VHlwZShjb25zdAogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgogCiBVUkxSZWdpc3RyeSYgQmxvYjo6cmVnaXN0cnkoKSBj
b25zdAogewpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDE5NjA5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niwx
MCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZENvbnRlbnRUeXBlKGNvbnN0IFN0
cmluZyYpOwogICAgIC8vIFRoZSBub3JtYWxpemF0aW9uIHByb2NlZHVyZSBkZXNjcmliZWQgaW4g
dGhlIEZpbGUgQVBJIHNwZWMuCiAgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVkQ29udGVudFR5
cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgLy8gSW50ZW5kZWQgZm9yIHVzZSBpbiBBU1NFUlQgc3Rh
dGVtZW50cy4KKyNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGJvb2wgaXNOb3JtYWxpemVkQ29u
dGVudFR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIGJvb2wgaXNOb3JtYWxpemVkQ29u
dGVudFR5cGUoY29uc3QgQ1N0cmluZyYpOworI2VuZGlmCiAKICAgICAvLyBVUkxSZWdpc3RyYWJs
ZQogICAgIHZpcnR1YWwgVVJMUmVnaXN0cnkmIHJlZ2lzdHJ5KCkgY29uc3Qgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBjaGFyIEJsb2JVUkw6OmtC
bG9iUHJvdG9jb2xbXSA9ICJibG9iIjsKK2NvbnN0IGNoYXIqIGtCbG9iUHJvdG9jb2wgPSAiYmxv
YiI7CiAKIFVSTCBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luKQogewpAQCAtNzIsNyArNzIsNyBAQCBTdHJpbmcgQmxvYlVSTDo6Z2V0SWRlbnRp
Zmllcihjb25zdCBVUkwmCiBVUkwgQmxvYlVSTDo6Y3JlYXRlQmxvYlVSTChjb25zdCBTdHJpbmcm
IG9yaWdpblN0cmluZykKIHsKICAgICBBU1NFUlQoIW9yaWdpblN0cmluZy5pc0VtcHR5KCkpOwot
ICAgIFN0cmluZyB1cmxTdHJpbmcgPSAiYmxvYjoiICsgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVl
bmNlcyhvcmlnaW5TdHJpbmcpICsgJy8nICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwor
ICAgIFN0cmluZyB1cmxTdHJpbmcgPSBrQmxvYlByb3RvY29sICsgZW5jb2RlV2l0aFVSTEVzY2Fw
ZVNlcXVlbmNlcyhvcmlnaW5TdHJpbmcpICsgJy8nICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpOwogICAgIHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDExICs1Miw5
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVVJMIGNyZWF0ZUludGVybmFsVVJMKCk7CiAgICAgc3Rh
dGljIFN0cmluZyBnZXRPcmlnaW4oY29uc3QgVVJMJik7CiAgICAgc3RhdGljIFN0cmluZyBnZXRJ
ZGVudGlmaWVyKGNvbnN0IFVSTCYpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBibG9iUHJvdG9j
b2woKSB7IHJldHVybiBrQmxvYlByb3RvY29sOyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFVS
TCBjcmVhdGVCbG9iVVJMKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKTsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciBrQmxvYlByb3RvY29sW107CiAgICAgQmxvYlVSTCgpIHsgfQogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShy
ZXZpc2lvbiAxOTYwOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksNSBAQCB2b2lkIHNldFBsYXRm
b3JtU3RyYXRlZ2llcyhQbGF0Zm9ybVN0cmF0CiAgICAgQVNTRVJUKHBsYXRmb3JtU3RyYXRlZ2ll
cyA9PSBzX3BsYXRmb3JtU3RyYXRlZ2llcyk7CiB9CiAKLWJvb2wgaGFzUGxhdGZvcm1TdHJhdGVn
aWVzKCkKLXsKLSAgICByZXR1cm4gc19wbGF0Zm9ybVN0cmF0ZWdpZXM7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1T
dHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBA
IHByaXZhdGU6CiAKIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtU3RyYXRlZ2llcyogcGxhdGZvcm1T
dHJhdGVnaWVzKCk7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBsYXRmb3JtU3RyYXRlZ2llcyhQ
bGF0Zm9ybVN0cmF0ZWdpZXMqKTsKLWJvb2wgaGFzUGxhdGZvcm1TdHJhdGVnaWVzKCk7CiAgICAg
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTUgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJC
bG9iUmVnaXN0cnkuaCIKIAotI2luY2x1ZGUgIkJsb2JSZWdpc3RyeUltcGwuaCIKLSNpbmNsdWRl
ICJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAi
V2ViQ29yZVRocmVhZC5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQmxvYlJl
Z2lzdHJ5JiBibG9iUmVnaXN0cnkoKQpAQCAtNDMsOCArMzcsNCBAQCBCbG9iUmVnaXN0cnkmIGJs
b2JSZWdpc3RyeSgpCiAgICAgcmV0dXJuICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+YmxvYlJlZ2lz
dHJ5KCk7CiB9CiAKLUJsb2JSZWdpc3RyeTo6fkJsb2JSZWdpc3RyeSgpCi17Ci19Ci0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaAko
cmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDE1IEBAIGNsYXNzIFVSTDsK
IAogV0VCQ09SRV9FWFBPUlQgQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKTsKIAorLy8gRklY
TUU6IFRoaXMgaW50ZXJmYWNlIGlzbid0IHZlcnkgdXNlZnVsLiBCbG9iUmVnaXN0cnlJbXBsIGlz
IHRoZSBvbmx5IEJsb2JSZWdpc3RyeSByaWdodCBub3cuCisvLyBFaXRoZXIgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeSBzaG91bGQgYmUgYSBCbG9iUmVnaXN0cnkgb3IgQmxvYlJlZ2lzdHJ5SW1wbCBz
aG91bGQgcmVwbGFjZSBCbG9iUmVnaXN0cnkuCisKIC8vIEJsb2JSZWdpc3RyeSBpcyBub3QgdGhy
ZWFkLXNhZmUuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgogY2xh
c3MgV0VCQ09SRV9FWFBPUlQgQmxvYlJlZ2lzdHJ5IHsKIHB1YmxpYzoKIAogICAgIC8vIFJlZ2lz
dGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWVkIGZpbGUuCi0gICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiwgUGFzc1JlZlB0cjxCbG9i
RGF0YUZpbGVSZWZlcmVuY2U+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiwgUmVmUHRyPEJsb2JE
YXRhRmlsZVJlZmVyZW5jZT4mJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgPSAwOwogCiAg
ICAgLy8gUmVnaXN0ZXJzIGEgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpZWQgYmxv
YiBkYXRhLgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgVmVj
dG9yPEJsb2JQYXJ0PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgPSAwOwpAQCAtNjMsMTAg
KzY2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvYlNp
emUoY29uc3QgVVJMJikgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzQmxvYlJlZ2lzdHJ5SW1w
bCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5C
bG9iUmVnaXN0cnkoKTsKKyAgICB2aXJ0dWFsIH5CbG9iUmVnaXN0cnkoKSB7IH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDE3ICs0NCwxMyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgUExBVEZPUk0oSU9TKQot
I2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEJsb2JSZWdpc3RyeUltcGw6On5CbG9iUmVnaXN0cnlJbXBsKCkKIHsKIH0KIAotc3RhdGlj
IFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKK3N0
YXRpYyBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKIHsK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmxvYlJlZ2lzdHJ5SW1wbCY+KGJsb2JSZWdpc3RyeSgp
KS5jcmVhdGVSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQpOwogfQpAQCAtNzUsMTQgKzcx
LDE0IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlJlc291cmNlSGFuZGxlQ28KICAgICB9CiB9
CiAKLVBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IEJsb2JSZWdpc3RyeUltcGw6OmNyZWF0ZVJl
c291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5k
bGVDbGllbnQqIGNsaWVudCkKK1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJlZ2lzdHJ5SW1w
bDo6Y3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBS
ZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KQogewotICAgIFJlZlB0cjxCbG9iUmVzb3VyY2VI
YW5kbGU+IGhhbmRsZSA9IEJsb2JSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQXN5bmMoZ2V0QmxvYkRh
dGFGcm9tVVJMKHJlcXVlc3QudXJsKCkpLCByZXF1ZXN0LCBjbGllbnQpOworICAgIGF1dG8gaGFu
ZGxlID0gQmxvYlJlc291cmNlSGFuZGxlOjpjcmVhdGVBc3luYyhnZXRCbG9iRGF0YUZyb21VUkwo
cmVxdWVzdC51cmwoKSksIHJlcXVlc3QsIGNsaWVudCk7CiAgICAgaWYgKCFoYW5kbGUpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGhhbmRsZS0+c3Rh
cnQoKTsKLSAgICByZXR1cm4gaGFuZGxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gaGFuZGxlOwog
fQogCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iRGF0YSog
YmxvYkRhdGEsIGNvbnN0IEJsb2JEYXRhSXRlbUxpc3QmIGl0ZW1zLCBsb25nIGxvbmcgb2Zmc2V0
LCBsb25nIGxvbmcgbGVuZ3RoKQpAQCAtMTE0LDcgKzExMCw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5
SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW0KICAgICBBU1NFUlQoIWxlbmd0aCk7CiB9CiAKLXZvaWQg
QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmIHVybCwgUGFz
c1JlZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+IGZpbGUsIGNvbnN0IFN0cmluZyYgY29udGVu
dFR5cGUpCit2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3Qg
VVJMJiB1cmwsIFJlZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+JiYgZmlsZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJl
Z2lzdGVyQmxvYlJlc291cmNlSGFuZGxlQ29uc3RydWN0b3IoKTsKQEAgLTEyMyw3ICsxMTksNyBA
QCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyRmlsZUJsb2JVCiAgICAgYmxvYkRhdGEt
PnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKIAogICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxl
KGZpbGUpOwotICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwgYmxvYkRhdGEucmVsZWFzZSgp
KTsKKyAgICBtX2Jsb2JzLnNldCh1cmwsIGJsb2JEYXRhLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQg
QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8
QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKQEAgLTE0OCwx
NiArMTQ0LDE2IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGMKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQmxvYlBhcnQ6OkJsb2I6
IHsKLSAgICAgICAgICAgIGlmICghbV9ibG9icy5jb250YWlucyhwYXJ0LnVybCgpLnN0cmluZygp
KSkKKyAgICAgICAgICAgIGlmICghbV9ibG9icy5jb250YWlucyhwYXJ0LnVybCgpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IEJsb2JEYXRhSXRlbSYg
aXRlbSA6IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpLT5pdGVtcygpKQorICAgICAg
ICAgICAgZm9yIChjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gOiBtX2Jsb2JzLmdldChwYXJ0LnVy
bCgpKS0+aXRlbXMoKSkKICAgICAgICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVtcy5hcHBlbmQo
aXRlbSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgbV9ibG9icy5zZXQodXJsLnN0cmluZygpLCBibG9iRGF0YS5yZWxlYXNlKCkpOworICAg
IG1fYmxvYnMuc2V0KHVybCwgYmxvYkRhdGEucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBCbG9iUmVn
aXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3Jj
VVJMKQpAQCAtMTY4LDcgKzE2NCw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJC
bG9iVVJMKGMKICAgICBpZiAoIXNyYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ibG9icy5z
ZXQodXJsLnN0cmluZygpLCBzcmMpOworICAgIG1fYmxvYnMuc2V0KHVybCwgc3JjKTsKIH0KIAog
dm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwm
IHVybCwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkK
QEAgLTIwNSwxOSArMjAxLDE5IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9i
VVJMRm8KIAogICAgIGFwcGVuZFN0b3JhZ2VJdGVtcyhuZXdEYXRhLmdldCgpLCBvcmlnaW5hbERh
dGEtPml0ZW1zKCksIHN0YXJ0LCBuZXdMZW5ndGgpOwogCi0gICAgbV9ibG9icy5zZXQodXJsLnN0
cmluZygpLCBuZXdEYXRhLnJlbGVhc2UoKSk7CisgICAgbV9ibG9icy5zZXQodXJsLCBuZXdEYXRh
LnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3RlckJsb2JV
UkwoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBt
X2Jsb2JzLnJlbW92ZSh1cmwuc3RyaW5nKCkpOworICAgIG1fYmxvYnMucmVtb3ZlKHVybCk7CiB9
CiAKIEJsb2JEYXRhKiBCbG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZyb21VUkwoY29uc3Qg
VVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICByZXR1
cm4gbV9ibG9icy5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gbV9ibG9icy5nZXQodXJs
KTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIEJsb2JSZWdpc3RyeUltcGw6OmJsb2JTaXplKGNv
bnN0IFVSTCYgdXJsKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVnaXN0cnlJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmgJKHJldmlzaW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkJsb2JS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIlVSTEhhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KQEAgLTUyLDIxICs1MywyMCBAQCBwdWJsaWM6CiAKICAgICBCbG9iRGF0YSog
Z2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IFVSTCYpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNy
ZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxl
Q2xpZW50Kik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRTdG9yYWdlSXRlbXMoQmxvYkRh
dGEqLCBjb25zdCBCbG9iRGF0YUl0ZW1MaXN0JiwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25n
IGxlbmd0aCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBX
ZWJDb3JlOjpVUkwmLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4sIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZp
bGVCbG9iVVJMKGNvbnN0IFVSTCYsIFJlZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+JiYsIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckJsb2JVUkwoY29uc3QgVVJMJiwgVmVjdG9yPEJsb2JQYXJ0PiwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChj
b25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMLCBs
b25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNCbG9iUmVnaXN0cnlJbXBsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvYlNpemUoY29uc3QgVVJMJikgb3Zl
cnJpZGU7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEJsb2JEYXRhPj4gbV9ibG9iczsK
KyAgICBIYXNoTWFwPFVSTCwgUmVmUHRyPEJsb2JEYXRhPj4gbV9ibG9iczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxl
Ojpsb2FkUmVzb3VyY2VTeW4KIH0KIAogQmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VI
YW5kbGUoQmxvYkRhdGEqIGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgYXN5bmMpCi0gICAgOiBSZXNvdXJj
ZUhhbmRsZSgwLCByZXF1ZXN0LCBjbGllbnQsIGZhbHNlLCBmYWxzZSkKKyAgICA6IFJlc291cmNl
SGFuZGxlKG51bGxwdHIsIHJlcXVlc3QsIGNsaWVudCwgZmFsc2UsIGZhbHNlKQogICAgICwgbV9i
bG9iRGF0YShibG9iRGF0YSkKICAgICAsIG1fYXN5bmMoYXN5bmMpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNpb24gMTk2MDkz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3OSwxMCArMjc5LDYgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9T
dHJpbmcoKSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRCbG9iUmVzb2x2ZWQoRm9ybURhdGEq
IGZvcm1EYXRhLCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBpZiAoIWJsb2JSZWdpc3RyeSgpLmlz
QmxvYlJlZ2lzdHJ5SW1wbCgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiVHJpZWQgdG8gcmVzb2x2
ZSBhIGJsb2Igd2l0aG91dCBhIHVzYWJsZSByZWdpc3RyeSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgIEJsb2JEYXRhKiBibG9iRGF0YSA9IHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUlt
cGwmPihibG9iUmVnaXN0cnkoKSkuZ2V0QmxvYkRhdGFGcm9tVVJMKHVybCk7CiAgICAgaWYgKCFi
bG9iRGF0YSkgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBnZXQgYmxvYiBkYXRhIGZy
b20gYSByZWdpc3RyeSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDAsNyArMjQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVm
IGNyZWF0ZVNTTFByb3BlcnRpZXNGcm9tTlNVUkxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOwogI2VuZGlmCiAKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+ICgq
QnVpbHRpbkNvbnN0cnVjdG9yKShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpOworICAgIHR5cGVkZWYgUmVmUHRyPFJlc291cmNlSGFu
ZGxlPiAoKkJ1aWx0aW5Db25zdHJ1Y3RvcikoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ckJ1aWx0aW5Db25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3RvY29sLCBCdWlsdGlu
Q29uc3RydWN0b3IpOwogCiAgICAgdHlwZWRlZiB2b2lkICgqQnVpbHRpblN5bmNocm9ub3VzTG9h
ZGVyKShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYgZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTYxNjYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxNi0wMi0w
NCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IENsZWFuIHVwIEJsb2IgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUzOTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpOZXR3b3JrQmxvYlJl
Z2lzdHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Jsb2JSZWdpc3RyeTo6cmVnaXN0ZXJG
aWxlQmxvYlVSTCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtCbG9iUmVnaXN0cnk6OmZpbGVz
SW5CbG9iKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVn
aXN0cnkuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpyZWdpc3RlckZpbGVCbG9iVVJMKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QmxvYlJl
Z2lzdHJ5UHJveHk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
RmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5oOgorCiAyMDE2LTAyLTA0ICBEYW5pZWwgQmF0ZXMg
IDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQgZm9yIGlPUyBTaW11bGF0b3Ig
ZmFpbHMgdG8gYnVpbGQgd2l0aCBwdWJsaWMgaU9TIFNESwpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
cmVnaQogewogICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBleHRlbnNpb24gPSBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGUoZXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE5ldHdvcmtCbG9iUmVn
aXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyRmlsZUJsb2JVUkwodGhpcywgdXJsLCBwYXRoLCBl
eHRlbnNpb24ucmVsZWFzZSgpLCBjb250ZW50VHlwZSk7CisgICAgTmV0d29ya0Jsb2JSZWdpc3Ry
eTo6c2luZ2xldG9uKCkucmVnaXN0ZXJGaWxlQmxvYlVSTCh0aGlzLCB1cmwsIHBhdGgsIFdURk1v
dmUoZXh0ZW5zaW9uKSwgY29udGVudFR5cGUpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxCbG9i
UGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdv
cmtCbG9iUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAxOTYwOTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIE5ldHdvcmtCbG9iUmVnaXN0cnk6Ok5ldHdvcmtCbG9iUmVn
aXN0cnkKIHsKIH0KIAotdm9pZCBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckZpbGVCbG9i
VVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IHNh
bmRib3hFeHRlbnNpb24sIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCit2b2lkIE5ldHdvcmtC
bG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MqIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJl
ZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiYmIHNhbmRib3hFeHRlbnNpb24sIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpCiB7CiAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJGaWxlQmxvYlVSTCh1
cmwsIEJsb2JEYXRhRmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocGF0
aCwgc2FuZGJveEV4dGVuc2lvbiksIGNvbnRlbnRUeXBlKTsKIApAQCAtMTM0LDcgKzEzNCw2IEBA
IFZlY3RvcjxSZWZQdHI8QmxvYkRhdGFGaWxlUmVmZXJlbmNlPj4gTmUKICAgICBpZiAoIW1fYmxv
YnNGb3JDb25uZWN0aW9uLmNvbnRhaW5zKCZjb25uZWN0aW9uKSB8fCAhbV9ibG9ic0ZvckNvbm5l
Y3Rpb24uZmluZCgmY29ubmVjdGlvbiktPnZhbHVlLmNvbnRhaW5zKHVybCkpCiAgICAgICAgIHJl
dHVybiBWZWN0b3I8UmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4+KCk7CiAKLSAgICBBU1NF
UlQoYmxvYlJlZ2lzdHJ5KCkuaXNCbG9iUmVnaXN0cnlJbXBsKCkpOwogICAgIEJsb2JEYXRhKiBi
bG9iRGF0YSA9IHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUltcGwmPihibG9iUmVnaXN0cnkoKSku
Z2V0QmxvYkRhdGFGcm9tVVJMKHVybCk7CiAgICAgaWYgKCFibG9iRGF0YSkKICAgICAgICAgcmV0
dXJuIFZlY3RvcjxSZWZQdHI8QmxvYkRhdGFGaWxlUmVmZXJlbmNlPj4oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29y
a0Jsb2JSZWdpc3RyeS5oCShyZXZpc2lvbiAxOTYwOTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgTmV0d29ya0Jsb2JSZWdpc3RyeSgpOwogICAg
IHN0YXRpYyBOZXR3b3JrQmxvYlJlZ2lzdHJ5JiBzaW5nbGV0b24oKTsKIAotICAgIHZvaWQgcmVn
aXN0ZXJGaWxlQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdl
YkNvcmU6OlVSTCYsIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5z
aW9uPiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CisgICAgdm9pZCByZWdpc3RlckZpbGVC
bG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJM
JiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4mJiwgY29uc3Qg
U3RyaW5nJiBjb250ZW50VHlwZSk7CiAgICAgdm9pZCByZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBWZWN0b3I8V2ViQ29y
ZTo6QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKICAgICB2b2lkIHJlZ2lz
dGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6
OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxv
YlVSTEZvclNsaWNlKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29y
ZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwsIGludDY0X3Qgc3RhcnQsIGludDY0
X3QgZW5kKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVn
aXN0cnlQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9G
aWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyRmlsZUJs
b2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIFBhc3NSZWZQdHI8QmxvYkRhdGFGaWxlUmVm
ZXJlbmNlPiBmaWxlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQordm9pZCBCbG9iUmVnaXN0
cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgUmVm
UHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4mJiBmaWxlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlKQogewogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBleHRlbnNpb25IYW5kbGU7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9i
UmVnaXN0cnlQcm94eS5oCShyZXZpc2lvbiAxOTYwOTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQmxvYlJlZ2lzdHJ5UHJveHkg
ZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5IHsKIHB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OkJsb2JEYXRhRmlsZVJlZmVyZW5jZT4sIGNvbnN0IFN0cmluZyYgY29udGVu
dFR5cGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZpbGVCbG9iVVJMKGNv
bnN0IFdlYkNvcmU6OlVSTCYsIFJlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUZpbGVSZWZlcmVuY2U+
JiYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgVmVjdG9yPFdlYkNvcmU6OkJs
b2JQYXJ0PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXZWJDb3Jl
OjpVUkwmIHNyY1VSTCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9i
VVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270737</attachid>
            <date>2016-02-04 22:51:30 -0800</date>
            <delta_ts>2016-02-04 23:01:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153910-20160204225106.patch</filename>
            <type>text/plain</type>
            <size>20832</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjE2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE2LTAyLTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ2xlYW4gdXAg
QmxvYiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTM5MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGNzcy9T
dHlsZVNoZWV0Lmg6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bm9ybWFsaXplZENvbnRl
bnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmlzTm9ybWFsaXplZENvbnRlbnRUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnJlZ2lzdHJ5KToKKyAgICAgICAgKiBmaWxlYXBp
L0Jsb2IuaDoKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2JVUkwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKToKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2JVUkwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6OkJsb2JVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYlVSTDo6YmxvYlByb3RvY29sKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9Q
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGxhdGZvcm1TdHJh
dGVnaWVzKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc1BsYXRmb3JtU3RyYXRlZ2llcyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Ymxv
YlJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeTo6fkJsb2JSZWdpc3Ry
eSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6fkJsb2JSZWdpc3RyeUltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlUmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVn
aXN0ZXJCbG9iUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iUmVnaXN0cnlJbXBsOjpjcmVhdGVSZXNvdXJjZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJGaWxlQmxvYlVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6Z2V0QmxvYkRhdGFGcm9tVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OmJsb2JTaXplKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6Qmxv
YlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKwogMjAxNi0wMi0wNCAgSm9zZXBoIFBlY29yYXJv
ICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQgZG9lc24ndCBuZWVkIHRvIHJlY29tcGlsZSBmdW5jdGlvbnMgYmVjYXVz
ZSBpdCBub3cgdXNlcyB0aGUgc2FtcGxpbmcgcHJvZmlsZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXQuaAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hl
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2RlZmluZSBTdHlsZVNoZWV0
X2gKIAogI2luY2x1ZGUgIkNTU1BhcnNlck1vZGUuaCIKLSNpbmNsdWRlICJVUkxIYXNoLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9C
bG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCShy
ZXZpc2lvbiAxOTYwOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgQmxvYjo6QmxvYihEZXNlcmlhbGl6YXRpb25D
b250cnVjdG9yLCBjbwogICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAgbV9pbnRlcm5hbFVSTCA9
IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKDAsIG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7CisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG51bGxwdHIsIG1faW50ZXJuYWxVUkws
IHNyY1VSTCk7CiB9CiAKIEJsb2I6OkJsb2IoY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGVuZCwgY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtMTQ2LDYgKzE0Niw3
IEBAIFN0cmluZyBCbG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUoY29uc3QKICAgICByZXR1cm4g
Y29udGVudFR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKIH0KIAorI2lmbmRlZiBOREVC
VUcKIGJvb2wgQmxvYjo6aXNOb3JtYWxpemVkQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSkKIHsKICAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IHdhbnQgdG8gdHJlYXQgdGhl
IGVtcHR5IHN0cmluZyBhbmQgbnVsbCBzdHJpbmcgYXMgdmFsaWQgY29udGVudCB0eXBlcz8KQEAg
LTE3Miw2ICsxNzMsNyBAQCBib29sIEJsb2I6OmlzTm9ybWFsaXplZENvbnRlbnRUeXBlKGNvbnN0
CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQorI2VuZGlmCiAKIFVSTFJlZ2lzdHJ5JiBCbG9i
OjpyZWdpc3RyeSgpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAkocmV2aXNpb24g
MTk2MDkzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDkgKzc2LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29udGVu
dFR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgLy8gVGhlIG5vcm1hbGl6YXRpb24gcHJvY2VkdXJl
IGRlc2NyaWJlZCBpbiB0aGUgRmlsZSBBUEkgc3BlYy4KICAgICBzdGF0aWMgU3RyaW5nIG5vcm1h
bGl6ZWRDb250ZW50VHlwZShjb25zdCBTdHJpbmcmKTsKLSAgICAvLyBJbnRlbmRlZCBmb3IgdXNl
IGluIEFTU0VSVCBzdGF0ZW1lbnRzLgorI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBp
c05vcm1hbGl6ZWRDb250ZW50VHlwZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBp
c05vcm1hbGl6ZWRDb250ZW50VHlwZShjb25zdCBDU3RyaW5nJik7CisjZW5kaWYKIAogICAgIC8v
IFVSTFJlZ2lzdHJhYmxlCiAgICAgdmlydHVhbCBVUkxSZWdpc3RyeSYgcmVnaXN0cnkoKSBjb25z
dCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNwcAkocmV2aXNpb24g
MTk2MDkzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNo
YXIgQmxvYlVSTDo6a0Jsb2JQcm90b2NvbFtdID0gImJsb2IiOworY29uc3QgY2hhcioga0Jsb2JQ
cm90b2NvbCA9ICJibG9iIjsKIAogVVJMIEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0Jsb2JVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwu
aAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDExICs1Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVVJM
IGNyZWF0ZUludGVybmFsVVJMKCk7CiAgICAgc3RhdGljIFN0cmluZyBnZXRPcmlnaW4oY29uc3Qg
VVJMJik7CiAgICAgc3RhdGljIFN0cmluZyBnZXRJZGVudGlmaWVyKGNvbnN0IFVSTCYpOwotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBibG9iUHJvdG9jb2woKSB7IHJldHVybiBrQmxvYlByb3RvY29s
OyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFVSTCBjcmVhdGVCbG9iVVJMKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luU3RyaW5nKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBrQmxvYlByb3RvY29sW107
CiAgICAgQmxvYlVSTCgpIHsgfQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxOTYwOTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OSwxMCArNDksNSBAQCB2b2lkIHNldFBsYXRmb3JtU3RyYXRlZ2llcyhQbGF0Zm9ybVN0cmF0
CiAgICAgQVNTRVJUKHBsYXRmb3JtU3RyYXRlZ2llcyA9PSBzX3BsYXRmb3JtU3RyYXRlZ2llcyk7
CiB9CiAKLWJvb2wgaGFzUGxhdGZvcm1TdHJhdGVnaWVzKCkKLXsKLSAgICByZXR1cm4gc19wbGF0
Zm9ybVN0cmF0ZWdpZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5
NjA5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBAIHByaXZhdGU6CiAKIFdFQkNPUkVfRVhQT1JU
IFBsYXRmb3JtU3RyYXRlZ2llcyogcGxhdGZvcm1TdHJhdGVnaWVzKCk7CiBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFBsYXRmb3JtU3RyYXRlZ2llcyhQbGF0Zm9ybVN0cmF0ZWdpZXMqKTsKLWJvb2wg
aGFzUGxhdGZvcm1TdHJhdGVnaWVzKCk7CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eS5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIKIAotI2luY2x1ZGUg
IkJsb2JSZWdpc3RyeUltcGwuaCIKLSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAK
LSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQpAQCAt
NDMsOCArMzcsNCBAQCBCbG9iUmVnaXN0cnkmIGJsb2JSZWdpc3RyeSgpCiAgICAgcmV0dXJuICpw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+YmxvYlJlZ2lzdHJ5KCk7CiB9CiAKLUJsb2JSZWdpc3RyeTo6
fkJsb2JSZWdpc3RyeSgpCi17Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNyArNDgsNyBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBCbG9iUmVnaXN0cnkgewogcHVi
bGljOgogCiAgICAgLy8gUmVnaXN0ZXJzIGEgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRoZSBzcGVj
aWZpZWQgZmlsZS4KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBV
UkwmLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4sIGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25z
dCBVUkwmLCBSZWZQdHI8QmxvYkRhdGFGaWxlUmVmZXJlbmNlPiYmLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnRUeXBlKSA9IDA7CiAKICAgICAvLyBSZWdpc3RlcnMgYSBibG9iIFVSTCByZWZlcnJpbmcg
dG8gdGhlIHNwZWNpZmllZCBibG9iIGRhdGEuCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxv
YlVSTChjb25zdCBVUkwmLCBWZWN0b3I8QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlKSA9IDA7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNC
bG9iUmVnaXN0cnlJbXBsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgfkJsb2JSZWdpc3RyeSgpOworICAgIHZpcnR1YWwgfkJsb2JSZWdpc3RyeSgp
IHsgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkocmV2aXNp
b24gMTk2MDkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0
cnlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDEzIEBACiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLSNpZiBQ
TEFURk9STShJT1MpCi0jaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogQmxvYlJlZ2lzdHJ5SW1wbDo6fkJsb2JSZWdpc3RyeUltcGwoKQog
ewogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VI
YW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVu
dCogY2xpZW50KQorc3RhdGljIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VI
YW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVu
dCogY2xpZW50KQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlJbXBsJj4o
YmxvYlJlZ2lzdHJ5KCkpLmNyZWF0ZVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CiB9
CkBAIC03NSwxNCArNzEsMTQgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iUmVzb3VyY2VIYW5k
bGVDbwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJlZ2lzdHJ5
SW1wbDo6Y3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KQorUmVmUHRyPFJlc291cmNlSGFuZGxlPiBC
bG9iUmVnaXN0cnlJbXBsOjpjcmVhdGVSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgUmVmUHRy
PEJsb2JSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gQmxvYlJlc291cmNlSGFuZGxlOjpjcmVhdGVB
c3luYyhnZXRCbG9iRGF0YUZyb21VUkwocmVxdWVzdC51cmwoKSksIHJlcXVlc3QsIGNsaWVudCk7
CisgICAgYXV0byBoYW5kbGUgPSBCbG9iUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUFzeW5jKGdldEJs
b2JEYXRhRnJvbVVSTChyZXF1ZXN0LnVybCgpKSwgcmVxdWVzdCwgY2xpZW50KTsKICAgICBpZiAo
IWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgaGFuZGxlLT5zdGFydCgpOwotICAgIHJldHVybiBoYW5kbGUucmVsZWFzZSgpOworICAgIHJl
dHVybiBoYW5kbGU7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0
ZW1zKEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3QgQmxvYkRhdGFJdGVtTGlzdCYgaXRlbXMsIGxv
bmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCkBAIC0xMTQsNyArMTEwLDcgQEAgdm9p
ZCBCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbQogICAgIEFTU0VSVCghbGVuZ3Ro
KTsKIH0KIAotdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0
IFVSTCYgdXJsLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4gZmlsZSwgY29uc3Qg
U3RyaW5nJiBjb250ZW50VHlwZSkKK3ZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJGaWxl
QmxvYlVSTChjb25zdCBVUkwmIHVybCwgUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4mJiBm
aWxlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgcmVnaXN0ZXJCbG9iUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3RvcigpOwpAQCAt
MTIzLDcgKzExOSw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJGaWxlQmxvYlUK
ICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUoY29udGVudFR5cGUpOwogCiAgICAgYmxvYkRh
dGEtPmFwcGVuZEZpbGUoZmlsZSk7Ci0gICAgbV9ibG9icy5zZXQodXJsLnN0cmluZygpLCBibG9i
RGF0YS5yZWxlYXNlKCkpOworICAgIG1fYmxvYnMuc2V0KHVybCwgYmxvYkRhdGEucmVsZWFzZSgp
KTsKIH0KIAogdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJM
JiB1cmwsIFZlY3RvcjxCbG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlKQpAQCAtMTQ4LDE2ICsxNDQsMTYgQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3Rl
ckJsb2JVUkwoYwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBC
bG9iUGFydDo6QmxvYjogewotICAgICAgICAgICAgaWYgKCFtX2Jsb2JzLmNvbnRhaW5zKHBhcnQu
dXJsKCkuc3RyaW5nKCkpKQorICAgICAgICAgICAgaWYgKCFtX2Jsb2JzLmNvbnRhaW5zKHBhcnQu
dXJsKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZvciAoY29uc3Qg
QmxvYkRhdGFJdGVtJiBpdGVtIDogbV9ibG9icy5nZXQocGFydC51cmwoKS5zdHJpbmcoKSktPml0
ZW1zKCkpCisgICAgICAgICAgICBmb3IgKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA6IG1fYmxv
YnMuZ2V0KHBhcnQudXJsKCkpLT5pdGVtcygpKQogICAgICAgICAgICAgICAgIGJsb2JEYXRhLT5t
X2l0ZW1zLmFwcGVuZChpdGVtKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5nKCksIGJsb2JEYXRhLnJl
bGVhc2UoKSk7CisgICAgbV9ibG9icy5zZXQodXJsLCBibG9iRGF0YS5yZWxlYXNlKCkpOwogfQog
CiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwg
Y29uc3QgVVJMJiBzcmNVUkwpCkBAIC0xNjgsNyArMTY0LDcgQEAgdm9pZCBCbG9iUmVnaXN0cnlJ
bXBsOjpyZWdpc3RlckJsb2JVUkwoYwogICAgIGlmICghc3JjKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5nKCksIHNyYyk7CisgICAgbV9ibG9icy5zZXQodXJs
LCBzcmMpOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTEZvclNs
aWNlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBs
b25nIGxvbmcgZW5kKQpAQCAtMjA1LDE5ICsyMDEsMTkgQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBs
OjpyZWdpc3RlckJsb2JVUkxGbwogCiAgICAgYXBwZW5kU3RvcmFnZUl0ZW1zKG5ld0RhdGEuZ2V0
KCksIG9yaWdpbmFsRGF0YS0+aXRlbXMoKSwgc3RhcnQsIG5ld0xlbmd0aCk7CiAKLSAgICBtX2Js
b2JzLnNldCh1cmwuc3RyaW5nKCksIG5ld0RhdGEucmVsZWFzZSgpKTsKKyAgICBtX2Jsb2JzLnNl
dCh1cmwsIG5ld0RhdGEucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjp1
bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIG1fYmxvYnMucmVtb3ZlKHVybC5zdHJpbmcoKSk7CisgICAgbV9ibG9icy5y
ZW1vdmUodXJsKTsKIH0KIAogQmxvYkRhdGEqIEJsb2JSZWdpc3RyeUltcGw6OmdldEJsb2JEYXRh
RnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIHJldHVybiBtX2Jsb2JzLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVybiBt
X2Jsb2JzLmdldCh1cmwpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYlJlZ2lzdHJ5SW1w
bDo6YmxvYlNpemUoY29uc3QgVVJMJiB1cmwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAkocmV2aXNpb24gMTk2MDkzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkJsb2JEYXRhLmgiCiAj
aW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiVVJMSGFzaC5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTIsMTIgKzUzLDEyIEBAIHB1YmxpYzoKIAog
ICAgIEJsb2JEYXRhKiBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgVVJMJikgY29uc3Q7CiAKLSAg
ICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRsZShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopOworICAgIFJlZlB0cjxSZXNv
dXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
UmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZFN0b3Jh
Z2VJdGVtcyhCbG9iRGF0YSosIGNvbnN0IEJsb2JEYXRhSXRlbUxpc3QmLCBsb25nIGxvbmcgb2Zm
c2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKIAotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZpbGVC
bG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFBhc3NSZWZQdHI8QmxvYkRhdGFGaWxlUmVmZXJl
bmNlPiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiwgUmVmUHRyPEJsb2JEYXRhRmlsZVJl
ZmVyZW5jZT4mJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBWZWN0b3I8QmxvYlBhcnQ+LCBj
b25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiwgY29uc3Qg
VVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkgb3ZlcnJpZGU7CkBA
IC02Niw3ICs2Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9u
ZyBibG9iU2l6ZShjb25zdCBVUkwmKSBvdmVycmlkZTsKIAotICAgIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8QmxvYkRhdGE+PiBtX2Jsb2JzOworICAgIEhhc2hNYXA8VVJMLCBSZWZQdHI8QmxvYkRh
dGE+PiBtX2Jsb2JzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
LmNwcAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcg
QEAgdm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bgogfQogCiBCbG9iUmVz
b3VyY2VIYW5kbGU6OkJsb2JSZXNvdXJjZUhhbmRsZShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwg
Ym9vbCBhc3luYykKLSAgICA6IFJlc291cmNlSGFuZGxlKDAsIHJlcXVlc3QsIGNsaWVudCwgZmFs
c2UsIGZhbHNlKQorICAgIDogUmVzb3VyY2VIYW5kbGUobnVsbHB0ciwgcmVxdWVzdCwgY2xpZW50
LCBmYWxzZSwgZmFsc2UpCiAgICAgLCBtX2Jsb2JEYXRhKGJsb2JEYXRhKQogICAgICwgbV9hc3lu
Yyhhc3luYykKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcg
KzI0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBjcmVh
dGVTU0xQcm9wZXJ0aWVzRnJvbU5TVVJMUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
ICNlbmRpZgogCi0gICAgdHlwZWRlZiBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiAoKkJ1aWx0
aW5Db25zdHJ1Y3RvcikoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhh
bmRsZUNsaWVudCogY2xpZW50KTsKKyAgICB0eXBlZGVmIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
KCpCdWlsdGluQ29uc3RydWN0b3IpKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCdWls
dGluQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiBwcm90b2NvbCwgQnVpbHRpbkNvbnN0
cnVjdG9yKTsKIAogICAgIHR5cGVkZWYgdm9pZCAoKkJ1aWx0aW5TeW5jaHJvbm91c0xvYWRlciko
TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50
aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRh
dGEpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2MTY2KQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMDItMDQgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBDbGVh
biB1cCBCbG9iIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MzkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Jsb2JSZWdpc3RyeTo6TmV0d29ya0Jsb2JSZWdpc3Ry
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJs
b2JVUkwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdp
c3RyeS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OnJlZ2lzdGVyRmlsZUJsb2JVUkwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVn
aXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVSTCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9G
aWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5Lmg6CisKIDIwMTYtMDItMDQgIERhbmllbCBCYXRlcyAg
PGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdCBmb3IgaU9TIFNpbXVsYXRvciBm
YWlscyB0byBidWlsZCB3aXRoIHB1YmxpYyBpT1MgU0RLCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTYwOTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpy
ZWdpCiB7CiAgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IGV4dGVuc2lvbiA9IFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZShleHRlbnNpb25IYW5kbGUpOwogCi0gICAgTmV0d29ya0Jsb2JSZWdp
c3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJGaWxlQmxvYlVSTCh0aGlzLCB1cmwsIHBhdGgsIGV4
dGVuc2lvbi5yZWxlYXNlKCksIGNvbnRlbnRUeXBlKTsKKyAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5yZWdpc3RlckZpbGVCbG9iVVJMKHRoaXMsIHVybCwgcGF0aCwgV1RGTW92
ZShleHRlbnNpb24pLCBjb250ZW50VHlwZSk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQ
YXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29y
a0Jsb2JSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDcgQEAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6TmV0d29ya0Jsb2JSZWdp
c3RyeQogewogfQogCi12b2lkIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JV
UkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gc2Fu
ZGJveEV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKK3ZvaWQgTmV0d29ya0Js
b2JSZWdpc3RyeTo6cmVnaXN0ZXJGaWxlQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyogY29ubmVjdGlvbiwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGF0aCwgUmVm
UHRyPFNhbmRib3hFeHRlbnNpb24+JiYgc2FuZGJveEV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSkKIHsKICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckZpbGVCbG9iVVJMKHVy
bCwgQmxvYkRhdGFGaWxlUmVmZXJlbmNlV2l0aFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShwYXRo
LCBzYW5kYm94RXh0ZW5zaW9uKSwgY29udGVudFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVn
aXN0cnkuaAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgcHVibGljOgogICAgIE5ldHdvcmtCbG9iUmVnaXN0cnkoKTsKICAgICBzdGF0aWMg
TmV0d29ya0Jsb2JSZWdpc3RyeSYgc2luZ2xldG9uKCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRmls
ZUJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpV
UkwmLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4sIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUpOworICAgIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0
IFN0cmluZyYgcGF0aCwgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+JiYsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgVmVjdG9yPFdlYkNvcmU6OkJsb2JQ
YXJ0PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CiAgICAgdm9pZCByZWdpc3RlckJsb2JV
UkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBj
b25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCk7CiAgICAgdm9pZCByZWdpc3RlckJsb2JVUkxGb3JT
bGljZShOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYs
IGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMLCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9C
bG9iUmVnaXN0cnlQcm94eS5jcHAJKHJldmlzaW9uIDE5NjA5MykKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi12b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckZpbGVCbG9iVVJMKGNv
bnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4g
ZmlsZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6
OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIFJlZlB0cjxCbG9i
RGF0YUZpbGVSZWZlcmVuY2U+JiYgZmlsZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZXh0ZW5zaW9uSGFuZGxlOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5
UHJveHkuaAkocmV2aXNpb24gMTk2MDkzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9G
aWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEJsb2JSZWdpc3RyeVByb3h5IGZpbmFsIDog
cHVibGljIFdlYkNvcmU6OkJsb2JSZWdpc3RyeSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpCbG9iRGF0YUZpbGVSZWZlcmVuY2U+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJD
b3JlOjpVUkwmLCBSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNlPiYmLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpCbG9iUGFydD4s
IGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBz
cmNVUkwpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25z
dCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsK
</data>
<flag name="review"
          id="295575"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="295576"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>