<?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>174059</bug_id>
          
          <creation_ts>2017-06-30 17:46:40 -0700</creation_ts>
          <short_desc>Stop using dispatch_async in ResourceHandleCFURLConnectionDelegateWithOperationQueue</short_desc>
          <delta_ts>2017-07-03 13:17:53 -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>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>
          <cc>aestes</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324676</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-30 17:46:40 -0700</bug_when>
    <thetext>Stop using dispatch_async in ResourceHandleCFURLConnectionDelegateWithOperationQueue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324677</commentid>
    <comment_count>1</comment_count>
      <attachid>314338</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-30 17:47:19 -0700</bug_when>
    <thetext>Created attachment 314338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324680</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-30 17:52:33 -0700</bug_when>
    <thetext>This will allow me to use this code on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324819</commentid>
    <comment_count>3</comment_count>
      <attachid>314338</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-07-01 06:57:56 -0700</bug_when>
    <thetext>Comment on attachment 314338
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Use dispatch_async_f and callOnMainThread instead.
&gt; +        No change in behavior.

This is missing a reason why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325180</commentid>
    <comment_count>4</comment_count>
      <attachid>314338</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-07-03 11:22:49 -0700</bug_when>
    <thetext>Comment on attachment 314338
Patch

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

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:110
&gt; +    struct ProtectedParameters {
&gt; +        Ref&lt;ResourceHandleCFURLConnectionDelegateWithOperationQueue&gt; protectedThis;
&gt; +        RefPtr&lt;ResourceHandle&gt; handle;
&gt; +        RetainPtr&lt;CFURLRequestRef&gt; cfRequest;
&gt; +        RetainPtr&lt;CFURLResponseRef&gt; originalRedirectResponse;
&gt; +    };

This is fine, but I wonder if using tuples and std::tie would be better than a struct. Maybe that&apos;s not supported right now in MSVC?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:113
&gt; +        ASSERT(context);

I don&apos;t think you need to assert this.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:116
&gt; +        auto&amp; parameters = *reinterpret_cast&lt;ProtectedParameters*&gt;(context);
&gt; +        auto&amp; protectedThis = parameters.protectedThis;
&gt; +        auto&amp; handle = parameters.handle;

It&apos;s not clear why you chose to unpack these three parameters but not the others.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:146
&gt; +    struct ProtectedParameters {
&gt; +        Ref&lt;ResourceHandleCFURLConnectionDelegateWithOperationQueue&gt; protectedThis;
&gt; +        RefPtr&lt;ResourceHandle&gt; handle;
&gt; +        RetainPtr&lt;CFURLConnectionRef&gt; connection;
&gt; +        RetainPtr&lt;CFURLResponseRef&gt; cfResponse;
&gt; +    };

This is fine, but I wonder if using tuples and std::tie would be better than a struct. Maybe that&apos;s not supported right now in MSVC?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:149
&gt; +        ASSERT(context);

I don&apos;t think you need to assert this.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:152
&gt; +        auto&amp; parameters = *reinterpret_cast&lt;ProtectedParameters*&gt;(context);
&gt; +        auto&amp; protectedThis = parameters.protectedThis;
&gt; +        auto&amp; handle = parameters.handle;

It&apos;s not clear why you chose to unpack these three parameters but not the others.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:192
&gt; +    callOnMainThread([protectedThis = makeRef(*this), handle = RefPtr&lt;ResourceHandle&gt;(m_handle), data = RetainPtr&lt;CFDataRef&gt;(data), originalLength = originalLength] () mutable {

Do you need to create a second reference to m_handle if you already have protectedThis?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:203
&gt; +    callOnMainThread([protectedThis = makeRef(*this), handle = RefPtr&lt;ResourceHandle&gt;(m_handle)] () mutable {

Ditto.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:215
&gt; +    callOnMainThread([protectedThis = makeRef(*this), handle = RefPtr&lt;ResourceHandle&gt;(m_handle), error = RetainPtr&lt;CFErrorRef&gt;(error)] () mutable {

Ditto.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:230
&gt; +    struct ProtectedParameters {
&gt; +        Ref&lt;ResourceHandleCFURLConnectionDelegateWithOperationQueue&gt; protectedThis;
&gt; +        RefPtr&lt;ResourceHandle&gt; handle;
&gt; +        RetainPtr&lt;CFCachedURLResponseRef&gt; cachedResponse;
&gt; +    };

This is fine, but I wonder if using tuples and std::tie would be better than a struct. Maybe that&apos;s not supported right now in MSVC?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:233
&gt; +        ASSERT(context);

I don&apos;t think you need to assert this.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:236
&gt; +        auto&amp; parameters = *reinterpret_cast&lt;ProtectedParameters*&gt;(context);
&gt; +        auto&amp; protectedThis = parameters.protectedThis;
&gt; +        auto&amp; handle = parameters.handle;

It&apos;s not clear why you chose to unpack these three parameters but not the others.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:267
&gt; +    callOnMainThread([protectedThis = makeRef(*this), handle = RefPtr&lt;ResourceHandle&gt;(m_handle), totalBytesWritten, totalBytesExpectedToWrite] () mutable {

Do you need to create a second reference to m_handle if you already have protectedThis?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:289
&gt; +    struct ProtectedParameters {
&gt; +        Ref&lt;ResourceHandleCFURLConnectionDelegateWithOperationQueue&gt; protectedThis;
&gt; +        RefPtr&lt;ResourceHandle&gt; handle;
&gt; +        RetainPtr&lt;CFURLProtectionSpaceRef&gt; protectionSpace;
&gt; +    };

This is fine, but I wonder if using tuples and std::tie would be better than a struct. Maybe that&apos;s not supported right now in MSVC?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:292
&gt; +        ASSERT(context);

I don&apos;t think you need to assert this.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:295
&gt; +        auto&amp; parameters = *reinterpret_cast&lt;ProtectedParameters*&gt;(context);
&gt; +        auto&amp; protectedThis = parameters.protectedThis;
&gt; +        auto&amp; handle = parameters.handle;

It&apos;s not clear why you chose to unpack these three parameters but not the others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325220</commentid>
    <comment_count>5</comment_count>
      <attachid>314510</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-03 13:16:55 -0700</bug_when>
    <thetext>Created attachment 314510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325221</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-03 13:17:53 -0700</bug_when>
    <thetext>http://trac.webkit.org/r219089</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314338</attachid>
            <date>2017-06-30 17:47:19 -0700</date>
            <delta_ts>2017-07-03 13:16:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174059-20170630174718.patch</filename>
            <type>text/plain</type>
            <size>19959</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTAyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA2LTMwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3RvcCB1c2lu
ZyBkaXNwYXRjaF9hc3luYyBpbiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
V2l0aE9wZXJhdGlvblF1ZXVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVc2UgZGlzcGF0Y2hfYXN5bmNfZiBhbmQgY2FsbE9uTWFpblRocmVhZCBpbnN0
ZWFkLgorICAgICAgICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3Bl
cmF0aW9uUXVldWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRo
T3BlcmF0aW9uUXVldWU6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpk
aWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRo
T3BlcmF0aW9uUXVldWU6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6d2lsbENhY2hlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZUNoYWxsZW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJh
dGlvblF1ZXVlOjpkaWRTZW5kQm9keURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6Y2FuUmVzcG9u
ZFRvUHJvdGVjdGlvblNwYWNlKToKKwogMjAxNy0wNi0zMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIxNTA5NikgUXVl
cmllcyBvZiBVUkxzIHdpdGggbm9uLXNwZWNpYWwgc2NoZW1lcyBzaG91bGQgbm90IHBlcmNlbnQt
ZW5jb2RlIHNpbmdsZSBxdW90ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25R
dWV1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
LmNwcAkocmV2aXNpb24gMjE5MDE2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1
ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDI2ICsxMDEsMzYgQEAgQ0ZVUkxSZXF1ZXN0
UmVmIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZQogICAgIH0KIAogICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IFRoZSBibG9jayBpbXBsaWNpdGx5IGNvcGllcyBw
cm90ZWN0b3Igb2JqZWN0LCB3aGljaCBpcyB3YXN0ZWZ1bC4gV2Ugc2hvdWxkIGp1c3QgY2FsbCBy
ZWYoKSwKLSAgICAvLyBjYXB0dXJlICJ0aGlzIiBieSBwb2ludGVyIHZhbHVlLCBhbmQgdXNlIGEg
QysrIGxhbWJkYSB0byBwcmV2ZW50IG90aGVyIHVuaW50ZW50aW9uYWwgY2FwdHVyaW5nLgotICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlv
blF1ZXVlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAKKyAgICBzdHJ1Y3QgUHJvdGVjdGVkUGFyYW1l
dGVycyB7CisgICAgICAgIFJlZjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
V2l0aE9wZXJhdGlvblF1ZXVlPiBwcm90ZWN0ZWRUaGlzOworICAgICAgICBSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IGhhbmRsZTsKKyAgICAgICAgUmV0YWluUHRyPENGVVJMUmVxdWVzdFJlZj4gY2ZS
ZXF1ZXN0OworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gb3JpZ2luYWxSZWRp
cmVjdFJlc3BvbnNlOworICAgIH07CisgICAgCisgICAgYXV0byB3b3JrID0gW10gKHZvaWQqIGNv
bnRleHQpIHsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICBhdXRvJiBwYXJhbWV0
ZXJzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8UHJvdGVjdGVkUGFyYW1ldGVycyo+KGNvbnRleHQpOwor
ICAgICAgICBhdXRvJiBwcm90ZWN0ZWRUaGlzID0gcGFyYW1ldGVycy5wcm90ZWN0ZWRUaGlzOwor
ICAgICAgICBhdXRvJiBoYW5kbGUgPSBwYXJhbWV0ZXJzLmhhbmRsZTsKKyAgICAgICAgCiAgICAg
ICAgIGlmICghcHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkpIHsKLSAgICAgICAgICAgIGNvbnRp
bnVlV2lsbFNlbmRSZXF1ZXN0KG51bGxwdHIpOworICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+
Y29udGludWVXaWxsU2VuZFJlcXVlc3QobnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6d2lsbFNlbmRSZXF1ZXN0
KGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQg
LSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
Ojp3aWxsU2VuZFJlcXVlc3QoaGFuZGxlPSVwKSAoJXMpIiwgaGFuZGxlLmdldCgpLCBoYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAg
IFJldGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiByZWRpcmVjdFJlc3BvbnNlID0gc3ludGhlc2l6
ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeShjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RS
ZXNwb25zZSk7CisgICAgICAgIFJldGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiByZWRpcmVjdFJl
c3BvbnNlID0gcHJvdGVjdGVkVGhpcy0+c3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vz
c2FyeShwYXJhbWV0ZXJzLmNmUmVxdWVzdC5nZXQoKSwgcGFyYW1ldGVycy5vcmlnaW5hbFJlZGly
ZWN0UmVzcG9uc2UuZ2V0KCkpOwogICAgICAgICBBU1NFUlQocmVkaXJlY3RSZXNwb25zZSk7CiAK
LSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3Qo
Y2ZSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgbV9oYW5kbGUtPndp
bGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsK
LSAgICB9KTsKLQorICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHByb3RlY3RlZFRo
aXMtPmNyZWF0ZVJlc291cmNlUmVxdWVzdChwYXJhbWV0ZXJzLmNmUmVxdWVzdC5nZXQoKSwgcmVk
aXJlY3RSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIGhhbmRsZS0+d2lsbFNlbmRSZXF1ZXN0KFdU
Rk1vdmUocmVxdWVzdCksIHJlZGlyZWN0UmVzcG9uc2UuZ2V0KCkpOworICAgIH07CisgICAgCisg
ICAgUHJvdGVjdGVkUGFyYW1ldGVycyBwYXJhbWV0ZXJzIHsgbWFrZVJlZigqdGhpcyksIG1faGFu
ZGxlLCBjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSB9OworICAgIGRpc3BhdGNo
X2FzeW5jX2YoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgJnBhcmFtZXRlcnMsIHdvcmspOwog
ICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZP
UkVWRVIpOwogCiAgICAgcmV0dXJuIG1fcmVxdWVzdFJlc3VsdC5sZWFrUmVmKCk7CkBAIC0xMjgs
MTQzICsxMzgsMTM5IEBAIENGVVJMUmVxdWVzdFJlZiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmUK
IAogdm9pZCBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlv
blF1ZXVlOjpkaWRSZWNlaXZlUmVzcG9uc2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb24s
IENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKIHsKLSAgICAvLyBGSVhNRTogVGhlIGJsb2Nr
IGltcGxpY2l0bHkgY29waWVzIHByb3RlY3RvciBvYmplY3QsIHdoaWNoIGlzIHdhc3RlZnVsLiBX
ZSBzaG91bGQganVzdCBjYWxsIHJlZigpLAotICAgIC8vIGNhcHR1cmUgInRoaXMiIGJ5IHBvaW50
ZXIgdmFsdWUsIGFuZCB1c2UgYSBDKysgbGFtYmRhIHRvIHByZXZlbnQgb3RoZXIgdW5pbnRlbnRp
b25hbCBjYXB0dXJpbmcuCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0KLSAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAo
IXByb3RlY3RlZFRoaXMtPmhhc0hhbmRsZSgpIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAg
ICAgICAgICAgIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgc3RydWN0IFByb3Rl
Y3RlZFBhcmFtZXRlcnMgeworICAgICAgICBSZWY8UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdGVkVGhpczsKKyAgICAgICAgUmVm
UHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGU7CisgICAgICAgIFJldGFpblB0cjxDRlVSTENvbm5l
Y3Rpb25SZWY+IGNvbm5lY3Rpb247CisgICAgICAgIFJldGFpblB0cjxDRlVSTFJlc3BvbnNlUmVm
PiBjZlJlc3BvbnNlOworICAgIH07CisgICAgCisgICAgYXV0byB3b3JrID0gW10gKHZvaWQqIGNv
bnRleHQpIHsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICBhdXRvJiBwYXJhbWV0
ZXJzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8UHJvdGVjdGVkUGFyYW1ldGVycyo+KGNvbnRleHQpOwor
ICAgICAgICBhdXRvJiBwcm90ZWN0ZWRUaGlzID0gcGFyYW1ldGVycy5wcm90ZWN0ZWRUaGlzOwor
ICAgICAgICBhdXRvJiBoYW5kbGUgPSBwYXJhbWV0ZXJzLmhhbmRsZTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghcHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkgfHwgIWhhbmRsZS0+Y2xpZW50KCkp
IHsKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBMT0coTmV0d29y
aywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVy
YXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxl
LCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxl
PSVwKSAoJXMpIiwgaGFuZGxlLmdldCgpLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIC8vIEF2b2lkIE1JTUUgdHlwZSBzbmlm
ZmluZyBpZiB0aGUgcmVzcG9uc2UgY29tZXMgYmFjayBhcyAzMDQgTm90IE1vZGlmaWVkLgotICAg
ICAgICBhdXRvIG1zZyA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2UoY2ZSZXNwb25zZSk7
CisgICAgICAgIGF1dG8gbXNnID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShwYXJhbWV0
ZXJzLmNmUmVzcG9uc2UuZ2V0KCkpOwogICAgICAgICBpbnQgc3RhdHVzQ29kZSA9IG1zZyA/IENG
SFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUobXNnKSA6IDA7CiAKICAgICAgICAgaWYg
KHN0YXR1c0NvZGUgIT0gMzA0KSB7Ci0gICAgICAgICAgICBib29sIGlzTWFpblJlc291cmNlTG9h
ZCA9IG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5yZXF1ZXN0ZXIoKSA9PSBSZXNvdXJjZVJlcXVl
c3Q6OlJlcXVlc3Rlcjo6TWFpbjsKLSAgICAgICAgICAgIGFkanVzdE1JTUVUeXBlSWZOZWNlc3Nh
cnkoY2ZSZXNwb25zZSwgaXNNYWluUmVzb3VyY2VMb2FkKTsKKyAgICAgICAgICAgIGJvb2wgaXNN
YWluUmVzb3VyY2VMb2FkID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5yZXF1ZXN0ZXIoKSA9PSBS
ZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKKyAgICAgICAgICAgIGFkanVzdE1JTUVU
eXBlSWZOZWNlc3NhcnkocGFyYW1ldGVycy5jZlJlc3BvbnNlLmdldCgpLCBpc01haW5SZXNvdXJj
ZUxvYWQpOwogICAgICAgICB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgICAgICBpZiAoX0NG
VVJMUmVxdWVzdENvcHlQcm90b2NvbFByb3BlcnR5Rm9yS2V5KG1faGFuZGxlLT5maXJzdFJlcXVl
c3QoKS5jZlVSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSksIENGU1RSKCJGb3JjZUhUTUxN
SU1FVHlwZSIpKSkKLSAgICAgICAgICAgIENGVVJMUmVzcG9uc2VTZXRNSU1FVHlwZShjZlJlc3Bv
bnNlLCBDRlNUUigidGV4dC9odG1sIikpOworICAgICAgICBpZiAoX0NGVVJMUmVxdWVzdENvcHlQ
cm90b2NvbFByb3BlcnR5Rm9yS2V5KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuY2ZVUkxSZXF1ZXN0
KERvTm90VXBkYXRlSFRUUEJvZHkpLCBDRlNUUigiRm9yY2VIVE1MTUlNRVR5cGUiKSkpCisgICAg
ICAgICAgICBDRlVSTFJlc3BvbnNlU2V0TUlNRVR5cGUocGFyYW1ldGVycy5jZlJlc3BvbnNlLmdl
dCgpLCBDRlNUUigidGV4dC9odG1sIikpOwogI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAg
ICAgIAotICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc291cmNlUmVzcG9uc2UoY2ZSZXNwb25z
ZSk7CisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzb3VyY2VSZXNwb25zZShwYXJhbWV0ZXJz
LmNmUmVzcG9uc2UuZ2V0KCkpOwogI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgICAgICBSZXNv
dXJjZUhhbmRsZTo6Z2V0Q29ubmVjdGlvblRpbWluZ0RhdGEoY29ubmVjdGlvbiwgcmVzb3VyY2VS
ZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKCkpOworICAgICAgICBSZXNvdXJj
ZUhhbmRsZTo6Z2V0Q29ubmVjdGlvblRpbWluZ0RhdGEocGFyYW1ldGVycy5jb25uZWN0aW9uLmdl
dCgpLCByZXNvdXJjZVJlc3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKSk7CiAj
ZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CiAjZW5kaWYKICAgICAgICAg
Ci0gICAgICAgIG1faGFuZGxlLT5kaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNvdXJjZVJl
c3BvbnNlKSk7Ci0gICAgfSk7CisgICAgICAgIGhhbmRsZS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKFdU
Rk1vdmUocmVzb3VyY2VSZXNwb25zZSkpOworICAgIH07CisgICAgCisgICAgUHJvdGVjdGVkUGFy
YW1ldGVycyBwYXJhbWV0ZXJzIHsgbWFrZVJlZigqdGhpcyksIG1faGFuZGxlLCBjb25uZWN0aW9u
LCBjZlJlc3BvbnNlIH07CisgICAgZGlzcGF0Y2hfYXN5bmNfZihkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCAmcGFyYW1ldGVycywgd29yayk7CiAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQo
bV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CiB9CiAKIHZvaWQgUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVjZWl2
ZURhdGEoQ0ZEYXRhUmVmIGRhdGEsIENGSW5kZXggb3JpZ2luYWxMZW5ndGgpCiB7Ci0gICAgLy8g
RklYTUU6IFRoZSBibG9jayBpbXBsaWNpdGx5IGNvcGllcyBwcm90ZWN0b3Igb2JqZWN0LCB3aGlj
aCBpcyB3YXN0ZWZ1bC4gV2Ugc2hvdWxkIGp1c3QgY2FsbCByZWYoKSwKLSAgICAvLyBjYXB0dXJl
ICJ0aGlzIiBieSBwb2ludGVyIHZhbHVlLCBhbmQgdXNlIGEgQysrIGxhbWJkYSB0byBwcmV2ZW50
IG90aGVyIHVuaW50ZW50aW9uYWwgY2FwdHVyaW5nLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwotICAgIENGUmV0YWluKGRhdGEpOwotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmhhc0hh
bmRsZSgpICYmIG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICAgICAgTE9HKE5ldHdvcmss
ICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0
aW9uUXVldWU6OmRpZFJlY2VpdmVEYXRhKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBoYW5kbGUg
PSBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+KG1faGFuZGxlKSwgZGF0YSA9IFJldGFpblB0cjxDRkRh
dGFSZWY+KGRhdGEpLCBvcmlnaW5hbExlbmd0aCA9IG9yaWdpbmFsTGVuZ3RoXSAoKSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmhhc0hhbmRsZSgpICYmIGhhbmRsZS5nZXQo
KS0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRSZWNl
aXZlRGF0YShoYW5kbGU9JXApICglcykiLCBoYW5kbGUuZ2V0KCksIGhhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgICAgIG1faGFu
ZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVmZmVyOjpj
cmVhdGUoZGF0YSksIG9yaWdpbmFsTGVuZ3RoKTsKKyAgICAgICAgICAgIGhhbmRsZS5nZXQoKS0+
Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIoaGFuZGxlLmdldCgpLCBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShkYXRhLmdldCgpKSwgb3JpZ2luYWxMZW5ndGgpOwogICAgICAgICB9Ci0KLSAgICAgICAg
Q0ZSZWxlYXNlKGRhdGEpOwogICAgIH0pOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZEZpbmlzaExvYWRpbmcoKQog
ewotICAgIC8vIEZJWE1FOiBUaGUgYmxvY2sgaW1wbGljaXRseSBjb3BpZXMgcHJvdGVjdG9yIG9i
amVjdCwgd2hpY2ggaXMgd2FzdGVmdWwuIFdlIHNob3VsZCBqdXN0IGNhbGwgcmVmKCksCi0gICAg
Ly8gY2FwdHVyZSAidGhpcyIgYnkgcG9pbnRlciB2YWx1ZSwgYW5kIHVzZSBhIEMrKyBsYW1iZGEg
dG8gcHJldmVudCBvdGhlciB1bmludGVudGlvbmFsIGNhcHR1cmluZy4KLSAgICBSZWZQdHI8UmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBeewotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPmhhc0hhbmRsZSgpIHx8ICFt
X2hhbmRsZS0+Y2xpZW50KCkpCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBoYW5kbGUgPSBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+KG1faGFuZGxl
KV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkg
fHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgTE9H
KE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVX
aXRoT3BlcmF0aW9uUXVldWU6OmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlPSVwKSAoJXMpIiwgbV9o
YW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZEZpbmlzaExvYWRpbmcoaGFu
ZGxlPSVwKSAoJXMpIiwgaGFuZGxlLmdldCgpLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+
ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7CisgICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPmRp
ZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKICAgICB9KTsKIH0KIAogdm9pZCBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRGYWls
KENGRXJyb3JSZWYgZXJyb3IpCiB7Ci0gICAgLy8gRklYTUU6IFRoZSBibG9jayBpbXBsaWNpdGx5
IGNvcGllcyBwcm90ZWN0b3Igb2JqZWN0LCB3aGljaCBpcyB3YXN0ZWZ1bC4gV2Ugc2hvdWxkIGp1
c3QgY2FsbCByZWYoKSwKLSAgICAvLyBjYXB0dXJlICJ0aGlzIiBieSBwb2ludGVyIHZhbHVlLCBh
bmQgdXNlIGEgQysrIGxhbWJkYSB0byBwcmV2ZW50IG90aGVyIHVuaW50ZW50aW9uYWwgY2FwdHVy
aW5nLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0
aE9wZXJhdGlvblF1ZXVlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIENGUmV0YWluKGVycm9y
KTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAg
ICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkgJiYgbV9oYW5kbGUtPmNsaWVudCgp
KSB7Ci0gICAgICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkRmFpbChoYW5kbGU9JXAp
ICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgaGFuZGxlID0gUmVmUHRyPFJlc291cmNlSGFuZGxlPihtX2hhbmRsZSks
IGVycm9yID0gUmV0YWluUHRyPENGRXJyb3JSZWY+KGVycm9yKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5oYXNIYW5kbGUoKSAmJiBoYW5kbGUtPmNsaWVudCgpKSB7
CisgICAgICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkRmFpbChoYW5kbGU9JXApICgl
cykiLCBoYW5kbGUuZ2V0KCksIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFp
bChtX2hhbmRsZSwgUmVzb3VyY2VFcnJvcihlcnJvcikpOworICAgICAgICAgICAgaGFuZGxlLT5j
bGllbnQoKS0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291cmNlRXJyb3IoZXJyb3IuZ2V0KCkp
KTsKICAgICAgICAgfQotCi0gICAgICAgIENGUmVsZWFzZShlcnJvcik7CiAgICAgfSk7CiB9CiAK
IENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6d2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNw
b25zZVJlZiBjYWNoZWRSZXNwb25zZSkKIHsKLSAgICAvLyBGSVhNRTogVGhlIGJsb2NrIGltcGxp
Y2l0bHkgY29waWVzIHByb3RlY3RvciBvYmplY3QsIHdoaWNoIGlzIHdhc3RlZnVsLiBXZSBzaG91
bGQganVzdCBjYWxsIHJlZigpLAotICAgIC8vIGNhcHR1cmUgInRoaXMiIGJ5IHBvaW50ZXIgdmFs
dWUsIGFuZCB1c2UgYSBDKysgbGFtYmRhIHRvIHByZXZlbnQgb3RoZXIgdW5pbnRlbnRpb25hbCBj
YXB0dXJpbmcuCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0KLSAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAoIXByb3Rl
Y3RlZFRoaXMtPmhhc0hhbmRsZSgpIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UobnVsbHB0cik7CisgICAgc3RydWN0IFByb3Rl
Y3RlZFBhcmFtZXRlcnMgeworICAgICAgICBSZWY8UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdGVkVGhpczsKKyAgICAgICAgUmVm
UHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGU7CisgICAgICAgIFJldGFpblB0cjxDRkNhY2hlZFVS
TFJlc3BvbnNlUmVmPiBjYWNoZWRSZXNwb25zZTsKKyAgICB9OworICAgIAorICAgIGF1dG8gd29y
ayA9IFtdICh2b2lkKiBjb250ZXh0KSB7CisgICAgICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICAg
ICAgYXV0byYgcGFyYW1ldGVycyA9ICpyZWludGVycHJldF9jYXN0PFByb3RlY3RlZFBhcmFtZXRl
cnMqPihjb250ZXh0KTsKKyAgICAgICAgYXV0byYgcHJvdGVjdGVkVGhpcyA9IHBhcmFtZXRlcnMu
cHJvdGVjdGVkVGhpczsKKyAgICAgICAgYXV0byYgaGFuZGxlID0gcGFyYW1ldGVycy5oYW5kbGU7
CisgICAgICAgIAorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPmhhc0hhbmRsZSgpIHx8ICFo
YW5kbGUtPmNsaWVudCgpKSB7CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb250aW51ZVdp
bGxDYWNoZVJlc3BvbnNlKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OndpbGxDYWNoZVJlc3BvbnNlKGhhbmRs
ZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp3aWxs
Q2FjaGVSZXNwb25zZShoYW5kbGU9JXApICglcykiLCBoYW5kbGUuZ2V0KCksIGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgbV9o
YW5kbGUtPmNsaWVudCgpLT53aWxsQ2FjaGVSZXNwb25zZUFzeW5jKG1faGFuZGxlLCBjYWNoZWRS
ZXNwb25zZSk7Ci0gICAgfSk7CisgICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPndpbGxDYWNoZVJl
c3BvbnNlQXN5bmMoaGFuZGxlLmdldCgpLCBwYXJhbWV0ZXJzLmNhY2hlZFJlc3BvbnNlLmdldCgp
KTsKKyAgICB9OworICAgIAorICAgIFByb3RlY3RlZFBhcmFtZXRlcnMgcGFyYW1ldGVycyB7IG1h
a2VSZWYoKnRoaXMpLCBtX2hhbmRsZSwgY2FjaGVkUmVzcG9uc2UgfTsKKyAgICBkaXNwYXRjaF9h
c3luY19mKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksICZwYXJhbWV0ZXJzLCB3b3JrKTsKICAg
ICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChtX3NlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JF
VkVSKTsKICAgICByZXR1cm4gbV9jYWNoZWRSZXNwb25zZVJlc3VsdC5sZWFrUmVmKCk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25R
dWV1ZTo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdl
KQogewotICAgIC8vIEZJWE1FOiBUaGUgYmxvY2sgaW1wbGljaXRseSBjb3BpZXMgcHJvdGVjdG9y
IG9iamVjdCwgd2hpY2ggaXMgd2FzdGVmdWwuIFdlIHNob3VsZCBqdXN0IGNhbGwgcmVmKCksCi0g
ICAgLy8gY2FwdHVyZSAidGhpcyIgYnkgcG9pbnRlciB2YWx1ZSwgYW5kIHVzZSBhIEMrKyBsYW1i
ZGEgdG8gcHJldmVudCBvdGhlciB1bmludGVudGlvbmFsIGNhcHR1cmluZy4KLSAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBDRlJldGFpbihjaGFsbGVuZ2UpOwotICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgY2FsbE9uTWFpblRo
cmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBoYW5kbGUgPSBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+KG1faGFuZGxlKSwgY2hhbGxlbmdlID0gUmV0YWluUHRyPENGVVJMQXV0aENo
YWxsZW5nZVJlZj4oY2hhbGxlbmdlKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChwcm90ZWN0
ZWRUaGlzLT5oYXNIYW5kbGUoKSkgewotICAgICAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAt
IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6
OmRpZFJlY2VpdmVDaGFsbGVuZ2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxl
LT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGhhbmRsZT0lcCkg
KCVzKSIsIGhhbmRsZS5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICAgICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UsIG1f
aGFuZGxlKSk7CisgICAgICAgICAgICBoYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UuZ2V0KCksIGhhbmRsZS5n
ZXQoKSkpOwogICAgICAgICB9Ci0KLSAgICAgICAgQ0ZSZWxlYXNlKGNoYWxsZW5nZSk7CiAgICAg
fSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhP
cGVyYXRpb25RdWV1ZTo6ZGlkU2VuZEJvZHlEYXRhKENGSW5kZXggdG90YWxCeXRlc1dyaXR0ZW4s
IENGSW5kZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSkKIHsKLSAgICAvLyBGSVhNRTogVGhl
IGJsb2NrIGltcGxpY2l0bHkgY29waWVzIHByb3RlY3RvciBvYmplY3QsIHdoaWNoIGlzIHdhc3Rl
ZnVsLiBXZSBzaG91bGQganVzdCBjYWxsIHJlZigpLAotICAgIC8vIGNhcHR1cmUgInRoaXMiIGJ5
IHBvaW50ZXIgdmFsdWUsIGFuZCB1c2UgYSBDKysgbGFtYmRhIHRvIHByZXZlbnQgb3RoZXIgdW5p
bnRlbnRpb25hbCBjYXB0dXJpbmcuCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0g
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAg
aWYgKCFwcm90ZWN0ZWRUaGlzLT5oYXNIYW5kbGUoKSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaGFu
ZGxlID0gUmVmUHRyPFJlc291cmNlSGFuZGxlPihtX2hhbmRsZSksIHRvdGFsQnl0ZXNXcml0dGVu
LCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFw
cm90ZWN0ZWRUaGlzLT5oYXNIYW5kbGUoKSB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkU2VuZEJvZHlE
YXRhKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCku
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZO
ZXQgLSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1
ZXVlOjpkaWRTZW5kQm9keURhdGEoaGFuZGxlPSVwKSAoJXMpIiwgaGFuZGxlLmdldCgpLCBoYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAg
ICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkU2VuZERhdGEobV9oYW5kbGUsIHRvdGFsQnl0ZXNX
cml0dGVuLCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlKTsKKyAgICAgICAgaGFuZGxlLT5jbGll
bnQoKS0+ZGlkU2VuZERhdGEoaGFuZGxlLmdldCgpLCB0b3RhbEJ5dGVzV3JpdHRlbiwgdG90YWxC
eXRlc0V4cGVjdGVkVG9Xcml0ZSk7CiAgICAgfSk7CiB9CiAKQEAgLTI3NiwxOSArMjgyLDI2IEBA
IEJvb2xlYW4gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWwKICNpZiBVU0UoUFJPVEVD
VElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogQm9vbGVhbiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9u
U3BhY2UoQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlKQogewotICAgIC8v
IEZJWE1FOiBUaGUgYmxvY2sgaW1wbGljaXRseSBjb3BpZXMgcHJvdGVjdG9yIG9iamVjdCwgd2hp
Y2ggaXMgd2FzdGVmdWwuIFdlIHNob3VsZCBqdXN0IGNhbGwgcmVmKCksCi0gICAgLy8gY2FwdHVy
ZSAidGhpcyIgYnkgcG9pbnRlciB2YWx1ZSwgYW5kIHVzZSBhIEMrKyBsYW1iZGEgdG8gcHJldmVu
dCBvdGhlciB1bmludGVudGlvbmFsIGNhcHR1cmluZy4KLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKLQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IF57CisgICAgc3RydWN0IFByb3RlY3RlZFBhcmFtZXRlcnMgeworICAgICAgICBSZWY8UmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVj
dGVkVGhpczsKKyAgICAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGU7CisgICAgICAg
IFJldGFpblB0cjxDRlVSTFByb3RlY3Rpb25TcGFjZVJlZj4gcHJvdGVjdGlvblNwYWNlOworICAg
IH07CisgICAgCisgICAgYXV0byB3b3JrID0gW10gKHZvaWQqIGNvbnRleHQpIHsKKyAgICAgICAg
QVNTRVJUKGNvbnRleHQpOworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJzID0gKnJlaW50ZXJwcmV0
X2Nhc3Q8UHJvdGVjdGVkUGFyYW1ldGVycyo+KGNvbnRleHQpOworICAgICAgICBhdXRvJiBwcm90
ZWN0ZWRUaGlzID0gcGFyYW1ldGVycy5wcm90ZWN0ZWRUaGlzOworICAgICAgICBhdXRvJiBoYW5k
bGUgPSBwYXJhbWV0ZXJzLmhhbmRsZTsKKyAgICAgICAgCiAgICAgICAgIGlmICghcHJvdGVjdGVk
VGhpcy0+aGFzSGFuZGxlKCkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZShmYWxzZSk7CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5jb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFsc2UpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9u
UXVldWU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZShoYW5kbGU9JXApICglcykiLCBtX2hh
bmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6Y2FuUmVzcG9uZFRvUHJvdGVjdGlv
blNwYWNlKGhhbmRsZT0lcCkgKCVzKSIsIGhhbmRsZS5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVl
c3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBQcm90ZWN0aW9u
U3BhY2UgY29yZVByb3RlY3Rpb25TcGFjZSA9IFByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3Bh
Y2UpOworICAgICAgICBQcm90ZWN0aW9uU3BhY2UgY29yZVByb3RlY3Rpb25TcGFjZSA9IFByb3Rl
Y3Rpb25TcGFjZShwYXJhbWV0ZXJzLnByb3RlY3Rpb25TcGFjZS5nZXQoKSk7CiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgICAgICBpZiAoY29yZVByb3RlY3Rpb25TcGFjZS5hdXRoZW50aWNhdGlvblNj
aGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lVW5rbm93bikgewog
ICAgICAgICAgICAgbV9ib29sUmVzdWx0ID0gZmFsc2U7CkBAIC0yOTYsOCArMzA5LDExIEBAIEJv
b2xlYW4gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWwKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLSAgICAgICAgbV9oYW5kbGUt
PmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29yZVByb3RlY3Rpb25TcGFj
ZSk7Ci0gICAgfSk7CisgICAgICAgIGhhbmRsZS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZShjb3JlUHJvdGVjdGlvblNwYWNlKTsKKyAgICB9OworICAgIAorICAgIFByb3Rl
Y3RlZFBhcmFtZXRlcnMgcGFyYW1ldGVycyB7IG1ha2VSZWYoKnRoaXMpLCBtX2hhbmRsZSwgcHJv
dGVjdGlvblNwYWNlIH07CisgICAgZGlzcGF0Y2hfYXN5bmNfZihkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCAmcGFyYW1ldGVycywgd29yayk7CiAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQo
bV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CiAgICAgcmV0dXJuIG1fYm9vbFJl
c3VsdDsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314510</attachid>
            <date>2017-07-03 13:16:55 -0700</date>
            <delta_ts>2017-07-03 13:17:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174059-20170703131654.patch</filename>
            <type>text/plain</type>
            <size>19805</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTAyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTA2LTMwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3RvcCB1c2lu
ZyBkaXNwYXRjaF9hc3luYyBpbiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
V2l0aE9wZXJhdGlvblF1ZXVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBBbmR5IEVzdGVzLgorCisg
ICAgICAgIFVzZSBkaXNwYXRjaF9hc3luY19mIGFuZCBjYWxsT25NYWluVGhyZWFkIGluc3RlYWQu
CisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKyAgICAgICAgVGhpcyB3aWxsIGFsbG93
IG1lIHRvIHVzZSB0aGlzIGNvZGUgb24gV2luZG93cy4KKworICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRp
b25RdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVy
YXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZFJl
Y2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVy
YXRpb25RdWV1ZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp3aWxsQ2FjaGVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9u
UXVldWU6OmRpZFNlbmRCb2R5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpjYW5SZXNwb25kVG9Q
cm90ZWN0aW9uU3BhY2UpOgorCiAyMDE3LTA2LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjE1MDk2KSBRdWVyaWVz
IG9mIFVSTHMgd2l0aCBub24tc3BlY2lhbCBzY2hlbWVzIHNob3VsZCBub3QgcGVyY2VudC1lbmNv
ZGUgc2luZ2xlIHF1b3RlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3Bw
CShyZXZpc2lvbiAyMTkwMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMjYgKzEwMSwzNSBAQCBDRlVSTFJlcXVlc3RSZWYg
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lCiAgICAgfQogCiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICAvLyBGSVhNRTogVGhlIGJsb2NrIGltcGxpY2l0bHkgY29waWVzIHByb3Rl
Y3RvciBvYmplY3QsIHdoaWNoIGlzIHdhc3RlZnVsLiBXZSBzaG91bGQganVzdCBjYWxsIHJlZigp
LAotICAgIC8vIGNhcHR1cmUgInRoaXMiIGJ5IHBvaW50ZXIgdmFsdWUsIGFuZCB1c2UgYSBDKysg
bGFtYmRhIHRvIHByZXZlbnQgb3RoZXIgdW5pbnRlbnRpb25hbCBjYXB0dXJpbmcuCi0gICAgUmVm
UHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVl
dWU+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0KLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgIAorICAgIHN0cnVjdCBQcm90ZWN0ZWRQYXJhbWV0ZXJz
IHsKKyAgICAgICAgUmVmPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRo
T3BlcmF0aW9uUXVldWU+IHByb3RlY3RlZFRoaXM7CisgICAgICAgIFJldGFpblB0cjxDRlVSTFJl
cXVlc3RSZWY+IGNmUmVxdWVzdDsKKyAgICAgICAgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+
IG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZTsKKyAgICB9OworICAgIAorICAgIGF1dG8gd29yayA9
IFtdICh2b2lkKiBjb250ZXh0KSB7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlcnMgPSAqcmVpbnRl
cnByZXRfY2FzdDxQcm90ZWN0ZWRQYXJhbWV0ZXJzKj4oY29udGV4dCk7CisgICAgICAgIGF1dG8m
IHByb3RlY3RlZFRoaXMgPSBwYXJhbWV0ZXJzLnByb3RlY3RlZFRoaXM7CisgICAgICAgIGF1dG8m
IGhhbmRsZSA9IHByb3RlY3RlZFRoaXMtPm1faGFuZGxlOworICAgICAgICBhdXRvJiBjZlJlcXVl
c3QgPSBwYXJhbWV0ZXJzLmNmUmVxdWVzdDsKKyAgICAgICAgCiAgICAgICAgIGlmICghcHJvdGVj
dGVkVGhpcy0+aGFzSGFuZGxlKCkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlV2lsbFNlbmRSZXF1
ZXN0KG51bGxwdHIpOworICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29udGludWVXaWxsU2Vu
ZFJlcXVlc3QobnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6d2lsbFNlbmRSZXF1ZXN0KGhhbmRsZT0lcCkgKCVz
KSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp3aWxsU2VuZFJlcXVl
c3QoaGFuZGxlPSVwKSAoJXMpIiwgaGFuZGxlLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIFJldGFpblB0cjxDRlVSTFJlc3Bv
bnNlUmVmPiByZWRpcmVjdFJlc3BvbnNlID0gc3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5l
Y2Vzc2FyeShjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSk7CisgICAgICAgIFJl
dGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiByZWRpcmVjdFJlc3BvbnNlID0gcHJvdGVjdGVkVGhp
cy0+c3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeShjZlJlcXVlc3QuZ2V0KCks
IHBhcmFtZXRlcnMub3JpZ2luYWxSZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKICAgICAgICAgQVNT
RVJUKHJlZGlyZWN0UmVzcG9uc2UpOwogCi0gICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
ID0gY3JlYXRlUmVzb3VyY2VSZXF1ZXN0KGNmUmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZS5nZXQo
KSk7Ci0gICAgICAgIG1faGFuZGxlLT53aWxsU2VuZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSwg
cmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7Ci0gICAgfSk7Ci0KKyAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QgPSBwcm90ZWN0ZWRUaGlzLT5jcmVhdGVSZXNvdXJjZVJlcXVlc3QoY2ZSZXF1
ZXN0LmdldCgpLCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICAgICAgaGFuZGxlLT53aWxs
U2VuZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7Cisg
ICAgfTsKKyAgICAKKyAgICBQcm90ZWN0ZWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgeyBtYWtlUmVm
KCp0aGlzKSwgY2ZSZXF1ZXN0LCBvcmlnaW5hbFJlZGlyZWN0UmVzcG9uc2UgfTsKKyAgICBkaXNw
YXRjaF9hc3luY19mKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksICZwYXJhbWV0ZXJzLCB3b3Jr
KTsKICAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChtX3NlbWFwaG9yZSwgRElTUEFUQ0hfVElN
RV9GT1JFVkVSKTsKIAogICAgIHJldHVybiBtX3JlcXVlc3RSZXN1bHQubGVha1JlZigpOwpAQCAt
MTI4LDE0MyArMTM3LDE0MiBAQCBDRlVSTFJlcXVlc3RSZWYgUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVy
YXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uZWN0
aW9uLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCiB7Ci0gICAgLy8gRklYTUU6IFRoZSBi
bG9jayBpbXBsaWNpdGx5IGNvcGllcyBwcm90ZWN0b3Igb2JqZWN0LCB3aGljaCBpcyB3YXN0ZWZ1
bC4gV2Ugc2hvdWxkIGp1c3QgY2FsbCByZWYoKSwKLSAgICAvLyBjYXB0dXJlICJ0aGlzIiBieSBw
b2ludGVyIHZhbHVlLCBhbmQgdXNlIGEgQysrIGxhbWJkYSB0byBwcmV2ZW50IG90aGVyIHVuaW50
ZW50aW9uYWwgY2FwdHVyaW5nLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0g
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAg
aWYgKCFwcm90ZWN0ZWRUaGlzLT5oYXNIYW5kbGUoKSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKSB7
Ci0gICAgICAgICAgICBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIHN0cnVjdCBQ
cm90ZWN0ZWRQYXJhbWV0ZXJzIHsKKyAgICAgICAgUmVmPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3RlZFRoaXM7CisgICAgICAg
IFJldGFpblB0cjxDRlVSTENvbm5lY3Rpb25SZWY+IGNvbm5lY3Rpb247CisgICAgICAgIFJldGFp
blB0cjxDRlVSTFJlc3BvbnNlUmVmPiBjZlJlc3BvbnNlOworICAgIH07CisgICAgCisgICAgYXV0
byB3b3JrID0gW10gKHZvaWQqIGNvbnRleHQpIHsKKyAgICAgICAgYXV0byYgcGFyYW1ldGVycyA9
ICpyZWludGVycHJldF9jYXN0PFByb3RlY3RlZFBhcmFtZXRlcnMqPihjb250ZXh0KTsKKyAgICAg
ICAgYXV0byYgcHJvdGVjdGVkVGhpcyA9IHBhcmFtZXRlcnMucHJvdGVjdGVkVGhpczsKKyAgICAg
ICAgYXV0byYgaGFuZGxlID0gcHJvdGVjdGVkVGhpcy0+bV9oYW5kbGU7CisgICAgICAgIGF1dG8m
IGNmUmVzcG9uc2UgPSBwYXJhbWV0ZXJzLmNmUmVzcG9uc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAoIXByb3RlY3RlZFRoaXMtPmhhc0hhbmRsZSgpIHx8ICFoYW5kbGUtPmNsaWVudCgpKSB7Cisg
ICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9u
UXVldWU6OmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9o
YW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZT0lcCkg
KCVzKSIsIGhhbmRsZSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKIAogICAgICAgICAvLyBBdm9pZCBNSU1FIHR5cGUgc25pZmZpbmcgaWYgdGhl
IHJlc3BvbnNlIGNvbWVzIGJhY2sgYXMgMzA0IE5vdCBNb2RpZmllZC4KLSAgICAgICAgYXV0byBt
c2cgPSBDRlVSTFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNlKGNmUmVzcG9uc2UpOworICAgICAgICBh
dXRvIG1zZyA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2UoY2ZSZXNwb25zZS5nZXQoKSk7
CiAgICAgICAgIGludCBzdGF0dXNDb2RlID0gbXNnID8gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNl
U3RhdHVzQ29kZShtc2cpIDogMDsKIAogICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPSAzMDQpIHsK
LSAgICAgICAgICAgIGJvb2wgaXNNYWluUmVzb3VyY2VMb2FkID0gbV9oYW5kbGUtPmZpcnN0UmVx
dWVzdCgpLnJlcXVlc3RlcigpID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWluOwot
ICAgICAgICAgICAgYWRqdXN0TUlNRVR5cGVJZk5lY2Vzc2FyeShjZlJlc3BvbnNlLCBpc01haW5S
ZXNvdXJjZUxvYWQpOworICAgICAgICAgICAgYm9vbCBpc01haW5SZXNvdXJjZUxvYWQgPSBoYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLnJlcXVlc3RlcigpID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpNYWluOworICAgICAgICAgICAgYWRqdXN0TUlNRVR5cGVJZk5lY2Vzc2FyeShjZlJlc3Bv
bnNlLmdldCgpLCBpc01haW5SZXNvdXJjZUxvYWQpOwogICAgICAgICB9CiAKICNpZiAhUExBVEZP
Uk0oSU9TKQotICAgICAgICBpZiAoX0NGVVJMUmVxdWVzdENvcHlQcm90b2NvbFByb3BlcnR5Rm9y
S2V5KG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5jZlVSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQ
Qm9keSksIENGU1RSKCJGb3JjZUhUTUxNSU1FVHlwZSIpKSkKLSAgICAgICAgICAgIENGVVJMUmVz
cG9uc2VTZXRNSU1FVHlwZShjZlJlc3BvbnNlLCBDRlNUUigidGV4dC9odG1sIikpOworICAgICAg
ICBpZiAoX0NGVVJMUmVxdWVzdENvcHlQcm90b2NvbFByb3BlcnR5Rm9yS2V5KGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkuY2ZVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpLCBDRlNUUigiRm9y
Y2VIVE1MTUlNRVR5cGUiKSkpCisgICAgICAgICAgICBDRlVSTFJlc3BvbnNlU2V0TUlNRVR5cGUo
Y2ZSZXNwb25zZS5nZXQoKSwgQ0ZTVFIoInRleHQvaHRtbCIpKTsKICNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQogICAgICAgICAKLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNvdXJjZVJlc3Bv
bnNlKGNmUmVzcG9uc2UpOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc291cmNlUmVzcG9u
c2UoY2ZSZXNwb25zZS5nZXQoKSk7CiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgICAgIFJl
c291cmNlSGFuZGxlOjpnZXRDb25uZWN0aW9uVGltaW5nRGF0YShjb25uZWN0aW9uLCByZXNvdXJj
ZVJlc3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKSk7Ci0jZWxzZQotICAgICAg
ICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisgICAgICAgIFJlc291cmNlSGFuZGxlOjpnZXRD
b25uZWN0aW9uVGltaW5nRGF0YShwYXJhbWV0ZXJzLmNvbm5lY3Rpb24uZ2V0KCksIHJlc291cmNl
UmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpKTsKICNlbmRpZgogICAgICAg
ICAKLSAgICAgICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc291cmNl
UmVzcG9uc2UpKTsKLSAgICB9KTsKKyAgICAgICAgaGFuZGxlLT5kaWRSZWNlaXZlUmVzcG9uc2Uo
V1RGTW92ZShyZXNvdXJjZVJlc3BvbnNlKSk7CisgICAgfTsKKyAgICAKKyAgICBQcm90ZWN0ZWRQ
YXJhbWV0ZXJzIHBhcmFtZXRlcnMgeyBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbiwgY2ZSZXNw
b25zZSB9OworICAgIGRpc3BhdGNoX2FzeW5jX2YoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
JnBhcmFtZXRlcnMsIHdvcmspOwogICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBo
b3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZFJlY2VpdmVEYXRhKENG
RGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoKQogewotICAgIC8vIEZJWE1FOiBU
aGUgYmxvY2sgaW1wbGljaXRseSBjb3BpZXMgcHJvdGVjdG9yIG9iamVjdCwgd2hpY2ggaXMgd2Fz
dGVmdWwuIFdlIHNob3VsZCBqdXN0IGNhbGwgcmVmKCksCi0gICAgLy8gY2FwdHVyZSAidGhpcyIg
YnkgcG9pbnRlciB2YWx1ZSwgYW5kIHVzZSBhIEMrKyBsYW1iZGEgdG8gcHJldmVudCBvdGhlciB1
bmludGVudGlvbmFsIGNhcHR1cmluZy4KLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
LSAgICBDRlJldGFpbihkYXRhKTsKLQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57Ci0gICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5oYXNIYW5kbGUoKSAm
JiBtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQg
LSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
OjpkaWRSZWNlaXZlRGF0YShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgICAg
ICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGRhdGEpLCBvcmlnaW5hbExlbmd0aCk7Ci0gICAgICAgIH0KKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRhdGEgPSBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPihkYXRhKSwgb3JpZ2luYWxMZW5ndGggPSBvcmlnaW5hbExlbmd0aF0g
KCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8mIGhhbmRsZSA9IHByb3RlY3RlZFRoaXMtPm1faGFu
ZGxlOworICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPmhhc0hhbmRsZSgpIHx8ICFoYW5kbGUt
PmNsaWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgTE9HKE5l
dHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRo
T3BlcmF0aW9uUXVldWU6OmRpZFJlY2VpdmVEYXRhKGhhbmRsZT0lcCkgKCVzKSIsIGhhbmRsZSwg
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAot
ICAgICAgICBDRlJlbGVhc2UoZGF0YSk7CisgICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZFJl
Y2VpdmVCdWZmZXIoaGFuZGxlLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLmdldCgpKSwgb3Jp
Z2luYWxMZW5ndGgpOwogICAgIH0pOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZEZpbmlzaExvYWRpbmcoKQogewot
ICAgIC8vIEZJWE1FOiBUaGUgYmxvY2sgaW1wbGljaXRseSBjb3BpZXMgcHJvdGVjdG9yIG9iamVj
dCwgd2hpY2ggaXMgd2FzdGVmdWwuIFdlIHNob3VsZCBqdXN0IGNhbGwgcmVmKCksCi0gICAgLy8g
Y2FwdHVyZSAidGhpcyIgYnkgcG9pbnRlciB2YWx1ZSwgYW5kIHVzZSBhIEMrKyBsYW1iZGEgdG8g
cHJldmVudCBvdGhlciB1bmludGVudGlvbmFsIGNhcHR1cmluZy4KLSAgICBSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBeewotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPmhhc0hhbmRsZSgpIHx8ICFtX2hh
bmRsZS0+Y2xpZW50KCkpCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byYgaGFuZGxlID0gcHJvdGVj
dGVkVGhpcy0+bV9oYW5kbGU7CisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxl
KCkgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
TE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlPSVwKSAoJXMpIiwg
bV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZEZpbmlzaExvYWRpbmco
aGFuZGxlPSVwKSAoJXMpIiwgaGFuZGxlLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlk
RmluaXNoTG9hZGluZyhtX2hhbmRsZSk7CisgICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZEZp
bmlzaExvYWRpbmcoaGFuZGxlKTsKICAgICB9KTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRGYWlsKENGRXJyb3JS
ZWYgZXJyb3IpCiB7Ci0gICAgLy8gRklYTUU6IFRoZSBibG9jayBpbXBsaWNpdGx5IGNvcGllcyBw
cm90ZWN0b3Igb2JqZWN0LCB3aGljaCBpcyB3YXN0ZWZ1bC4gV2Ugc2hvdWxkIGp1c3QgY2FsbCBy
ZWYoKSwKLSAgICAvLyBjYXB0dXJlICJ0aGlzIiBieSBwb2ludGVyIHZhbHVlLCBhbmQgdXNlIGEg
QysrIGxhbWJkYSB0byBwcmV2ZW50IG90aGVyIHVuaW50ZW50aW9uYWwgY2FwdHVyaW5nLgotICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlv
blF1ZXVlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIENGUmV0YWluKGVycm9yKTsKLSAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkgJiYgbV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0gICAg
ICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkRmFpbChoYW5kbGU9JXApICglcykiLCBt
X2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotCi0gICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwobV9oYW5k
bGUsIFJlc291cmNlRXJyb3IoZXJyb3IpKTsKLSAgICAgICAgfQorICAgIGNhbGxPbk1haW5UaHJl
YWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZXJyb3IgPSBSZXRhaW5QdHI8Q0ZF
cnJvclJlZj4oZXJyb3IpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byYgaGFuZGxlID0gcHJv
dGVjdGVkVGhpcy0+bV9oYW5kbGU7CisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+aGFzSGFu
ZGxlKCkgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkRmFpbChoYW5kbGU9JXApICglcyki
LCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiAKLSAgICAgICAgQ0ZSZWxlYXNlKGVycm9yKTsKKyAgICAgICAgaGFuZGxlLT5jbGll
bnQoKS0+ZGlkRmFpbChoYW5kbGUsIFJlc291cmNlRXJyb3IoZXJyb3IuZ2V0KCkpKTsKICAgICB9
KTsKIH0KIAogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp3aWxsQ2FjaGVSZXNwb25zZShDRkNhY2hl
ZFVSTFJlc3BvbnNlUmVmIGNhY2hlZFJlc3BvbnNlKQogewotICAgIC8vIEZJWE1FOiBUaGUgYmxv
Y2sgaW1wbGljaXRseSBjb3BpZXMgcHJvdGVjdG9yIG9iamVjdCwgd2hpY2ggaXMgd2FzdGVmdWwu
IFdlIHNob3VsZCBqdXN0IGNhbGwgcmVmKCksCi0gICAgLy8gY2FwdHVyZSAidGhpcyIgYnkgcG9p
bnRlciB2YWx1ZSwgYW5kIHVzZSBhIEMrKyBsYW1iZGEgdG8gcHJldmVudCBvdGhlciB1bmludGVu
dGlvbmFsIGNhcHR1cmluZy4KLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQotICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIGlm
ICghcHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkgewot
ICAgICAgICAgICAgY29udGludWVXaWxsQ2FjaGVSZXNwb25zZShudWxscHRyKTsKKyAgICBzdHJ1
Y3QgUHJvdGVjdGVkUGFyYW1ldGVycyB7CisgICAgICAgIFJlZjxSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlPiBwcm90ZWN0ZWRUaGlzOworICAg
ICAgICBSZXRhaW5QdHI8Q0ZDYWNoZWRVUkxSZXNwb25zZVJlZj4gY2FjaGVkUmVzcG9uc2U7Cisg
ICAgfTsKKyAgICAKKyAgICBhdXRvIHdvcmsgPSBbXSAodm9pZCogY29udGV4dCkgeworICAgICAg
ICBhdXRvJiBwYXJhbWV0ZXJzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8UHJvdGVjdGVkUGFyYW1ldGVy
cyo+KGNvbnRleHQpOworICAgICAgICBhdXRvJiBwcm90ZWN0ZWRUaGlzID0gcGFyYW1ldGVycy5w
cm90ZWN0ZWRUaGlzOworICAgICAgICBhdXRvJiBoYW5kbGUgPSBwcm90ZWN0ZWRUaGlzLT5tX2hh
bmRsZTsKKyAgICAgICAgCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkg
fHwgIWhhbmRsZS0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNvbnRp
bnVlV2lsbENhY2hlUmVzcG9uc2UobnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6d2lsbENhY2hlUmVzcG9uc2Uo
aGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAt
IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6
OndpbGxDYWNoZVJlc3BvbnNlKGhhbmRsZT0lcCkgKCVzKSIsIGhhbmRsZSwgaGFuZGxlLT5maXJz
dFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBtX2hh
bmRsZS0+Y2xpZW50KCktPndpbGxDYWNoZVJlc3BvbnNlQXN5bmMobV9oYW5kbGUsIGNhY2hlZFJl
c3BvbnNlKTsKLSAgICB9KTsKKyAgICAgICAgaGFuZGxlLT5jbGllbnQoKS0+d2lsbENhY2hlUmVz
cG9uc2VBc3luYyhoYW5kbGUsIHBhcmFtZXRlcnMuY2FjaGVkUmVzcG9uc2UuZ2V0KCkpOworICAg
IH07CisgICAgCisgICAgUHJvdGVjdGVkUGFyYW1ldGVycyBwYXJhbWV0ZXJzIHsgbWFrZVJlZigq
dGhpcyksIGNhY2hlZFJlc3BvbnNlIH07CisgICAgZGlzcGF0Y2hfYXN5bmNfZihkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCAmcGFyYW1ldGVycywgd29yayk7CiAgICAgZGlzcGF0Y2hfc2VtYXBo
b3JlX3dhaXQobV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CiAgICAgcmV0dXJu
IG1fY2FjaGVkUmVzcG9uc2VSZXN1bHQubGVha1JlZigpOwogfQogCiB2b2lkIFJlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZFJlY2VpdmVD
aGFsbGVuZ2UoQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmIGNoYWxsZW5nZSkKIHsKLSAgICAvLyBGSVhN
RTogVGhlIGJsb2NrIGltcGxpY2l0bHkgY29waWVzIHByb3RlY3RvciBvYmplY3QsIHdoaWNoIGlz
IHdhc3RlZnVsLiBXZSBzaG91bGQganVzdCBjYWxsIHJlZigpLAotICAgIC8vIGNhcHR1cmUgInRo
aXMiIGJ5IHBvaW50ZXIgdmFsdWUsIGFuZCB1c2UgYSBDKysgbGFtYmRhIHRvIHByZXZlbnQgb3Ro
ZXIgdW5pbnRlbnRpb25hbCBjYXB0dXJpbmcuCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3RlZFRoaXModGhp
cyk7Ci0gICAgQ0ZSZXRhaW4oY2hhbGxlbmdlKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aGFzSGFu
ZGxlKCkpIHsKLSAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRSZWNlaXZlQ2hh
bGxlbmdlKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0
KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAgICAgICAgIG1faGFuZGxl
LT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY2hhbGxlbmdlLCBtX2hhbmRsZSkpOwotICAgICAgICB9CisgICAgY2FsbE9uTWFpblRocmVh
ZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjaGFsbGVuZ2UgPSBSZXRhaW5QdHI8
Q0ZVUkxBdXRoQ2hhbGxlbmdlUmVmPihjaGFsbGVuZ2UpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
YXV0byYgaGFuZGxlID0gcHJvdGVjdGVkVGhpcy0+bV9oYW5kbGU7CisgICAgICAgIGlmICghcHJv
dGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShoYW5kbGU9
JXApICglcykiLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgQ0ZSZWxlYXNlKGNoYWxsZW5nZSk7CisgICAgICAg
IGhhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNoYWxsZW5nZS5nZXQoKSwgaGFuZGxlKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQg
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6
ZGlkU2VuZEJvZHlEYXRhKENGSW5kZXggdG90YWxCeXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxC
eXRlc0V4cGVjdGVkVG9Xcml0ZSkKIHsKLSAgICAvLyBGSVhNRTogVGhlIGJsb2NrIGltcGxpY2l0
bHkgY29waWVzIHByb3RlY3RvciBvYmplY3QsIHdoaWNoIGlzIHdhc3RlZnVsLiBXZSBzaG91bGQg
anVzdCBjYWxsIHJlZigpLAotICAgIC8vIGNhcHR1cmUgInRoaXMiIGJ5IHBvaW50ZXIgdmFsdWUs
IGFuZCB1c2UgYSBDKysgbGFtYmRhIHRvIHByZXZlbnQgb3RoZXIgdW5pbnRlbnRpb25hbCBjYXB0
dXJpbmcuCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVX
aXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRU
aGlzLT5oYXNIYW5kbGUoKSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQorICAgIGNhbGxPbk1haW5U
aHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdG90YWxCeXRlc1dyaXR0ZW4s
IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGVdICgpIG11dGFibGUgeworICAgICAgICBhdXRvJiBo
YW5kbGUgPSBwcm90ZWN0ZWRUaGlzLT5tX2hhbmRsZTsKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRU
aGlzLT5oYXNIYW5kbGUoKSB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkU2VuZEJvZHlEYXRhKGhhbmRs
ZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRT
ZW5kQm9keURhdGEoaGFuZGxlPSVwKSAoJXMpIiwgaGFuZGxlLCBoYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIG1faGFuZGxlLT5j
bGllbnQoKS0+ZGlkU2VuZERhdGEobV9oYW5kbGUsIHRvdGFsQnl0ZXNXcml0dGVuLCB0b3RhbEJ5
dGVzRXhwZWN0ZWRUb1dyaXRlKTsKKyAgICAgICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkU2VuZERh
dGEoaGFuZGxlLCB0b3RhbEJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSk7
CiAgICAgfSk7CiB9CiAKQEAgLTI3NiwxOSArMjg0LDI0IEBAIEJvb2xlYW4gUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWwKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExC
QUNLKQogQm9vbGVhbiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9w
ZXJhdGlvblF1ZXVlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UoQ0ZVUkxQcm90ZWN0aW9u
U3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlKQogewotICAgIC8vIEZJWE1FOiBUaGUgYmxvY2sgaW1w
bGljaXRseSBjb3BpZXMgcHJvdGVjdG9yIG9iamVjdCwgd2hpY2ggaXMgd2FzdGVmdWwuIFdlIHNo
b3VsZCBqdXN0IGNhbGwgcmVmKCksCi0gICAgLy8gY2FwdHVyZSAidGhpcyIgYnkgcG9pbnRlciB2
YWx1ZSwgYW5kIHVzZSBhIEMrKyBsYW1iZGEgdG8gcHJldmVudCBvdGhlciB1bmludGVudGlvbmFs
IGNhcHR1cmluZy4KLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgc3RydWN0IFByb3Rl
Y3RlZFBhcmFtZXRlcnMgeworICAgICAgICBSZWY8UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdGVkVGhpczsKKyAgICAgICAgUmV0
YWluUHRyPENGVVJMUHJvdGVjdGlvblNwYWNlUmVmPiBwcm90ZWN0aW9uU3BhY2U7CisgICAgfTsK
KyAgICAKKyAgICBhdXRvIHdvcmsgPSBbXSAodm9pZCogY29udGV4dCkgeworICAgICAgICBhdXRv
JiBwYXJhbWV0ZXJzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8UHJvdGVjdGVkUGFyYW1ldGVycyo+KGNv
bnRleHQpOworICAgICAgICBhdXRvJiBwcm90ZWN0ZWRUaGlzID0gcGFyYW1ldGVycy5wcm90ZWN0
ZWRUaGlzOworICAgICAgICBhdXRvJiBoYW5kbGUgPSBwcm90ZWN0ZWRUaGlzLT5tX2hhbmRsZTsK
KyAgICAgICAgCiAgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+aGFzSGFuZGxlKCkpIHsKLSAg
ICAgICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShm
YWxzZSk7CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNhblJlc3BvbmRUb1Byb3Rl
Y3Rpb25TcGFjZShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVx
dWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBMT0coTmV0d29y
aywgIkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVy
YXRpb25RdWV1ZTo6Y2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKGhhbmRsZT0lcCkgKCVzKSIs
IGhhbmRsZSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKIAotICAgICAgICBQcm90ZWN0aW9uU3BhY2UgY29yZVByb3RlY3Rpb25TcGFjZSA9IFBy
b3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpOworICAgICAgICBQcm90ZWN0aW9uU3BhY2Ug
Y29yZVByb3RlY3Rpb25TcGFjZSA9IFByb3RlY3Rpb25TcGFjZShwYXJhbWV0ZXJzLnByb3RlY3Rp
b25TcGFjZS5nZXQoKSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAoY29yZVByb3Rl
Y3Rpb25TcGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lVW5rbm93bikgewogICAgICAgICAgICAgbV9ib29sUmVzdWx0ID0gZmFs
c2U7CkBAIC0yOTYsOCArMzA5LDExIEBAIEJvb2xlYW4gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWwKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKLSAgICAgICAgbV9oYW5kbGUtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UoY29yZVByb3RlY3Rpb25TcGFjZSk7Ci0gICAgfSk7CisgICAgICAgIGhhbmRsZS0+
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb3JlUHJvdGVjdGlvblNwYWNl
KTsKKyAgICB9OworICAgIAorICAgIFByb3RlY3RlZFBhcmFtZXRlcnMgcGFyYW1ldGVycyB7IG1h
a2VSZWYoKnRoaXMpLCBwcm90ZWN0aW9uU3BhY2UgfTsKKyAgICBkaXNwYXRjaF9hc3luY19mKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksICZwYXJhbWV0ZXJzLCB3b3JrKTsKICAgICBkaXNwYXRj
aF9zZW1hcGhvcmVfd2FpdChtX3NlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKICAg
ICByZXR1cm4gbV9ib29sUmVzdWx0OwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>