<?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>136701</bug_id>
          
          <creation_ts>2014-09-10 06:16:43 -0700</creation_ts>
          <short_desc>NetworkResourceLoader cleanups</short_desc>
          <delta_ts>2014-09-23 16:13:33 -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>Page Loading</component>
          <version>528+ (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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1034273</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-10 06:16:43 -0700</bug_when>
    <thetext>After smashing it together with the clients it can be made nicer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034286</commentid>
    <comment_count>1</comment_count>
      <attachid>237890</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-10 06:56:55 -0700</bug_when>
    <thetext>Created attachment 237890
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034332</commentid>
    <comment_count>2</comment_count>
      <attachid>237890</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-10 09:13:25 -0700</bug_when>
    <thetext>Comment on attachment 237890
patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:78
&gt; +    const WebCore::ResourceRequest&amp; originalRequest() const { return m_parameters.request; }
&gt; +    // Changes with redirects.
&gt; +    WebCore::ResourceRequest&amp; currentRequest() { return m_currentRequest; }

The paragraphing here made it hard for me to understand the comment. I would put a blank line before the comment.

&gt; Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp:133
&gt; +        for (size_t i = 0, count = requestBodySandboxExtensionHandles.size(); i &lt; count; ++i) {

Modern for loop would be better.

&gt; Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp:135
&gt; +                result.requestBodySandboxExtensions.append(extension);

extension.release()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034335</commentid>
    <comment_count>3</comment_count>
      <attachid>237890</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-10 09:19:43 -0700</bug_when>
    <thetext>Comment on attachment 237890
patch

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

&gt;&gt; Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp:133
&gt;&gt; +        for (size_t i = 0, count = requestBodySandboxExtensionHandles.size(); i &lt; count; ++i) {
&gt; 
&gt; Modern for loop would be better.

Unfortunately HandleArray is a custom array type without iterators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034340</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-10 09:36:51 -0700</bug_when>
    <thetext>https://trac.webkit.org/r173468</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034343</commentid>
    <comment_count>5</comment_count>
      <attachid>237890</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-09-10 09:58:48 -0700</bug_when>
    <thetext>Comment on attachment 237890
patch

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

&gt; Source/WebKit2/ChangeLog:21
&gt; +            Instead of copying everything out from NetworkResourceLoadParameters just include the whole thing as a const field.

I guess it&apos;s OK to try how this feels, but this is not how other &quot;parameters&quot; classes work, and it&apos;s really a layering violation between IPC and loading logic to do this.

&gt; Source/WebKit2/ChangeLog:64
&gt; +            Use original request instead of the current one. This might fix a bug where we didn&apos;t use file backing over redirects.

I&apos;d love to hear Brady&apos;s take on this. To me, this sounds incorrect - caching is always about the final URL, because redirect chains can and do change.

&gt; Source/WebKit2/ChangeLog:69
&gt; +            Decode to SanboxExtensions to the actual type rather than a handle.

Good stuff - the complications with sandbox extensions were caused by lack of C++11 move support at the time the code was written, and the class itself wasn&apos;t RefCounted if I remember correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034422</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-10 15:03:24 -0700</bug_when>
    <thetext>&gt; I guess it&apos;s OK to try how this feels, but this is not how other &quot;parameters&quot; classes work, and it&apos;s really a layering violation between IPC and loading logic to do this.

Alexey, I know what our layering is. You don&apos;t need to worry about me violating it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034423</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-09-10 15:07:06 -0700</bug_when>
    <thetext>Can you be more specific please? What makes you think that using a type that exists of IPC purposes in NetworkResourceLoader is not a layering violation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034434</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-10 15:24:47 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Can you be more specific please? What makes you think that using a type that exists of IPC purposes in NetworkResourceLoader is not a layering violation?

Yes. Whether someone thinks something exists for &quot;IPC purposes&quot; is not a meaningful part of our layering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034465</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-09-10 16:47:50 -0700</bug_when>
    <thetext>Thank you for your accurate, detailed and immensely helpful response.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036862</commentid>
    <comment_count>10</comment_count>
      <attachid>237890</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-09-23 16:11:34 -0700</bug_when>
    <thetext>Comment on attachment 237890
patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:89
&gt; +    bool defersLoading() const { return m_parameters.defersLoading; }

Does this always match m_defersLoading? Would setDefersLoading(false) affect m_parameters.defersLoading?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237890</attachid>
            <date>2014-09-10 06:56:55 -0700</date>
            <delta_ts>2014-09-23 16:11:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>networkresourceloader-cleanup.patch</filename>
            <type>text/plain</type>
            <size>30806</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzQ1NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE0LTA5LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjcwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFmdGVyIHNtYXNoaW5nIE5ldHdvcmtSZXNvdXJjZUxvYWRlciB0b2dldGhlciB3aXRoIHRo
ZSBjbGllbnRzIGl0IGNhbiBiZSBtYWRlIG5pY2VyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZGVyKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9hZGVyKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlN5bmNocm9ub3VzTG9hZERhdGE6OlN5bmNo
cm9ub3VzTG9hZERhdGEpOgorCisgICAgICAgICAgICBUaGUgb3JpZ2luYWwgcmVxdWVzdCBpcyBu
b3cgcGFydCBvZiB0aGUgbG9hZGVyLgorCisgICAgICAgIChXZWJLaXQ6OnNlbmRSZXBseVRvU3lu
Y2hyb25vdXNSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVy
OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorCisgICAgICAgICAgICBJbnN0ZWFkIG9mIGNvcHlp
bmcgZXZlcnl0aGluZyBvdXQgZnJvbSBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBqdXN0
IGluY2x1ZGUgdGhlIHdob2xlIHRoaW5nIGFzIGEgY29uc3QgZmllbGQuCisgICAgICAgICAgICBT
YW5ib3hFeHRlbnNpb24gY29uc3RydWN0aW9uIG1vdmVzIHRvIE5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzOjpkZWNvZGUoKQorICAgICAgICAgICAgU3R1ZmYgdGhhdCBpcyByZWxhdGVkIHRv
IHN0YXJ0aW5nIHRoZSBsb2FkIG1vdmVzIHRvIHN0YXJ0KCkuCisKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisKKyAgICAgICAgICAg
IEVsaW1pbmF0ZSBtX2RlZmVycmVkUmVxdWVzdCBzaW5jZSB3ZSBub3cgYWx3YXlzIHJlbWVtYmVy
IHRoZSBvcmlnaW5hbCByZXF1ZXN0LgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6Y2xlYW51cCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKworICAgICAgICAg
ICAgRWxpbWluYXRlIHVubmVjZXNzYXJ5IG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxTZW5kUmVx
dWVzdC4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ondhc0Jsb2Nr
ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbm5vdFNob3dV
UkwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVy
OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZOZWVkZWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnN1bWVTYW5kYm94
RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6aW52
YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpzZW5kQWJvcnRpbmdPbkZhaWx1cmUpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6Om9yaWdpbmFsUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6Y3VycmVudFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6ZGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6aXNMb2FkaW5nTWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Jlc291cmNlTG9hZGVyOjpyZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZW5kQWJvcnRpbmdPbkZhaWx1cmUpOiBEZWxldGVkLgor
CisgICAgICAgICAgICBNYWRlIHByaXZhdGUgYW5kIG1vdmVkIHRvIGNwcC4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrRGlza0NhY2hlTW9uaXRvci5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Rpc2tDYWNoZU1vbml0b3I6Ok5ldHdvcmtEaXNrQ2FjaGVNb25pdG9y
KToKKworICAgICAgICAgICAgVXNlIG9yaWdpbmFsIHJlcXVlc3QgaW5zdGVhZCBvZiB0aGUgY3Vy
cmVudCBvbmUuIFRoaXMgbWlnaHQgZml4IGEgYnVnIHdoZXJlIHdlIGRpZG4ndCB1c2UgZmlsZSBi
YWNraW5nIG92ZXIgcmVkaXJlY3RzLgorCisgICAgICAgICogU2hhcmVkL05ldHdvcmsvTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVyczo6ZGVjb2RlKToKKworICAgICAgICAgICAgRGVjb2RlIHRvIFNh
bmJveEV4dGVuc2lvbnMgdG8gdGhlIGFjdHVhbCB0eXBlIHJhdGhlciB0aGFuIGEgaGFuZGxlLgor
CisgICAgICAgICogU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMu
aDoKKwogMjAxNC0wOS0xMCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gYWxsb3cgb3ZlcndyaXRpbmcgZGVzdGluYXRpb24gb2YgZG93
bmxvYWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAxNzM0MjIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQCB2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAotICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkZXIgcmVzb3VyY2UgJyVzJyIs
IGxvYWRlci0+cmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIExP
RyhOZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkZXIgcmVzb3VyY2UgJyVzJyIsIGxvYWRlci0+b3JpZ2lu
YWxSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAvLyBUaGlz
IHJlcXVlc3QgbWlnaHQgYmUgZnJvbSBXZWJQcm9jZXNzIHdlJ3ZlIGxvc3Qgb3VyIGNvbm5lY3Rp
b24gdG8uCiAgICAgLy8gSWYgc28gd2Ugc2hvdWxkIGp1c3Qgc2tpcCBpdC4KQEAgLTQ0LDcgKzQ0
LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdgogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIo
TmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRl
ciByZXNvdXJjZSAnJXMnIiwgbG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVMb2FkZXIgcmVzb3VyY2UgJyVzJyIs
IGxvYWRlci0+b3JpZ2luYWxSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAKICAgICBtX2FjdGl2ZUxvYWRlcnMucmVtb3ZlKGxvYWRlcik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVy
LmNwcAkocmV2aXNpb24gMTczNDIzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOTIgKzU3LDY2
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVj
dCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlN5bmNocm9ub3VzTG9hZERhdGEgewotICAgICAgICBT
eW5jaHJvbm91c0xvYWREYXRhKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFz
c1JlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1T
eW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4gcmVwbHkpCi0gICAgICAgIDogbV9vcmlnaW5h
bFJlcXVlc3QocmVxdWVzdCkKLSAgICAgICAgLCBtX2RlbGF5ZWRSZXBseShyZXBseSkKKyAgICBT
eW5jaHJvbm91c0xvYWREYXRhKFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+IHJlcGx5
KQorICAgICAgICA6IGRlbGF5ZWRSZXBseShyZXBseSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2RlbGF5ZWRSZXBseSk7CisgICAgICAgIEFTU0VSVChkZWxheWVkUmVwbHkpOwogICAgIH0KLSAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9vcmlnaW5hbFJlcXVlc3Q7Ci0gICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7Ci0gICAgUmVmUHRyPE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6
RGVsYXllZFJlcGx5PiBtX2RlbGF5ZWRSZXBseTsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlIG1fcmVzcG9uc2U7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBtX2Vycm9yOworICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBjdXJyZW50UmVxdWVzdDsKKyAgICBSZWZQdHI8TWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNM
b2FkOjpEZWxheWVkUmVwbHk+IGRlbGF5ZWRSZXBseTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlOworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3I7CiB9Owog
CiBzdGF0aWMgdm9pZCBzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVzdChOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OlN5bmNocm9ub3VzTG9hZERhdGEmIGRhdGEsIFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
ciogYnVmZmVyKQogewotICAgIEFTU0VSVChkYXRhLm1fZGVsYXllZFJlcGx5KTsKLSAgICBBU1NF
UlQoIWRhdGEubV9yZXNwb25zZS5pc051bGwoKSB8fCAhZGF0YS5tX2Vycm9yLmlzTnVsbCgpKTsK
KyAgICBBU1NFUlQoZGF0YS5kZWxheWVkUmVwbHkpOworICAgIEFTU0VSVCghZGF0YS5yZXNwb25z
ZS5pc051bGwoKSB8fCAhZGF0YS5lcnJvci5pc051bGwoKSk7CiAKICAgICBWZWN0b3I8Y2hhcj4g
cmVzcG9uc2VCdWZmZXI7CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPnNpemUoKSkKICAgICAg
ICAgcmVzcG9uc2VCdWZmZXIuYXBwZW5kKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7
CiAKLSAgICBkYXRhLm1fZGVsYXllZFJlcGx5LT5zZW5kKGRhdGEubV9lcnJvciwgZGF0YS5tX3Jl
c3BvbnNlLCByZXNwb25zZUJ1ZmZlcik7Ci0gICAgZGF0YS5tX2RlbGF5ZWRSZXBseSA9IG51bGxw
dHI7CisgICAgZGF0YS5kZWxheWVkUmVwbHktPnNlbmQoZGF0YS5lcnJvciwgZGF0YS5yZXNwb25z
ZSwgcmVzcG9uc2VCdWZmZXIpOworICAgIGRhdGEuZGVsYXllZFJlcGx5ID0gbnVsbHB0cjsKIH0K
IAogTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5
PiBzeW5jaHJvbm91c1JlcGx5KQotICAgIDogbV9ieXRlc1JlY2VpdmVkKDApCi0gICAgLCBtX2hh
bmRsZUNvbnZlcnRlZFRvRG93bmxvYWQoZmFsc2UpCi0gICAgLCBtX2lkZW50aWZpZXIocGFyYW1l
dGVycy5pZGVudGlmaWVyKQotICAgICwgbV93ZWJQYWdlSUQocGFyYW1ldGVycy53ZWJQYWdlSUQp
Ci0gICAgLCBtX3dlYkZyYW1lSUQocGFyYW1ldGVycy53ZWJGcmFtZUlEKQotICAgICwgbV9zZXNz
aW9uSUQocGFyYW1ldGVycy5zZXNzaW9uSUQpCi0gICAgLCBtX3JlcXVlc3QocGFyYW1ldGVycy5y
ZXF1ZXN0KQotICAgICwgbV9jb250ZW50U25pZmZpbmdQb2xpY3kocGFyYW1ldGVycy5jb250ZW50
U25pZmZpbmdQb2xpY3kpCi0gICAgLCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMocGFyYW1ldGVy
cy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzKQotICAgICwgbV9jbGllbnRDcmVkZW50aWFsUG9saWN5
KHBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSkKLSAgICAsIG1fc2hvdWxkQ2xlYXJS
ZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdChwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCi0gICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShw
YXJhbWV0ZXJzLmlzTWFpblJlc291cmNlKQotICAgICwgbV9kZWZlcnNMb2FkaW5nKHBhcmFtZXRl
cnMuZGVmZXJzTG9hZGluZykKLSAgICAsIG1fbmVlZHNDZXJ0aWZpY2F0ZUluZm8ocGFyYW1ldGVy
cy5uZWVkc0NlcnRpZmljYXRlSW5mbykKLSAgICAsIG1fbWF4aW11bUJ1ZmZlcmluZ1RpbWUocGFy
YW1ldGVycy5tYXhpbXVtQnVmZmVyaW5nVGltZSkKLSAgICAsIG1fYnVmZmVyaW5nVGltZXIodGhp
cywgJk5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCkKLSAgICAsIG1f
c2FuZGJveEV4dGVuc2lvbnNBcmVDb25zdW1lZChmYWxzZSkKKyAgICA6IG1fcGFyYW1ldGVycyhw
YXJhbWV0ZXJzKQogICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCisgICAgLCBtX2J5dGVz
UmVjZWl2ZWQoMCkKICAgICAsIG1fYnVmZmVyZWREYXRhRW5jb2RlZERhdGFMZW5ndGgoMCkKKyAg
ICAsIG1fZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQoZmFsc2UpCisgICAgLCBtX2RpZENvbnN1
bWVTYW5kYm94RXh0ZW5zaW9ucyhmYWxzZSkKKyAgICAsIG1fZGVmZXJzTG9hZGluZyhwYXJhbWV0
ZXJzLmRlZmVyc0xvYWRpbmcpCisgICAgLCBtX2J1ZmZlcmluZ1RpbWVyKHRoaXMsICZOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmluZ1RpbWVyRmlyZWQpCiB7Ci0gICAgLy8gRWl0aGVyIHRo
aXMgbG9hZGVyIGhhcyBib3RoIGEgd2ViUGFnZUlEIGFuZCB3ZWJGcmFtZUlELCBvciBpdCBpcyBu
b3QgYWxsb3dlZCB0byBhc2sgdGhlIGNsaWVudCBmb3IgYXV0aGVudGljYXRpb24gY3JlZGVudGlh
bHMuCisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBuZWNlc3NhcnkgYmVjYXVzZSBvZiB0aGUgZXhpc3RlbmNlIG9mIEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQgaW4gV2ViQ29yZS4KICAgICAvLyAgICAgICAgT25jZSBidWcgMTE2MjMzIGlzIHJlc29s
dmVkLCB0aGlzIEFTU0VSVCBjYW4ganVzdCBiZSAibV93ZWJQYWdlSUQgJiYgbV93ZWJGcmFtZUlE
IgotICAgIEFTU0VSVCgobV93ZWJQYWdlSUQgJiYgbV93ZWJGcmFtZUlEKSB8fCBtX2NsaWVudENy
ZWRlbnRpYWxQb2xpY3kgPT0gRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscyk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBwYXJhbWV0ZXJzLnJlcXVlc3RCb2R5U2FuZGJv
eEV4dGVuc2lvbnMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoUmVmUHRy
PFNhbmRib3hFeHRlbnNpb24+IGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShw
YXJhbWV0ZXJzLnJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnNbaV0pKQotICAgICAgICAgICAg
bV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLmFwcGVuZChleHRlbnNpb24pOwotICAgIH0K
KyAgICBBU1NFUlQoKG1fcGFyYW1ldGVycy53ZWJQYWdlSUQgJiYgbV9wYXJhbWV0ZXJzLndlYkZy
YW1lSUQpIHx8IG1fcGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID09IERvTm90QXNr
Q2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpOwogCi0gICAgaWYgKG1fcmVxdWVzdC5odHRwQm9keSgp
KSB7Ci0gICAgICAgIGZvciAoY29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50IDogbV9yZXF1
ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRzKCkpIHsKKyAgICBpZiAob3JpZ2luYWxSZXF1ZXN0KCku
aHR0cEJvZHkoKSkgeworICAgICAgICBmb3IgKGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVu
dCA6IG9yaWdpbmFsUmVxdWVzdCgpLmh0dHBCb2R5KCktPmVsZW1lbnRzKCkpIHsKICAgICAgICAg
ICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRC
bG9iKQogICAgICAgICAgICAgICAgIG1fZmlsZVJlZmVyZW5jZXMuYXBwZW5kVmVjdG9yKE5ldHdv
cmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLmZpbGVzSW5CbG9iKGNvbm5lY3Rpb24sIGVsZW1lbnQu
bV91cmwpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX3JlcXVlc3QudXJsKCkucHJv
dG9jb2xJcygiYmxvYiIpKSB7Ci0gICAgICAgIEFTU0VSVCghU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlKHBhcmFtZXRlcnMucmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9uKSk7Ci0gICAgICAgIG1fZmls
ZVJlZmVyZW5jZXMuYXBwZW5kVmVjdG9yKE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLmZp
bGVzSW5CbG9iKGNvbm5lY3Rpb24sIG1fcmVxdWVzdC51cmwoKSkpOwotICAgIH0gZWxzZQotCi0g
ICAgaWYgKFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiByZXNvdXJjZVNhbmRib3hFeHRlbnNpb24g
PSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocGFyYW1ldGVycy5yZXNvdXJjZVNhbmRib3hFeHRl
bnNpb24pKQotICAgICAgICBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKHJlc291
cmNlU2FuZGJveEV4dGVuc2lvbik7Ci0KLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIAotICAgIGlmIChzeW5jaHJvbm91c1JlcGx5IHx8IG1fbWF4aW11bUJ1ZmZlcmluZ1RpbWUg
PiAwX21zKQotICAgICAgICBtX2J1ZmZlcmVkRGF0YSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKCk7CisgICAgaWYgKG9yaWdpbmFsUmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXMoImJs
b2IiKSkgeworICAgICAgICBBU1NFUlQoIW1fcGFyYW1ldGVycy5yZXNvdXJjZVNhbmRib3hFeHRl
bnNpb24pOworICAgICAgICBtX2ZpbGVSZWZlcmVuY2VzLmFwcGVuZFZlY3RvcihOZXR3b3JrQmxv
YlJlZ2lzdHJ5OjpzaGFyZWQoKS5maWxlc0luQmxvYihjb25uZWN0aW9uLCBvcmlnaW5hbFJlcXVl
c3QoKS51cmwoKSkpOworICAgIH0KIAogICAgIGlmIChzeW5jaHJvbm91c1JlcGx5KQotICAgICAg
ICBtX3N5bmNocm9ub3VzTG9hZERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFN5bmNocm9ub3VzTG9h
ZERhdGE+KG1fcmVxdWVzdCwgc3luY2hyb25vdXNSZXBseSk7CisgICAgICAgIG1fc3luY2hyb25v
dXNMb2FkRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8U3luY2hyb25vdXNMb2FkRGF0YT4oc3luY2hy
b25vdXNSZXBseSk7CiB9CiAKIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5ldHdvcmtSZXNvdXJj
ZUxvYWRlcigpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQo
IW1faGFuZGxlKTsKLSAgICBBU1NFUlQoIWlzU3luY2hyb25vdXMoKSB8fCAhbV9zeW5jaHJvbm91
c0xvYWREYXRhLT5tX2RlbGF5ZWRSZXBseSk7CisgICAgQVNTRVJUKCFpc1N5bmNocm9ub3VzKCkg
fHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJlcGx5KTsKIH0KIAogYm9vbCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmlzU3luY2hyb25vdXMoKSBjb25zdApAQCAtMTU0LDMzICsxMjgs
MzYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKG1fZGVmZXJzTG9hZGluZykgewotICAgICAg
ICBtX2RlZmVycmVkUmVxdWVzdCA9IG1fcmVxdWVzdDsKKyAgICBpZiAobV9kZWZlcnNMb2FkaW5n
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgLy8gRXhwbGljaXQgcmVmKCkgYmFsYW5j
ZWQgYnkgYSBkZXJlZigpIGluIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgpCiAgICAg
cmVmKCk7CiAKLSAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBTZXQgcGxhdGZvcm0gc3Bl
Y2lmaWMgc2V0dGluZ3MuCi0gICAgbV9uZXR3b3JraW5nQ29udGV4dCA9IFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0OjpjcmVhdGUobV9zZXNzaW9uSUQsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCk7CisgICAgbV9uZXR3b3JraW5nQ29udGV4dCA9IFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0OjpjcmVhdGUoc2Vzc2lvbklEKCksIG1fcGFyYW1ldGVycy5zaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKIAogICAgIGNvbnN1bWVTYW5kYm94RXh0
ZW5zaW9ucygpOwogCi0gICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogUGFzcyBhbiBhY3R1
YWwgdmFsdWUgZm9yIGRlZmVyc0xvYWRpbmcKLSAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxl
OjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9yZXF1ZXN0LCB0aGlzLCBmYWxz
ZSAvKiBkZWZlcnNMb2FkaW5nICovLCBtX2NvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNv
bnRlbnQpOworICAgIG1fY3VycmVudFJlcXVlc3QgPSBvcmlnaW5hbFJlcXVlc3QoKTsKKworICAg
IGlmIChpc1N5bmNocm9ub3VzKCkgfHwgbV9wYXJhbWV0ZXJzLm1heGltdW1CdWZmZXJpbmdUaW1l
ID4gMF9tcykKKyAgICAgICAgbV9idWZmZXJlZERhdGEgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OmNyZWF0ZSgpOworCisgICAgYm9vbCBzaG91bGRTbmlmZiA9IG1fcGFyYW1ldGVycy5jb250ZW50
U25pZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50OworICAgIG1faGFuZGxlID0gUmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZShtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBtX2N1cnJlbnRSZXF1ZXN0
LCB0aGlzLCBmYWxzZSAvKiBkZWZlcnNMb2FkaW5nICovLCBzaG91bGRTbmlmZik7CiB9CiAKIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQog
eworICAgIGlmIChtX2RlZmVyc0xvYWRpbmcgPT0gZGVmZXJzKQorICAgICAgICByZXR1cm47CiAg
ICAgbV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOwotICAgIGlmIChtX2hhbmRsZSkKKyAgICBpZiAo
bV9oYW5kbGUpIHsKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsK
LSAgICBpZiAoIWRlZmVycyAmJiAhbV9kZWZlcnJlZFJlcXVlc3QuaXNOdWxsKCkpIHsKLSAgICAg
ICAgbV9yZXF1ZXN0ID0gbV9kZWZlcnJlZFJlcXVlc3Q7Ci0gICAgICAgIG1fZGVmZXJyZWRSZXF1
ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIHN0YXJ0KCk7CisgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgaWYgKCFtX2RlZmVyc0xvYWRpbmcpCisgICAgICAgIHN0YXJ0KCk7CiB9
CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjbGVhbnVwKCkKQEAgLTE5MSw3ICsxNjgs
NiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgpCiAKICAgICBpbnZhbGlk
YXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKIAotICAgIC8vIFRlbGwgdGhlIHNjaGVkdWxlciBhYm91
dCB0aGlzIGZpbmlzaGVkIGxvYWRlciBzb29uIHNvIGl0IGNhbiBzdGFydCBtb3JlIG5ldHdvcmsg
cmVxdWVzdHMuCiAgICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKS5yZW1vdmVMb2FkZXIodGhpcyk7CiAKICAgICBpZiAobV9oYW5kbGUpIHsK
QEAgLTIwNSwxNCArMTgxLDE0IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjbGVhbnVw
KCkKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9h
ZCgpCiB7CiAgICAgQVNTRVJUKG1faGFuZGxlKTsKLSAgICBtX2hhbmRsZUNvbnZlcnRlZFRvRG93
bmxvYWQgPSB0cnVlOworICAgIG1fZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQgPSB0cnVlOwog
fQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAobV9oYW5kbGUgJiYgIW1faGFuZGxlQ29udmVy
dGVkVG9Eb3dubG9hZCkKKyAgICBpZiAobV9oYW5kbGUgJiYgIW1fZGlkQ29udmVydEhhbmRsZVRv
RG93bmxvYWQpCiAgICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKIAogICAgIGNsZWFudXAoKTsK
QEAgLTIyMiwxMSArMTk4LDExIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmUKIHsKICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsK
IAotICAgIGlmIChtX25lZWRzQ2VydGlmaWNhdGVJbmZvKQorICAgIGlmIChtX3BhcmFtZXRlcnMu
bmVlZHNDZXJ0aWZpY2F0ZUluZm8pCiAgICAgICAgIHJlc3BvbnNlLmluY2x1ZGVDZXJ0aWZpY2F0
ZUluZm8oKTsKIAogICAgIGlmIChpc1N5bmNocm9ub3VzKCkpCi0gICAgICAgIG1fc3luY2hyb25v
dXNMb2FkRGF0YS0+bV9yZXNwb25zZSA9IHJlc3BvbnNlOworICAgICAgICBtX3N5bmNocm9ub3Vz
TG9hZERhdGEtPnJlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgZWxzZQogICAgICAgICBzZW5kQWJv
cnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVz
cG9uc2UocmVzcG9uc2UsIGlzTG9hZGluZ01haW5SZXNvdXJjZSgpKSk7CiAKQEAgLTIzNCwxMCAr
MjEwLDEwIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmUKICAgICBp
ZiAoIW1faGFuZGxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1faXNMb2FkaW5nTWFp
blJlc291cmNlKSB7Ci0gICAgICAgIC8vIEZvciBtYWluIHJlc291cmNlcywgdGhlIHdlYiBwcm9j
ZXNzIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIGJhY2sgYSBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OkNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIG1lc3NhZ2UuCi0gICAgICAgIG1faGFuZGxl
LT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwotICAgIH0KKyAgICAvLyBGb3IgbWFpbiBy
ZXNvdXJjZXMsIHRoZSB3ZWIgcHJvY2VzcyBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBiYWNr
IGEgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtZXNz
YWdlLgorICAgIGlmIChtX3BhcmFtZXRlcnMuaXNNYWluUmVzb3VyY2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwg
Y29uc3QgY2hhciogLyogZGF0YSAqLywgdW5zaWduZWQgLyogbGVuZ3RoICovLCBpbnQgLyogZW5j
b2RlZERhdGFMZW5ndGggKi8pCkBAIC0yODQsNyArMjYwLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZEZhaWwoUmVzbwogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUg
PT0gbV9oYW5kbGUpOwogCiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkgewotICAgICAgICBtX3N5
bmNocm9ub3VzTG9hZERhdGEtPm1fZXJyb3IgPSBlcnJvcjsKKyAgICAgICAgbV9zeW5jaHJvbm91
c0xvYWREYXRhLT5lcnJvciA9IGVycm9yOwogICAgICAgICBzZW5kUmVwbHlUb1N5bmNocm9ub3Vz
UmVxdWVzdCgqbV9zeW5jaHJvbm91c0xvYWREYXRhLCBudWxscHRyKTsKICAgICB9IGVsc2UKICAg
ICAgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZhaWxSZXNvdXJjZUxv
YWQoZXJyb3IpKTsKQEAgLTMwMCwxOSArMjc2LDE3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjp3aWxsU2VuZFJlcXUKICAgICBBU1NFUlQoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkp
OwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBtX3N1Z2dlc3RlZFJlcXVl
c3RGb3JXaWxsU2VuZFJlcXVlc3QgPSByZXF1ZXN0OworICAgIG1fY3VycmVudFJlcXVlc3QgPSBy
ZXF1ZXN0OwogCiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkgewogICAgICAgICAvLyBGSVhNRTog
VGhpcyBuZWVkcyB0byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBl
dmVuIGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMuCiAgICAgICAgIC8vIFRoaXMgaW5jbHVkZXMg
YXQgbGVhc3QgdXBkYXRpbmcgaG9zdCByZWNvcmRzLCBhbmQgY29tcGFyaW5nIHRoZSBjdXJyZW50
IHJlcXVlc3QgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCBoZXJlLgotICAgICAgICBp
ZiAocHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1fc3luY2hyb25vdXNMb2FkRGF0YS0+bV9v
cmlnaW5hbFJlcXVlc3QudXJsKCksIHJlcXVlc3QudXJsKCkpKQotICAgICAgICAgICAgbV9zeW5j
aHJvbm91c0xvYWREYXRhLT5tX2N1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zeW5jaHJvbm91c0xvYWREYXRhLT5tX2Vycm9yLmlz
TnVsbCgpKTsKLSAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+bV9lcnJvciA9IFN5
bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpwbGF0Zm9ybUJhZFJlc3BvbnNlRXJyb3IoKTsKLSAgICAg
ICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+bV9jdXJyZW50UmVxdWVzdCA9IFJlc291cmNl
UmVxdWVzdCgpOworICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChvcmln
aW5hbFJlcXVlc3QoKS51cmwoKSwgcmVxdWVzdC51cmwoKSkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX3N5bmNocm9ub3VzTG9hZERhdGEtPmVycm9yLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIG1f
c3luY2hyb25vdXNMb2FkRGF0YS0+ZXJyb3IgPSBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6cGxh
dGZvcm1CYWRSZXNwb25zZUVycm9yKCk7CisgICAgICAgICAgICBtX2N1cnJlbnRSZXF1ZXN0ID0g
UmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgICAgIH0KLSAgICAgICAgY29udGludWVXaWxsU2VuZFJl
cXVlc3QobV9zeW5jaHJvbm91c0xvYWREYXRhLT5tX2N1cnJlbnRSZXF1ZXN0KTsKKyAgICAgICAg
Y29udGludWVXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJj
ZUxvYWRlcjo6V2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKTsKQEAg
LTMyMSwyMCArMjk1LDE3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXUKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgbV9zdWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxl
Z2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QubnNVUkxSZXF1ZXN0KERvTm90
VXBkYXRlSFRUUEJvZHkpKTsKKyAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0
ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QubnNVUkxSZXF1ZXN0KERvTm90VXBk
YXRlSFRUUEJvZHkpKTsKICNlbGlmIFVTRShTT1VQKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
UmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGll
cy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYxMjcuCi0g
ICAgbV9zdWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0
ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QpOworICAgIG1fY3VycmVudFJlcXVl
c3QudXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMobmV3UmVxdWVzdCk7
CiAjZW5kaWYKIAotICAgIG1fcmVxdWVzdCA9IG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxTZW5k
UmVxdWVzdDsKLSAgICBtX3N1Z2dlc3RlZFJlcXVlc3RGb3JXaWxsU2VuZFJlcXVlc3QgPSBSZXNv
dXJjZVJlcXVlc3QoKTsKKyAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2VuZFJlcXVlc3QobV9j
dXJyZW50UmVxdWVzdCk7CiAKLSAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2VuZFJlcXVlc3Qo
bV9yZXF1ZXN0KTsKLQotICAgIGlmIChtX3JlcXVlc3QuaXNOdWxsKCkpIHsKKyAgICBpZiAobV9j
dXJyZW50UmVxdWVzdC5pc051bGwoKSkgewogICAgICAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7Ci0g
ICAgICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9yKG1fcmVxdWVzdCkp
OworICAgICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJl
bnRSZXF1ZXN0KSk7CiAgICAgfQogfQogCkBAIC0zNjAsMTQgKzMzMSwxNCBAQCB2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6d2FzQmxvY2tlZChSCiB7CiAgICAgQVNTRVJUX1VOVVNFRChoYW5k
bGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CiAKLSAgICBkaWRGYWlsKGhhbmRsZSwgV2ViS2l0Ojpi
bG9ja2VkRXJyb3IocmVxdWVzdCgpKSk7CisgICAgZGlkRmFpbChoYW5kbGUsIFdlYktpdDo6Ymxv
Y2tlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsKICAgICBBU1NF
UlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKIAotICAgIGRpZEZhaWwoaGFu
ZGxlLCBXZWJLaXQ6OmNhbm5vdFNob3dVUkxFcnJvcihyZXF1ZXN0KCkpKTsKKyAgICBkaWRGYWls
KGhhbmRsZSwgV2ViS2l0OjpjYW5ub3RTaG93VVJMRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwog
fQogCiBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKQEAgLTM3OSw3ICszNTAsNyBAQCBib29sIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6c2hvdWxkVXNlQ3JlCiAKICAgICAvLyBXZSBzdGlsbCBuZWVkIHRo
aXMgc3luYyB2ZXJzaW9uLCBiZWNhdXNlIFJlc291cmNlSGFuZGxlIGl0c2VsZiB1c2VzIGl0IGlu
dGVybmFsbHksIGV2ZW4gd2hlbiB0aGUgZGVsZWdhdGUgdXNlcyBhbiBhc3luYyBvbmUuCiAKLSAg
ICByZXR1cm4gbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlh
bHM7CisgICAgcmV0dXJuIG1fcGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID09IEFs
bG93U3RvcmVkQ3JlZGVudGlhbHM7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKQEAgLTM4OSwxMiArMzYw
LDEyIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQXUKICAgICAvLyBG
SVhNRSAoaHR0cDovL3dlYmtpdC5vcmcvYi8xMTUyOTEpOiBTaW5jZSB3ZSBnbyBzdHJhaWdodCB0
byB0aGUgVUkgcHJvY2VzcyBmb3IgYXV0aGVudGljYXRpb24gd2UgZG9uJ3QgZ2V0IFdlYkNvcmUn
cwogICAgIC8vIGNyb3NzLW9yaWdpbiBjaGVjayBiZWZvcmUgYXNraW5nIHRoZSBjbGllbnQgZm9y
IGNyZWRlbnRpYWxzLgogICAgIC8vIFRoZXJlZm9yZSB3ZSBhcmUgdG9vIHBlcm1pc3NpdmUgaW4g
dGhlIGNhc2Ugd2hlcmUgdGhlIENsaWVudENyZWRlbnRpYWxQb2xpY3kgaXMgRG9Ob3RBc2tDbGll
bnRGb3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzLgotICAgIGlmIChtX2NsaWVudENyZWRlbnRpYWxQ
b2xpY3kgPT0gRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscykgeworICAgIGlmIChtX3Bh
cmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNy
ZWRlbnRpYWxzKSB7CiAgICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5y
ZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5hdXRo
ZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV93
ZWJQYWdlSUQsIG1fd2ViRnJhbWVJRCwgY2hhbGxlbmdlKTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6
c2hhcmVkKCkuYXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlE
LCBjaGFsbGVuZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ2FuY2Vs
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtNDEwLDcgKzM4MSw3IEBAIHZvaWQgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpyZWNlaXZlZENhbmMKICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFu
ZGxlID09IG1faGFuZGxlKTsKIAogICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKLSAgICBkaWRGYWls
KG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX3JlcXVlc3QpKTsKKyAgICBkaWRGYWls
KG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9CiAK
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZOZWVkZWQo
KQpAQCAtNDE5LDcgKzM5MCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydEJ1
ZmZlcmkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2J1ZmZlcmluZ1RpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2J1ZmZlcmluZ1RpbWVyLnN0YXJ0T25lU2hvdCht
X21heGltdW1CdWZmZXJpbmdUaW1lKTsKKyAgICBtX2J1ZmZlcmluZ1RpbWVyLnN0YXJ0T25lU2hv
dChtX3BhcmFtZXRlcnMubWF4aW11bUJ1ZmZlcmluZ1RpbWUpOwogfQogCiB2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZChUaW1lcjxOZXR3b3JrUmVzb3VyY2VM
b2FkZXI+JikKQEAgLTQ2MSwzNCArNDMyLDQxIEBAIElQQzo6Q29ubmVjdGlvbiogTmV0d29ya1Jl
c291cmNlTG9hZGVyOjoKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnN1bWVTYW5k
Ym94RXh0ZW5zaW9ucygpCiB7Ci0gICAgZm9yIChSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4mIGV4
dGVuc2lvbiA6IG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucykKKyAgICBmb3IgKGF1dG8m
IGV4dGVuc2lvbiA6IG1fcGFyYW1ldGVycy5yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zKQog
ICAgICAgICBleHRlbnNpb24tPmNvbnN1bWUoKTsKIAotICAgIGZvciAoUmVmUHRyPFNhbmRib3hF
eHRlbnNpb24+JiBleHRlbnNpb24gOiBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMpCisgICAg
aWYgKGF1dG8mIGV4dGVuc2lvbiA9IG1fcGFyYW1ldGVycy5yZXNvdXJjZVNhbmRib3hFeHRlbnNp
b24pCiAgICAgICAgIGV4dGVuc2lvbi0+Y29uc3VtZSgpOwogCi0gICAgZm9yIChSZWZQdHI8Qmxv
YkRhdGFGaWxlUmVmZXJlbmNlPiYgZmlsZVJlZmVyZW5jZSA6IG1fZmlsZVJlZmVyZW5jZXMpCisg
ICAgZm9yIChhdXRvJiBmaWxlUmVmZXJlbmNlIDogbV9maWxlUmVmZXJlbmNlcykKICAgICAgICAg
ZmlsZVJlZmVyZW5jZS0+cHJlcGFyZUZvckZpbGVBY2Nlc3MoKTsKIAotICAgIG1fc2FuZGJveEV4
dGVuc2lvbnNBcmVDb25zdW1lZCA9IHRydWU7CisgICAgbV9kaWRDb25zdW1lU2FuZGJveEV4dGVu
c2lvbnMgPSB0cnVlOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6aW52YWxpZGF0
ZVNhbmRib3hFeHRlbnNpb25zKCkKIHsKLSAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uc0FyZUNv
bnN1bWVkKSB7Ci0gICAgICAgIGZvciAoUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+JiBleHRlbnNp
b24gOiBtX3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMpCisgICAgaWYgKG1fZGlkQ29uc3Vt
ZVNhbmRib3hFeHRlbnNpb25zKSB7CisgICAgICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogbV9w
YXJhbWV0ZXJzLnJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMpCiAgICAgICAgICAgICBleHRl
bnNpb24tPnJldm9rZSgpOwotICAgICAgICBmb3IgKFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiYg
ZXh0ZW5zaW9uIDogbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNpb25zKQorICAgICAgICBpZiAoYXV0
byYgZXh0ZW5zaW9uID0gbV9wYXJhbWV0ZXJzLnJlc291cmNlU2FuZGJveEV4dGVuc2lvbikKICAg
ICAgICAgICAgIGV4dGVuc2lvbi0+cmV2b2tlKCk7Ci0gICAgICAgIGZvciAoUmVmUHRyPEJsb2JE
YXRhRmlsZVJlZmVyZW5jZT4mIGZpbGVSZWZlcmVuY2UgOiBtX2ZpbGVSZWZlcmVuY2VzKQorICAg
ICAgICBmb3IgKGF1dG8mIGZpbGVSZWZlcmVuY2UgOiBtX2ZpbGVSZWZlcmVuY2VzKQogICAgICAg
ICAgICAgZmlsZVJlZmVyZW5jZS0+cmV2b2tlRmlsZUFjY2VzcygpOwogICAgIH0KIAotICAgIG1f
cmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5jbGVhcigpOwotICAgIG1fcmVzb3VyY2VTYW5k
Ym94RXh0ZW5zaW9ucy5jbGVhcigpOwogICAgIG1fZmlsZVJlZmVyZW5jZXMuY2xlYXIoKTsKIAot
ICAgIG1fc2FuZGJveEV4dGVuc2lvbnNBcmVDb25zdW1lZCA9IGZhbHNlOworICAgIG1fZGlkQ29u
c3VtZVNhbmRib3hFeHRlbnNpb25zID0gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Citib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKFQmJiBt
ZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlU2VuZEZsYWdzKQoreworICAgIGJvb2wgcmVzdWx0ID0g
bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKS0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSks
IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCksIG1lc3NhZ2VTZW5kRmxhZ3MpOworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICBhYm9ydCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQpJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHJl
dmlzaW9uIDE3MzQyMykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3MywxMSBAQCBwdWJsaWM6
CiAKICAgICBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvblRvV2ViUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQogCi0gICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgeyByZXR1cm4gbV9yZXF1ZXN0OyB9Ci0gICAg
V2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklE
OyB9CisgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3Qo
KSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMucmVxdWVzdDsgfQorICAgIC8vIENoYW5nZXMg
d2l0aCByZWRpcmVjdHMuCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVx
dWVzdCgpIHsgcmV0dXJuIG1fY3VycmVudFJlcXVlc3Q7IH0KKworICAgIFdlYkNvcmU6OlNlc3Np
b25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuc2Vzc2lvbklEOyB9
CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
bV9oYW5kbGUuZ2V0KCk7IH0KICAgICB2b2lkIGRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKCk7
CkBAIC04Myw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3J0KCk7CiAKICAgICB2b2lk
IHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAgYm9vbCBkZWZlcnNMb2FkaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWZlcnNMb2FkaW5nOyB9CisgICAgYm9vbCBkZWZlcnNMb2FkaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmc7IH0KIAogICAgIC8vIFJlc291
cmNlSGFuZGxlQ2xpZW50IG1ldGhvZHMKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0
QXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KSBvdmVycmlkZTsKQEAgLTEyOSwxNiArMTMyLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBi
b29sIGlzU3luY2hyb25vdXMoKSBjb25zdDsKLSAgICBib29sIGlzTG9hZGluZ01haW5SZXNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nTWFpblJlc291cmNlOyB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgc2VuZEFib3J0aW5nT25GYWlsdXJlKFQmJiBtZXNz
YWdlLCB1bnNpZ25lZCBtZXNzYWdlU2VuZEZsYWdzID0gMCkKLSAgICB7Ci0gICAgICAgIGJvb2wg
cmVzdWx0ID0gbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKS0+c2VuZChzdGQ6OmZvcndhcmQ8VD4o
bWVzc2FnZSksIG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCksIG1lc3NhZ2VTZW5kRmxhZ3Mp
OwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIGFib3J0KCk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGJvb2wgaXNMb2FkaW5nTWFpblJlc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmlzTWFpblJlc291cmNlOyB9CiAKICNpZiBVU0UoUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZvaWQgY29udGludWVDYW5BdXRoZW50
aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwpAQCAtMTU0LDcgKzE0OCw3IEBAIHBy
aXZhdGU6CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIKICAgICB2aXJ0dWFsIElQQzo6Q29u
bmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bV9pZGVudGlmaWVyOyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGFyYW1ldGVycy5pZGVudGlmaWVyOyB9CiAK
ICAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAKQEAgLTE2OSw0NCArMTYz
LDI5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoKTsKICAg
ICB2b2lkIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gYm9vbCBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoVCYmIG1lc3NhZ2UsIHVuc2lnbmVk
IG1lc3NhZ2VTZW5kRmxhZ3MgPSAwKTsKKworICAgIGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKKworICAgIFJlZlB0cjxOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uOworCiAgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OwogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZT4gbV9oYW5kbGU7CiAKLSAgICAvLyBLZWVwIHRoZSBzdWdnZXN0ZWQgcmVxdWVzdCBh
cm91bmQgd2hpbGUgYXN5bmNocm9ub3VzbHkgYXNraW5nIHRvIHVwZGF0ZSBpdCwgYmVjYXVzZSBz
b21lIHBhcnRzIG9mIHRoZSByZXF1ZXN0IGRvbid0IHN1cnZpdmUgSVBDLgotICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCBtX3N1Z2dlc3RlZFJlcXVlc3RGb3JXaWxsU2VuZFJlcXVlc3Q7Ci0K
LSAgICB1aW50NjRfdCBtX2J5dGVzUmVjZWl2ZWQ7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IG1fY3VycmVudFJlcXVlc3Q7CiAKLSAgICBib29sIG1faGFuZGxlQ29udmVydGVkVG9Eb3du
bG9hZDsKKyAgICBzaXplX3QgbV9ieXRlc1JlY2VpdmVkOworICAgIHNpemVfdCBtX2J1ZmZlcmVk
RGF0YUVuY29kZWREYXRhTGVuZ3RoOworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
IG1fYnVmZmVyZWREYXRhOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFN5bmNocm9ub3VzTG9hZERh
dGE+IG1fc3luY2hyb25vdXNMb2FkRGF0YTsKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkJs
b2JEYXRhRmlsZVJlZmVyZW5jZT4+IG1fZmlsZVJlZmVyZW5jZXM7CiAKLSAgICBSZXNvdXJjZUxv
YWRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKLSAgICB1aW50NjRfdCBtX3dlYlBhZ2VJRDsKLSAg
ICB1aW50NjRfdCBtX3dlYkZyYW1lSUQ7Ci0gICAgV2ViQ29yZTo6U2Vzc2lvbklEIG1fc2Vzc2lv
bklEOwotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7Ci0gICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0IG1fZGVmZXJyZWRSZXF1ZXN0OwotICAgIFdlYkNvcmU6OkNvbnRl
bnRTbmlmZmluZ1BvbGljeSBtX2NvbnRlbnRTbmlmZmluZ1BvbGljeTsKLSAgICBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFscyBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0gICAgV2ViQ29yZTo6
Q2xpZW50Q3JlZGVudGlhbFBvbGljeSBtX2NsaWVudENyZWRlbnRpYWxQb2xpY3k7Ci0gICAgYm9v
bCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgYm9vbCBt
X2lzTG9hZGluZ01haW5SZXNvdXJjZTsKKyAgICBib29sIG1fZGlkQ29udmVydEhhbmRsZVRvRG93
bmxvYWQ7CisgICAgYm9vbCBtX2RpZENvbnN1bWVTYW5kYm94RXh0ZW5zaW9uczsKICAgICBib29s
IG1fZGVmZXJzTG9hZGluZzsKLSAgICBib29sIG1fbmVlZHNDZXJ0aWZpY2F0ZUluZm87Ci0gICAg
Y29uc3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBtX21heGltdW1CdWZmZXJpbmdUaW1lOwog
CiAgICAgV2ViQ29yZTo6VGltZXI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBtX2J1ZmZlcmluZ1Rp
bWVyOwotCi0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbV9yZXF1ZXN0Qm9k
eVNhbmRib3hFeHRlbnNpb25zOwotICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+
IG1fcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9uczsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6
OkJsb2JEYXRhRmlsZVJlZmVyZW5jZT4+IG1fZmlsZVJlZmVyZW5jZXM7Ci0gICAgYm9vbCBtX3Nh
bmRib3hFeHRlbnNpb25zQXJlQ29uc3VtZWQ7Ci0KLSAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvbjsKLSAgICAKLSAgICBSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiBtX2J1ZmZlcmVkRGF0YTsKLSAgICBzaXplX3QgbV9idWZmZXJlZERhdGFF
bmNvZGVkRGF0YUxlbmd0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtEaXNrQ2FjaGVNb25pdG9yLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3Jr
RGlza0NhY2hlTW9uaXRvci5tbQkocmV2aXNpb24gMTczNDIyKQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtEaXNrQ2FjaGVNb25pdG9yLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgTmV0d29ya0Rpc2tDYWNoZU1vbml0b3I6Om1vbml0
b3JGaWwKIH0KIAogTmV0d29ya0Rpc2tDYWNoZU1vbml0b3I6Ok5ldHdvcmtEaXNrQ2FjaGVNb25p
dG9yKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UsIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlciogbG9hZGVyKQotICAgIDogRGlza0NhY2hlTW9uaXRvcihsb2FkZXItPnJlcXVlc3Qo
KSwgbG9hZGVyLT5zZXNzaW9uSUQoKSwgY2FjaGVkUmVzcG9uc2UpCisgICAgOiBEaXNrQ2FjaGVN
b25pdG9yKGxvYWRlci0+b3JpZ2luYWxSZXF1ZXN0KCksIGxvYWRlci0+c2Vzc2lvbklEKCksIGNh
Y2hlZFJlc3BvbnNlKQogICAgICwgbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzKGxvYWRlci0+Y29u
bmVjdGlvblRvV2ViUHJvY2VzcygpKQogewogfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVk
L05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzLmNwcAkocmV2aXNpb24gMTczNDIzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdv
cmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsMTMgKzEyNywyMCBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpkZWNv
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJlc3VsdC5yZXF1ZXN0LnNldEhU
VFBCb2R5KGZvcm1EYXRhLnJlbGVhc2UoKSk7CiAKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQucmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucykpCisgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5IHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbkhhbmRsZXM7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9u
SGFuZGxlcykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBjb3VudCA9IHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbkhhbmRsZXMuc2l6ZSgp
OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgaWYgKFJlZlB0cjxTYW5kYm94RXh0ZW5z
aW9uPiBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocmVxdWVzdEJvZHlTYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlc1tpXSkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnJlcXVlc3RC
b2R5U2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbik7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBpZiAocmVzdWx0LnJlcXVlc3QudXJsKCkuaXNMb2NhbEZpbGUoKSkgewotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXNvdXJjZVNhbmRib3hFeHRlbnNpb24pKQor
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9u
SGFuZGxlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc291cmNlU2FuZGJveEV4dGVu
c2lvbkhhbmRsZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5y
ZXNvdXJjZVNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocmVzb3Vy
Y2VTYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKICAgICB9CiAKICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRW51bShyZXN1bHQuY29udGVudFNuaWZmaW5nUG9saWN5KSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuaAkocmV2aXNpb24gMTczNDIzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsOCArNTUsOCBAQCBwdWJsaWM6CiAgICAgdWludDY0X3Qgd2ViRnJhbWVJRDsKICAgICBX
ZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEOwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCByZXF1ZXN0OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHJlcXVlc3RCb2R5
U2FuZGJveEV4dGVuc2lvbnM7IC8vIENyZWF0ZWQgYXV0b21hdGljYWxseSBmb3IgdGhlIHNlbmRl
ci4KLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9u
OyAvLyBDcmVhdGVkIGF1dG9tYXRpY2FsbHkgZm9yIHRoZSBzZW5kZXIuCisgICAgVmVjdG9yPFJl
ZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uczsgLy8g
Q3JlYXRlZCBhdXRvbWF0aWNhbGx5IGZvciB0aGUgc2VuZGVyLgorICAgIFJlZlB0cjxTYW5kYm94
RXh0ZW5zaW9uPiByZXNvdXJjZVNhbmRib3hFeHRlbnNpb247IC8vIENyZWF0ZWQgYXV0b21hdGlj
YWxseSBmb3IgdGhlIHNlbmRlci4KICAgICBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kg
Y29udGVudFNuaWZmaW5nUG9saWN5OwogICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIGFs
bG93U3RvcmVkQ3JlZGVudGlhbHM7CiAgICAgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGlj
eSBjbGllbnRDcmVkZW50aWFsUG9saWN5Owo=
</data>
<flag name="review"
          id="262646"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>