<?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>166628</bug_id>
          
          <creation_ts>2016-12-30 19:03:50 -0800</creation_ts>
          <short_desc>Remove PassRefPtr use from the &quot;css&quot; directory, related cleanup</short_desc>
          <delta_ts>2016-12-31 01:18:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1263182</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-30 19:03:50 -0800</bug_when>
    <thetext>Remove PassRefPtr use from the &quot;css&quot; directory, related cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263184</commentid>
    <comment_count>1</comment_count>
      <attachid>297867</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-30 19:23:28 -0800</bug_when>
    <thetext>Created attachment 297867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263190</commentid>
    <comment_count>2</comment_count>
      <attachid>297867</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-30 22:01:03 -0800</bug_when>
    <thetext>Comment on attachment 297867
Patch

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

&gt; Source/WebCore/css/CSSGradientValue.cpp:98
&gt; +    ASSERT(is&lt;CSSRadialGradientValue&gt;(value));

If we add conical gradients but forget to update this, then this assertion will no longer necessarily be true.  I liked the old design.  It was safer.  If only we could switch(type) or something...

&gt; Source/WebCore/css/CSSImageGeneratorValue.cpp:73
&gt; -    m_clients.add(renderer);
&gt; +    m_clients.add(&amp;renderer);

Can we make m_clients a HashCountedSet&lt;std::reference_wrapper&lt;RenderElement&gt;&gt; ?

&gt; Source/WebCore/rendering/style/StyleGeneratedImage.cpp:103
&gt; +    ASSERT(renderer);

It seems like we should make the parameter type a RenderElement&amp; instead of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263195</commentid>
    <comment_count>3</comment_count>
      <attachid>297867</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-31 01:17:45 -0800</bug_when>
    <thetext>Comment on attachment 297867
Patch

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

&gt;&gt; Source/WebCore/css/CSSGradientValue.cpp:98
&gt;&gt; +    ASSERT(is&lt;CSSRadialGradientValue&gt;(value));
&gt; 
&gt; If we add conical gradients but forget to update this, then this assertion will no longer necessarily be true.  I liked the old design.  It was safer.  If only we could switch(type) or something...

A tiny bit safer in theory, but also an untested unreachable code path. I definitely did not like the old design. Maybe we should talk in person?

&gt;&gt; Source/WebCore/css/CSSImageGeneratorValue.cpp:73
&gt;&gt; +    m_clients.add(&amp;renderer);
&gt; 
&gt; Can we make m_clients a HashCountedSet&lt;std::reference_wrapper&lt;RenderElement&gt;&gt; ?

I have no idea; this is a recurring pattern elsewhere so we should try that at some point.

&gt;&gt; Source/WebCore/rendering/style/StyleGeneratedImage.cpp:103
&gt;&gt; +    ASSERT(renderer);
&gt; 
&gt; It seems like we should make the parameter type a RenderElement&amp; instead of this.

Absolutely; we can keep pulling on the thread of the functions that take pointers that should be references. I didn’t want to go even further in my refactoring in this patch, so this is one of the places where I drew the line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263196</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-31 01:18:29 -0800</bug_when>
    <thetext>Committed r210215: &lt;http://trac.webkit.org/changeset/210215&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297867</attachid>
            <date>2016-12-30 19:23:28 -0800</date>
            <delta_ts>2016-12-30 22:01:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166628-20161230192210.patch</filename>
            <type>text/plain</type>
            <size>61479</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmIyOGMwOGQwM2EyMDgz
YzMwNTJkZDEwNmJlZWFjZmY4YWM3MWYyMC4uZTdhMmVmNDczMmMyYmYwNzFhMWI5OGNlOThjMmRm
ZTQ5MTEyMDQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE2LTEyLTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUGFzc1JlZlB0ciB1
c2UgZnJvbSB0aGUgImNzcyIgZGlyZWN0b3J5LCByZWxhdGVkIGNsZWFudXAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjYyOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9u
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3Jl
YXRlKTogVGFrZSBSZWZQdHImJiBpbnN0ZWFkIG9mIFBhc3NSZWZQdHIuCisgICAgICAgIEFsc28g
YWRkZWQgc29tZSBjaGVja3MgZm9yIG51bGwuIENvZGUgaGVyZSBpcyByZWFsbHkgaW5jb25zaXN0
ZW50IGFib3V0IG51bGw7CisgICAgICAgIHByb2JhYmx5IHNob3VsZCBjaGFuZ2UgZnJvbSBSZWZQ
dHIgdG8gUmVmIGF0IHNvbWUgcG9pbnQuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpjcmVhdGVTaW1wbGlmaWVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKTogVGFrZSBSZWYm
JiBpbnN0ZWFkCisgICAgICAgIG9mIFBhc3NSZWZQdHIuCisKKyAgICAgICAgKiBjc3MvQ1NTQ3Jv
c3NmYWRlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3ViaW1hZ2VLbm93blRvQmVPcGFx
dWUpOiBUYWtlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Jvc3NmYWRlVmFsdWU6OlN1YmltYWdlT2JzZXJ2ZXI6OlN1YmltYWdlT2JzZXJ2
ZXIpOiBNb3ZlZCBoZXJlCisgICAgICAgIGZyb20gdGhlIGhlYWRlciwgYW5kIHJlbmFtZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6U3ViaW1hZ2VPYnNlcnZlcjo6aW1h
Z2VDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6
Q1NTQ3Jvc3NmYWRlVmFsdWUpOiBNb3ZlZCBoZXJlIGZyb20gdGhlIGhlYWRlci4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0Nyb3NzZmFkZVZhbHVlOjp+Q1NTQ3Jvc3NmYWRlVmFsdWUpOiBVcGRhdGVkIGZv
ciBkYXRhIG1lbWJlciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nyb3NzZmFk
ZVZhbHVlOjpmaXhlZFNpemUpOiBUYWtlIGEgcmVmZXJlbmNlLiBBbHNvIHJld3JvdGUgc2l6ZSBt
YXRoIHRvCisgICAgICAgIHRha2UgYWR2YW50YWdlIG9mIEZsb2F0U2l6ZSBtdWx0aXBsaWNhdGlv
biBhbmQgYWRkaXRpb24gb3BlcmF0b3JzLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3Jvc3NmYWRl
VmFsdWU6Omtub3duVG9CZU9wYXF1ZSk6IFRha2UgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJD
b3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6bG9hZFN1YmltYWdlcyk6IFNldCBtX3N1YmltYWdlc0Fy
ZVJlYWR5IHJhdGhlciB0aGFuCisgICAgICAgIGNhbGxpbmcgc2V0UmVhZHkgb24gdGhlIHN1Ymlt
YWdlIG9ic2VydmVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3Jvc3NmYWRlVmFsdWU6OmltYWdl
KTogUmV0dXJuIGEgcmF3IHBvaW50ZXIgcmF0aGVyIHRoYW4gYSBSZWZQdHIuCisgICAgICAgIFRh
a2UgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6IFJlbW92ZWQgdW51c2VkIHJlY3Qg
YXJndW1lbnQuCisgICAgICAgIFJld3JvdGUgdG8gdXNlIG1vZGVybiBmb3IgbG9vcC4KKyAgICAg
ICAgKiBjc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaDogVXBkYXRlZCBmb3IgYWJvdmUgY2hhbmdlcy4K
KworICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUdyYWRpZW50KTogQWRkZWQuIEhlbHBlciBzbyB0aGUgZnVuY3Rpb24gYmVsb3cgY2Fu
IHVzZSBSZWYgcmF0aGVyCisgICAgICAgIHRoYW4gUmVmUHRyLCBhbmQgaXQncyBhbHNvIG5pY2Ug
dG8gZmFjdG9yIG91dCB0aGlzICJwb29yIG1hbidzIHZpcnR1YWwgZnVuY3Rpb24iLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6aW1hZ2UpOiBUYWtlIGEgcmVmZXJlbmNlIHJh
dGhlciB0aGFuIGEgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OmNsb25lKTogQWRkZWQuIEhl
bHBlciBsaWtlIGNyZWF0ZUdyYWRpZW50IGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQpOiBUYWtlIGEgcmVmZXJlbmNl
IHJhdGhlcgorICAgICAgICB0aGFuIGEgcG9pbnRlci4gU2ltcGxpZmllZCBieSB1c2luZyB0aGUg
aGVscGVyIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6a25vd25U
b0JlT3BhcXVlKTogUmVtb3ZlZCB1bnVzZWQgYXJndW1lbnQuIFJld3JvdGUgdG8KKyAgICAgICAg
dXNlIGEgbW9kZXJuIGZvciBsb29wLgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmg6
IFVwZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5jcHA6IE1vdmVkIHRoZSBDYWNoZWRHZW5lcmF0ZWRJbWFnZSBjbGFzcyBpbiBo
ZXJlCisgICAgICAgIGZyb20gdGhlIGhlYWRlci4gQWxzbyBjaGFuZ2VkIGl0IHRvIHVzZSBjb25z
dCBhbmQgUmVmLgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRk
Q2xpZW50KTogVGFrZSBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBhIHBvaW50ZXIuCisgICAgICAg
IChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmNhY2hlZEltYWdlRm9y
U2l6ZSk6IFVwZGF0ZWQgc2luY2UgaW1hZ2Ugbm93IHJldHVybnMKKyAgICAgICAgYSByZWZlcmVu
Y2UgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZTo6c2F2ZUNhY2hlZEltYWdlRm9yU2l6ZSk6IFRha2UgYSByZWZlcmVuY2UgcmF0
aGVyCisgICAgICAgIHRoYW4gUGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OmltYWdlKTogVGFrZSBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBhIHBv
aW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpmaXhlZFNp
emUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6Omtu
b3duVG9CZU9wYXF1ZSk6IERpdHRvLgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZh
bHVlLmg6IFVwZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisKKyAgICAgICAgKiBjc3MvQ1NTVmFs
dWVQb29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZh
Y2VWYWx1ZSk6IFJldHVybiBhIFJlZlB0ciByYXRoZXIgdGhhbiBQYXNzUmVmUHRyLgorICAgICAg
ICAqIGNzcy9DU1NWYWx1ZVBvb2wuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAg
ICogY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oOiBDaGFuZ2UgY29udmVydFN0eWxlSW1hZ2Ug
YW5kIGNvbnZlcnRTaGFwZVZhbHVlIHRvCisgICAgICAgIHJldHVybiBSZWZQdHIgaW5zdGVhZCBv
ZiBQYXNzUmVmUHRyLgorCisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29udGVudCk6IFNp
bmNlIGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkCisgICAgICAgIHJldHVybnMgYSBSZWYgbm93
LCBubyBuZWVkIHRvIGRlcmVmZXJlbmNlIGl0IGFueSBtb3JlLiBUaGlzIGFsc28gcmVtb3ZlcyBy
ZWZlcmVuY2UKKyAgICAgICAgY291bnQgY2h1cm4gc2luY2Ugd2UgYXJlIG5vdyBwYXNzaW5nIGEg
UmVmIHRlbXBvcmFyeSB0byBhIFJlZiYmLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UpOiBEaXR0by4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnRJbWFnZTo6R3JhZGllbnRJbWFnZSk6IFBhc3MgZ2VuZXJhdG9y
IGFzIGEgcmVmZXJlbmNlIHJhdGhlciB0aGFuCisgICAgICAgIGFzIGEgUGFzc1JlZlB0ci4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXcpOiBVcGRhdGVkIHNpbmNlIG1fZ3Jh
ZGllbnQgaXMgbm93IGEgUmVmIHJhdGhlciB0aGFuCisgICAgICAgIGEgUmVmUHRyLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92
ZSBjaGFuZ2VzLiBNYWtlIHRoaW5ncworICAgICAgICBwcml2YXRlIHJhdGhlciB0aGFuIHByb3Rl
Y3RlZCBzaW5jZSB0aGlzIGNsYXNzIGlzIGZpbmFsLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVHZW5l
cmF0ZWRJbWFnZTo6aW1hZ2VTaXplKTogUGFzcyByZW5kZXJlciBhcyBhIHJlZmVyZW5jZS4gTGF0
ZXIsIHdlCisgICAgICAgIHNob3VsZCBjaGFuZ2UgdGhlIGludGVyZmFjZSB0byB0aGlzIGZ1bmN0
aW9uLCB0b28uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUdlbmVyYXRlZEltYWdlOjphZGRDbGll
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6OnJlbW92
ZUNsaWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVHZW5lcmF0ZWRJbWFnZTo6
aW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6Omtu
b3duVG9CZU9wYXF1ZSk6IERpdHRvLgorCiAyMDE2LTEyLTMwICBPbGl2aWVyIEJsaW4gIDxvbGl2
aWVyLmJsaW5Ac29mdGF0aG9tZS5jb20+CiAKICAgICAgICAgW0VGTF0gZml4IGJ1ZmZlciBvdmVy
LXJlYWQgaW4gUmVuZGVyVGhlbWVFZmw6Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAppbmRleCBmYWFlM2YxMGRkMTNj
N2U0MWEyZWYzZDA4YTI3ZmE2YWFiZDMwOWE0Li5iMzExMWY2YTYwYjAwZWQ4YzQ2MmZhM2QzNTBh
NGMxNzM2MGI1M2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZSB0eXBlLCBib29sIGlzSW50ZWdlcikKICAgICB7Ci0gICAgICAgIGlmIChzdGQ6
OmlzbmFuKHZhbHVlKSB8fCBzdGQ6OmlzaW5mKHZhbHVlKSkKKyAgICAgICAgaWYgKCFzdGQ6Omlz
ZmluaXRlKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHZhbHVlLCB0eXBlKSwgaXNJbnRlZ2VyKSk7CiAgICAgfQpAQCAtMzQxLDIzICszNDEs
MjcgQEAgc3RhdGljIGlubGluZSBib29sIGlzSW50ZWdlclJlc3VsdChDYWxjT3BlcmF0b3Igb3As
IGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYKIGNsYXNzIENTU0NhbGNCaW5hcnlPcGVyYXRp
b24gZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNCaW5hcnlP
cGVyYXRpb24+IGNyZWF0ZShDYWxjT3BlcmF0b3Igb3AsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJp
Z2h0U2lkZSkKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNCaW5hcnlPcGVyYXRpb24+IGNyZWF0
ZShDYWxjT3BlcmF0b3Igb3AsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNp
ZGUsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQogICAgIHsKKyAg
ICAgICAgaWYgKCFsZWZ0U2lkZSB8fCAhcmlnaHRTaWRlKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKICAgICAgICAgQVNTRVJUKGxlZnRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY090aGVy
KTsKICAgICAgICAgQVNTRVJUKHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSA8IENhbGNPdGhlcik7CiAK
LSAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVn
b3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSwgb3ApOwotCisgICAgICAgIGF1dG8gbmV3Q2F0ZWdv
cnkgPSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9wKTsKICAgICAg
ICAgaWYgKG5ld0NhdGVnb3J5ID09IENhbGNPdGhlcikKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlv
bihuZXdDYXRlZ29yeSwgb3AsIGxlZnRTaWRlLCByaWdodFNpZGUpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKG5ld0NhdGVnb3J5LCBvcCwgbGVm
dFNpZGUucmVsZWFzZU5vbk51bGwoKSwgcmlnaHRTaWRlLnJlbGVhc2VOb25OdWxsKCkpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlU2lt
cGxpZmllZChDYWxjT3BlcmF0b3Igb3AsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSkK
KyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlU2ltcGxpZmll
ZChDYWxjT3BlcmF0b3Igb3AsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNp
ZGUsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQogICAgIHsKLSAg
ICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBsZWZ0Q2F0ZWdvcnkgPSBsZWZ0U2lkZS0+Y2F0ZWdv
cnkoKTsKLSAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSByaWdodENhdGVnb3J5ID0gcmlnaHRT
aWRlLT5jYXRlZ29yeSgpOworICAgICAgICBpZiAoIWxlZnRTaWRlIHx8ICFyaWdodFNpZGUpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGxlZnRDYXRlZ29yeSA9
IGxlZnRTaWRlLT5jYXRlZ29yeSgpOworICAgICAgICBhdXRvIHJpZ2h0Q2F0ZWdvcnkgPSByaWdo
dFNpZGUtPmNhdGVnb3J5KCk7CiAgICAgICAgIEFTU0VSVChsZWZ0Q2F0ZWdvcnkgPCBDYWxjT3Ro
ZXIpOwogICAgICAgICBBU1NFUlQocmlnaHRDYXRlZ29yeSA8IENhbGNPdGhlcik7CiAKQEAgLTM5
MSwyNSArMzk1LDI1IEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IFNpbXBsaWZ5IG11bHRpcGx5aW5nIG9yIGRpdmlkaW5nIGJ5IGEgbnVtYmVyIGZvciBzaW1wbGlm
aWFibGUgdHlwZXMuCiAgICAgICAgICAgICBBU1NFUlQob3AgPT0gQ2FsY011bHRpcGx5IHx8IG9w
ID09IENhbGNEaXZpZGUpOwotICAgICAgICAgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBudW1i
ZXJTaWRlID0gZ2V0TnVtYmVyU2lkZSgqbGVmdFNpZGUsICpyaWdodFNpZGUpOworICAgICAgICAg
ICAgYXV0byogbnVtYmVyU2lkZSA9IGdldE51bWJlclNpZGUoKmxlZnRTaWRlLCAqcmlnaHRTaWRl
KTsKICAgICAgICAgICAgIGlmICghbnVtYmVyU2lkZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlKG9wLCBsZWZ0U2lkZSwgcmlnaHRTaWRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlKG9wLCBsZWZ0U2lkZS5yZWxlYXNlTm9uTnVsbCgpLCByaWdodFNpZGUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICBpZiAobnVtYmVyU2lkZSA9PSBsZWZ0U2lkZSAmJiBvcCA9
PSBDYWxjRGl2aWRlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAg
ICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBvdGhlclNpZGUgPSBsZWZ0U2lkZSA9PSBudW1iZXJT
aWRlID8gcmlnaHRTaWRlLmdldCgpIDogbGVmdFNpZGUuZ2V0KCk7CisgICAgICAgICAgICBhdXRv
JiBvdGhlclNpZGUgPSBsZWZ0U2lkZSA9PSBudW1iZXJTaWRlID8gKnJpZ2h0U2lkZSA6ICpsZWZ0
U2lkZTsKIAogICAgICAgICAgICAgZG91YmxlIG51bWJlciA9IG51bWJlclNpZGUtPmRvdWJsZVZh
bHVlKCk7Ci0gICAgICAgICAgICBpZiAoc3RkOjppc25hbihudW1iZXIpIHx8IHN0ZDo6aXNpbmYo
bnVtYmVyKSkKKyAgICAgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZShudW1iZXIpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaWYgKG9wID09IENhbGNEaXZp
ZGUgJiYgIW51bWJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlIG90aGVyVHlwZSA9IG90aGVyU2lkZS0+
cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgYXV0byBvdGhlclR5cGUgPSBvdGhlclNpZGUu
cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICAgICAgaWYgKGhhc0RvdWJsZVZhbHVlKG90aGVyVHlw
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KGV2YWx1YXRlT3BlcmF0b3Iob3AsIG90aGVyU2lkZS0+ZG91YmxlVmFsdWUoKSwgbnVtYmVyKSwg
b3RoZXJUeXBlLCBpc0ludGVnZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShldmFsdWF0ZU9wZXJhdG9yKG9wLCBvdGhlclNpZGUuZG91Ymxl
VmFsdWUoKSwgbnVtYmVyKSwgb3RoZXJUeXBlLCBpc0ludGVnZXIpOwogICAgICAgICB9CiAKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZShvcCwgbGVmdFNpZGUsIHJpZ2h0U2lkZSk7CisgICAgICAgIHJl
dHVybiBjcmVhdGUob3AsIGxlZnRTaWRlLnJlbGVhc2VOb25OdWxsKCksIHJpZ2h0U2lkZS5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC00MjAsMTAgKzQyNCwxMCBAQCBw
cml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRl
Q2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPiBsZWZ0KG1fbGVmdFNpZGUtPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnZl
cnNpb25EYXRhKSk7CisgICAgICAgIGF1dG8gbGVmdCA9IG1fbGVmdFNpZGUtPmNyZWF0ZUNhbGNF
eHByZXNzaW9uKGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgaWYgKCFsZWZ0KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lv
bk5vZGU+IHJpZ2h0KG1fcmlnaHRTaWRlLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9u
RGF0YSkpOworICAgICAgICBhdXRvIHJpZ2h0ID0gbV9yaWdodFNpZGUtPmNyZWF0ZUNhbGNFeHBy
ZXNzaW9uKGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgaWYgKCFyaWdodCkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWxjRXhw
cmVzc2lvbkJpbmFyeU9wZXJhdGlvbj4oV1RGTW92ZShsZWZ0KSwgV1RGTW92ZShyaWdodCksIG1f
b3BlcmF0b3IpOwpAQCAtNTA1LDEwICs1MDksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKICAgICB9CiAKLSAgICBDU1NDYWxjQmlu
YXJ5T3BlcmF0aW9uKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENhbGNPcGVyYXRvciBv
cCwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnRTaWRlLCBQYXNzUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRlKQotICAgICAgICA6IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZShjYXRlZ29yeSwgaXNJbnRlZ2VyUmVzdWx0KG9wLCAqbGVmdFNpZGUsICpyaWdo
dFNpZGUpKQotICAgICAgICAsIG1fbGVmdFNpZGUobGVmdFNpZGUpCi0gICAgICAgICwgbV9yaWdo
dFNpZGUocmlnaHRTaWRlKQorICAgIENTU0NhbGNCaW5hcnlPcGVyYXRpb24oQ2FsY3VsYXRpb25D
YXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiYmIGxlZnRTaWRlLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSkK
KyAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnksIGlzSW50ZWdlclJlc3Vs
dChvcCwgbGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSkpCisgICAgICAgICwgbV9sZWZ0
U2lkZShXVEZNb3ZlKGxlZnRTaWRlKSkKKyAgICAgICAgLCBtX3JpZ2h0U2lkZShXVEZNb3ZlKHJp
Z2h0U2lkZSkpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcCkKICAgICB7CiAgICAgfQpAQCAtNjMy
LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUZXJtKHRv
a2VucywgZGVwdGgsICZyaHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRp
b246OmNyZWF0ZVNpbXBsaWZpZWQoc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNo
YXJhY3RlciksIHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSk7CisgICAgICAgICAgICByZXN1bHQt
PnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlU2ltcGxpZmllZChzdGF0aWNf
Y2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSwgV1RGTW92ZShyZXN1bHQtPnZh
bHVlKSwgV1RGTW92ZShyaHMudmFsdWUpKTsKIAogICAgICAgICAgICAgaWYgKCFyZXN1bHQtPnZh
bHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY2NCw3ICs2NjgsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlTXVsdGlwbGljYXRpdmVFeHByZXNz
aW9uKHRva2VucywgZGVwdGgsICZyaHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlP
cGVyYXRpb246OmNyZWF0ZVNpbXBsaWZpZWQoc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVy
YXRvckNoYXJhY3RlciksIHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSk7CisgICAgICAgICAgICBy
ZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlU2ltcGxpZmllZChz
dGF0aWNfY2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSwgV1RGTW92ZShyZXN1
bHQtPnZhbHVlKSwgV1RGTW92ZShyaHMudmFsdWUpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0
LT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTY4
OSw3ICs2OTMsNyBAQCBzdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRl
Q1NTKGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgYwogICAgIHN3aXRjaCAobm9kZS50
eXBlKCkpIHsKICAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZU51bWJlcjogewogICAgICAgICBm
bG9hdCB2YWx1ZSA9IHRvQ2FsY0V4cHJlc3Npb25OdW1iZXIobm9kZSkudmFsdWUoKTsKLSAgICAg
ICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUodmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgdmFsdWUgPT0g
dHJ1bmNmKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUiksIHZhbHVlID09IHN0ZDo6dHJ1bmModmFsdWUpKTsKICAgICB9CiAgICAgY2Fz
ZSBDYWxjRXhwcmVzc2lvbk5vZGVMZW5ndGg6CiAgICAgICAgIHJldHVybiBjcmVhdGVDU1ModG9D
YWxjRXhwcmVzc2lvbkxlbmd0aChub2RlKS5sZW5ndGgoKSwgc3R5bGUpOwpAQCAtNzA1LDkgKzcw
OSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29u
c3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBjCiAgICAgfQogICAgIGNhc2UgQ2FsY0V4cHJl
c3Npb25Ob2RlVW5kZWZpbmVkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQogCkBAIC03MjksMjMgKzczMSwyMiBAQCBzdGF0aWMgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBj
b25zdCBSZW5kZQogICAgIGNhc2UgUmVsYXRpdmU6CiAgICAgY2FzZSBVbmRlZmluZWQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJl
ZlB0cjxDU1NDYWxjVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKGNvbnN0IENTU1BhcnNlclRv
a2VuUmFuZ2UmIHRva2VucywgVmFsdWVSYW5nZSByYW5nZSkKIHsKICAgICBDU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXIgcGFyc2VyOwotICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IGV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VDYWxjKHRva2Vucyk7Ci0gICAgcmV0dXJuIGV4cHJl
c3Npb24gPyBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ZhbHVlKGV4cHJlc3Npb24ucmVsZWFzZU5vbk51
bGwoKSwgcmFuZ2UgIT0gVmFsdWVSYW5nZUFsbCkpIDogbnVsbHB0cjsKLQorICAgIGF1dG8gZXhw
cmVzc2lvbiA9IHBhcnNlci5wYXJzZUNhbGModG9rZW5zKTsKKyAgICBpZiAoIWV4cHJlc3Npb24p
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2Fs
Y1ZhbHVlKGV4cHJlc3Npb24ucmVsZWFzZU5vbk51bGwoKSwgcmFuZ2UgIT0gVmFsdWVSYW5nZUFs
bCkpOwogfQogICAgIAogUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUo
Y29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
IHsKLSAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9uID0gY3JlYXRl
Q1NTKHZhbHVlLmV4cHJlc3Npb24oKSwgc3R5bGUpOworICAgIGF1dG8gZXhwcmVzc2lvbiA9IGNy
ZWF0ZUNTUyh2YWx1ZS5leHByZXNzaW9uKCksIHN0eWxlKTsKICAgICBpZiAoIWV4cHJlc3Npb24p
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2Fs
Y1ZhbHVlKGV4cHJlc3Npb24ucmVsZWFzZU5vbk51bGwoKSwgdmFsdWUuc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2Zh
ZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCmlu
ZGV4IDMxNDczZDIzMzQxNTY4MWE2ZjYzMjE0YWE5MzVjM2M3N2YzNWUzOTcuLmMzMjRkYzExMmZm
Y2ZmN2ZkOTdlNjRiNDRlNTRjNGFkNjUyNDQ5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Ny
b3NzZmFkZVZhbHVlLmNwcApAQCAtNDUsMTAgKzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgZG91Ymxl
IGJsZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiAgICAg
cmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7CiB9CiAKLXN0YXRpYyBib29sIHN1Ymlt
YWdlS25vd25Ub0JlT3BhcXVlKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgY29uc3QgUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIpCitzdGF0aWMgYm9vbCBzdWJpbWFnZUtub3duVG9CZU9wYXF1ZShjb25z
dCBDU1NWYWx1ZSYgdmFsdWUsIGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewogICAg
IGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NJbWFnZVZhbHVlPih2YWx1ZSkua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHZhbHVlKS5rbm93blRvQmVPcGFxdWUoJnJl
bmRlcmVyKTsKIAogICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkua25v
d25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKQEAgLTU4LDEyICs1OCwzNyBAQCBzdGF0aWMgYm9vbCBz
dWJpbWFnZUtub3duVG9CZU9wYXF1ZShjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIGNvbnN0IFJlbmRl
ckVsZW1lbnQqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbmxpbmUgQ1NTQ3Jvc3NmYWRlVmFs
dWU6OlN1YmltYWdlT2JzZXJ2ZXI6OlN1YmltYWdlT2JzZXJ2ZXIoQ1NTQ3Jvc3NmYWRlVmFsdWUm
IG93bmVyKQorICAgIDogbV9vd25lcihvd25lcikKK3sKK30KKwordm9pZCBDU1NDcm9zc2ZhZGVW
YWx1ZTo6U3ViaW1hZ2VPYnNlcnZlcjo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3Qg
SW50UmVjdCopCit7CisgICAgbV9vd25lci5jcm9zc2ZhZGVDaGFuZ2VkKCk7Cit9CisKK2lubGlu
ZSBDU1NDcm9zc2ZhZGVWYWx1ZTo6Q1NTQ3Jvc3NmYWRlVmFsdWUoUmVmPENTU1ZhbHVlPiYmIGZy
b21WYWx1ZSwgUmVmPENTU1ZhbHVlPiYmIHRvVmFsdWUsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4m
JiBwZXJjZW50YWdlVmFsdWUsIGJvb2wgcHJlZml4ZWQpCisgICAgOiBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKENyb3NzZmFkZUNsYXNzKQorICAgICwgbV9mcm9tVmFsdWUoV1RGTW92ZShmcm9tVmFs
dWUpKQorICAgICwgbV90b1ZhbHVlKFdURk1vdmUodG9WYWx1ZSkpCisgICAgLCBtX3BlcmNlbnRh
Z2VWYWx1ZShXVEZNb3ZlKHBlcmNlbnRhZ2VWYWx1ZSkpCisgICAgLCBtX3N1YmltYWdlT2JzZXJ2
ZXIoKnRoaXMpCisgICAgLCBtX2lzUHJlZml4ZWQocHJlZml4ZWQpCit7Cit9CisKK1JlZjxDU1ND
cm9zc2ZhZGVWYWx1ZT4gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyZWF0ZShSZWY8Q1NTVmFsdWU+JiYg
ZnJvbVZhbHVlLCBSZWY8Q1NTVmFsdWU+JiYgdG9WYWx1ZSwgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiYmIHBlcmNlbnRhZ2VWYWx1ZSwgYm9vbCBwcmVmaXhlZCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDU1NDcm9zc2ZhZGVWYWx1ZShXVEZNb3ZlKGZyb21WYWx1ZSksIFdURk1vdmUodG9W
YWx1ZSksIFdURk1vdmUocGVyY2VudGFnZVZhbHVlKSwgcHJlZml4ZWQpKTsKK30KKwogQ1NTQ3Jv
c3NmYWRlVmFsdWU6On5DU1NDcm9zc2ZhZGVWYWx1ZSgpCiB7CiAgICAgaWYgKG1fY2FjaGVkRnJv
bUltYWdlKQotICAgICAgICBtX2NhY2hlZEZyb21JbWFnZS0+cmVtb3ZlQ2xpZW50KG1fY3Jvc3Nm
YWRlU3ViaW1hZ2VPYnNlcnZlcik7CisgICAgICAgIG1fY2FjaGVkRnJvbUltYWdlLT5yZW1vdmVD
bGllbnQobV9zdWJpbWFnZU9ic2VydmVyKTsKICAgICBpZiAobV9jYWNoZWRUb0ltYWdlKQotICAg
ICAgICBtX2NhY2hlZFRvSW1hZ2UtPnJlbW92ZUNsaWVudChtX2Nyb3NzZmFkZVN1YmltYWdlT2Jz
ZXJ2ZXIpOworICAgICAgICBtX2NhY2hlZFRvSW1hZ2UtPnJlbW92ZUNsaWVudChtX3N1YmltYWdl
T2JzZXJ2ZXIpOwogfQogCiBTdHJpbmcgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmN1c3RvbUNTU1RleHQo
KSBjb25zdApAQCAtODIsMzIgKzEwNywzMSBAQCBTdHJpbmcgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmN1
c3RvbUNTU1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAot
RmxvYXRTaXplIENTU0Nyb3NzZmFkZVZhbHVlOjpmaXhlZFNpemUoY29uc3QgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIpCitGbG9hdFNpemUgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmZpeGVkU2l6ZShjb25z
dCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKICAgICBmbG9hdCBwZXJjZW50YWdlID0gbV9w
ZXJjZW50YWdlVmFsdWUtPmZsb2F0VmFsdWUoKTsKICAgICBmbG9hdCBpbnZlcnNlUGVyY2VudGFn
ZSA9IDEgLSBwZXJjZW50YWdlOwogCiAgICAgLy8gRklYTUU6IFNraXAgQ29udGVudCBTZWN1cml0
eSBQb2xpY3kgY2hlY2sgd2hlbiBjcm9zcyBmYWRlIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCBp
biBhIHVzZXIgYWdlbnQgc2hhZG93IHRyZWUuCiAgICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NjYzPi4KLSAgICBSZXNvdXJjZUxvYWRlck9wdGlv
bnMgb3B0aW9ucyA9IENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZhdWx0Q2FjaGVkUmVzb3VyY2VP
cHRpb25zKCk7CisgICAgYXV0byBvcHRpb25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1
bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKTsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyJiBj
YWNoZWRSZXNvdXJjZUxvYWRlciA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmNhY2hlZFJlc291cmNl
TG9hZGVyKCk7Ci0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEZyb21JbWFnZSA9IGNhY2hlZEltYWdl
Rm9yQ1NTVmFsdWUobV9mcm9tVmFsdWUsIGNhY2hlZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKTsK
LSAgICBDYWNoZWRJbWFnZSogY2FjaGVkVG9JbWFnZSA9IGNhY2hlZEltYWdlRm9yQ1NTVmFsdWUo
bV90b1ZhbHVlLCBjYWNoZWRSZXNvdXJjZUxvYWRlciwgb3B0aW9ucyk7CisgICAgYXV0byYgY2Fj
aGVkUmVzb3VyY2VMb2FkZXIgPSByZW5kZXJlci5kb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7CisgICAgYXV0byogY2FjaGVkRnJvbUltYWdlID0gY2FjaGVkSW1hZ2VGb3JDU1NWYWx1
ZShtX2Zyb21WYWx1ZSwgY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpOworICAgIGF1dG8q
IGNhY2hlZFRvSW1hZ2UgPSBjYWNoZWRJbWFnZUZvckNTU1ZhbHVlKG1fdG9WYWx1ZSwgY2FjaGVk
UmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpOwogCiAgICAgaWYgKCFjYWNoZWRGcm9tSW1hZ2UgfHwg
IWNhY2hlZFRvSW1hZ2UpCiAgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKIAotICAgIEZsb2F0
U2l6ZSBmcm9tSW1hZ2VTaXplID0gY2FjaGVkRnJvbUltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJl
bmRlcmVyKS0+c2l6ZSgpOwotICAgIEZsb2F0U2l6ZSB0b0ltYWdlU2l6ZSA9IGNhY2hlZFRvSW1h
Z2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpLT5zaXplKCk7CisgICAgRmxvYXRTaXplIGZy
b21JbWFnZVNpemUgPSBjYWNoZWRGcm9tSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoJnJlbmRlcmVy
KS0+c2l6ZSgpOworICAgIEZsb2F0U2l6ZSB0b0ltYWdlU2l6ZSA9IGNhY2hlZFRvSW1hZ2UtPmlt
YWdlRm9yUmVuZGVyZXIoJnJlbmRlcmVyKS0+c2l6ZSgpOwogCiAgICAgLy8gUm91bmRpbmcgaXNz
dWVzIGNhbiBjYXVzZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIGltYWdlcyBvZiBlcXVhbCBzaXplIHRv
IHJldHVybgogICAgIC8vIGEgZGlmZmVyZW50IGZpeGVkIHNpemU7IGF2b2lkIHBlcmZvcm1pbmcg
dGhlIGludGVycG9sYXRpb24gaWYgdGhlIGltYWdlcyBhcmUgdGhlIHNhbWUgc2l6ZS4KICAgICBp
ZiAoZnJvbUltYWdlU2l6ZSA9PSB0b0ltYWdlU2l6ZSkKICAgICAgICAgcmV0dXJuIGZyb21JbWFn
ZVNpemU7CiAKLSAgICByZXR1cm4gRmxvYXRTaXplKGZyb21JbWFnZVNpemUud2lkdGgoKSAqIGlu
dmVyc2VQZXJjZW50YWdlICsgdG9JbWFnZVNpemUud2lkdGgoKSAqIHBlcmNlbnRhZ2UsCi0gICAg
ICAgIGZyb21JbWFnZVNpemUuaGVpZ2h0KCkgKiBpbnZlcnNlUGVyY2VudGFnZSArIHRvSW1hZ2VT
aXplLmhlaWdodCgpICogcGVyY2VudGFnZSk7CisgICAgcmV0dXJuIGZyb21JbWFnZVNpemUgKiBp
bnZlcnNlUGVyY2VudGFnZSArIHRvSW1hZ2VTaXplICogcGVyY2VudGFnZTsKIH0KIAogYm9vbCBD
U1NDcm9zc2ZhZGVWYWx1ZTo6aXNQZW5kaW5nKCkgY29uc3QKQEAgLTExNiw3MyArMTQwLDcwIEBA
IGJvb2wgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmlzUGVuZGluZygpIGNvbnN0CiAgICAgICAgIHx8IENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU6OnN1YmltYWdlSXNQZW5kaW5nKG1fdG9WYWx1ZSk7CiB9CiAK
LWJvb2wgQ1NTQ3Jvc3NmYWRlVmFsdWU6Omtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlcikgY29uc3QKK2Jvb2wgQ1NTQ3Jvc3NmYWRlVmFsdWU6Omtub3duVG9CZU9w
YXF1ZShjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikgY29uc3QKIHsKLSAgICByZXR1cm4g
c3ViaW1hZ2VLbm93blRvQmVPcGFxdWUobV9mcm9tVmFsdWUsIHJlbmRlcmVyKSAmJiBzdWJpbWFn
ZUtub3duVG9CZU9wYXF1ZShtX3RvVmFsdWUsIHJlbmRlcmVyKTsKKyAgICByZXR1cm4gc3ViaW1h
Z2VLbm93blRvQmVPcGFxdWUobV9mcm9tVmFsdWUsIHJlbmRlcmVyKQorICAgICAgICAmJiBzdWJp
bWFnZUtub3duVG9CZU9wYXF1ZShtX3RvVmFsdWUsIHJlbmRlcmVyKTsKIH0KIAogdm9pZCBDU1ND
cm9zc2ZhZGVWYWx1ZTo6bG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVk
UmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gb2xkQ2FjaGVkRnJvbUltYWdl
ID0gbV9jYWNoZWRGcm9tSW1hZ2U7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1h
Z2U+IG9sZENhY2hlZFRvSW1hZ2UgPSBtX2NhY2hlZFRvSW1hZ2U7CisgICAgYXV0byBvbGRDYWNo
ZWRGcm9tSW1hZ2UgPSBtX2NhY2hlZEZyb21JbWFnZTsKKyAgICBhdXRvIG9sZENhY2hlZFRvSW1h
Z2UgPSBtX2NhY2hlZFRvSW1hZ2U7CiAKICAgICBtX2NhY2hlZEZyb21JbWFnZSA9IENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OmNhY2hlZEltYWdlRm9yQ1NTVmFsdWUobV9mcm9tVmFsdWUsIGNhY2hl
ZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKTsKICAgICBtX2NhY2hlZFRvSW1hZ2UgPSBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlOjpjYWNoZWRJbWFnZUZvckNTU1ZhbHVlKG1fdG9WYWx1ZSwgY2FjaGVk
UmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpOwogCiAgICAgaWYgKG1fY2FjaGVkRnJvbUltYWdlICE9
IG9sZENhY2hlZEZyb21JbWFnZSkgewogICAgICAgICBpZiAob2xkQ2FjaGVkRnJvbUltYWdlKQot
ICAgICAgICAgICAgb2xkQ2FjaGVkRnJvbUltYWdlLT5yZW1vdmVDbGllbnQobV9jcm9zc2ZhZGVT
dWJpbWFnZU9ic2VydmVyKTsKKyAgICAgICAgICAgIG9sZENhY2hlZEZyb21JbWFnZS0+cmVtb3Zl
Q2xpZW50KG1fc3ViaW1hZ2VPYnNlcnZlcik7CiAgICAgICAgIGlmIChtX2NhY2hlZEZyb21JbWFn
ZSkKLSAgICAgICAgICAgIG1fY2FjaGVkRnJvbUltYWdlLT5hZGRDbGllbnQobV9jcm9zc2ZhZGVT
dWJpbWFnZU9ic2VydmVyKTsKKyAgICAgICAgICAgIG1fY2FjaGVkRnJvbUltYWdlLT5hZGRDbGll
bnQobV9zdWJpbWFnZU9ic2VydmVyKTsKICAgICB9CiAKICAgICBpZiAobV9jYWNoZWRUb0ltYWdl
ICE9IG9sZENhY2hlZFRvSW1hZ2UpIHsKICAgICAgICAgaWYgKG9sZENhY2hlZFRvSW1hZ2UpCi0g
ICAgICAgICAgICBvbGRDYWNoZWRUb0ltYWdlLT5yZW1vdmVDbGllbnQobV9jcm9zc2ZhZGVTdWJp
bWFnZU9ic2VydmVyKTsKKyAgICAgICAgICAgIG9sZENhY2hlZFRvSW1hZ2UtPnJlbW92ZUNsaWVu
dChtX3N1YmltYWdlT2JzZXJ2ZXIpOwogICAgICAgICBpZiAobV9jYWNoZWRUb0ltYWdlKQotICAg
ICAgICAgICAgbV9jYWNoZWRUb0ltYWdlLT5hZGRDbGllbnQobV9jcm9zc2ZhZGVTdWJpbWFnZU9i
c2VydmVyKTsKKyAgICAgICAgICAgIG1fY2FjaGVkVG9JbWFnZS0+YWRkQ2xpZW50KG1fc3ViaW1h
Z2VPYnNlcnZlcik7CiAgICAgfQogCi0gICAgbV9jcm9zc2ZhZGVTdWJpbWFnZU9ic2VydmVyLnNl
dFJlYWR5KHRydWUpOworICAgIC8vIEZJWE1FOiBVbmNsZWFyIHdoeSB0aGlzIGJvb2xlYW4gYWRk
cyBhbnkgdmFsdWU7IGZvciBub3cga2VlcGluZyBpdCBhcm91bmQgdG8gYXZvaWQgY2hhbmdpbmcg
c2VtYW50aWNzLgorICAgIG1fc3ViaW1hZ2VzQXJlUmVhZHkgPSB0cnVlOwogfQogCi1SZWZQdHI8
SW1hZ2U+IENTU0Nyb3NzZmFkZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwg
Y29uc3QgRmxvYXRTaXplJiBzaXplKQorSW1hZ2UqIENTU0Nyb3NzZmFkZVZhbHVlOjppbWFnZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlm
IChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhN
RTogU2tpcCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjaGVjayB3aGVuIGNyb3NzIGZhZGUgaXMg
YXBwbGllZCB0byBhbiBlbGVtZW50IGluIGEgdXNlciBhZ2VudCBzaGFkb3cgdHJlZS4KICAgICAv
LyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2NjM+Lgot
ICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyBvcHRpb25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKTsKKyAgICBhdXRvIG9wdGlvbnMgPSBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpOwogCi0gICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyID0gcmVuZGVyZXItPmRv
Y3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVk
RnJvbUltYWdlID0gY2FjaGVkSW1hZ2VGb3JDU1NWYWx1ZShtX2Zyb21WYWx1ZSwgY2FjaGVkUmVz
b3VyY2VMb2FkZXIsIG9wdGlvbnMpOwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRUb0ltYWdlID0g
Y2FjaGVkSW1hZ2VGb3JDU1NWYWx1ZShtX3RvVmFsdWUsIGNhY2hlZFJlc291cmNlTG9hZGVyLCBv
cHRpb25zKTsKKyAgICBhdXRvJiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHJlbmRlcmVyLmRvY3Vt
ZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBhdXRvKiBjYWNoZWRGcm9tSW1hZ2Ug
PSBjYWNoZWRJbWFnZUZvckNTU1ZhbHVlKG1fZnJvbVZhbHVlLCBjYWNoZWRSZXNvdXJjZUxvYWRl
ciwgb3B0aW9ucyk7CisgICAgYXV0byogY2FjaGVkVG9JbWFnZSA9IGNhY2hlZEltYWdlRm9yQ1NT
VmFsdWUobV90b1ZhbHVlLCBjYWNoZWRSZXNvdXJjZUxvYWRlciwgb3B0aW9ucyk7CiAKICAgICBp
ZiAoIWNhY2hlZEZyb21JbWFnZSB8fCAhY2FjaGVkVG9JbWFnZSkKICAgICAgICAgcmV0dXJuIElt
YWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIEltYWdlKiBmcm9tSW1hZ2UgPSBjYWNoZWRGcm9tSW1h
Z2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotICAgIEltYWdlKiB0b0ltYWdlID0gY2Fj
aGVkVG9JbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7CisgICAgYXV0byogZnJvbUlt
YWdlID0gY2FjaGVkRnJvbUltYWdlLT5pbWFnZUZvclJlbmRlcmVyKCZyZW5kZXJlcik7CisgICAg
YXV0byogdG9JbWFnZSA9IGNhY2hlZFRvSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoJnJlbmRlcmVy
KTsKIAogICAgIGlmICghZnJvbUltYWdlIHx8ICF0b0ltYWdlKQogICAgICAgICByZXR1cm4gSW1h
Z2U6Om51bGxJbWFnZSgpOwogCiAgICAgbV9nZW5lcmF0ZWRJbWFnZSA9IENyb3NzZmFkZUdlbmVy
YXRlZEltYWdlOjpjcmVhdGUoKmZyb21JbWFnZSwgKnRvSW1hZ2UsIG1fcGVyY2VudGFnZVZhbHVl
LT5mbG9hdFZhbHVlKCksIGZpeGVkU2l6ZShyZW5kZXJlciksIHNpemUpOwotCi0gICAgcmV0dXJu
IG1fZ2VuZXJhdGVkSW1hZ2U7CisgICAgcmV0dXJuIG1fZ2VuZXJhdGVkSW1hZ2UuZ2V0KCk7CiB9
CiAKLXZvaWQgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3NzZmFkZUNoYW5nZWQoY29uc3QgSW50UmVj
dCYpCitpbmxpbmUgdm9pZCBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCgpCiB7
Ci0gICAgZm9yIChhdXRvIGl0ID0gY2xpZW50cygpLmJlZ2luKCksIGVuZCA9IGNsaWVudHMoKS5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+a2V5LT5pbWFnZUNoYW5nZWQoc3Rh
dGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7Ci19Ci0KLXZvaWQgQ1NTQ3Jvc3NmYWRl
VmFsdWU6OkNyb3NzZmFkZVN1YmltYWdlT2JzZXJ2ZXJQcm94eTo6aW1hZ2VDaGFuZ2VkKENhY2hl
ZEltYWdlKiwgY29uc3QgSW50UmVjdCogcmVjdCkKLXsKLSAgICBpZiAobV9yZWFkeSkKLSAgICAg
ICAgbV9vd25lclZhbHVlLT5jcm9zc2ZhZGVDaGFuZ2VkKCpyZWN0KTsKKyAgICBpZiAoIW1fc3Vi
aW1hZ2VzQXJlUmVhZHkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6
IGNsaWVudHMoKSkKKyAgICAgICAgY2xpZW50LmtleS0+aW1hZ2VDaGFuZ2VkKHRoaXMpOwogfQog
CiBib29sIENTU0Nyb3NzZmFkZVZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyhjb25zdCBzdGQ6
OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJlc291cmNlJik+JiBoYW5kbGVyKSBjb25zdApA
QCAtMTk3LDggKzIxOCwxMCBAQCBib29sIENTU0Nyb3NzZmFkZVZhbHVlOjp0cmF2ZXJzZVN1YnJl
c291cmNlcyhjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhYwogUmVmUHRyPENTU0Ny
b3NzZmFkZVZhbHVlPiBDU1NDcm9zc2ZhZGVWYWx1ZTo6YmxlbmQoY29uc3QgQ1NTQ3Jvc3NmYWRl
VmFsdWUmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKIHsKICAgICBBU1NFUlQoZXF1YWxJ
bnB1dEltYWdlcyhmcm9tKSk7CisKICAgICBpZiAoIW1fY2FjaGVkVG9JbWFnZSB8fCAhbV9jYWNo
ZWRGcm9tSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgYXV0byBmcm9tSW1h
Z2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZSgqbV9jYWNoZWRGcm9tSW1hZ2UpOwogICAg
IGF1dG8gdG9JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCptX2NhY2hlZFRvSW1h
Z2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oCmluZGV4IDQ2NzdhNjVh
N2NhNTAxM2IwM2I3YjMwYTgxNjA5ZWMwNzU4ZWZlNTUuLmEzNTAwYjQ0ZTY5OTJlMGE3NjEyY2Q2
ZDYzMDQ2NjgwMjk1ZDlhMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9z
c2ZhZGVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5o
CkBAIC0yOCwzNiArMjgsMjYgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiSW1h
Z2UuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDcm9zc2ZhZGVTdWJpbWFnZU9ic2VydmVyUHJv
eHk7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBDU1NQcmlt
aXRpdmVWYWx1ZTsKIAogY2xhc3MgQ1NTQ3Jvc3NmYWRlVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSB7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZVN1YmltYWdl
T2JzZXJ2ZXJQcm94eTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0Nyb3NzZmFkZVZhbHVl
PiBjcmVhdGUoUmVmPENTU1ZhbHVlPiYmIGZyb21WYWx1ZSwgUmVmPENTU1ZhbHVlPiYmIHRvVmFs
dWUsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiBwZXJjZW50YWdlVmFsdWUsIGJvb2wgcHJlZml4
ZWQgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0Nyb3Nz
ZmFkZVZhbHVlKFdURk1vdmUoZnJvbVZhbHVlKSwgV1RGTW92ZSh0b1ZhbHVlKSwgV1RGTW92ZShw
ZXJjZW50YWdlVmFsdWUpLCBwcmVmaXhlZCkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPENTU0Ny
b3NzZmFkZVZhbHVlPiBjcmVhdGUoUmVmPENTU1ZhbHVlPiYmIGZyb21WYWx1ZSwgUmVmPENTU1Zh
bHVlPiYmIHRvVmFsdWUsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiBwZXJjZW50YWdlVmFsdWUs
IGJvb2wgcHJlZml4ZWQgPSBmYWxzZSk7CiAKICAgICB+Q1NTQ3Jvc3NmYWRlVmFsdWUoKTsKIAog
ICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlKFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmKTsKKyAgICBJbWFnZSogaW1hZ2Uo
UmVuZGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwogICAgIGJvb2wgaXNGaXhlZFNpemUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25zdCBS
ZW5kZXJFbGVtZW50Kik7CisgICAgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVt
ZW50Jik7CiAKICAgICBib29sIGlzUHJlZml4ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUHJlZml4
ZWQ7IH0KICAgICBib29sIGlzUGVuZGluZygpIGNvbnN0OwotICAgIGJvb2wga25vd25Ub0JlT3Bh
cXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGtub3duVG9CZU9wYXF1
ZShjb25zdCBSZW5kZXJFbGVtZW50JikgY29uc3Q7CiAKICAgICB2b2lkIGxvYWRTdWJpbWFnZXMo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKIApA
QCAtNjYsMzcgKzU2LDIwIEBAIHB1YmxpYzoKICAgICBSZWZQdHI8Q1NTQ3Jvc3NmYWRlVmFsdWU+
IGJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZhbHVlJiwgZG91YmxlKSBjb25zdDsKIAogICAgIGJv
b2wgZXF1YWxzKGNvbnN0IENTU0Nyb3NzZmFkZVZhbHVlJikgY29uc3Q7Ci0KICAgICBib29sIGVx
dWFsSW5wdXRJbWFnZXMoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUmKSBjb25zdDsKIAogcHJpdmF0
ZToKLSAgICBDU1NDcm9zc2ZhZGVWYWx1ZShSZWY8Q1NTVmFsdWU+JiYgZnJvbVZhbHVlLCBSZWY8
Q1NTVmFsdWU+JiYgdG9WYWx1ZSwgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHBlcmNlbnRhZ2VW
YWx1ZSwgYm9vbCBwcmVmaXhlZCkKLSAgICAgICAgOiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKENy
b3NzZmFkZUNsYXNzKQotICAgICAgICAsIG1fZnJvbVZhbHVlKFdURk1vdmUoZnJvbVZhbHVlKSkK
LSAgICAgICAgLCBtX3RvVmFsdWUoV1RGTW92ZSh0b1ZhbHVlKSkKLSAgICAgICAgLCBtX3BlcmNl
bnRhZ2VWYWx1ZShXVEZNb3ZlKHBlcmNlbnRhZ2VWYWx1ZSkpCi0gICAgICAgICwgbV9jcm9zc2Zh
ZGVTdWJpbWFnZU9ic2VydmVyKHRoaXMpCi0gICAgICAgICwgbV9pc1ByZWZpeGVkKHByZWZpeGVk
KQotICAgIHsKLSAgICB9Ci0KLSAgICBjbGFzcyBDcm9zc2ZhZGVTdWJpbWFnZU9ic2VydmVyUHJv
eHkgZmluYWwgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgeworICAgIENTU0Nyb3NzZmFkZVZh
bHVlKFJlZjxDU1NWYWx1ZT4mJiBmcm9tVmFsdWUsIFJlZjxDU1NWYWx1ZT4mJiB0b1ZhbHVlLCBS
ZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgcGVyY2VudGFnZVZhbHVlLCBib29sIHByZWZpeGVkKTsK
KworICAgIGNsYXNzIFN1YmltYWdlT2JzZXJ2ZXIgZmluYWwgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VD
bGllbnQgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ3Jvc3NmYWRlU3ViaW1hZ2VPYnNlcnZlclBy
b3h5KENTU0Nyb3NzZmFkZVZhbHVlKiBvd25lclZhbHVlKQotICAgICAgICAgICAgOiBtX293bmVy
VmFsdWUob3duZXJWYWx1ZSkKLSAgICAgICAgICAgICwgbV9yZWFkeShmYWxzZSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB+Q3Jvc3NmYWRlU3ViaW1hZ2VPYnNlcnZl
clByb3h5KCkgeyB9Ci0gICAgICAgIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29u
c3QgSW50UmVjdCogPSBudWxscHRyKSBmaW5hbDsKLSAgICAgICAgdm9pZCBzZXRSZWFkeShib29s
IHJlYWR5KSB7IG1fcmVhZHkgPSByZWFkeTsgfQorICAgICAgICBTdWJpbWFnZU9ic2VydmVyKENT
U0Nyb3NzZmFkZVZhbHVlJik7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFs
dWUqIG1fb3duZXJWYWx1ZTsKLSAgICAgICAgYm9vbCBtX3JlYWR5OworICAgICAgICB2b2lkIGlt
YWdlQ2hhbmdlZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJlY3QqKSBmaW5hbDsKKyAgICAgICAg
Q1NTQ3Jvc3NmYWRlVmFsdWUmIG1fb3duZXI7CiAgICAgfTsKIAotICAgIHZvaWQgY3Jvc3NmYWRl
Q2hhbmdlZChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBjcm9zc2ZhZGVDaGFuZ2VkKCk7CiAK
ICAgICBSZWY8Q1NTVmFsdWU+IG1fZnJvbVZhbHVlOwogICAgIFJlZjxDU1NWYWx1ZT4gbV90b1Zh
bHVlOwpAQCAtMTA3LDggKzgwLDkgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJbWFnZT4gbV9n
ZW5lcmF0ZWRJbWFnZTsKIAotICAgIENyb3NzZmFkZVN1YmltYWdlT2JzZXJ2ZXJQcm94eSBtX2Ny
b3NzZmFkZVN1YmltYWdlT2JzZXJ2ZXI7CisgICAgU3ViaW1hZ2VPYnNlcnZlciBtX3N1YmltYWdl
T2JzZXJ2ZXI7CiAgICAgYm9vbCBtX2lzUHJlZml4ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9z
dWJpbWFnZXNBcmVSZWFkeSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5kZXggNWViODNmZjZhN2Y2
Zjg3OGUxMTc4YWY3NWYzMTJlZjUwMzNiYzJkOS4uOTViMjA0N2MwMjEzNzdiYTZjNDkyYmNmNWQ5
YzcyNmE1Njg4YmZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50
VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcApA
QCAtMzAsNDcgKzMwLDM5IEBACiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIK
LSNpbmNsdWRlICJGbG9hdFNpemVIYXNoLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNs
dWRlICJHcmFkaWVudEltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJOb2Rl
UmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZlB0cjxJbWFnZT4gQ1NT
R3JhZGllbnRWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgUmVmPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudChD
U1NHcmFkaWVudFZhbHVlJiB2YWx1ZSwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZsb2F0U2l6
ZSBzaXplKQoreworICAgIGlmIChpczxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPih2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPih2YWx1ZSkuY3Jl
YXRlR3JhZGllbnQocmVuZGVyZXIsIHNpemUpOworICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRp
YWxHcmFkaWVudFZhbHVlPih2YWx1ZSkuY3JlYXRlR3JhZGllbnQocmVuZGVyZXIsIHNpemUpOwor
fQorCitSZWZQdHI8SW1hZ2U+IENTU0dyYWRpZW50VmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIGJvb2wgY2FjaGVhYmxlID0gaXND
YWNoZWFibGUoKTsKICAgICBpZiAoY2FjaGVhYmxlKSB7Ci0gICAgICAgIGlmICghY2xpZW50cygp
LmNvbnRhaW5zKHJlbmRlcmVyKSkKKyAgICAgICAgaWYgKCFjbGllbnRzKCkuY29udGFpbnMoJnJl
bmRlcmVyKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIEltYWdlKiBy
ZXN1bHQgPSBjYWNoZWRJbWFnZUZvclNpemUoc2l6ZSk7Ci0gICAgICAgIGlmIChyZXN1bHQpCisg
ICAgICAgIGlmIChhdXRvKiByZXN1bHQgPSBjYWNoZWRJbWFnZUZvclNpemUoc2l6ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLQotICAgIFJlZlB0cjxHcmFkaWVudD4gZ3Jh
ZGllbnQ7Ci0KLSAgICBpZiAoaXM8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpKQotICAg
ICAgICBncmFkaWVudCA9IGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5j
cmVhdGVHcmFkaWVudCgqcmVuZGVyZXIsIHNpemUpOwotICAgIGVsc2UKLSAgICAgICAgZ3JhZGll
bnQgPSBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykuY3JlYXRlR3JhZGll
bnQoKnJlbmRlcmVyLCBzaXplKTsKLQotICAgIFJlZlB0cjxHcmFkaWVudEltYWdlPiBuZXdJbWFn
ZSA9IEdyYWRpZW50SW1hZ2U6OmNyZWF0ZShncmFkaWVudCwgc2l6ZSk7CisgICAgYXV0byBuZXdJ
bWFnZSA9IEdyYWRpZW50SW1hZ2U6OmNyZWF0ZShjcmVhdGVHcmFkaWVudCgqdGhpcywgcmVuZGVy
ZXIsIHNpemUpLCBzaXplKTsKICAgICBpZiAoY2FjaGVhYmxlKQotICAgICAgICBzYXZlQ2FjaGVk
SW1hZ2VGb3JTaXplKHNpemUsIG5ld0ltYWdlKTsKLQotICAgIHJldHVybiBuZXdJbWFnZTsKKyAg
ICAgICAgc2F2ZUNhY2hlZEltYWdlRm9yU2l6ZShzaXplLCBuZXdJbWFnZS5nZXQoKSk7CisgICAg
cmV0dXJuIFdURk1vdmUobmV3SW1hZ2UpOwogfQogCiAvLyBTaG91bGQgb25seSBldmVyIGJlIGNh
bGxlZCBmb3IgZGVwcmVjYXRlZCBncmFkaWVudHMuCkBAIC05NCw0NSArODYsMzQgQEAgdm9pZCBD
U1NHcmFkaWVudFZhbHVlOjpzb3J0U3RvcHNJZk5lZWRlZCgpCiAKIHN0cnVjdCBHcmFkaWVudFN0
b3AgewogICAgIENvbG9yIGNvbG9yOwotICAgIGZsb2F0IG9mZnNldDsKLSAgICBib29sIHNwZWNp
ZmllZDsKLSAgICBib29sIGlzTWlkcG9pbnQ7Ci0KLSAgICBHcmFkaWVudFN0b3AoKQotICAgICAg
ICA6IG9mZnNldCgwKQotICAgICAgICAsIHNwZWNpZmllZChmYWxzZSkKLSAgICAgICAgLCBpc01p
ZHBvaW50KGZhbHNlKQotICAgIHsgfQorICAgIGZsb2F0IG9mZnNldCB7IDAgfTsKKyAgICBib29s
IHNwZWNpZmllZCB7IGZhbHNlIH07CisgICAgYm9vbCBpc01pZHBvaW50IHsgZmFsc2UgfTsKIH07
CiAKLVJlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdp
dGhTdHlsZXNSZXNvbHZlZChjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorc3Rh
dGljIGlubGluZSBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gY2xvbmUoQ1NTR3JhZGllbnRWYWx1ZSYg
dmFsdWUpCiB7Ci0gICAgYm9vbCBkZXJpdmVkID0gZmFsc2U7CisgICAgaWYgKGlzPENTU0xpbmVh
ckdyYWRpZW50VmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVh
ckdyYWRpZW50VmFsdWU+KHZhbHVlKS5jbG9uZSgpOworICAgIEFTU0VSVChpczxDU1NSYWRpYWxH
cmFkaWVudFZhbHVlPih2YWx1ZSkpOworICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxHcmFk
aWVudFZhbHVlPih2YWx1ZSkuY2xvbmUoKTsKK30KKworUmVmPENTU0dyYWRpZW50VmFsdWU+IENT
U0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKGNvbnN0IFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIpCit7CisgICAgYm9vbCBjb2xvcklzRGVyaXZlZEZyb21FbGVt
ZW50ID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgewotICAgICAgICBp
ZiAoIXN0b3AuaXNNaWRwb2ludCAmJiBzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVW
YWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KCpzdG9wLm1fY29sb3IpKSB7CisgICAgICAgIGlmICgh
c3RvcC5pc01pZHBvaW50ICYmIHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJ
c0Rlcml2ZWRGcm9tRWxlbWVudCgqc3RvcC5tX2NvbG9yKSkgewogICAgICAgICAgICAgc3RvcC5t
X2NvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgZGVyaXZlZCA9
IHRydWU7CisgICAgICAgICAgICBjb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAgUmVmUHRyPENTU0dyYWRp
ZW50VmFsdWU+IHJlc3VsdDsKLSAgICBpZiAoIWRlcml2ZWQpCi0gICAgICAgIHJlc3VsdCA9IHRo
aXM7Ci0gICAgZWxzZSBpZiAoaXM8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpKQotICAg
ICAgICByZXN1bHQgPSBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuY2xv
bmUoKTsKLSAgICBlbHNlIGlmIChpczxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykpCi0g
ICAgICAgIHJlc3VsdCA9IGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5j
bG9uZSgpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCisgICAgYXV0byByZXN1bHQgPSBjb2xvcklzRGVy
aXZlZEZyb21FbGVtZW50ID8gY2xvbmUoKnRoaXMpIDogbWFrZVJlZigqdGhpcyk7CiAgICAgZm9y
IChhdXRvJiBzdG9wIDogcmVzdWx0LT5tX3N0b3BzKSB7CiAgICAgICAgIGlmICghc3RvcC5pc01p
ZHBvaW50KQotICAgICAgICAgICAgc3RvcC5tX3Jlc29sdmVkQ29sb3IgPSBzdHlsZVJlc29sdmVy
LT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqc3RvcC5tX2NvbG9yKTsKKyAgICAgICAgICAgIHN0
b3AubV9yZXNvbHZlZENvbG9yID0gc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1
ZSgqc3RvcC5tX2NvbG9yKTsKICAgICB9Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01
NzksMTAgKzU2MCwxMCBAQCBib29sIENTU0dyYWRpZW50VmFsdWU6OmlzQ2FjaGVhYmxlKCkgY29u
c3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NHcmFkaWVudFZhbHVlOjprbm93blRv
QmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCopIGNvbnN0Citib29sIENTU0dyYWRpZW50VmFs
dWU6Omtub3duVG9CZU9wYXF1ZSgpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3N0b3BzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9zdG9wc1tpXS5tX3Jlc29s
dmVkQ29sb3IuaXNPcGFxdWUoKSkKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7Cisg
ICAgICAgIGlmICghc3RvcC5tX3Jlc29sdmVkQ29sb3IuaXNPcGFxdWUoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuaAppbmRleCAxN2UxOTZkNjAxMTE1MzZhMzRkOWUzNzMyMzc5YjU1NmI4
ZDEyOTEyLi5hOGU2NmM0ZDc2MDAzNjJjZmZhMWE4OGE4YmExNjgzZGEwODBjYjY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTI3LDE0ICsyNywxMyBAQAogCiAjaW5j
bHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgR3JhZGll
bnQ7Ci1jbGFzcyBSZW5kZXJWaWV3OworY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAogZW51bSBDU1NH
cmFkaWVudFR5cGUgewogICAgIENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCwKQEAgLTYxLDcg
KzYwLDcgQEAgc3RydWN0IENTU0dyYWRpZW50Q29sb3JTdG9wIHsKIAogY2xhc3MgQ1NTR3JhZGll
bnRWYWx1ZSA6IHB1YmxpYyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlIHsKIHB1YmxpYzoKLSAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmKTsKKyAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFNpemUmKTsK
IAogICAgIHZvaWQgc2V0Rmlyc3RYKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsg
bV9maXJzdFggPSBXVEZNb3ZlKHZhbCk7IH0KICAgICB2b2lkIHNldEZpcnN0WShSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fZmlyc3RZID0gV1RGTW92ZSh2YWwpOyB9CkBAIC03
OSwxMyArNzgsMTMgQEAgcHVibGljOgogICAgIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50VHlwZTsgfQogCiAgICAgYm9vbCBpc0ZpeGVkU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25z
dCBSZW5kZXJFbGVtZW50KikgY29uc3QgeyByZXR1cm4gRmxvYXRTaXplKCk7IH0KKyAgICBGbG9h
dFNpemUgZml4ZWRTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQmKSBjb25zdCB7IHJldHVybiBGbG9h
dFNpemUoKTsgfQogCiAgICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotICAgIGJvb2wga25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdDsK
KyAgICBib29sIGtub3duVG9CZU9wYXF1ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBsb2FkU3ViaW1h
Z2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikg
eyB9Ci0gICAgUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29s
dmVkKGNvbnN0IFN0eWxlUmVzb2x2ZXIqKTsKKyAgICBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gZ3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoY29uc3QgU3R5bGVSZXNvbHZlciYpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgQ1NTR3JhZGllbnRWYWx1ZShDbGFzc1R5cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVu
dFJlcGVhdCByZXBlYXQsIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUpCkBAIC0xMzIsNyAr
MTMxLDYgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlIGZpbmFs
IDogcHVibGljIENTU0dyYWRpZW50VmFsdWUgewogcHVibGljOgotCiAgICAgc3RhdGljIFJlZjxD
U1NMaW5lYXJHcmFkaWVudFZhbHVlPiBjcmVhdGUoQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBD
U1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBlID0gQ1NTTGluZWFyR3JhZGllbnQpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlKHJlcGVh
dCwgZ3JhZGllbnRUeXBlKSk7CkBAIC0yMTIsNyArMjEwLDYgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgfQogCi0KICAgICAvLyBSZXNvbHZlIHBvaW50cy9yYWRpaSB0byBmcm9udCBlbmQgdmFsdWVz
LgogICAgIGZsb2F0IHJlc29sdmVSYWRpdXMoQ1NTUHJpbWl0aXZlVmFsdWUmLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiwgZmxvYXQqIHdpZHRoT3JIZWlnaHQgPSAwKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCmluZGV4IGE3NTI4
M2EyYjI3YzNkZWQ4ZDk0MzEyZGUwNGE0MTU4ZWVjYzJmOTMuLmM4YjYxNTUwYjZiYTdlNjJjM2I3
MzNkNDVhYTA4NTQxYTA4NTUwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5jcHAKQEAgLTQxLDYgKzQxLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RhdGljIGNvbnN0IGF1dG8gdGltZVRvS2VlcENhY2hlZEdlbmVyYXRlZEltYWdlcyA9IHN0
ZDo6Y2hyb25vOjpzZWNvbmRzIHsgMyB9OwogCitjbGFzcyBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpDYWNoZWRHZW5lcmF0ZWRJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgQ2FjaGVkR2VuZXJhdGVkSW1hZ2UoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYs
IEZsb2F0U2l6ZSwgR2VuZXJhdGVkSW1hZ2UmKTsKKyAgICBHZW5lcmF0ZWRJbWFnZSYgaW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEdlbmVyYXRlZEltYWdlJj4obV9pbWFnZS5nZXQo
KSk7IH0KKyAgICB2b2lkIHB1bnRFdmljdGlvblRpbWVyKCkgeyBtX2V2aWN0aW9uVGltZXIucmVz
dGFydCgpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBldmljdGlvblRpbWVyRmlyZWQoKTsKKwor
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIG1fb3duZXI7CisgICAgY29uc3QgRmxvYXRTaXpl
IG1fc2l6ZTsKKyAgICBjb25zdCBSZWY8R2VuZXJhdGVkSW1hZ2U+IG1faW1hZ2U7CisgICAgRGVm
ZXJyYWJsZU9uZVNob3RUaW1lciBtX2V2aWN0aW9uVGltZXI7Cit9OworCiBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlKENsYXNzVHlwZSBjbGFzc1R5cGUpCiAg
ICAgOiBDU1NWYWx1ZShjbGFzc1R5cGUpCiB7CkBAIC01MCwxOSArNjYsMTcgQEAgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6fkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUoKQogewogfQogCi12b2lkIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSZW5kZXJFbGVtZW50KiByZW5kZXJlcikK
K3ZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyKQogewotICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgaWYgKG1fY2xpZW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJlZigpOwotICAgIG1fY2xpZW50cy5hZGQocmVuZGVyZXIpOworICAg
IG1fY2xpZW50cy5hZGQoJnJlbmRlcmVyKTsKIH0KIAotdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZh
bHVlOjpyZW1vdmVDbGllbnQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpCit2b2lkIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsK
LSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMocmVu
ZGVyZXIpKTsKLSAgICBpZiAobV9jbGllbnRzLnJlbW92ZShyZW5kZXJlcikgJiYgbV9jbGllbnRz
LmlzRW1wdHkoKSkKKyAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKCZyZW5kZXJlcikpOwor
ICAgIGlmIChtX2NsaWVudHMucmVtb3ZlKCZyZW5kZXJlcikgJiYgbV9jbGllbnRzLmlzRW1wdHko
KSkKICAgICAgICAgZGVyZWYoKTsKIH0KIApAQCAtNzEsMTUgKzg1LDE1IEBAIEdlbmVyYXRlZElt
YWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpjYWNoZWRJbWFnZUZvclNpemUoRmxvYXRTaXpl
IHNpemUpCiAgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIENhY2hlZEdlbmVyYXRlZEltYWdlKiBjYWNoZWRHZW5lcmF0ZWRJbWFnZSA9IG1faW1h
Z2VzLmdldChzaXplKTsKKyAgICBhdXRvKiBjYWNoZWRHZW5lcmF0ZWRJbWFnZSA9IG1faW1hZ2Vz
LmdldChzaXplKTsKICAgICBpZiAoIWNhY2hlZEdlbmVyYXRlZEltYWdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIGNhY2hlZEdlbmVyYXRlZEltYWdlLT5wdW50RXZpY3Rpb25UaW1l
cigpOwotICAgIHJldHVybiBjYWNoZWRHZW5lcmF0ZWRJbWFnZS0+aW1hZ2UoKTsKKyAgICByZXR1
cm4gJmNhY2hlZEdlbmVyYXRlZEltYWdlLT5pbWFnZSgpOwogfQogCi12b2lkIENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWU6OnNhdmVDYWNoZWRJbWFnZUZvclNpemUoRmxvYXRTaXplIHNpemUsIFBhc3NS
ZWZQdHI8R2VuZXJhdGVkSW1hZ2U+IGltYWdlKQordm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpzYXZlQ2FjaGVkSW1hZ2VGb3JTaXplKEZsb2F0U2l6ZSBzaXplLCBHZW5lcmF0ZWRJbWFnZSYg
aW1hZ2UpCiB7CiAgICAgQVNTRVJUKCFtX2ltYWdlcy5jb250YWlucyhzaXplKSk7CiAgICAgbV9p
bWFnZXMuYWRkKHNpemUsIHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkR2VuZXJhdGVkSW1hZ2U+KCp0
aGlzLCBzaXplLCBpbWFnZSkpOwpAQCAtOTEsNyArMTA1LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlOjpldmljdENhY2hlZEdlbmVyYXRlZEltYWdlKEZsb2F0U2l6ZSBzaXplKQogICAg
IG1faW1hZ2VzLnJlbW92ZShzaXplKTsKIH0KIAotQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Q2Fj
aGVkR2VuZXJhdGVkSW1hZ2U6OkNhY2hlZEdlbmVyYXRlZEltYWdlKENTU0ltYWdlR2VuZXJhdG9y
VmFsdWUmIG93bmVyLCBGbG9hdFNpemUgc2l6ZSwgUGFzc1JlZlB0cjxHZW5lcmF0ZWRJbWFnZT4g
aW1hZ2UpCitpbmxpbmUgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Q2FjaGVkR2VuZXJhdGVkSW1h
Z2U6OkNhY2hlZEdlbmVyYXRlZEltYWdlKENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIG93bmVyLCBG
bG9hdFNpemUgc2l6ZSwgR2VuZXJhdGVkSW1hZ2UmIGltYWdlKQogICAgIDogbV9vd25lcihvd25l
cikKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9pbWFnZShpbWFnZSkKQEAgLTEwNiwxNyAr
MTIwLDE3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Q2FjaGVkR2VuZXJhdGVkSW1h
Z2U6OmV2aWN0aW9uVGltZXJGaXJlZCgpCiAgICAgbV9vd25lci5ldmljdENhY2hlZEdlbmVyYXRl
ZEltYWdlKG1fc2l6ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
K1JlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBzd2l0Y2ggKGNsYXNz
VHlwZSgpKSB7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KCp0aGlzKS5pbWFnZSgmcmVuZGVyZXIsIHNp
emUpOwogICAgIGNhc2UgTmFtZWRJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTTmFtZWRJbWFnZVZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTTmFtZWRJbWFnZVZhbHVlPigqdGhpcykuaW1hZ2UoJnJlbmRl
cmVyLCBzaXplKTsKICAgICBjYXNlIENyb3NzZmFkZUNsYXNzOgogICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CiAg
ICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRmls
dGVySW1hZ2VWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRlcmVyLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5pbWFnZSgmcmVuZGVyZXIs
IHNpemUpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6
ZSk7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgpAQCAtMTQ4LDE1ICsxNjIsMTUgQEAg
Ym9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjppc0ZpeGVkU2l6ZSgpIGNvbnN0CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1GbG9hdFNpemUgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Zml4ZWRT
aXplKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQorRmxvYXRTaXplIENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWU6OmZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsK
ICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRl
cmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuZml4
ZWRTaXplKCZyZW5kZXJlcik7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVy
KTsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5maXhlZFNpemUoJnJl
bmRlcmVyKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6CiAgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVy
KTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6CkBAIC0xODgsNyArMjAyLDcgQEAgYm9v
bCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjppc1BlbmRpbmcoKSBjb25zdAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjprbm93blRvQmVPcGFxdWUo
Y29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpIGNvbnN0Citib29sIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6Omtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDcm9zc2ZhZGVD
bGFzczoKQEAgLTE5OCwxMSArMjEyLDExIEBAIGJvb2wgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKSBjb25zCiAgICAg
Y2FzZSBOYW1lZEltYWdlQ2xhc3M6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEZp
bHRlckltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZh
bHVlPigqdGhpcykua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFxdWUoJnJlbmRl
cmVyKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiBkb3du
Y2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykua25vd25Ub0JlT3BhcXVlKHJlbmRl
cmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0
aGlzKS5rbm93blRvQmVPcGFxdWUoKTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykua25v
d25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1JhZGlh
bEdyYWRpZW50VmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFxdWUoKTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0yNDQsNyArMjU4LDYgQEAg
Ym9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpzdWJpbWFnZUlzUGVuZGluZyhjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjY1LDcgKzI3OCw3IEBA
IENhY2hlZEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpjYWNoZWRJbWFnZUZvckNTU1Zh
bHVlKENTU1ZhbHVlJiB2YWx1ZSwgQ2FjCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZS5oCmluZGV4IDVjYzQ2NGVhNDBjZDRiMDExMjZiZmZlMjRmYjc1NDg2MTEzMDE4YjYu
LmRjNTdlYTQ1M2M1MDY5ZGY5MjlkYzU1NzdmNGI5NmU5MmIzMDgxZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaApAQCAtMjYsNyArMjYsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJDU1NWYWx1ZS5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5o
IgogI2luY2x1ZGUgIkZsb2F0U2l6ZUhhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgpAQCAtMzgsMjMgKzM3LDIzIEBAIGNsYXNzIENhY2hl
ZFJlc291cmNlTG9hZGVyOwogY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiBjbGFzcyBJbWFnZTsKIGNs
YXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOworCiBzdHJ1Y3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zOwogCiBjbGFzcyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlIDogcHVibGlj
IENTU1ZhbHVlIHsKIHB1YmxpYzoKICAgICB+Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpOwogCi0g
ICAgdm9pZCBhZGRDbGllbnQoUmVuZGVyRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50
KFJlbmRlckVsZW1lbnQqKTsKKyAgICB2b2lkIGFkZENsaWVudChSZW5kZXJFbGVtZW50Jik7Cisg
ICAgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyRWxlbWVudCYpOwogCi0gICAgUmVmUHRyPEltYWdl
PiBpbWFnZShSZW5kZXJFbGVtZW50KiwgY29uc3QgRmxvYXRTaXplJik7CisgICAgUmVmUHRyPElt
YWdlPiBpbWFnZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmxvYXRTaXplJik7CiAKICAgICBib29s
IGlzRml4ZWRTaXplKCkgY29uc3Q7Ci0gICAgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5k
ZXJFbGVtZW50Kik7CisgICAgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50
Jik7CiAKICAgICBib29sIGlzUGVuZGluZygpIGNvbnN0OwotICAgIGJvb2wga25vd25Ub0JlT3Bh
cXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGtub3duVG9CZU9wYXF1
ZShjb25zdCBSZW5kZXJFbGVtZW50JikgY29uc3Q7CiAKICAgICB2b2lkIGxvYWRTdWJpbWFnZXMo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKIApA
QCAtNjIsNyArNjEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZShD
bGFzc1R5cGUpOwogCiAgICAgR2VuZXJhdGVkSW1hZ2UqIGNhY2hlZEltYWdlRm9yU2l6ZShGbG9h
dFNpemUpOwotICAgIHZvaWQgc2F2ZUNhY2hlZEltYWdlRm9yU2l6ZShGbG9hdFNpemUsIFBhc3NS
ZWZQdHI8R2VuZXJhdGVkSW1hZ2U+KTsKKyAgICB2b2lkIHNhdmVDYWNoZWRJbWFnZUZvclNpemUo
RmxvYXRTaXplLCBHZW5lcmF0ZWRJbWFnZSYpOwogICAgIGNvbnN0IEhhc2hDb3VudGVkU2V0PFJl
bmRlckVsZW1lbnQqPiYgY2xpZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50czsgfQogCiAg
ICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgQ3Jvc3NmYWRlIGFuZCBGaWx0ZXIuCkBAIC03MCwy
MyArNjksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgc3ViaW1hZ2VJc1BlbmRpbmco
Y29uc3QgQ1NTVmFsdWUmKTsKIAogcHJpdmF0ZToKLSAgICBjbGFzcyBDYWNoZWRHZW5lcmF0ZWRJ
bWFnZSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgQ2FjaGVkR2VuZXJhdGVkSW1hZ2UoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYsIEZsb2F0
U2l6ZSwgUGFzc1JlZlB0cjxHZW5lcmF0ZWRJbWFnZT4pOwotICAgICAgICBHZW5lcmF0ZWRJbWFn
ZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgcHVudEV2
aWN0aW9uVGltZXIoKSB7IG1fZXZpY3Rpb25UaW1lci5yZXN0YXJ0KCk7IH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHZvaWQgZXZpY3Rpb25UaW1lckZpcmVkKCk7Ci0KLSAgICAgICAgQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSYgbV9vd25lcjsKLSAgICAgICAgRmxvYXRTaXplIG1fc2l6ZTsKLSAg
ICAgICAgUmVmUHRyPEdlbmVyYXRlZEltYWdlPiBtX2ltYWdlOwotICAgICAgICBEZWZlcnJhYmxl
T25lU2hvdFRpbWVyIG1fZXZpY3Rpb25UaW1lcjsKLSAgICB9OwotCi0gICAgZnJpZW5kIGNsYXNz
IENhY2hlZEdlbmVyYXRlZEltYWdlOworICAgIGNsYXNzIENhY2hlZEdlbmVyYXRlZEltYWdlOwor
CiAgICAgdm9pZCBldmljdENhY2hlZEdlbmVyYXRlZEltYWdlKEZsb2F0U2l6ZSk7CiAKICAgICBI
YXNoQ291bnRlZFNldDxSZW5kZXJFbGVtZW50Kj4gbV9jbGllbnRzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVQb29sLmNwcAppbmRleCBlNjdmNGUyYjQ5ZjQwYzJmOGUzMTFkODY3ZWE0OWM2NDI5N2Zk
M2MyLi42ZjQyNGMzYzMzZDhmNzljMmEwOWI4YzAwNjZkMTZlMTE0MDgwMTdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFsdWVQb29sLmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIFJlZjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFtaWx5VmFsdWUoY29uc3QgU3RyaW5n
JiBmYW1pbHlOCiAgICAgcmV0dXJuICp2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZUxp
c3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcm
IHN0cmluZykKK1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZh
Y2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBSZW1vdmUgb25l
IGVudHJ5IGF0IHJhbmRvbSBpZiB0aGUgY2FjaGUgZ3Jvd3MgdG9vIGxhcmdlLgogICAgIGNvbnN0
IGludCBtYXhpbXVtRm9udEZhY2VDYWNoZVNpemUgPSAxMjg7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQ
b29sLmgKaW5kZXggYTQyNTllYzc5Njg5ZjliODBiODY2OGNlOTY4YjYyMzc0MjIwMWM2ZC4uYzVk
MmQ4YmRhYTVjYTMwZGVmMjEzZDMxMjk1MGNiNjdiODU3ZDcwNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YWx1ZVBvb2wuaApAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBDU1NWYWx1ZVBvb2wgewogcHVibGlj
OgogICAgIHN0YXRpYyBDU1NWYWx1ZVBvb2wmIHNpbmdsZXRvbigpOwogCi0gICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZUxpc3Q+IGNyZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7
CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9t
aWNTdHJpbmcmKTsKICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZUZvbnRGYW1pbHlW
YWx1ZShjb25zdCBTdHJpbmcmLCBGcm9tU3lzdGVtRm9udElEID0gRnJvbVN5c3RlbUZvbnRJRDo6
Tm8pOwogICAgIFJlZjxDU1NJbmhlcml0ZWRWYWx1ZT4gY3JlYXRlSW5oZXJpdGVkVmFsdWUoKSB7
IHJldHVybiBtX2luaGVyaXRlZFZhbHVlLmdldCgpOyB9CiAgICAgUmVmPENTU0luaXRpYWxWYWx1
ZT4gY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSB7IHJldHVybiBtX2ltcGxpY2l0SW5pdGlh
bFZhbHVlLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVy
LmgKaW5kZXggNjQwMDQ5YTFhMDM0YmMxMWRkMzBkYWI3NzZjZTZiMzlhNzc1MTBmYi4uZGU4ZmUx
OTNiM2U4MzEzZTEzNWZhOWZkZjkzNzI0MDMzZjBjOTYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtNjIsMTggKzYyLDE4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhPckF1dG8oU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3RoU2l6aW5nKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIHN0YXRpYyBMZW5ndGggY29udmVydExl
bmd0aE1heFNpemluZyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydENvbXB1dGVkTGVuZ3RoKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0
aWMgVCBjb252ZXJ0TGluZVdpZHRoKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnRDb21wdXRlZExlbmd0aChT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgVCBjb252ZXJ0TGluZVdpZHRoKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1
ZSYpOwogICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0U3BhY2luZyhTdHlsZVJlc29sdmVyJiwgY29u
c3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgTGVuZ3RoU2l6ZSBjb252ZXJ0UmFkaXVzKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIHN0YXRpYyBMZW5ndGhQb2ludCBjb252
ZXJ0T2JqZWN0UG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAg
c3RhdGljIFRleHREZWNvcmF0aW9uIGNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFQg
Y29udmVydE51bWJlcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydE51bWJlck9yQXV0byhTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
VCBjb252ZXJ0TnVtYmVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnROdW1iZXJPckF1dG8oU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIHNob3J0IGNvbnZlcnRXZWJraXRI
eXBoZW5hdGVMaW1pdExpbmVzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAg
IHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PiBzdGF0aWMgTmluZVBpZWNlSW1hZ2Ug
Y29udmVydEJvcmRlckltYWdlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHRlbXBs
YXRlIDxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PiBzdGF0aWMgTmluZVBpZWNlSW1hZ2UgY29udmVy
dEJvcmRlck1hc2soU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGUgPENT
U1Byb3BlcnR5SUQgcHJvcGVydHk+IHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNvbnZl
cnRTdHlsZUltYWdlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPENT
U1Byb3BlcnR5SUQ+IHN0YXRpYyBOaW5lUGllY2VJbWFnZSBjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5
bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3Rh
dGljIE5pbmVQaWVjZUltYWdlIGNvbnZlcnRCb3JkZXJNYXNrKFN0eWxlUmVzb2x2ZXImLCBDU1NW
YWx1ZSYpOworICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBSZWZQdHI8U3R5bGVJ
bWFnZT4gY29udmVydFN0eWxlSW1hZ2UoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CiAgICAg
c3RhdGljIFRyYW5zZm9ybU9wZXJhdGlvbnMgY29udmVydFRyYW5zZm9ybShTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJpbmcoU3R5
bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
U3RyaW5nT3JBdXRvKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwpAQCAtOTEsNyAr
OTEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IGNvbnZlcnRUZXh0U3Ryb2tlV2lkdGgo
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIExpbmVCb3hDb250
YWluIGNvbnZlcnRMaW5lQm94Q29udGFpbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
KTsKICAgICBzdGF0aWMgVGV4dERlY29yYXRpb25Ta2lwIGNvbnZlcnRUZXh0RGVjb3JhdGlvblNr
aXAoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2hhcGVWYWx1ZT4gY29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIFJlZlB0cjxTaGFwZVZhbHVlPiBjb252ZXJ0U2hhcGVWYWx1ZShTdHls
ZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAg
IHN0YXRpYyBTY3JvbGxTbmFwVHlwZSBjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIFNjcm9sbFNuYXBBbGlnbiBjb252ZXJ0
U2Nyb2xsU25hcEFsaWduKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwpAQCAtMjM0
LDEzICsyMzQsMTMgQEAgaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRMZW5ndGhNYXhTaXppbmcoU3R5bGVSZXNvbHZlciYgc3R5bGUKICAgICByZXR1cm4gY29udmVy
dExlbmd0aFNpemluZyhzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydENvbXB1dGVkTGVuZ3RoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKS5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRMaW5lV2lkdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKTsKQEAgLTMzMyw3ICszMzMsNyBAQCBpbmxpbmUgTGVuZ3RoIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WShTdHlsZVJlc29s
dmVyJiBzdAogICAgIHJldHVybiBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVUb3As
IENTU1ZhbHVlQm90dG9tPihzdHlsZVJlc29sdmVyLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGUgPENTU1ZhbHVlSUQgY3NzVmFsdWVGb3IwLCBDU1NW
YWx1ZUlEIGNzc1ZhbHVlRm9yMTAwPgordGVtcGxhdGU8Q1NTVmFsdWVJRCBjc3NWYWx1ZUZvcjAs
IENTU1ZhbHVlSUQgY3NzVmFsdWVGb3IxMDA+CiBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKIHsKICAgICBMZW5ndGggbGVu
Z3RoOwpAQCAtMzkyLDEzICszOTIsMTMgQEAgaW5saW5lIFRleHREZWNvcmF0aW9uIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uKFN0eWxlUmVzb2x2ZXIKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CiBpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXIoU3R5
bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZTxUPihDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5h
bWUgVD4KIGlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51bWJlck9yQXV0
byhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7
CiAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09
IENTU1ZhbHVlQXV0bykKQEAgLTQxNCw3ICs0MTQsNyBAQCBpbmxpbmUgc2hvcnQgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhTdHlsZVJlc29s
dgogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS52YWx1ZTxzaG9ydD4oQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOwogfQogCi10ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4K
K3RlbXBsYXRlPENTU1Byb3BlcnR5SUQgcHJvcGVydHk+CiBpbmxpbmUgTmluZVBpZWNlSW1hZ2Ug
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIE5pbmVQaWVjZUltYWdlIGlt
YWdlOwpAQCAtNDIyLDcgKzQyMiw3IEBAIGlubGluZSBOaW5lUGllY2VJbWFnZSBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJJbWFnZShTdHlsZVJlc29sdmVyJiBzCiAgICAgcmV0
dXJuIGltYWdlOwogfQogCi10ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KK3RlbXBs
YXRlPENTU1Byb3BlcnR5SUQgcHJvcGVydHk+CiBpbmxpbmUgTmluZVBpZWNlSW1hZ2UgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVyTWFzayhTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2U7CkBA
IC00MzEsOCArNDMxLDggQEAgaW5saW5lIE5pbmVQaWVjZUltYWdlIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydEJvcmRlck1hc2soU3R5bGVSZXNvbHZlciYgc3QKICAgICByZXR1cm4gaW1h
Z2U7CiB9CiAKLXRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgotaW5saW5lIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3R5bGVJbWFn
ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCit0ZW1wbGF0
ZTxDU1NQcm9wZXJ0eUlEPgoraW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRTdHlsZUltYWdlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdHlsZUltYWdl
KHZhbHVlKTsKIH0KQEAgLTc1OCw3ICs3NTgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbWFn
ZVNoYXBlKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gaXM8Q1NTSW1hZ2VWYWx1
ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlPih2YWx1ZSk7CiB9CiAKLWlubGluZSBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0cjxTaGFwZVZhbHVl
PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTaGFwZVZhbHVlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKQEAgLTc3MSw3ICs3NzEs
NyBAQCBpbmxpbmUgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRTaGFwZVZhbHVlKFN0eWxlUmVzbwogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBzaGFw
ZTsKICAgICBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveCA9IEJveE1pc3Npbmc7CiAgICAgZm9yIChh
dXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKKyAgICAgICAgYXV0byYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsK
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUoKSkKICAgICAgICAgICAgIHNoYXBl
ID0gYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCksICpwcmltaXRpdmVWYWx1ZS5zaGFwZVZhbHVlKCkpOwogICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb250ZW50Qm94CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggY2YxZTg0MzQwMWU3NDRk
MDBiOTNiNjIwYzM2ZDcwOGVkN2E3NWJlMi4uMGZmZDlkNDliYWE2OTM3MzRjNjFkNWE1OTdmZmE0
MDU3NWY3MjI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1
c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAt
MTM2MSw3ICsxMzYxLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlQ29udGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLAogICAgIGZvciAoYXV0byYg
aXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGlmIChpczxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSkgewogICAgICAgICAgICAgaWYgKGlz
PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0KCkpKQotICAgICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmRv
d25jYXN0PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0KCkpLmdyYWRpZW50V2l0aFN0eWxlc1Jl
c29sdmVkKCZzdHlsZVJlc29sdmVyKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShk
b3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPihpdGVtLmdldCgpKS5ncmFkaWVudFdpdGhTdHlsZXNS
ZXNvbHZlZChzdHlsZVJlc29sdmVyKSksIGRpZFNldCk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdl
dCgpKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDJhNGM1ZTQwZDEzZGFmYjVlYmQ4NjExM2MwOTM2NGFk
ODM3YzcyODYuLjAwNDY5ZWU3ZmEwOTE2NjhmNjM4NjZhZWNiNDU0YjAzMzQxMjg1NzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTE2ODksNyArMTY4OSw3IEBAIFJlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAg
IGlmIChpczxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPih2YWx1
ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpOworICAgICAgICAgICAgcmV0dXJu
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPih2
YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpKTsKIAogICAgICAgICBpZiAo
aXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBGaWx0ZXJJ
bWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKaW5kZXggZDYxOTg5
MzdiMzc0MTY5NmRiODdjZmUwYzYzYTI5ZjJlODgxMDNhZi4uNTBiOWQ3N2NmNjMxMDZhZmYzZGQz
YzcxYjk4MGViOWM4OTYwNjJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTUg
KzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhZGllbnRJbWFnZS5o
IgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJMZW5ndGguaCIKLSNpbmNsdWRl
ICJUZXh0U3RyZWFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhZGllbnRJbWFnZTo6
R3JhZGllbnRJbWFnZShQYXNzUmVmUHRyPEdyYWRpZW50PiBnZW5lcmF0b3IsIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK0dyYWRpZW50SW1hZ2U6OkdyYWRpZW50SW1hZ2UoR3JhZGllbnQmIGdlbmVy
YXRvciwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgIDogbV9ncmFkaWVudChnZW5lcmF0b3Ip
CiB7CiAgICAgc2V0Q29udGFpbmVyU2l6ZShzaXplKTsKQEAgLTUzLDcgKzUwLDcgQEAgdm9pZCBH
cmFkaWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6
ZSgpKQogICAgICAgICBkZXN0Q29udGV4dC5zY2FsZShGbG9hdFNpemUoZGVzdFJlY3Qud2lkdGgo
KSAvIHNyY1JlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgp
KSk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKC1zcmNSZWN0LngoKSwgLXNyY1JlY3QueSgp
KTsKLSAgICBkZXN0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXpl
KCkpLCAqbV9ncmFkaWVudC5nZXQoKSk7CisgICAgZGVzdENvbnRleHQuZmlsbFJlY3QoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSwgbV9ncmFkaWVudC5nZXQoKSk7CiB9CiAKIHZvaWQg
R3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCkBAIC04MCw3ICs3Nyw3IEBAIHZv
aWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8g
RmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgaW1hZ2UuCi0gICAgICAgIG1fY2FjaGVkSW1hZ2VCdWZm
ZXItPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhZGp1c3RlZFNp
emUpLCAqbV9ncmFkaWVudCk7CisgICAgICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXItPmNvbnRleHQo
KS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhZGp1c3RlZFNpemUpLCBtX2dyYWRp
ZW50LmdldCgpKTsKIAogICAgICAgICBtX2NhY2hlZEdlbmVyYXRvckhhc2ggPSBnZW5lcmF0b3JI
YXNoOwogICAgICAgICBtX2NhY2hlZEFkanVzdGVkU2l6ZSA9IGFkanVzdGVkU2l6ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuaAppbmRleCBk
MmNlYjI2MDNiODY1Y2ZlZGRiNzVlZmM3NDA4NTc4MDcyZGI5ZmRlLi5jNDk0NjM5NTFlMGJiNjlm
NGNkZDgwYjBhYjQ1MzkyZmRkM2VjM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw0NSArMjMsMzYgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHcmFkaWVudEltYWdlX2gKLSNkZWZpbmUg
R3JhZGllbnRJbWFnZV9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgog
I2luY2x1ZGUgIkdlbmVyYXRlZEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNs
dWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBHcmFk
aWVudEltYWdlIGZpbmFsIDogcHVibGljIEdlbmVyYXRlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudEltYWdlPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFkaWVu
dD4gZ2VuZXJhdG9yLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgc3RhdGljIFJlZjxHcmFk
aWVudEltYWdlPiBjcmVhdGUoR3JhZGllbnQmIGdlbmVyYXRvciwgY29uc3QgRmxvYXRTaXplJiBz
aXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudEltYWdlKGdl
bmVyYXRvciwgc2l6ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudElt
YWdlKGdlbmVyYXRvciwgc2l6ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkdyYWRpZW50SW1h
Z2UoKTsKIAotcHJvdGVjdGVkOgotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBv
dmVycmlkZTsKLQotICAgIEdyYWRpZW50SW1hZ2UoUGFzc1JlZlB0cjxHcmFkaWVudD4sIGNvbnN0
IEZsb2F0U2l6ZSYpOwotCiBwcml2YXRlOgotICAgIGJvb2wgaXNHcmFkaWVudEltYWdlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgR3JhZGllbnRJbWFnZShHcmFkaWVudCYsIGNvbnN0IEZsb2F0
U2l6ZSYpOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pIGZpbmFsOworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIGJvb2wgaXNHcmFk
aWVudEltYWdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CiAgICAgCi0gICAgUmVmUHRyPEdyYWRpZW50PiBtX2dy
YWRpZW50OworICAgIFJlZjxHcmFkaWVudD4gbV9ncmFkaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IG1fY2FjaGVkSW1hZ2VCdWZmZXI7CiAgICAgRmxvYXRTaXplIG1fY2Fj
aGVkQWRqdXN0ZWRTaXplOwogICAgIHVuc2lnbmVkIG1fY2FjaGVkR2VuZXJhdG9ySGFzaDsKIH07
CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggYjA3MWY4ZmQwMjMzMjA5Y2YzZDA2MDc1
OWM2NjhhY2MwMjg5NmI5NC4uMmM4NGIyZjU2N2YwN2ExOTU4YzcwZTY2YjZmM2Y0ZmM3ZDY4ZmUy
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJh
dGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdl
bmVyYXRlZEltYWdlLmNwcApAQCAtNTQsOCArNTQsOSBAQCB2b2lkIFN0eWxlR2VuZXJhdGVkSW1h
Z2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2Fk
ZQogCiBGbG9hdFNpemUgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAogeworICAgIEFTU0VS
VChyZW5kZXJlcik7CiAgICAgaWYgKG1fZml4ZWRTaXplKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBm
aXhlZFNpemUgPSBjb25zdF9jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmPihtX2ltYWdlR2Vu
ZXJhdG9yVmFsdWUuZ2V0KCkpLmZpeGVkU2l6ZShyZW5kZXJlcik7CisgICAgICAgIEZsb2F0U2l6
ZSBmaXhlZFNpemUgPSBjb25zdF9jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmPihtX2ltYWdl
R2VuZXJhdG9yVmFsdWUuZ2V0KCkpLmZpeGVkU2l6ZSgqcmVuZGVyZXIpOwogICAgICAgICBpZiAo
bXVsdGlwbGllciA9PSAxLjBmKQogICAgICAgICAgICAgcmV0dXJuIGZpeGVkU2l6ZTsKIApAQCAt
ODcsMjIgKzg4LDI2IEBAIHZvaWQgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y29tcHV0ZUludHJpbnNp
Y0RpbWVuc2lvbnMoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyCiAKIHZvaWQgU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6YWRkQ2xpZW50KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQogewotICAgIG1f
aW1hZ2VHZW5lcmF0b3JWYWx1ZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsKKyAgICBBU1NFUlQocmVu
ZGVyZXIpOworICAgIG1faW1hZ2VHZW5lcmF0b3JWYWx1ZS0+YWRkQ2xpZW50KCpyZW5kZXJlcik7
CiB9CiAKIHZvaWQgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6cmVtb3ZlQ2xpZW50KFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyKQogewotICAgIG1faW1hZ2VHZW5lcmF0b3JWYWx1ZS0+cmVtb3ZlQ2xpZW50
KHJlbmRlcmVyKTsKKyAgICBBU1NFUlQocmVuZGVyZXIpOworICAgIG1faW1hZ2VHZW5lcmF0b3JW
YWx1ZS0+cmVtb3ZlQ2xpZW50KCpyZW5kZXJlcik7CiB9CiAKIFJlZlB0cjxJbWFnZT4gU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxDU1NJbWFnZUdlbmVy
YXRvclZhbHVlJj4obV9pbWFnZUdlbmVyYXRvclZhbHVlLmdldCgpKS5pbWFnZShyZW5kZXJlciwg
c2l6ZSk7CisgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlJj4obV9pbWFnZUdlbmVyYXRvclZhbHVlLmdldCgpKS5pbWFnZSgq
cmVuZGVyZXIsIHNpemUpOwogfQogCiBib29sIFN0eWxlR2VuZXJhdGVkSW1hZ2U6Omtub3duVG9C
ZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlcikgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9pbWFnZUdlbmVyYXRvclZhbHVlLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworICAg
IEFTU0VSVChyZW5kZXJlcik7CisgICAgcmV0dXJuIG1faW1hZ2VHZW5lcmF0b3JWYWx1ZS0+a25v
d25Ub0JlT3BhcXVlKCpyZW5kZXJlcik7CiB9CiAKIH0K
</data>
<flag name="review"
          id="320141"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>