<?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>169776</bug_id>
          
          <creation_ts>2017-03-16 12:49:43 -0700</creation_ts>
          <short_desc>Update the WKHTTPCookieStore API to be simpler and add observers</short_desc>
          <delta_ts>2017-03-16 16:30:18 -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>WebKit2</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1288680</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-03-16 12:49:43 -0700</bug_when>
    <thetext>Update the WKHTTPCookieStore API to be simpler and add observers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288681</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-03-16 12:50:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/31096000&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288688</commentid>
    <comment_count>2</comment_count>
      <attachid>304680</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-03-16 12:57:05 -0700</bug_when>
    <thetext>Created attachment 304680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288689</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-16 12:58:17 -0700</bug_when>
    <thetext>Attachment 304680 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKHTTPCookieStore.mm:58:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIHTTPCookieStore.cpp:74:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/APIHTTPCookieStore.cpp:94:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIHTTPCookieStore.cpp:99:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:96:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:103:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:139:  Missing space before {  [whitespace/braces] [5]
Total errors found: 7 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288779</commentid>
    <comment_count>4</comment_count>
      <attachid>304680</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-16 15:09:05 -0700</bug_when>
    <thetext>Comment on attachment 304680
Patch

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

Fix GTK.
You might need to use _saveCookies sometimes, like before we read all cookies?

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKHTTPCookieStore.h:67
&gt; + @discussion Your observer is not retained by the receiver. It is your responsibility

Who is the intended antecedent of &quot;your&quot;?

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h:126
&gt; +    HashSet&lt;RefPtr&lt;WebProcessPool&gt;&gt; processPools(size_t count = std::numeric_limits&lt;size_t&gt;::max(), bool ensureOneExists = true) const;

One always exists.  It is the integer between zero and two.
And we don&apos;t need a process pool to exist to access the default cookie storage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288787</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-03-16 15:20:11 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 304680 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=304680&amp;action=review
&gt; 
&gt; Fix GTK.
&gt; You might need to use _saveCookies sometimes, like before we read all
&gt; cookies?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKHTTPCookieStore.h:67
&gt; &gt; + @discussion Your observer is not retained by the receiver. It is your responsibility
&gt; 
&gt; Who is the intended antecedent of &quot;your&quot;?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h:126
&gt; &gt; +    HashSet&lt;RefPtr&lt;WebProcessPool&gt;&gt; processPools(size_t count = std::numeric_limits&lt;size_t&gt;::max(), bool ensureOneExists = true) const;
&gt; 
&gt; One always exists.  It is the integer between zero and two.
&gt; And we don&apos;t need a process pool to exist to access the default cookie
&gt; storage.

I&apos;ll come up with a better name for the bool, but the concern is not for needing a process pool for default cookie storage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288797</commentid>
    <comment_count>6</comment_count>
      <attachid>304706</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-03-16 15:37:46 -0700</bug_when>
    <thetext>Created attachment 304706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288799</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-16 15:40:26 -0700</bug_when>
    <thetext>Attachment 304706 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp:228:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKHTTPCookieStore.mm:58:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIHTTPCookieStore.cpp:74:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/APIHTTPCookieStore.cpp:94:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIHTTPCookieStore.cpp:99:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.h:141:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:96:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:103:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:139:  Missing space before {  [whitespace/braces] [5]
Total errors found: 9 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288833</commentid>
    <comment_count>8</comment_count>
      <attachid>304706</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-16 16:30:13 -0700</bug_when>
    <thetext>Comment on attachment 304706
Patch

Clearing flags on attachment: 304706

Committed r214078: &lt;http://trac.webkit.org/changeset/214078&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288834</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-16 16:30:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304680</attachid>
            <date>2017-03-16 12:57:05 -0700</date>
            <delta_ts>2017-03-16 15:37:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>47156</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0MTI5OWUwYWJhNS4uNzY1YTYzMTNhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NyBAQAorMjAxNy0wMy0xNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CisKKyAgICAgICAgVXBkYXRlIHRoZSBXS0hUVFBDb29raWVTdG9yZSBBUEkgdG8gYmUgc2ltcGxl
ciBhbmQgYWRkIG9ic2VydmVycy4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxMDk2MDAwPiBh
bmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTc3NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV2hlbiBy
ZXZpZXdpbmcgdGhlIEFQSSBpbnRlcm5hbGx5IHdlIHJlYWxpemVkIHRoZSBOU0hUVFBDb29raWVT
dG9yYWdlIG1vZGVsIGRvZXNuJ3QKKyAgICAgICAgbmVjZXNzYXJpbHkgZml0IHBlcmZlY3RseSwg
YW5kIHRoYXQgdG8gaGFuZGxlIHBhcnRpdGlvbmVkIGNvb2tpZXMgZ29pbmcgZm9yd2FyZCB3ZQor
ICAgICAgICBuZWVkIHRvIGJlIG11Y2ggc2ltcGxlciByaWdodCBub3cuCisgICAgICAgIAorICAg
ICAgICBXZSBhbHNvIHJlYWxpemVkIHRoYXQgd2Ugc2hvdWxkIGltcGxlbWVudCB0aGUgImNvb2tp
ZSBzdG9yZSBjaGFuZ2VkIiBvYnNlcnZlciBmb3IKKyAgICAgICAgYW55IGNsaWVudHMgdGhhdCBt
aWdodCBiZSBwcm92aWRpbmcgYSBjb29raWUgdmlld2luZyBBUEkuCisgICAgICAgIAorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6
SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENv
b2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAoQVBJOjpBUElXZWJDb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcjo6QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAgIChBUEk6
OkhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5v
dGlmaWNhdGlvbnMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMp
OiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlbW92ZUNvb2tpZXNT
aW5jZURhdGUpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgIAorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoV0tIVFRQQ29va2ll
U3RvcmVPYnNlcnZlcjo6V0tIVFRQQ29va2llU3RvcmVPYnNlcnZlcik6CisgICAgICAgICgtW1dL
SFRUUENvb2tpZVN0b3JlIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tIVFRQQ29va2llU3RvcmUg
YWxsQ29va2llczpdKToKKyAgICAgICAgKC1bV0tIVFRQQ29va2llU3RvcmUgYWRkT2JzZXJ2ZXI6
XSk6CisgICAgICAgICgtW1dLSFRUUENvb2tpZVN0b3JlIHJlbW92ZU9ic2VydmVyOl0pOgorICAg
ICAgICAoLVtXS0hUVFBDb29raWVTdG9yZSBmZXRjaENvb2tpZXM6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLSFRUUENvb2tpZVN0b3JlIGZldGNoQ29va2llc0ZvclVSTDpjb21wbGV0aW9uSGFu
ZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tIVFRQQ29va2llU3RvcmUgc2V0Q29va2ll
czpmb3JVUkw6bWFpbkRvY3VtZW50VVJMOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS0hUVFBDb29raWVTdG9yZSByZW1vdmVDb29raWVzU2luY2VEYXRlOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0hUVFBDb29raWVTdG9yZSBz
ZXRDb29raWVBY2NlcHRQb2xpY3k6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAg
ICAgIChraXRDb29raWVQb2xpY3lUb05TQ29va2llUG9saWN5KTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tIVFRQQ29va2llU3RvcmUgZmV0Y2hDb29raWVBY2NlcHRQb2xpY3k6XSk6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKToKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nl
c3NQb29sRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpyZWdpc3Rlck9ic2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5Ojp1bnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpPYnNlcnZlcjo6fk9ic2VydmVyKToKKworICAgICAgICBB
ZGQgdGhlIGFiaWxpdHkgZm9yIGludGVyZXN0ZWQgY2xpZW50cyB0byBsaXN0ZW4gZm9yIHRoZSBj
cmVhdGlvbiBvZiBuZXcgV2ViUHJvY2Vzc1Bvb2xzLAorICAgICAgICB3aGljaCBpcyBuZWVkZWQg
YnkgQVBJSFRUUENvb2tpZVN0b3JlOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OmdlbmVyYXRlTGlzdGVuZXJJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYktpdDo6cHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyRnVuY3Rpb25NYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0
aW9uTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rl
clByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgor
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmg6CisKIDIwMTctMDMtMTQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBXS0hUVFBDb29raWVTdG9yYWdlIHRvIFdLSFRUUENv
b2tpZVN0b3JlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElI
VFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuY3BwCmluZGV4IDUwOTY1ZGE5YmJjLi4wMzcyZjU3NDRjZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcApA
QCAtNDIsNiArNDIsMTEgQEAgSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2Vic2l0
ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKIHsKKyAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOworICAgIEFTU0VSVCghbV9jb29r
aWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CisKKyAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bv
b2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKEZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC01NSwxNyArNjAsNiBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2ll
cyhGdW5jdGlvbjx2b2lkIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmCiAgICAg
fSk7CiB9CiAKLXZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKGNvbnN0IFdlYkNvcmU6OlVS
TCYgdXJsLCBGdW5jdGlvbjx2b2lkIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGF1dG8mIGRhdGFTdG9yZSA9IG1fb3duaW5nRGF0
YVN0b3JlLndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICBhdXRvIHBvb2wgPSBkYXRhU3RvcmUucHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotCi0gICAgY29va2llTWFuYWdlci0+Z2V0Q29va2llcyhkYXRhU3RvcmUuc2Vzc2lvbklEKCks
IHVybCwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2ll
cywgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihjb29raWVzKTsKLSAgICB9KTsKLX0KLQogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvJiBkYXRhU3RvcmUgPSBtX293bmluZ0RhdGFTdG9y
ZS53ZWJzaXRlRGF0YVN0b3JlKCk7CkBAIC03Nyw2MiArNzEsMTI1IEBAIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpzZXRDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUsIEZ1bmN0aW9u
PHZvaWQgKCk+CiAgICAgfSk7CiB9CiAKLXZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBjb25zdCBXZWJDb3JlOjpV
UkwmIHVybCwgY29uc3QgV2ViQ29yZTo6VVJMJiBtYWluRG9jdW1lbnRVUkwsIEZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRl
Q29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBGdW5jdGlvbjx2b2lkICgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8mIGRhdGFTdG9yZSA9IG1fb3duaW5nRGF0
YVN0b3JlLndlYnNpdGVEYXRhU3RvcmUoKTsKICAgICBhdXRvIHBvb2wgPSBkYXRhU3RvcmUucHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwogICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwogCi0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhkYXRhU3RvcmUuc2Vzc2lvbklEKCks
IGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENhbGxiYWNrQmFz
ZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWUoZGF0YVN0
b3JlLnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ2FsbGJhY2tCYXNlOjpFcnJv
ciBlcnJvcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgIH0pOwogfQogCi12
b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYg
Y29va2llLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorY2xhc3MgQVBJ
V2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgOiBwdWJsaWMgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQVBJV2ViQ29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIoQVBJOjpIVFRQQ29va2llU3RvcmUmIGNvb2tpZVN0b3JlKQorICAgICAg
ICA6IG1fY29va2llU3RvcmUoY29va2llU3RvcmUpCisgICAgeworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9jb29r
aWVTdG9yZS5jb29raWVzRGlkQ2hhbmdlKCk7CisgICAgfQorCisgICAgdm9pZCBtYW5hZ2VyRGVz
dHJveWVkKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fY29va2llU3RvcmUuY29va2llTWFuYWdl
ckRlc3Ryb3llZCgpOworICAgIH0KKworICAgIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBtX2Nvb2tp
ZVN0b3JlOworfTsKKwordm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2Jz
ZXJ2ZXImIG9ic2VydmVyKQogeworICAgIG1fb2JzZXJ2ZXJzLmFkZCgmb2JzZXJ2ZXIpOworCisg
ICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVCghbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSk7CisKKyAgICBtX2Nvb2tp
ZU1hbmFnZXJQcm94eU9ic2VydmVyID0gc3RkOjptYWtlX3VuaXF1ZTxBUElXZWJDb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcj4oKnRoaXMpOworCiAgICAgYXV0byYgZGF0YVN0b3JlID0gbV9vd25p
bmdEYXRhU3RvcmUud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgIGF1dG8gcG9vbCA9IGRhdGFTdG9y
ZS5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYXV0byogY29v
a2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCk7CisgICAgYXV0byogcG9vbCA9IGRhdGFTdG9yZS5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VOb3RpZmljYXRpb25zKCk7CiAKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWUo
ZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ2FsbGJhY2tCYXNl
OjpFcnJvciBlcnJvcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOwor
ICAgIGlmICghcG9vbCkgeworICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZp
Y2F0aW9ucygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNl
cnZlcihkYXRhU3RvcmUuc2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVy
KTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlbW92ZUNvb2tpZXNTaW5jZURhdGUoc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBkYXRlLCBGdW5jdGlvbjx2b2lkICgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJP
YnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiB7Ci0gICAgYXV0byYgZGF0YVN0b3JlID0gbV9v
d25pbmdEYXRhU3RvcmUud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgIGF1dG8gcG9vbCA9IGRhdGFT
dG9yZS5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYXV0byog
Y29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7CisgICAgbV9vYnNlcnZlcnMucmVtb3ZlKCZvYnNlcnZlcik7CiAKLSAgICBjb29r
aWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShkYXRhU3RvcmUuc2Vzc2lv
bklEKCksIGRhdGUsIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGlmICghbV9vYnNlcnZl
cnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSkKKyAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5y
ZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLndlYnNpdGVEYXRhU3RvcmUoKS5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOworCisgICAgaWYgKG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcikKKyAgICAgICAgV2ViUHJvY2Vzc1Bv
b2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENy
ZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKKworICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxp
c3RlbmVySWRlbnRpZmllciA9IDA7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9
IG51bGxwdHI7CisgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlkQ2hhbmdlKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCisgICAgICAgIG9ic2VydmVyLT5jb29raWVz
RGlkQ2hhbmdlKCp0aGlzKTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIEZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2ll
TWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgYXV0byYgZGF0YVN0b3JlID0gbV9vd25pbmdEYXRh
U3RvcmUud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgIGF1dG8gcG9vbCA9IGRhdGFTdG9yZS5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
CiAKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKSwgcG9saWN5LCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENhbGxiYWNrQmFzZTo6RXJyb3Ig
ZXJyb3IpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIoZGF0YVN0b3JlLnNl
c3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CisgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7CisKKyAgICBhdXRvKiBwb29sID0gZGF0YVN0
b3JlLnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU5vdGlmaWNhdGlvbnMoKTsKKworICAgIGlm
ICghcG9vbCkgeworICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihk
YXRhU3RvcmUuc2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0K
IAotdm9pZCBIVFRQQ29va2llU3RvcmU6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koRnVuY3Rp
b248dm9pZCAoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlv
bnMoKQogewotICAgIGF1dG8mIGRhdGFTdG9yZSA9IG1fb3duaW5nRGF0YVN0b3JlLndlYnNpdGVE
YXRhU3RvcmUoKTsKLSAgICBhdXRvIHBvb2wgPSBkYXRhU3RvcmUucHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIEFTU0VSVCgh
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKKworICAgIG1fcHJvY2Vz
c1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rl
clByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1By
b2Nlc3NQb29sKSB7CisgICAgICAgIEFTU0VSVChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVy
KTsKIAotICAgIGNvb2tpZU1hbmFnZXItPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koZGF0YVN0
b3JlLnNlc3Npb25JRCgpLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5LCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIGlmIChlcnJvciAhPSBD
YWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKQotICAgICAgICAgICAgcG9saWN5ID0gSFRUUENvb2tp
ZUFjY2VwdFBvbGljeU5ldmVyOworICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLndlYnNp
dGVEYXRhU3RvcmUoKS5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCisg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocG9saWN5KTsK
KyAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUud2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlP
YnNlcnZlcik7CisgICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlv
bnMoKTsKICAgICB9KTsKIH0KIAordm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQoreworICAgIGlmIChtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCisgICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lz
dGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3Rl
bmVySWRlbnRpZmllcik7CisKKyAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50
aWZpZXIgPSAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGM0MDc4ODNlZmEwLi42
ZjlmNDc2ZTgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElI
VFRQQ29va2llU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUhU
VFBDb29raWVTdG9yZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQVBJT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSFRUUENvb2tpZUFjY2VwdFBvbGljeS5oIgogI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNSw4ICszNiwxMyBAQCBjbGFzcyBVUkw7CiBz
dHJ1Y3QgQ29va2llOwogfQogCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTsKK30KKwogbmFtZXNwYWNlIEFQSSB7CiAKK2NsYXNzIEFQSVdlYkNvb2tpZU1h
bmFnZXJQcm94eU9ic2VydmVyOwogY2xhc3MgV2Vic2l0ZURhdGFTdG9yZTsKIAogY2xhc3MgSFRU
UENvb2tpZVN0b3JlIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpIVFRQ
Q29va2llU3RvcmU+IHsKQEAgLTQ5LDIxICs1NSwzNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
SFRUUENvb2tpZVN0b3JlKCk7CiAKICAgICB2b2lkIGNvb2tpZXMoRnVuY3Rpb248dm9pZCAoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAg
dm9pZCBjb29raWVzKGNvbnN0IFdlYkNvcmU6OlVSTCYsIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwotCiAgICAgdm9p
ZCBzZXRDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiwgRnVuY3Rpb248dm9pZCAoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCBzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+JiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBt
YWluRG9jdW1lbnRVUkwsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwog
ICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYsIEZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCByZW1vdmVDb29raWVzU2lu
Y2VEYXRlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQsIEZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIGNsYXNzIE9ic2VydmVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9ic2VydmVyKCkgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBjb29raWVzRGlkQ2hhbmdlKEhUVFBDb29raWVTdG9yZSYpID0gMDsKKyAgICB9OworCisg
ICAgdm9pZCByZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyJik7CisgICAgdm9pZCB1bnJlZ2lzdGVy
T2JzZXJ2ZXIoT2JzZXJ2ZXImKTsKKworICAgIHZvaWQgY29va2llc0RpZENoYW5nZSgpOworICAg
IHZvaWQgY29va2llTWFuYWdlckRlc3Ryb3llZCgpOwogCi0gICAgdm9pZCBzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSwgRnVuY3Rpb248dm9p
ZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KEZ1bmN0aW9uPHZvaWQgKFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpOwotICAgIAogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUo
V2Vic2l0ZURhdGFTdG9yZSYpOwogCisgICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29s
Tm90aWZpY2F0aW9ucygpOworICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpOworCiAgICAgV2Vic2l0ZURhdGFTdG9yZSYgbV9vd25pbmdEYXRhU3RvcmU7
CisgICAgSGFzaFNldDxPYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOworCisgICAgV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHkqIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgeyBudWxscHRy
IH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVy
PiBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyOworCisgICAgdWludDY0X3QgbV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyIHsgMCB9OwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVTdG9yZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVTdG9yZS5o
CmluZGV4IDVmMDNlNmNjMjg3Li45NWMxNDE1YTUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUuaApAQCAtMzEsNiAr
MzEsMTMgQEAKIAogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAorQGNsYXNzIFdLSFRUUENvb2tp
ZVN0b3JlOworCitAcHJvdG9jb2wgV0tIVFRQQ29va2llU3RvcmVPYnNlcnZlciA8TlNPYmplY3Q+
CitAb3B0aW9uYWwKKy0gKHZvaWQpY29va2llc0RpZENoYW5nZUluQ29va2llU3RvcmU6KFdLSFRU
UENvb2tpZVN0b3JlICopY29va2llU3RvcmU7CitAZW5kCisKIC8qIQogIEEgV0tIVFRQQ29va2ll
U3RvcmUgb2JqZWN0IGFsbG93cyBtYW5hZ2luZyB0aGUgSFRUUCBjb29raWVzIGFzc29jaWF0ZWQg
d2l0aCBhIHBhcnRpY3VsYXIgV0tXZWJzaXRlRGF0YVN0b3JlLgogICovCkBAIC00MiwxMiArNDks
NyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpCiAvKiEgQGFic3RyYWN0IEZldGNoZXMgYWxsIHN0b3JlZCBjb29raWVzLgogIEBwYXJhbSBj
b21wbGV0aW9uSGFuZGxlciBBIGJsb2NrIHRvIGludm9rZSB3aXRoIHRoZSBmZXRjaGVkIGNvb2tp
ZXMuCiAgKi8KLS0gKHZvaWQpZmV0Y2hDb29raWVzOih2b2lkICheKShOU0FycmF5PE5TSFRUUENv
b2tpZSAqPiAqKSljb21wbGV0aW9uSGFuZGxlcjsKLQotLyohIEBhYnN0cmFjdCBGZXRjaGVzIGFs
bCBvZiB0aGUgc3RvcmVkIGNvb2tpZXMgZm9yIHRoZSBnaXZlbiBVUkwuCi0gQHBhcmFtIGNvbXBs
ZXRpb25IYW5kbGVyIEEgYmxvY2sgdG8gaW52b2tlIHdpdGggdGhlIGZldGNoZWQgY29va2llcy4K
LSAqLwotLSAodm9pZClmZXRjaENvb2tpZXNGb3JVUkw6KE5TVVJMICopdXJsIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TSFRUUENvb2tpZSAqPiAqKSljb21wbGV0aW9uSGFu
ZGxlcjsKKy0gKHZvaWQpYWxsQ29va2llczoodm9pZCAoXikoTlNBcnJheTxOU0hUVFBDb29raWUg
Kj4gKikpY29tcGxldGlvbkhhbmRsZXI7CiAKIC8qISBAYWJzdHJhY3QgU2V0IGEgY29va2llLgog
IEBwYXJhbSBjb29raWUgVGhlIGNvb2tpZSB0byBzZXQuCkBAIC01NSwzNSArNTcsMjIgQEAgV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQogICov
CiAtICh2b2lkKXNldENvb2tpZTooTlNIVFRQQ29va2llICopY29va2llIGNvbXBsZXRpb25IYW5k
bGVyOihudWxsYWJsZSB2b2lkICheKSgpKWNvbXBsZXRpb25IYW5kbGVyOwogCi0vKiEgQGFic3Ry
YWN0IEFkZHMgYW4gYXJyYXkgY29va2llcyB0byB0aGUgY29va2llIHN0b3JlLCBmb2xsb3dpbmcg
dGhlIGNvb2tpZSBhY2NlcHQgcG9saWN5LgotIEBwYXJhbSBjb29raWVzIFRoZSBjb29raWVzIHRv
IHNldC4KLSBAcGFyYW0gVVJMIFRoZSBVUkwgZnJvbSB3aGljaCB0aGUgY29va2llcyB3ZXJlIHNl
bnQuCi0gQHBhcmFtIG1haW5Eb2N1bWVudFVSTCBUaGUgbWFpbiBkb2N1bWVudCBVUkwgdG8gYmUg
dXNlZCBhcyBhIGJhc2UgZm9yIHRoZSAic2FtZSBkb21haW4gYXMgbWFpbiBkb2N1bWVudCIgcG9s
aWN5LgotIEBwYXJhbSBjb21wbGV0aW9uSGFuZGxlciBBIGJsb2NrIHRvIGludm9rZSBvbmNlIHRo
ZSBjb29raWVzIGhhdmUgYmVlbiBzdG9yZWQuCi0gKi8KLS0gKHZvaWQpc2V0Q29va2llczooTlNB
cnJheTxOU0hUVFBDb29raWUgKj4gKiljb29raWVzIGZvclVSTDooTlNVUkwgKil1cmwgbWFpbkRv
Y3VtZW50VVJMOihudWxsYWJsZSBOU1VSTCAqKW1haW5Eb2N1bWVudFVSTCBjb21wbGV0aW9uSGFu
ZGxlcjoobnVsbGFibGUgdm9pZCAoXikoKSljb21wbGV0aW9uSGFuZGxlcjsKLQogLyohIEBhYnN0
cmFjdCBEZWxldGUgdGhlIHNwZWNpZmllZCBjb29raWUuCiAgQHBhcmFtIGNvbXBsZXRpb25IYW5k
bGVyIEEgYmxvY2sgdG8gaW52b2tlIG9uY2UgdGhlIGNvb2tpZSBoYXMgYmVlbiBkZWxldGVkLgog
ICovCiAtICh2b2lkKWRlbGV0ZUNvb2tpZTooTlNIVFRQQ29va2llICopY29va2llIGNvbXBsZXRp
b25IYW5kbGVyOihudWxsYWJsZSB2b2lkICheKSgpKWNvbXBsZXRpb25IYW5kbGVyOwogCi0vKiEg
QGFic3RyYWN0IERlbGV0ZSBhbGwgY29va2llcyBmcm9tIHRoZSBjb29raWUgc3RvcmFnZSBzaW5j
ZSB0aGUgcHJvdmlkZWQgZGF0ZS4KLSBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSBhZnRlciB3aGljaCBz
ZXQgY29va2llcyBzaG91bGQgYmUgcmVtb3ZlZC4KLSBAcGFyYW0gY29tcGxldGlvbkhhbmRsZXIg
QSBibG9jayB0byBpbnZva2Ugb25jZSB0aGUgY29va2llcyBoYXZlIGJlZW4gZGVsZXRlZC4KLSAq
LwotLSAodm9pZClyZW1vdmVDb29raWVzU2luY2VEYXRlOihOU0RhdGUgKilkYXRlIGNvbXBsZXRp
b25IYW5kbGVyOihudWxsYWJsZSB2b2lkICheKSgpKWNvbXBsZXRpb25IYW5kbGVyOwotCi0vKiEg
QGFic3RyYWN0IFNldHMgdGhlIGNvb2tpZSBhY2NlcHQgcG9saWN5IHByZWZlcmVuY2Ugb2YgdGhl
IHJlY2VpdmVyLgotIEBwYXJhbSBwb2xpY3kgVGhlIGNvb2tpZSBhY2NlcHQgcG9saWN5IHRvIHNl
dC4KLSBAcGFyYW0gY29tcGxldGlvbkhhbmRsZXIgQSBibG9jayB0byBpbnZva2Ugb25jZSB0aGUg
cG9saWN5IGhhcyBiZWVuIHNldC4KKy8qISBAYWJzdHJhY3QgQWRkcyBhIFdLSFRUUENvb2tpZVN0
b3JlT2JzZXJ2ZXIgb2JqZWN0IHdpdGggdGhlIGNvb2tpZSBzdG9yZS4KKyBAcGFyYW0gb2JzZXJ2
ZXIgVGhlIG9ic2VydmVyIG9iamVjdCB0byBhZGQuCisgQGRpc2N1c3Npb24gWW91ciBvYnNlcnZl
ciBpcyBub3QgcmV0YWluZWQgYnkgdGhlIHJlY2VpdmVyLiBJdCBpcyB5b3VyIHJlc3BvbnNpYmls
aXR5CisgdG8gdW5yZWdpc3RlciB5b3VyIG9ic2VydmVyIGJlZm9yZSBpdCBiZWNvbWVzIGludmFs
aWQuCiAgKi8KLS0gKHZvaWQpc2V0Q29va2llQWNjZXB0UG9saWN5OihOU0hUVFBDb29raWVBY2Nl
cHRQb2xpY3kpcG9saWN5IGNvbXBsZXRpb25IYW5kbGVyOihudWxsYWJsZSB2b2lkICheKSgpKWNv
bXBsZXRpb25IYW5kbGVyOworLSAodm9pZClhZGRPYnNlcnZlcjooaWQ8V0tIVFRQQ29va2llU3Rv
cmVPYnNlcnZlcj4pb2JzZXJ2ZXI7CiAKLS8qISBAYWJzdHJhY3QgRmV0Y2hlcyB0aGUgY29va2ll
IGFjY2VwdCBwb2xpY3kgcHJlZmVyZW5jZSBvZiB0aGUgcmVjZWl2ZXIuCi0gQHBhcmFtIGNvbXBs
ZXRpb25IYW5kbGVyIEEgYmxvY2sgdG8gaW52b2tlIHdpdGggdGhlIGZldGNoZWQgcG9saWN5Lgor
LyohIEBhYnN0cmFjdCBSZW1vdmVzIGEgV0tIVFRQQ29va2llU3RvcmVPYnNlcnZlciBvYmplY3Qg
ZnJvbSB0aGUgY29va2llIHN0b3JlLgorIEBwYXJhbSBvYnNlcnZlciBUaGUgb2JzZXJ2ZXIgdG8g
cmVtb3ZlLgogICovCi0tICh2b2lkKWZldGNoQ29va2llQWNjZXB0UG9saWN5Oih2b2lkICheKShO
U0hUVFBDb29raWVBY2NlcHRQb2xpY3kpKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClyZW1v
dmVPYnNlcnZlcjooaWQ8V0tIVFRQQ29va2llU3RvcmVPYnNlcnZlcj4pb2JzZXJ2ZXI7CiAKIEBl
bmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hU
VFBDb29raWVTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW0KaW5kZXggM2Q4ZDNlMWVkYjEuLjAxNGNmNTdiNTMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3Jl
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2ll
U3RvcmUubW0KQEAgLTI4LDExICsyOCwxMyBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotI2lu
Y2x1ZGUgIkhUVFBDb29raWVBY2NlcHRQb2xpY3kuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NGTmV0
d29ya1NQSS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0ICJIVFRQQ29va2ll
QWNjZXB0UG9saWN5LmgiCisjaW1wb3J0ICJXZWFrT2JqQ1B0ci5oIgorI2ltcG9ydCA8V2ViQ29y
ZS9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29va2llLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1VSTC5oPgorI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KIAogc3RhdGljIE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpjb3JlQ29va2llc1Rv
TlNDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb3JlQ29va2llcykKIHsK
QEAgLTQ0LDE2ICs0NiwzNyBAQCBzdGF0aWMgTlNBcnJheTxOU0hUVFBDb29raWUgKj4gKmNvcmVD
b29raWVzVG9OU0Nvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbwogICAgIHJldHVybiBu
c0Nvb2tpZXM7CiB9CiAKLUBpbXBsZW1lbnRhdGlvbiBXS0hUVFBDb29raWVTdG9yZQorY2xhc3Mg
V0tIVFRQQ29va2llU3RvcmVPYnNlcnZlciA6IHB1YmxpYyBBUEk6OkhUVFBDb29raWVTdG9yZTo6
T2JzZXJ2ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdLSFRUUENvb2tpZVN0b3JlT2JzZXJ2
ZXIoaWQ8V0tIVFRQQ29va2llU3RvcmVPYnNlcnZlcj4gb2JzZXJ2ZXIpCisgICAgICAgIDogbV9v
YnNlcnZlcihvYnNlcnZlcikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY29v
a2llc0RpZENoYW5nZShBUEk6OkhUVFBDb29raWVTdG9yZSYgY29va2llU3RvcmUpIGZpbmFsCisg
ICAgeworICAgICAgICBbbV9vYnNlcnZlci5nZXQoKSBjb29raWVzRGlkQ2hhbmdlSW5Db29raWVT
dG9yZTpXZWJLaXQ6OndyYXBwZXIoY29va2llU3RvcmUpXTsKKyAgICB9CisKKyAgICBXZWJLaXQ6
OldlYWtPYmpDUHRyPGlkPFdLSFRUUENvb2tpZVN0b3JlT2JzZXJ2ZXI+PiBtX29ic2VydmVyOwor
fTsKKworQGltcGxlbWVudGF0aW9uIFdLSFRUUENvb2tpZVN0b3JlIHsKKyAgICBIYXNoTWFwPGlk
PFdLSFRUUENvb2tpZVN0b3JlT2JzZXJ2ZXI+LCBzdGQ6OnVuaXF1ZV9wdHI8V0tIVFRQQ29va2ll
U3RvcmVPYnNlcnZlcj4+IF9vYnNlcnZlcnM7Cit9CiAKIC0gKHZvaWQpZGVhbGxvYwogeworICAg
IGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBfb2JzZXJ2ZXJzLnZhbHVlcygpKQorICAgICAgICBfY29v
a2llU3RvcmUtPnVucmVnaXN0ZXJPYnNlcnZlcigqb2JzZXJ2ZXIpOworCiAgICAgX2Nvb2tpZVN0
b3JlLT5BUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpOwogCiAgICAgW3N1
cGVyIGRlYWxsb2NdOwogfQogCi0tICh2b2lkKWZldGNoQ29va2llczoodm9pZCAoXikoTlNBcnJh
eTxOU0hUVFBDb29raWUgKj4gKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpYWxsQ29va2ll
czoodm9pZCAoXikoTlNBcnJheTxOU0hUVFBDb29raWUgKj4gKikpY29tcGxldGlvbkhhbmRsZXIK
IHsKICAgICBfY29va2llU3RvcmUtPmNvb2tpZXMoW2hhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0
aW9uSGFuZGxlciBjb3B5XSldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVz
KSB7CiAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0FycmF5PE5TSFRUUENv
b2tpZSAqPiAqKSloYW5kbGVyLmdldCgpOwpAQCAtNjEsMTQgKzg0LDYgQEAgLSAodm9pZClmZXRj
aENvb2tpZXM6KHZvaWQgKF4pKE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICopKWNvbXBsZXRpb25I
YW5kbGVyCiAgICAgfSk7CiB9CiAKLS0gKHZvaWQpZmV0Y2hDb29raWVzRm9yVVJMOihOU1VSTCAq
KXVybCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU0hUVFBDb29raWUgKj4g
KikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfY29va2llU3RvcmUtPmNvb2tpZXModXJsLCBb
aGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKV0oY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0g
KHZvaWQgKF4pKE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAg
ICAgIHJhd0hhbmRsZXIoY29yZUNvb2tpZXNUb05TQ29va2llcyhjb29raWVzKSk7Ci0gICAgfSk7
Ci19Ci0KIC0gKHZvaWQpc2V0Q29va2llOihOU0hUVFBDb29raWUgKiljb29raWUgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKIHsKICAgICBfY29va2llU3Rv
cmUtPnNldENvb2tpZShjb29raWUsIFtoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRs
ZXIgY29weV0pXSgpIHsKQEAgLTg4LDY1ICsxMDMsMjMgQEAgLSAodm9pZClkZWxldGVDb29raWU6
KE5TSFRUUENvb2tpZSAqKWNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoKSljb21w
bGUKICAgICB9KTsKIH0KIAotLSAodm9pZClzZXRDb29raWVzOihOU0FycmF5PE5TSFRUUENvb2tp
ZSAqPiAqKWNvb2tpZXMgZm9yVVJMOihOU1VSTCAqKVVSTCBtYWluRG9jdW1lbnRVUkw6KE5TVVJM
ICopbWFpbkRvY3VtZW50VVJMIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSgpKWNvbXBsZXRp
b25IYW5kbGVyCistICh2b2lkKWFkZE9ic2VydmVyOihpZDxXS0hUVFBDb29raWVTdG9yZU9ic2Vy
dmVyPilvYnNlcnZlcgogewotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGNvcmVDb29raWVz
OwotICAgIGNvcmVDb29raWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY29va2llcy5jb3VudCk7
Ci0gICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tpZSA6IGNvb2tpZXMpCi0gICAgICAgIGNvcmVD
b29raWVzLnVuY2hlY2tlZEFwcGVuZChjb29raWUpOworICAgIGF1dG8gcmVzdWx0ID0gX29ic2Vy
dmVycy5hZGQob2JzZXJ2ZXIsIG51bGxwdHIpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIHJldHVybjsKIAotICAgIF9jb29raWVTdG9yZS0+c2V0Q29va2llcyhjb3JlQ29v
a2llcywgVVJMLCBtYWluRG9jdW1lbnRVUkwsIFtoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlv
bkhhbmRsZXIgY29weV0pXSgpIHsKLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4p
KCkpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgaWYgKHJhd0hhbmRsZXIpCi0gICAgICAgICAgICBy
YXdIYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6
bWFrZV91bmlxdWU8V0tIVFRQQ29va2llU3RvcmVPYnNlcnZlcj4ob2JzZXJ2ZXIpOworICAgIF9j
b29raWVTdG9yZS0+cmVnaXN0ZXJPYnNlcnZlcigqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiB9
CiAKLS0gKHZvaWQpcmVtb3ZlQ29va2llc1NpbmNlRGF0ZTooTlNEYXRlICopZGF0ZSBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClyZW1vdmVP
YnNlcnZlcjooaWQ8V0tIVFRQQ29va2llU3RvcmVPYnNlcnZlcj4pb2JzZXJ2ZXIKIHsKLSAgICBh
dXRvIHN5c3RlbUNsb2NrVGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9p
bnQoc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
ZHVyYXRpb24+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGRhdGUudGltZUludGVydmFs
U2luY2UxOTcwKSkpOworICAgIGF1dG8gcmVzdWx0ID0gX29ic2VydmVycy50YWtlKG9ic2VydmVy
KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgX2Nvb2tpZVN0b3Jl
LT5yZW1vdmVDb29raWVzU2luY2VEYXRlKHN5c3RlbUNsb2NrVGltZSwgW2hhbmRsZXIgPSBhZG9w
dE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSldKCkgewotICAgICAgICBhdXRvIHJhd0hhbmRs
ZXIgPSAodm9pZCAoXikoKSloYW5kbGVyLmdldCgpOwotICAgICAgICBpZiAocmF3SGFuZGxlcikK
LSAgICAgICAgICAgIHJhd0hhbmRsZXIoKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClzZXRDb29r
aWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xpY3kgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfY29va2llU3Rv
cmUtPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5LCBbaGFuZGxlciA9IGFkb3B0TlMo
W2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKV0oKSB7Ci0gICAgICAgIGF1dG8gcmF3SGFuZGxlciA9
ICh2b2lkICheKSgpKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIGlmIChyYXdIYW5kbGVyKQotICAg
ICAgICAgICAgcmF3SGFuZGxlcigpOwotICAgIH0pOwotfQotCi1zdGF0aWMgTlNIVFRQQ29va2ll
QWNjZXB0UG9saWN5IGtpdENvb2tpZVBvbGljeVRvTlNDb29raWVQb2xpY3koV2ViS2l0OjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGtpdFBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKGtpdFBvbGljeSkg
ewotICAgIGNhc2UgV2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzOgotICAgICAg
ICByZXR1cm4gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzOwotICAgIGNhc2UgV2ViS2l0
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI6Ci0gICAgICAgIHJldHVybiBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lOZXZlcjsKLSAgICBjYXNlIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOgotICAgICAgICByZXR1cm4gTlNIVFRQQ29v
a2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47Ci0gICAgY2FzZSBXZWJL
aXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21h
aW46Ci0gICAgICAgIC8vIENhc3QgcmVxdWlyZWQgYmVjYXVzZSBvZiBDRk5ldHdvcmtTUEkuCi0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KE5TSFRU
UENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbik7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU5ldmVyOwotfQotCi0tICh2b2lkKWZldGNo
Q29va2llQWNjZXB0UG9saWN5Oih2b2lkICheKShOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpKWNv
bXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX2Nvb2tpZVN0b3JlLT5nZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KFtoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pXShXZWJL
aXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7Ci0gICAgICAgIGF1dG8gcmF3SGFu
ZGxlciA9ICh2b2lkICheKShOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpKWhhbmRsZXIuZ2V0KCk7
Ci0gICAgICAgIHJhd0hhbmRsZXIoa2l0Q29va2llUG9saWN5VG9OU0Nvb2tpZVBvbGljeShwb2xp
Y3kpKTsKLSAgICB9KTsKKyAgICBfY29va2llU3RvcmUtPnVucmVnaXN0ZXJPYnNlcnZlcigqcmVz
dWx0KTsKIH0KIAogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bv
b2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tCmluZGV4IDg3MzhmMDcwNjM3Li5jZjBjYmI0ZTIxNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAg
LTI5NCw2ICsyOTQsMTAgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogI2lmIFBMQVRGT1JN
KE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDExMDAKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjb29raWVTdG9yYWdlRGF0YSA9IGFkb3B0Q0YoQ0ZIVFRQQ29v
a2llU3RvcmFnZUNyZWF0ZUlkZW50aWZ5aW5nRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBbW05T
SFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIF9jb29raWVTdG9yYWdl
XSkpOworCisgICAgc3RhdGljIGludCBpID0gMDsKKyAgICBbKE5TRGF0YSAqKWNvb2tpZVN0b3Jh
Z2VEYXRhLmdldCgpIHdyaXRlVG9GaWxlOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL1Zv
bHVtZXMvRGF0YS9GdWppVXNlci9kdW1wJWkucGxpc3QiLCBpKytdIGF0b21pY2FsbHk6Tk9dOwor
CiAgICAgQVNTRVJUKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIu
aXNFbXB0eSgpKTsKICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlm
aWVyLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNvb2tpZVN0b3JhZ2VEYXRhLmdldCgpKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGNvb2tpZVN0b3JhZ2VEYXRhLmdldCgpKSk7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKaW5kZXgg
MTAzODQ5N2E4YzEuLmQ3ODRiNDQ4YTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAtNjAsNiArNjAsNyBAQCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJv
Y2Vzc1Bvb2wpCiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94
eSgpCiB7CisgICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2ll
TWFuYWdlckNsaWVudEJhc2UqIGNsaWVudCkKQEAgLTc1LDYgKzc2LDE3IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCiAgICAgaW52YWxpZGF0ZUNh
bGxiYWNrTWFwKG1faHR0cENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrcywgQ2FsbGJhY2tCYXNl
OjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CiAgICAgaW52YWxpZGF0ZUNhbGxiYWNrTWFw
KG1fdm9pZENhbGxiYWNrcywgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRl
ZCk7CiAgICAgaW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fZ2V0Q29va2llc0NhbGxiYWNrcywgQ2Fs
bGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisKKyAgICBWZWN0b3I8T2Jz
ZXJ2ZXIqPiBvYnNlcnZlcnM7CisgICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2ll
T2JzZXJ2ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNl
cnZlclNldCkKKyAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOworICAgIH0K
KworICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCisgICAgICAgIG9ic2VydmVy
LT5tYW5hZ2VyRGVzdHJveWVkKCk7CisKKyAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNF
bXB0eSgpKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9z
ZShXZWJQcm9jZXNzUHJveHkqKQpAQCAtMjEyLDE5ICsyMjQsMzcgQEAgdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFNlc3Npb25JRCBzZXNzaW9u
SUQpCiAgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29v
a2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soU2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQordm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJl
Z2lzdGVyT2JzZXJ2ZXIoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT2JzZXJ2ZXImIG9i
c2VydmVyKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9jb29raWVPYnNlcnZlcnMuc2V0KHNlc3Np
b25JRCwgSGFzaFNldDxPYnNlcnZlcio+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YWRkKCZvYnNlcnZlcik7CisKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHN0
YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpOworfQorCit2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6dW5yZWdpc3Rlck9ic2VydmVyKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIE9ic2VydmVyJiBvYnNlcnZlcikKIHsKLSAgICBpZiAoY2FsbGJhY2spCi0gICAgICAg
IG1fY29va2llT2JzZXJ2ZXJzLnNldChzZXNzaW9uSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fY29va2llT2JzZXJ2ZXJzLnJlbW92ZShzZXNzaW9uSUQpOworICAg
IGF1dG8gaXRlcmF0b3IgPSBtX2Nvb2tpZU9ic2VydmVycy5maW5kKHNlc3Npb25JRCk7CisgICAg
aWYgKGl0ZXJhdG9yID09IG1fY29va2llT2JzZXJ2ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpdGVyYXRvci0+dmFsdWUucmVtb3ZlKCZvYnNlcnZlcik7CisgICAgaWYgKCFpdGVy
YXRvci0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nvb2tpZU9i
c2VydmVycy5yZW1vdmUoaXRlcmF0b3IpOworICAgIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlk
Q2hhbmdlKFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgbV9jbGllbnQuY29va2llc0RpZENo
YW5nZSh0aGlzKTsKLSAgICBpZiAoYXV0byBjYWxsYmFjayA9IG1fY29va2llT2JzZXJ2ZXJzLmdl
dChzZXNzaW9uSUQpKQotICAgICAgICBjYWxsYmFjaygpOworICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2Nvb2tpZU9ic2VydmVycy5maW5kKHNlc3Npb25JRCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1f
Y29va2llT2JzZXJ2ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8q
IG9ic2VydmVyIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICBvYnNlcnZlci0+Y29va2llc0Rp
ZENoYW5nZSgpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBG
dW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmlu
ZGV4IGZkZjg5MWUxNTg5Li5mNTMzNGVmZGY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaApAQCAtODYsNyArODYsMTYgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdlYkNvcmU6OlNlc3Npb25J
RCk7CiAgICAgdm9pZCBzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXZWJDb3JlOjpTZXNzaW9u
SUQpOwogCi0gICAgdm9pZCBzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFdlYkNvcmU6OlNlc3Np
b25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmKTsKKworICAgIGNsYXNzIE9ic2VydmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9ic2VydmVyKCkgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBjb29raWVzRGlkQ2hhbmdlKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQg
bWFuYWdlckRlc3Ryb3llZCgpID0gMDsKKyAgICB9OworCisgICAgdm9pZCByZWdpc3Rlck9ic2Vy
dmVyKFdlYkNvcmU6OlNlc3Npb25JRCwgT2JzZXJ2ZXImKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJP
YnNlcnZlcihXZWJDb3JlOjpTZXNzaW9uSUQsIE9ic2VydmVyJik7CiAKICNpZiBVU0UoU09VUCkK
ICAgICB2b2lkIHNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RvcmFn
ZVBhdGgsIHVpbnQzMl90IHN0b3JhZ2VUeXBlKTsKQEAgLTEyOCw3ICsxMzcsNyBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxWb2lkQ2FsbGJhY2s+PiBtX3ZvaWRDYWxs
YmFja3M7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEdldENvb2tpZXNDYWxsYmFjaz4+
IG1fZ2V0Q29va2llc0NhbGxiYWNrczsKIAotICAgIEhhc2hNYXA8V2ViQ29yZTo6U2Vzc2lvbklE
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2Nvb2tpZU9ic2VydmVyczsKKyAgICBIYXNoTWFw
PFdlYkNvcmU6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVy
czsKIAogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggYmI5NzYyYWZjZTgu
LmQzMThhYWVkMDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKQEAgLTExNSwxMCArMTE1LDY1IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBERUZJTkVf
REVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIsIHByb2Nlc3NQb29s
Q291bnRlciwgKCJXZWJQcm9jZXNzUG9vbCIpKTsKIAorc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRl
TGlzdGVuZXJJZGVudGlmaWVyKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgbmV4dElkZW50aWZp
ZXIgPSAxOworICAgIHJldHVybiBuZXh0SWRlbnRpZmllcisrOworfQorCitzdGF0aWMgSGFzaE1h
cDx1aW50NjRfdCwgRnVuY3Rpb248dm9pZChXZWJQcm9jZXNzUG9vbCYpPj4mIHByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lckZ1bmN0aW9uTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaE1hcDx1aW50NjRfdCwgRnVuY3Rpb248dm9pZChXZWJQcm9jZXNzUG9vbCYpPj4+IG1h
cDsKKyAgICByZXR1cm4gbWFwOworfQorCit1aW50NjRfdCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoRnVuY3Rpb248dm9pZChXZWJQcm9jZXNzUG9v
bCYpPiYmIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChmdW5jdGlvbik7CisKKyAgICBhdXRvIGlk
ZW50aWZpZXIgPSBnZW5lcmF0ZUxpc3RlbmVySWRlbnRpZmllcigpOworICAgIHByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lckZ1bmN0aW9uTWFwKCkuc2V0KGlkZW50aWZpZXIsIFdURk1vdmUoZnVu
Y3Rpb24pKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9v
bDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcih1aW50NjRfdCBpZGVudGlm
aWVyKQoreworICAgIHByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lckZ1bmN0aW9uTWFwKCkucmVt
b3ZlKGlkZW50aWZpZXIpOworfQorCiBSZWY8V2ViUHJvY2Vzc1Bvb2w+IFdlYlByb2Nlc3NQb29s
OjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiB7
CiAgICAgSW5pdGlhbGl6ZVdlYktpdDIoKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQ
cm9jZXNzUG9vbChjb25maWd1cmF0aW9uKSk7CisgICAgYXV0byBuZXdQb29sID0gYWRvcHRSZWYo
Km5ldyBXZWJQcm9jZXNzUG9vbChjb25maWd1cmF0aW9uKSk7CisKKyAgICBhdXRvJiBsaXN0ZW5l
ck1hcCA9IHByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lckZ1bmN0aW9uTWFwKCk7CisKKyAgICBW
ZWN0b3I8dWludDY0X3Q+IGlkZW50aWZpZXJzOworICAgIGlkZW50aWZpZXJzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGlzdGVuZXJNYXAuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gaWRlbnRpZmll
ciA6IGxpc3RlbmVyTWFwLmtleXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMudW5jaGVja2VkQXBw
ZW5kKGlkZW50aWZpZXIpOworCisgICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBpZGVudGlmaWVy
cykgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbGlzdGVuZXJNYXAuZmluZChpZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IGxpc3RlbmVyTWFwLmVuZCgpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHRoZSBGdW5jdGlvbiBvYmpl
Y3Qgc3RheXMgYWxpdmUgdW50aWwgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgaGFzIGJlZW4gbWFk
ZSwKKyAgICAgICAgLy8gd2UgdGVtcG9yYXJpbHkgbW92ZSBpdCBvdXQgb2YgdGhlIG1hcC4KKyAg
ICAgICAgLy8gVGhpcyBwcm90ZWN0cyBpdCBmcm9tIHRoZSBGdW5jdGlvbiBjYWxsaW5nIHVucmVn
aXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIgdGhlcmVieQorICAgICAgICAvLyByZW1v
dmluZyBpdHNlbGYgZnJvbSB0aGUgbWFwIG9mIGxpc3RlbmVycy4KKyAgICAgICAgLy8gSWYgdGhl
IGlkZW50aWZpZXIgc3RpbGwgZXhpc3RzIGluIHRoZSBtYXAgbGF0ZXIsIHdlIG1vdmUgaXQgYmFj
ayBpbi4KKyAgICAgICAgRnVuY3Rpb248dm9pZChXZWJQcm9jZXNzUG9vbCYpPiBmdW5jdGlvbiA9
IFdURk1vdmUoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgZnVuY3Rpb24obmV3UG9vbC5nZXQo
KSk7CisKKyAgICAgICAgaXRlcmF0b3IgPSBsaXN0ZW5lck1hcC5maW5kKGlkZW50aWZpZXIpOwor
ICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbGlzdGVuZXJNYXAuZW5kKCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZSA9
IFdURk1vdmUoZnVuY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG5ld1Bv
b2w7CiB9CiAKIHN0YXRpYyBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiYgcHJvY2Vzc1Bvb2xzKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggMmIwN2E0ZTEy
YzAuLjI5ZDAwMmM4ZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuaApAQCAtMzk5LDYgKzM5OSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvb2tpZVN0b3Jh
Z2VQYXJ0aXRpb25pbmdFbmFibGVkKGJvb2wpOwogI2VuZGlmCiAKKyAgICBzdGF0aWMgdWludDY0
X3QgcmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoRnVuY3Rpb248dm9pZChXZWJQ
cm9jZXNzUG9vbCYpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xD
cmVhdGlvbkxpc3RlbmVyKHVpbnQ2NF90IGlkZW50aWZpZXIpOworCiBwcml2YXRlOgogICAgIHZv
aWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAxMmM5NjEx
MDJiZS4uOGQ4MGNhYTFhZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTEyNyw2ICsxMjcsMTIg
QEAgUmVmPFdlYlByb2Nlc3NQb29sPiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKICAgICByZXR1cm4gKipwb29scy5iZWdpbigpOwogfQog
CitXZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlTm90aWZpY2F0aW9ucygpCit7CisgICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygx
LCBmYWxzZSk7CisgICAgcmV0dXJuIHBvb2xzLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBwb29scy5i
ZWdpbigpLT5nZXQoKTsKK30KKwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0
b3JpZXNJZk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1faGFzUmVzb2x2ZWREaXJlY3RvcmllcykK
QEAgLTExMzAsNyArMTEzNiwyMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OndlYlByb2Nlc3NE
aWRDbG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUAogICAgICAgICBt
X3N0b3JhZ2VNYW5hZ2VyLT5wcm9jZXNzRGlkQ2xvc2VDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94
eSwgY29ubmVjdGlvbik7CiB9CiAKLUhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vi
c2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBjb3VudCkgY29uc3QKK2Jvb2wgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sKSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGFTdG9yZSA9IHByb2Nlc3NQb29s
LndlYnNpdGVEYXRhU3RvcmUoKSkgeworICAgICAgICBpZiAoJmRhdGFTdG9yZS0+d2Vic2l0ZURh
dGFTdG9yZSgpID09IHRoaXMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2Ug
aWYgKCZBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURh
dGFTdG9yZSgpID09IHRoaXMpIHsKKyAgICAgICAgLy8gSWYgYSBwcm9jZXNzIHBvb2wgZG9lc24n
dCBoYXZlIGFuIGV4cGxpY2l0IGRhdGEgc3RvcmUgYW5kIHRoaXMgaXMgdGhlIGRlZmF1bHQgV2Vi
c2l0ZURhdGFTdG9yZSwKKyAgICAgICAgLy8gYWRkIHRoYXQgcHJvY2VzcyBwb29sIHRvIHRoZSBz
ZXQuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGJlaGF2aW9yIGlzIHdlaXJkIGFuZCBuZWNlc3Np
dGF0ZWQgYnkgdGhlIGZhY3QgdGhhdCBwcm9jZXNzIHBvb2xzIGRvbid0IGFsd2F5cworICAgICAg
ICAvLyBoYXZlIGEgZGF0YSBzdG9yZTsgdGhleSBzaG91bGQuCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGNvdW50LCBi
b29sIGVuc3VyZU9uZUV4aXN0cykgY29uc3QKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9j
ZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNz
ZXMoKSkKQEAgLTExMzksMjUgKzExNjEsMTcgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bv
b2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGNvdW50KSBjb24KICAg
ICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSdy
ZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAg
ICAgaWYgKGF1dG8gZGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKSkg
ewotICAgICAgICAgICAgICAgIGlmICgmZGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkgPT0g
dGhpcykgewotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29s
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIGlmICgmQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
KCktPndlYnNpdGVEYXRhU3RvcmUoKSA9PSB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYg
YSBwcm9jZXNzIHBvb2wgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGRhdGEgc3RvcmUgYW5kIHRo
aXMgaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURhdGFTdG9yZSwKLSAgICAgICAgICAgICAgICAvLyBh
ZGQgdGhhdCBwcm9jZXNzIHBvb2wgdG8gdGhlIHNldC4KLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBiZWhhdmlvciBpcyB3ZWlyZCBhbmQgbmVjZXNzaXRhdGVkIGJ5IHRoZSBmYWN0IHRo
YXQgcHJvY2VzcyBwb29scyBkb24ndCBhbHdheXMKLSAgICAgICAgICAgICAgICAvLyBoYXZlIGEg
ZGF0YSBzdG9yZTsgdGhleSBzaG91bGQuCi0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFk
ZChwcm9jZXNzUG9vbCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWlzQXNzb2Np
YXRlZFByb2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogCiAgICAgICAg
ICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBjb3VudCkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgp
ICYmIGNvdW50KSB7CisgICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkgJiYgY291bnQgJiYg
ZW5zdXJlT25lRXhpc3RzKSB7CiAgICAgICAgIGF1dG8gcHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNz
UG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGVXaXRoV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24obV9jb25maWd1cmF0aW9uKSk7CiAgICAgICAgIHBy
b2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wucHRyKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmlu
ZGV4IGNiNDgzNWMzMzMxLi5lZjE4MmJhNmQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0xMDQsNiAr
MTA0LDggQEAgcHVibGljOgogICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIHsg
cmV0dXJuIG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KIAogICAgIFJlZjxXZWJQcm9jZXNzUG9v
bD4gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOworICAgIFdlYlByb2Nl
c3NQb29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VOb3RpZmljYXRpb25zKCk7CisgICAg
Ym9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IFdlYnNpdGVEYXRhU3RvcmUoV2ViQ29yZTo6U2Vzc2lvbklE
KTsKQEAgLTEyMSw3ICsxMjMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95
KCk7CiAgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1SZW1vdmVSZWNlbnRTZWFyY2hlcyhzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50KTsKIAotICAgIEhhc2hTZXQ8UmVmUHRyPFdl
YlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzKHNpemVfdCBjb3VudCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkpIGNvbnN0OworICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nl
c3NQb29sPj4gcHJvY2Vzc1Bvb2xzKHNpemVfdCBjb3VudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCksIGJvb2wgZW5zdXJlT25lRXhpc3RzID0gdHJ1ZSkgY29uc3Q7CiAKICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5m
bz4gcGx1Z2lucygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDRkYjAyY2ViNGY1Li5hMzg1ZGFhNjY2NSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE3
LTAzLTE2ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRh
dGUgdGhlIFdLSFRUUENvb2tpZVN0b3JlIEFQSSB0byBiZSBzaW1wbGVyIGFuZCBhZGQgb2JzZXJ2
ZXJzLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzEwOTYwMDA+IGFuZCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5Nzc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbTogUmVuYW1lZCBmcm9tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLSFRUUENvb2tpZVN0b3JhZ2UubW0uCisg
ICAgICAgICgtW0Nvb2tpZU9ic2VydmVyIGNvb2tpZXNEaWRDaGFuZ2VJbkNvb2tpZVN0b3JlOl0p
OgorICAgICAgICAoVEVTVCk6IEFsc28gdGVzdCBkZWxldGUgYW5kIG9ic2VydmVycy4KKwogMjAx
Ny0wMy0xNCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVu
YW1lIFdLSFRUUENvb2tpZVN0b3JhZ2UgdG8gV0tIVFRQQ29va2llU3RvcmUuCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGE3OWU0ZGMxN2JjLi45ZTA2MDgyYWYxYSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQk1MUJDRUU0RjFDODRGNTNCMDA0MkM4MkUg
LyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJDRUU0RDFDODRGNTJDMDA0MkM4MkUgLyog
SW5kZXhlZERCTXVsdGlQcm9jZXNzLTIuaHRtbCAqLzsgfTsKIAkJNTFDRDFDNkMxQjM4Q0U0MzAw
MTQyQ0E1IC8qIE1vZGFsQWxlcnRzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFDRDFDNkExQjM4Q0UzNjAwMTQyQ0E1IC8qIE1vZGFsQWxlcnRzLm1t
ICovOyB9OwogCQk1MUNEMUM3MjFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWluLW5l
dy1hYm91dC1ibGFuay13aW5kb3cuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUNEMUM3MTFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwt
YWxlcnRzLWluLW5ldy1hYm91dC1ibGFuay13aW5kb3cuaHRtbCAqLzsgfTsKLQkJNTFEMTI0OTgx
RTc2M0IwMjAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0b3JhZ2UubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQxMjQ5NzFFNzYzQUY4MDAyQjI4MjAg
LyogV0tIVFRQQ29va2llU3RvcmFnZS5tbSAqLzsgfTsKKwkJNTFEMTI0OTgxRTc2M0IwMjAwMkIy
ODIwIC8qIFdLSFRUUENvb2tpZVN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFEMTI0OTcxRTc2M0FGODAwMkIyODIwIC8qIFdLSFRUUENvb2tp
ZVN0b3JlLm1tICovOyB9OwogCQk1MUQxMjQ5QjFFNzg1NDI1MDAyQjI4MjAgLyogQ29va2llTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NkYzRjI5MDEzMzQyRkVCMDBBNkJGMTkgLyogQ29va2llTWFuYWdlci5jcHAgKi87IH07CiAJCTUx
RTVDNzAyMTkxOUMzQjIwMEQ4QjNFMSAvKiBzaW1wbGUyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNzgwMzYxOTE5QUZGODAwMTgy
OUEyIC8qIHNpbXBsZTIuaHRtbCAqLzsgfTsKIAkJNTFFNUM3MDMxOTE5QzNCMjAwRDhCM0UxIC8q
IHNpbXBsZTMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUU3ODAzNzE5MTlBRkY4MDAxODI5QTIgLyogc2ltcGxlMy5odG1sICovOyB9
OwpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAKIAkJNTFDQjRBRDcxQjNBMDc5QzAwQzFCMUM2IC8qIE1v
ZGFsQWxlcnRzU1BJLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1v
ZGFsQWxlcnRzU1BJLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDRDFDNkEx
QjM4Q0UzNjAwMTQyQ0E1IC8qIE1vZGFsQWxlcnRzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gTW9kYWxBbGVydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxQ0QxQzcxMUIzOEQ0ODQwMDE0MkNBNSAvKiBtb2RhbC1hbGVydHMtaW4tbmV3LWFi
b3V0LWJsYW5rLXdpbmRvdy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1vZGFsLWFsZXJ0cy1pbi1uZXctYWJv
dXQtYmxhbmstd2luZG93Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQx
MjQ5NzFFNzYzQUY4MDAyQjI4MjAgLyogV0tIVFRQQ29va2llU3RvcmFnZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLSFRUUENvb2tpZVN0b3JhZ2UubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRDEyNDk3MUU3NjNBRjgwMDJCMjgyMCAvKiBX
S0hUVFBDb29raWVTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdLSFRUUENvb2tpZVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUU1QzcwNDE5MTlFQTVGMDBEOEIzRTEgLyogU2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExp
c3RJdGVtSW5MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNo
b3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxRTZBODkyMUQyRjFCRUMwMEMwMDRCNiAvKiBMb2NhbFN0b3Jh
Z2VDbGVhci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvY2Fs
U3RvcmFnZUNsZWFyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU2QTg5NTFE
MkYxQzc3MDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIuaHRtbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
aHRtbDsgcGF0aCA9IExvY2FsU3RvcmFnZUNsZWFyLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNjUxLDcgKzE2NTEsNyBAQAogCQkJCTUxMjBDODNDMUU2NzUwNzkwMDI1QjI1
MCAvKiBXZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gKi8sCiAJCQkJNUM5RTU2ODQxREY5
MTQzRDAwQzlFRTMzIC8qIFdlYnNpdGVQb2xpY2llcy5tbSAqLywKIAkJCQkxRjgzNTcxQTFEM0ZG
QjBFMDBFMzk2N0IgLyogV0tCYWNrRm9yd2FyZExpc3QubW0gKi8sCi0JCQkJNTFEMTI0OTcxRTc2
M0FGODAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0b3JhZ2UubW0gKi8sCisJCQkJNTFEMTI0OTcx
RTc2M0FGODAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0b3JlLm1tICovLAogCQkJCTM3NUUwRTE1
MUQ2NjY3NDQwMEVGRUMyQyAvKiBXS05TTnVtYmVyLm1tICovLAogCQkJCTM3QjQ3RTJFMUQ2NEU3
Q0EwMDVGNEVGRiAvKiBXS09iamVjdC5tbSAqLywKIAkJCQkyRDAwMDY1RDFDMUY1ODk0MDA4OEU2
QTcgLyogV0tQREZWaWV3UmVzaXplQ3Jhc2gubW0gKi8sCkBAIC0yNzMyLDcgKzI3MzIsNyBAQAog
CQkJCTdDQ0U3RUY0MUE0MTFBRTYwMDQ0N0M0QyAvKiBGaW5kTWF0Y2hlcy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDODNFMDQwMUQwQTYzRTMwMEZFQkNGMyAvKiBGaXJzdFJlc3BvbmRlclNjcm9s
bGluZ1Bvc2l0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwQkMxRDBBNjUwNzAwRkVC
Q0YzIC8qIEZpeGVkTGF5b3V0U2l6ZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxRDEyNDk4MUU3
NjNCMDIwMDJCMjgyMCAvKiBXS0hUVFBDb29raWVTdG9yYWdlLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTFEMTI0OTgxRTc2M0IwMjAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0b3JlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdFRjUxQTQxMUFFNjAwNDQ3QzRDIC8qIEZvcmNlUmVwYWludC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0I0N0UzMDFENjRFN0NBMDA1RjRFRkYgLyogV0tPYmpl
Y3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VDMDFBNDExQTdFMDA0NDdDNEMgLyogRnJh
Z21lbnROYXZpZ2F0aW9uLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS0hUVFBDb29raWVTdG9yYWdlLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0K
c2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyQ29jb2EvV0tIVFRQQ29va2llU3RvcmFnZS5tbQpyZW5hbWUgdG8gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXgg
MTI5OGQ3MGQ2NDAuLjBkOGE2NWI3ZGI5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJDb2NvYS9XS0hUVFBDb29raWVTdG9yYWdlLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC0z
NCwxNiArMzQsMzYgQEAKICNpZiBXS19BUElfRU5BQkxFRAogCiBzdGF0aWMgYm9vbCBnb3RGbGFn
OwordWludDY0X3Qgb2JzZXJ2ZXJDYWxsYmFja3M7CitSZXRhaW5QdHI8V0tIVFRQQ29va2llU3Rv
cmU+IGdsb2JhbENvb2tpZVN0b3JlOwogCi1URVNUKFdlYktpdDIsIFdLSFRUUENvb2tpZVN0b3Jh
Z2UpCitAaW50ZXJmYWNlIENvb2tpZU9ic2VydmVyIDogTlNPYmplY3Q8V0tIVFRQQ29va2llU3Rv
cmVPYnNlcnZlcj4KKy0gKHZvaWQpY29va2llc0RpZENoYW5nZUluQ29va2llU3RvcmU6KFdLSFRU
UENvb2tpZVN0b3JlICopY29va2llU3RvcmU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBDb29r
aWVPYnNlcnZlcgorCistICh2b2lkKWNvb2tpZXNEaWRDaGFuZ2VJbkNvb2tpZVN0b3JlOihXS0hU
VFBDb29raWVTdG9yZSAqKWNvb2tpZVN0b3JlCit7CisgICAgQVNTRVJUX0VRKGNvb2tpZVN0b3Jl
LCBnbG9iYWxDb29raWVTdG9yZS5nZXQoKSk7CisgICAgKytvYnNlcnZlckNhbGxiYWNrczsKK30K
KworQGVuZAorCitURVNUKFdlYktpdDIsIFdLSFRUUENvb2tpZVN0b3JlKQogewogICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpAIk9o
IGhlbGxvIiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmci
XV07CiAKLSAgICBSZXRhaW5QdHI8V0tIVFRQQ29va2llU3RvcmU+IGNvb2tpZVN0b3JlID0gW1dL
V2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXS5faHR0cENvb2tpZVN0b3JlOworICAg
IGdsb2JhbENvb2tpZVN0b3JlID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3Jl
XS5faHR0cENvb2tpZVN0b3JlOworICAgIFJldGFpblB0cjxDb29raWVPYnNlcnZlcj4gb2JzZXJ2
ZXIxID0gYWRvcHROUyhbW0Nvb2tpZU9ic2VydmVyIGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWlu
UHRyPENvb2tpZU9ic2VydmVyPiBvYnNlcnZlcjIgPSBhZG9wdE5TKFtbQ29va2llT2JzZXJ2ZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBbZ2xvYmFsQ29va2llU3RvcmUgYWRkT2JzZXJ2ZXI6b2JzZXJ2
ZXIxLmdldCgpXTsKKyAgICBbZ2xvYmFsQ29va2llU3RvcmUgYWRkT2JzZXJ2ZXI6b2JzZXJ2ZXIy
LmdldCgpXTsKIAogICAgIE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpjb29raWVzID0gbmlsOwot
ICAgIFtjb29raWVTdG9yZSBmZXRjaENvb2tpZXM6W2Nvb2tpZXNQdHIgPSAmY29va2llc10oTlNB
cnJheTxOU0hUVFBDb29raWUgKj4gKm5zQ29va2llcykgeworICAgIFtnbG9iYWxDb29raWVTdG9y
ZSBhbGxDb29raWVzOltjb29raWVzUHRyID0gJmNvb2tpZXNdKE5TQXJyYXk8TlNIVFRQQ29va2ll
ICo+ICpuc0Nvb2tpZXMpIHsKICAgICAgICAgKmNvb2tpZXNQdHIgPSBbbnNDb29raWVzIHJldGFp
bl07CiAgICAgICAgIGdvdEZsYWcgPSB0cnVlOwogICAgIH1dOwpAQCAtNzMsMjggKzkzLDMwIEBA
IFRFU1QoV2ViS2l0MiwgV0tIVFRQQ29va2llU3RvcmFnZSkKICAgICAgICAgTlNIVFRQQ29va2ll
TWF4aW11bUFnZTogQCIxMDAwMCIsCiAgICAgfV07CiAKLSAgICBbY29va2llU3RvcmUgc2V0Q29v
a2llOmNvb2tpZTEuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6W10oKXsKKyAgICBbZ2xvYmFsQ29v
a2llU3RvcmUgc2V0Q29va2llOmNvb2tpZTEuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6W10oKXsK
ICAgICAgICAgZ290RmxhZyA9IHRydWU7CiAgICAgfV07CiAKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmdvdEZsYWcpOwogICAgIGdvdEZsYWcgPSBmYWxzZTsKIAotICAgIFtjb29raWVT
dG9yZSBzZXRDb29raWU6Y29va2llMi5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpbXSgpeworICAg
IFtnbG9iYWxDb29raWVTdG9yZSBzZXRDb29raWU6Y29va2llMi5nZXQoKSBjb21wbGV0aW9uSGFu
ZGxlcjpbXSgpewogICAgICAgICBnb3RGbGFnID0gdHJ1ZTsKICAgICB9XTsKIAogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290RmxhZyk7CiAgICAgZ290RmxhZyA9IGZhbHNlOwogCi0g
ICAgW2Nvb2tpZVN0b3JlIGZldGNoQ29va2llczpbY29va2llc1B0ciA9ICZjb29raWVzXShOU0Fy
cmF5PE5TSFRUUENvb2tpZSAqPiAqbnNDb29raWVzKSB7CisgICAgW2dsb2JhbENvb2tpZVN0b3Jl
IGFsbENvb2tpZXM6W2Nvb2tpZXNQdHIgPSAmY29va2llc10oTlNBcnJheTxOU0hUVFBDb29raWUg
Kj4gKm5zQ29va2llcykgewogICAgICAgICAqY29va2llc1B0ciA9IFtuc0Nvb2tpZXMgcmV0YWlu
XTsKICAgICAgICAgZ290RmxhZyA9IHRydWU7CiAgICAgfV07CiAKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmdvdEZsYWcpOworICAgIGdvdEZsYWcgPSBmYWxzZTsKIAogICAgIEFTU0VS
VF9FUShjb29raWVzLmNvdW50LCAydSk7CisgICAgQVNTRVJUX0VRKG9ic2VydmVyQ2FsbGJhY2tz
LCA0dSk7CiAKICAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIDogY29va2llcykgewogICAg
ICAgICBpZiAoW2Nvb2tpZS5uYW1lIGlzRXF1YWw6QCJDb29raWVOYW1lIl0pIHsKQEAgLTExMiw4
ICsxMzQsMzcgQEAgVEVTVChXZWJLaXQyLCBXS0hUVFBDb29raWVTdG9yYWdlKQogICAgICAgICAg
ICAgQVNTRVJUX0ZBTFNFKGNvb2tpZTIuZ2V0KCkuc2Vzc2lvbk9ubHkpOwogICAgICAgICB9CiAg
ICAgfQorICAgIFtjb29raWVzIHJlbGVhc2VdOworCisgICAgW2dsb2JhbENvb2tpZVN0b3JlIGRl
bGV0ZUNvb2tpZTpjb29raWUyLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOltdKCl7CisgICAgICAg
IGdvdEZsYWcgPSB0cnVlOworICAgIH1dOwogCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZnb3RGbGFnKTsKKyAgICBnb3RGbGFnID0gZmFsc2U7CisKKyAgICBbZ2xvYmFsQ29va2llU3Rv
cmUgYWxsQ29va2llczpbY29va2llc1B0ciA9ICZjb29raWVzXShOU0FycmF5PE5TSFRUUENvb2tp
ZSAqPiAqbnNDb29raWVzKSB7CisgICAgICAgICpjb29raWVzUHRyID0gW25zQ29va2llcyByZXRh
aW5dOworICAgICAgICBnb3RGbGFnID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZ290RmxhZyk7CisgICAgZ290RmxhZyA9IGZhbHNlOworCisgICAgQVNT
RVJUX0VRKGNvb2tpZXMuY291bnQsIDF1KTsKKyAgICBBU1NFUlRfRVEob2JzZXJ2ZXJDYWxsYmFj
a3MsIDZ1KTsKKworICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUgOiBjb29raWVzKSB7Cisg
ICAgICAgIEFTU0VSVF9UUlVFKFtjb29raWUxLmdldCgpLnBhdGggaXNFcXVhbFRvU3RyaW5nOmNv
b2tpZS5wYXRoXSk7CisgICAgICAgIEFTU0VSVF9UUlVFKFtjb29raWUxLmdldCgpLnZhbHVlIGlz
RXF1YWxUb1N0cmluZzpjb29raWUudmFsdWVdKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoW2Nvb2tp
ZTEuZ2V0KCkuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpjb29raWUuZG9tYWluXSk7CisgICAgICAg
IEFTU0VSVF9UUlVFKGNvb2tpZTEuZ2V0KCkuc2VjdXJlKTsKKyAgICAgICAgQVNTRVJUX1RSVUUo
Y29va2llMS5nZXQoKS5zZXNzaW9uT25seSk7CisgICAgfQogICAgIFtjb29raWVzIHJlbGVhc2Vd
OworCisgICAgW2dsb2JhbENvb2tpZVN0b3JlIHJlbW92ZU9ic2VydmVyOm9ic2VydmVyMS5nZXQo
KV07CisgICAgW2dsb2JhbENvb2tpZVN0b3JlIHJlbW92ZU9ic2VydmVyOm9ic2VydmVyMi5nZXQo
KV07CiB9CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304706</attachid>
            <date>2017-03-16 15:37:46 -0700</date>
            <delta_ts>2017-03-16 16:30:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169776-20170316153811.patch</filename>
            <type>text/plain</type>
            <size>55532</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0MDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTU4ZDc2NDkxNzVlMWMx
NTdjNzc4ZTYwMzQyMjliMDJlMTYwNzNlMC4uZjMxOTEzYWIxODIyOWRlODZmYjRiNDEwN2NlMDVj
NmRiOWJjNzEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE3LTAzLTE2ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgdGhlIFdLSFRU
UENvb2tpZVN0b3JlIEFQSSB0byBiZSBzaW1wbGVyIGFuZCBhZGQgb2JzZXJ2ZXJzLgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzEwOTYwMDA+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5Nzc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3Rl
bnNlbi4KKyAgICAgICAgCisgICAgICAgIFdoZW4gcmV2aWV3aW5nIHRoZSBBUEkgaW50ZXJuYWxs
eSB3ZSByZWFsaXplZCB0aGUgTlNIVFRQQ29va2llU3RvcmFnZSBtb2RlbCBkb2Vzbid0CisgICAg
ICAgIG5lY2Vzc2FyaWx5IGZpdCBwZXJmZWN0bHksIGFuZCB0aGF0IHRvIGhhbmRsZSBwYXJ0aXRp
b25lZCBjb29raWVzIGdvaW5nIGZvcndhcmQgd2UKKyAgICAgICAgbmVlZCB0byBiZSBtdWNoIHNp
bXBsZXIgcmlnaHQgbm93LgorICAgICAgICAKKyAgICAgICAgV2UgYWxzbyByZWFsaXplZCB0aGF0
IHdlIHNob3VsZCBpbXBsZW1lbnQgdGhlICJjb29raWUgc3RvcmUgY2hhbmdlZCIgb2JzZXJ2ZXIg
Zm9yCisgICAgICAgIGFueSBjbGllbnRzIHRoYXQgbWlnaHQgYmUgcHJvdmlkaW5nIGEgY29va2ll
IHZpZXdpbmcgQVBJLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29r
aWVTdG9yZSk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKToK
KyAgICAgICAgKEFQSTo6QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI6OkFQSVdlYkNv
b2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
OjpyZWdpc3Rlck9ic2VydmVyKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJl
Z2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNE
aWRDaGFuZ2UpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJE
ZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojp1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKToKKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6
SFRUUENvb2tpZVN0b3JlOjpyZW1vdmVDb29raWVzU2luY2VEYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpnZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5oOgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENv
b2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVT
dG9yZS5tbToKKyAgICAgICAgKFdLSFRUUENvb2tpZVN0b3JlT2JzZXJ2ZXI6OldLSFRUUENvb2tp
ZVN0b3JlT2JzZXJ2ZXIpOgorICAgICAgICAoLVtXS0hUVFBDb29raWVTdG9yZSBkZWFsbG9jXSk6
CisgICAgICAgICgtW1dLSFRUUENvb2tpZVN0b3JlIGFsbENvb2tpZXM6XSk6CisgICAgICAgICgt
W1dLSFRUUENvb2tpZVN0b3JlIGFkZE9ic2VydmVyOl0pOgorICAgICAgICAoLVtXS0hUVFBDb29r
aWVTdG9yZSByZW1vdmVPYnNlcnZlcjpdKToKKyAgICAgICAgKC1bV0tIVFRQQ29va2llU3RvcmUg
ZmV0Y2hDb29raWVzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0hUVFBDb29raWVTdG9yZSBm
ZXRjaENvb2tpZXNGb3JVUkw6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLSFRUUENvb2tpZVN0b3JlIHNldENvb2tpZXM6Zm9yVVJMOm1haW5Eb2N1bWVudFVSTDpj
b21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tIVFRQQ29va2llU3Rv
cmUgcmVtb3ZlQ29va2llc1NpbmNlRGF0ZTpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tIVFRQQ29va2llU3RvcmUgc2V0Q29va2llQWNjZXB0UG9saWN5OmNvbXBs
ZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoa2l0Q29va2llUG9saWN5VG9OU0Nv
b2tpZVBvbGljeSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLSFRUUENvb2tpZVN0b3JlIGZldGNo
Q29va2llQWNjZXB0UG9saWN5Ol0pOiBEZWxldGVkLgorCisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6dW5yZWdpc3Rlck9ic2VydmVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNl
cnZlckNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFu
YWdlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6T2Jz
ZXJ2ZXI6On5PYnNlcnZlcik6CisKKyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IGZvciBpbnRlcmVz
dGVkIGNsaWVudHMgdG8gbGlzdGVuIGZvciB0aGUgY3JlYXRpb24gb2YgbmV3IFdlYlByb2Nlc3NQ
b29scywKKyAgICAgICAgd2hpY2ggaXMgbmVlZGVkIGJ5IEFQSUhUVFBDb29raWVTdG9yZToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0Ojpn
ZW5lcmF0ZUxpc3RlbmVySWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OnByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lckZ1bmN0aW9uTWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVu
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlTm90aWZpY2F0aW9ucyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDE3LTAz
LTE2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQ2xlYW4gdXAgV0tDb250ZW50RXh0ZW5zaW9uIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IDUwOTY1ZGE5YmJj
NzY2NTczY2QyN2U5MzA5MzlmMTM3NTI4NTBhZWQuLjAzNzJmNTc0NGNlZTQwYjRiNzZjNWQzNTE3
ZDE1NTViZDY0OTA2ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJSFRUUENvb2tpZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQyLDYgKzQyLDExIEBAIEhUVFBDb29raWVTdG9y
ZTo6SFRUUENvb2tpZVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAK
IEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiB7CisgICAgQVNTRVJUKG1fb2Jz
ZXJ2ZXJzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5KTsKKyAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOworCisgICAg
dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhU
VFBDb29raWVTdG9yZTo6Y29va2llcyhGdW5jdGlvbjx2b2lkIChjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNTUsMTcgKzYwLDYgQEAgdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMoRnVuY3Rpb248dm9pZCAoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mKT4mJgogICAgIH0pOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llcyhjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgRnVuY3Rpb248dm9pZCAoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBhdXRv
JiBkYXRhU3RvcmUgPSBtX293bmluZ0RhdGFTdG9yZS53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAg
YXV0byBwb29sID0gZGF0YVN0b3JlLnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKTsKLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLQotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tp
ZXMoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCB1cmwsIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsK
LSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29va2llcyk7Ci0gICAgfSk7Ci19Ci0KIHZvaWQg
SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUs
IEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byYgZGF0
YVN0b3JlID0gbV9vd25pbmdEYXRhU3RvcmUud2Vic2l0ZURhdGFTdG9yZSgpOwpAQCAtNzcsNjIg
KzcxLDEyNSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0Q29va2llKGNvbnN0IFdlYkNvcmU6
OkNvb2tpZSYgY29va2llLCBGdW5jdGlvbjx2b2lkICgpPgogICAgIH0pOwogfQogCi12b2lkIEhU
VFBDb29raWVTdG9yZTo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYg
Y29va2llcywgY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIGNvbnN0IFdlYkNvcmU6OlVSTCYgbWFp
bkRvY3VtZW50VVJMLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9p
ZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNv
b2tpZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRv
JiBkYXRhU3RvcmUgPSBtX293bmluZ0RhdGFTdG9yZS53ZWJzaXRlRGF0YVN0b3JlKCk7CiAgICAg
YXV0byBwb29sID0gZGF0YVN0b3JlLnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKTsKICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKIAotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tp
ZXMoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCwg
W3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgY29va2llTWFu
YWdlci0+ZGVsZXRlQ29va2llKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgY29va2llLCBbcG9vbCA9
IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK2NsYXNzIEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyIDog
cHVibGljIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIGV4
cGxpY2l0IEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKEFQSTo6SFRUUENvb2tpZVN0
b3JlJiBjb29raWVTdG9yZSkKKyAgICAgICAgOiBtX2Nvb2tpZVN0b3JlKGNvb2tpZVN0b3JlKQor
ICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKCkgZmlu
YWwKKyAgICB7CisgICAgICAgIG1fY29va2llU3RvcmUuY29va2llc0RpZENoYW5nZSgpOworICAg
IH0KKworICAgIHZvaWQgbWFuYWdlckRlc3Ryb3llZCgpIGZpbmFsCisgICAgeworICAgICAgICBt
X2Nvb2tpZVN0b3JlLmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKTsKKyAgICB9CisKKyAgICBBUEk6
OkhUVFBDb29raWVTdG9yZSYgbV9jb29raWVTdG9yZTsKK307CisKK3ZvaWQgSFRUUENvb2tpZVN0
b3JlOjpyZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZlcikKIHsKKyAgICBtX29ic2Vy
dmVycy5hZGQoJm9ic2VydmVyKTsKKworICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5h
Z2VyUHJveHkpOworCisgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKKwogICAg
IGF1dG8mIGRhdGFTdG9yZSA9IG1fb3duaW5nRGF0YVN0b3JlLndlYnNpdGVEYXRhU3RvcmUoKTsK
LSAgICBhdXRvIHBvb2wgPSBkYXRhU3RvcmUucHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIGF1dG8qIHBvb2wgPSBkYXRhU3Rv
cmUucHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlTm90aWZpY2F0aW9ucygpOwogCi0gICAgY29v
a2llTWFuYWdlci0+ZGVsZXRlQ29va2llKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBpZiAoIXBvb2wpIHsKKyAgICAgICAgcmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50
PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCAqbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tpZVN0b3JlOjpy
ZW1vdmVDb29raWVzU2luY2VEYXRlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9p
bnQgZGF0ZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgSFRU
UENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogewot
ICAgIGF1dG8mIGRhdGFTdG9yZSA9IG1fb3duaW5nRGF0YVN0b3JlLndlYnNpdGVEYXRhU3RvcmUo
KTsKLSAgICBhdXRvIHBvb2wgPSBkYXRhU3RvcmUucHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpOwotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50
PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZXJzLnJlbW92
ZSgmb2JzZXJ2ZXIpOwogCi0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQWxsQ29va2llc01vZGlm
aWVkU2luY2UoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkYXRlLCBbcG9vbCA9IFdURk1vdmUocG9v
bCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENhbGxi
YWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAg
ICB9KTsKKyAgICBpZiAoIW1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpCisgICAgICAgIG1fb2JzZXJ2
ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9y
ZS53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKKworICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpCisgICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7CisKKyAg
ICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOworICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOworICAgIG1fY29va2llTWFuYWdlclBy
b3h5T2JzZXJ2ZXIgPSBudWxscHRyOworfQorCit2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2ll
c0RpZENoYW5nZSgpCit7CisgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG1fb2JzZXJ2ZXJzKQor
ICAgICAgICBvYnNlcnZlci0+Y29va2llc0RpZENoYW5nZSgqdGhpcyk7CiB9CiAKLXZvaWQgSFRU
UENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9p
ZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIGF1dG8m
IGRhdGFTdG9yZSA9IG1fb3duaW5nRGF0YVN0b3JlLndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICBh
dXRvIHBvb2wgPSBkYXRhU3RvcmUucHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogCi0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShkYXRhU3RvcmUuc2Vzc2lvbklEKCksIHBvbGljeSwgW3Bvb2wgPSBX
VEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci0gICAgfSk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdp
c3Rlck9ic2VydmVyKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5
T2JzZXJ2ZXIpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwor
CisgICAgYXV0byogcG9vbCA9IGRhdGFTdG9yZS5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VO
b3RpZmljYXRpb25zKCk7CisKKyAgICBpZiAoIXBvb2wpIHsKKyAgICAgICAgcmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCAqbV9jb29raWVN
YW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tpZVN0b3JlOjpnZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KEZ1bmN0aW9uPHZvaWQgKEhUVFBDb29raWVBY2NlcHRQb2xpY3kp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9y
TmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKIHsKLSAgICBhdXRvJiBkYXRhU3RvcmUgPSBt
X293bmluZ0RhdGFTdG9yZS53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgYXV0byBwb29sID0gZGF0
YVN0b3JlLnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKKyAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcik7CisKKyAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
PSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3Ro
aXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgeworICAgICAgICBBU1NFUlQobV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiAKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgW3Bvb2wgPSBXVEZNb3Zl
KHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikg
ewotICAgICAgICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkKLSAgICAg
ICAgICAgIHBvbGljeSA9IEhUVFBDb29raWVBY2NlcHRQb2xpY3lOZXZlcjsKKyAgICAgICAgaWYg
KCFtX293bmluZ0RhdGFTdG9yZS53ZWJzaXRlRGF0YVN0b3JlKCkuaXNBc3NvY2lhdGVkUHJvY2Vz
c1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHBvbGljeSk7CisgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSBuZXdQcm9jZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5PigpOworICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rl
ck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQo
KSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOworICAgICAgICB1bnJlZ2lzdGVyRm9y
TmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiAgICAgfSk7CiB9CiAKK3ZvaWQgSFRUUENv
b2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKK3sK
KyAgICBpZiAobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQorICAgICAg
ICBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lciht
X3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOworCisgICAgbV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gMDsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
QVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29r
aWVTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAppbmRleCBjNDA3ODgzZWZhMGQ0MWVjMzlkYjgxMDEzMmE4OTM3NGU2OWRhZTIxLi42Zjlm
NDc2ZTgwMThhYjFkZjExODYyOGNkYzA3MjUzMTBlNjIzNjY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJIVFRQQ29va2llQWNjZXB0UG9s
aWN5LmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM1
LDggKzM2LDEzIEBAIGNsYXNzIFVSTDsKIHN0cnVjdCBDb29raWU7CiB9CiAKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OworfQorCiBuYW1lc3BhY2UgQVBJ
IHsKIAorY2xhc3MgQVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI7CiBjbGFzcyBXZWJz
aXRlRGF0YVN0b3JlOwogCiBjbGFzcyBIVFRQQ29va2llU3RvcmUgZmluYWwgOiBwdWJsaWMgT2Jq
ZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkhUVFBDb29raWVTdG9yZT4gewpAQCAtNDksMjEgKzU1LDM0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVFRQQ29va2llU3RvcmUoKTsKIAogICAgIHZvaWQg
Y29va2llcyhGdW5jdGlvbjx2b2lkIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICB2b2lkIGNvb2tpZXMoY29uc3QgV2ViQ29yZTo6VVJM
JiwgRnVuY3Rpb248dm9pZCAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21w
bGV0aW9uSGFuZGxlcik7Ci0KICAgICB2b2lkIHNldENvb2tpZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICB2b2lkIHNl
dENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mLCBjb25zdCBXZWJDb3JlOjpV
UkwmLCBjb25zdCBXZWJDb3JlOjpVUkwmIG1haW5Eb2N1bWVudFVSTCwgRnVuY3Rpb248dm9pZCAo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgV2Vi
Q29yZTo6Q29va2llJiwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAK
LSAgICB2b2lkIHJlbW92ZUNvb2tpZXNTaW5jZURhdGUoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9j
azo6dGltZV9wb2ludCwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Cisg
ICAgY2xhc3MgT2JzZXJ2ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+T2JzZXJ2
ZXIoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoSFRUUENvb2tp
ZVN0b3JlJikgPSAwOworICAgIH07CisKKyAgICB2b2lkIHJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2
ZXImKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYpOworCisgICAgdm9p
ZCBjb29raWVzRGlkQ2hhbmdlKCk7CisgICAgdm9pZCBjb29raWVNYW5hZ2VyRGVzdHJveWVkKCk7
CiAKLSAgICB2b2lkIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViS2l0OjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAg
ICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koRnVuY3Rpb248dm9pZCAoV2ViS2l0OjpI
VFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgCiBwcml2
YXRlOgogICAgIEhUVFBDb29raWVTdG9yZShXZWJzaXRlRGF0YVN0b3JlJik7CiAKKyAgICB2b2lk
IHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CisKICAgICBXZWJzaXRlRGF0
YVN0b3JlJiBtX293bmluZ0RhdGFTdG9yZTsKKyAgICBIYXNoU2V0PE9ic2VydmVyKj4gbV9vYnNl
cnZlcnM7CisKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eSogbV9vYnNlcnZlZENv
b2tpZU1hbmFnZXJQcm94eSB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJV2Vi
Q29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+IG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI7
CisKKyAgICB1aW50NjRfdCBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
eyAwIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLSFRUUENvb2tpZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLSFRUUENvb2tpZVN0b3JlLmgKaW5kZXggNWYwM2U2Y2MyODdhNDljYTNkYmM2MTg3
NmM3NWI3OTBhZjQ0YjI1MS4uYWM1MjE5MTUzNDk3YmRmZjUyMGExMmU2ODY0N2NjZGEwYWI5ZjE5
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBD
b29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tI
VFRQQ29va2llU3RvcmUuaApAQCAtMzEsNiArMzEsMTMgQEAKIAogTlNfQVNTVU1FX05PTk5VTExf
QkVHSU4KIAorQGNsYXNzIFdLSFRUUENvb2tpZVN0b3JlOworCitAcHJvdG9jb2wgV0tIVFRQQ29v
a2llU3RvcmVPYnNlcnZlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpY29va2llc0Rp
ZENoYW5nZUluQ29va2llU3RvcmU6KFdLSFRUUENvb2tpZVN0b3JlICopY29va2llU3RvcmU7CitA
ZW5kCisKIC8qIQogIEEgV0tIVFRQQ29va2llU3RvcmUgb2JqZWN0IGFsbG93cyBtYW5hZ2luZyB0
aGUgSFRUUCBjb29raWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgV0tXZWJzaXRlRGF0
YVN0b3JlLgogICovCkBAIC00MiwxMiArNDksNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3N4
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiAvKiEgQGFic3RyYWN0IEZldGNoZXMgYWxs
IHN0b3JlZCBjb29raWVzLgogIEBwYXJhbSBjb21wbGV0aW9uSGFuZGxlciBBIGJsb2NrIHRvIGlu
dm9rZSB3aXRoIHRoZSBmZXRjaGVkIGNvb2tpZXMuCiAgKi8KLS0gKHZvaWQpZmV0Y2hDb29raWVz
Oih2b2lkICheKShOU0FycmF5PE5TSFRUUENvb2tpZSAqPiAqKSljb21wbGV0aW9uSGFuZGxlcjsK
LQotLyohIEBhYnN0cmFjdCBGZXRjaGVzIGFsbCBvZiB0aGUgc3RvcmVkIGNvb2tpZXMgZm9yIHRo
ZSBnaXZlbiBVUkwuCi0gQHBhcmFtIGNvbXBsZXRpb25IYW5kbGVyIEEgYmxvY2sgdG8gaW52b2tl
IHdpdGggdGhlIGZldGNoZWQgY29va2llcy4KLSAqLwotLSAodm9pZClmZXRjaENvb2tpZXNGb3JV
Ukw6KE5TVVJMICopdXJsIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TSFRU
UENvb2tpZSAqPiAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpYWxsQ29va2llczoodm9p
ZCAoXikoTlNBcnJheTxOU0hUVFBDb29raWUgKj4gKikpY29tcGxldGlvbkhhbmRsZXI7CiAKIC8q
ISBAYWJzdHJhY3QgU2V0IGEgY29va2llLgogIEBwYXJhbSBjb29raWUgVGhlIGNvb2tpZSB0byBz
ZXQuCkBAIC01NSwzNSArNTcsMjIgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKQogICovCiAtICh2b2lkKXNldENvb2tpZTooTlNIVFRQQ29v
a2llICopY29va2llIGNvbXBsZXRpb25IYW5kbGVyOihudWxsYWJsZSB2b2lkICheKSgpKWNvbXBs
ZXRpb25IYW5kbGVyOwogCi0vKiEgQGFic3RyYWN0IEFkZHMgYW4gYXJyYXkgY29va2llcyB0byB0
aGUgY29va2llIHN0b3JlLCBmb2xsb3dpbmcgdGhlIGNvb2tpZSBhY2NlcHQgcG9saWN5LgotIEBw
YXJhbSBjb29raWVzIFRoZSBjb29raWVzIHRvIHNldC4KLSBAcGFyYW0gVVJMIFRoZSBVUkwgZnJv
bSB3aGljaCB0aGUgY29va2llcyB3ZXJlIHNlbnQuCi0gQHBhcmFtIG1haW5Eb2N1bWVudFVSTCBU
aGUgbWFpbiBkb2N1bWVudCBVUkwgdG8gYmUgdXNlZCBhcyBhIGJhc2UgZm9yIHRoZSAic2FtZSBk
b21haW4gYXMgbWFpbiBkb2N1bWVudCIgcG9saWN5LgotIEBwYXJhbSBjb21wbGV0aW9uSGFuZGxl
ciBBIGJsb2NrIHRvIGludm9rZSBvbmNlIHRoZSBjb29raWVzIGhhdmUgYmVlbiBzdG9yZWQuCi0g
Ki8KLS0gKHZvaWQpc2V0Q29va2llczooTlNBcnJheTxOU0hUVFBDb29raWUgKj4gKiljb29raWVz
IGZvclVSTDooTlNVUkwgKil1cmwgbWFpbkRvY3VtZW50VVJMOihudWxsYWJsZSBOU1VSTCAqKW1h
aW5Eb2N1bWVudFVSTCBjb21wbGV0aW9uSGFuZGxlcjoobnVsbGFibGUgdm9pZCAoXikoKSljb21w
bGV0aW9uSGFuZGxlcjsKLQogLyohIEBhYnN0cmFjdCBEZWxldGUgdGhlIHNwZWNpZmllZCBjb29r
aWUuCiAgQHBhcmFtIGNvbXBsZXRpb25IYW5kbGVyIEEgYmxvY2sgdG8gaW52b2tlIG9uY2UgdGhl
IGNvb2tpZSBoYXMgYmVlbiBkZWxldGVkLgogICovCiAtICh2b2lkKWRlbGV0ZUNvb2tpZTooTlNI
VFRQQ29va2llICopY29va2llIGNvbXBsZXRpb25IYW5kbGVyOihudWxsYWJsZSB2b2lkICheKSgp
KWNvbXBsZXRpb25IYW5kbGVyOwogCi0vKiEgQGFic3RyYWN0IERlbGV0ZSBhbGwgY29va2llcyBm
cm9tIHRoZSBjb29raWUgc3RvcmFnZSBzaW5jZSB0aGUgcHJvdmlkZWQgZGF0ZS4KLSBAcGFyYW0g
ZGF0ZSBUaGUgZGF0ZSBhZnRlciB3aGljaCBzZXQgY29va2llcyBzaG91bGQgYmUgcmVtb3ZlZC4K
LSBAcGFyYW0gY29tcGxldGlvbkhhbmRsZXIgQSBibG9jayB0byBpbnZva2Ugb25jZSB0aGUgY29v
a2llcyBoYXZlIGJlZW4gZGVsZXRlZC4KLSAqLwotLSAodm9pZClyZW1vdmVDb29raWVzU2luY2VE
YXRlOihOU0RhdGUgKilkYXRlIGNvbXBsZXRpb25IYW5kbGVyOihudWxsYWJsZSB2b2lkICheKSgp
KWNvbXBsZXRpb25IYW5kbGVyOwotCi0vKiEgQGFic3RyYWN0IFNldHMgdGhlIGNvb2tpZSBhY2Nl
cHQgcG9saWN5IHByZWZlcmVuY2Ugb2YgdGhlIHJlY2VpdmVyLgotIEBwYXJhbSBwb2xpY3kgVGhl
IGNvb2tpZSBhY2NlcHQgcG9saWN5IHRvIHNldC4KLSBAcGFyYW0gY29tcGxldGlvbkhhbmRsZXIg
QSBibG9jayB0byBpbnZva2Ugb25jZSB0aGUgcG9saWN5IGhhcyBiZWVuIHNldC4KKy8qISBAYWJz
dHJhY3QgQWRkcyBhIFdLSFRUUENvb2tpZVN0b3JlT2JzZXJ2ZXIgb2JqZWN0IHdpdGggdGhlIGNv
b2tpZSBzdG9yZS4KKyBAcGFyYW0gb2JzZXJ2ZXIgVGhlIG9ic2VydmVyIG9iamVjdCB0byBhZGQu
CisgQGRpc2N1c3Npb24gVGhlIG9ic2VydmVyIGlzIG5vdCByZXRhaW5lZCBieSB0aGUgcmVjZWl2
ZXIuIEl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkKKyB0byB1bnJlZ2lzdGVyIHRoZSBvYnNlcnZl
ciBiZWZvcmUgaXQgYmVjb21lcyBpbnZhbGlkLgogICovCi0tICh2b2lkKXNldENvb2tpZUFjY2Vw
dFBvbGljeTooTlNIVFRQQ29va2llQWNjZXB0UG9saWN5KXBvbGljeSBjb21wbGV0aW9uSGFuZGxl
cjoobnVsbGFibGUgdm9pZCAoXikoKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpYWRkT2Jz
ZXJ2ZXI6KGlkPFdLSFRUUENvb2tpZVN0b3JlT2JzZXJ2ZXI+KW9ic2VydmVyOwogCi0vKiEgQGFi
c3RyYWN0IEZldGNoZXMgdGhlIGNvb2tpZSBhY2NlcHQgcG9saWN5IHByZWZlcmVuY2Ugb2YgdGhl
IHJlY2VpdmVyLgotIEBwYXJhbSBjb21wbGV0aW9uSGFuZGxlciBBIGJsb2NrIHRvIGludm9rZSB3
aXRoIHRoZSBmZXRjaGVkIHBvbGljeS4KKy8qISBAYWJzdHJhY3QgUmVtb3ZlcyBhIFdLSFRUUENv
b2tpZVN0b3JlT2JzZXJ2ZXIgb2JqZWN0IGZyb20gdGhlIGNvb2tpZSBzdG9yZS4KKyBAcGFyYW0g
b2JzZXJ2ZXIgVGhlIG9ic2VydmVyIHRvIHJlbW92ZS4KICAqLwotLSAodm9pZClmZXRjaENvb2tp
ZUFjY2VwdFBvbGljeToodm9pZCAoXikoTlNIVFRQQ29va2llQWNjZXB0UG9saWN5KSljb21wbGV0
aW9uSGFuZGxlcjsKKy0gKHZvaWQpcmVtb3ZlT2JzZXJ2ZXI6KGlkPFdLSFRUUENvb2tpZVN0b3Jl
T2JzZXJ2ZXI+KW9ic2VydmVyOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IDNkOGQzZTFl
ZGIxM2UzNTE1ZmQyMjIzZTM2MzNiMTVmMGE3MzRhN2QuLjAxNGNmNTdiNTMyMTk0MjIzZGI5ZTFh
NGNkN2E2MGUwYjZlNWY0YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtMjgsMTEgKzI4LDEzIEBACiAK
ICNpZiBXS19BUElfRU5BQkxFRAogCi0jaW5jbHVkZSAiSFRUUENvb2tpZUFjY2VwdFBvbGljeS5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9D
b29raWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbXBvcnQgIkhUVFBDb29raWVBY2NlcHRQb2xpY3kuaCIKKyNpbXBvcnQgIldlYWtP
YmpDUHRyLmgiCisjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9Db29raWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVVJMLmg+CisjaW1wb3J0IDx3dGYvSGFz
aE1hcC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBzdGF0aWMgTlNBcnJheTxOU0hU
VFBDb29raWUgKj4gKmNvcmVDb29raWVzVG9OU0Nvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4mIGNvcmVDb29raWVzKQogewpAQCAtNDQsMTYgKzQ2LDM3IEBAIHN0YXRpYyBOU0Fy
cmF5PE5TSFRUUENvb2tpZSAqPiAqY29yZUNvb2tpZXNUb05TQ29va2llcyhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Q29vCiAgICAgcmV0dXJuIG5zQ29va2llczsKIH0KIAotQGltcGxlbWVudGF0aW9u
IFdLSFRUUENvb2tpZVN0b3JlCitjbGFzcyBXS0hUVFBDb29raWVTdG9yZU9ic2VydmVyIDogcHVi
bGljIEFQSTo6SFRUUENvb2tpZVN0b3JlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgV0tIVFRQQ29va2llU3RvcmVPYnNlcnZlcihpZDxXS0hUVFBDb29raWVTdG9yZU9ic2VydmVy
PiBvYnNlcnZlcikKKyAgICAgICAgOiBtX29ic2VydmVyKG9ic2VydmVyKQorICAgIHsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKEFQSTo6SFRUUENvb2tpZVN0
b3JlJiBjb29raWVTdG9yZSkgZmluYWwKKyAgICB7CisgICAgICAgIFttX29ic2VydmVyLmdldCgp
IGNvb2tpZXNEaWRDaGFuZ2VJbkNvb2tpZVN0b3JlOldlYktpdDo6d3JhcHBlcihjb29raWVTdG9y
ZSldOworICAgIH0KKworICAgIFdlYktpdDo6V2Vha09iakNQdHI8aWQ8V0tIVFRQQ29va2llU3Rv
cmVPYnNlcnZlcj4+IG1fb2JzZXJ2ZXI7Cit9OworCitAaW1wbGVtZW50YXRpb24gV0tIVFRQQ29v
a2llU3RvcmUgeworICAgIEhhc2hNYXA8aWQ8V0tIVFRQQ29va2llU3RvcmVPYnNlcnZlcj4sIHN0
ZDo6dW5pcXVlX3B0cjxXS0hUVFBDb29raWVTdG9yZU9ic2VydmVyPj4gX29ic2VydmVyczsKK30K
IAogLSAodm9pZClkZWFsbG9jCiB7CisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IF9vYnNlcnZl
cnMudmFsdWVzKCkpCisgICAgICAgIF9jb29raWVTdG9yZS0+dW5yZWdpc3Rlck9ic2VydmVyKCpv
YnNlcnZlcik7CisKICAgICBfY29va2llU3RvcmUtPkFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRU
UENvb2tpZVN0b3JlKCk7CiAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKLS0gKHZvaWQpZmV0
Y2hDb29raWVzOih2b2lkICheKShOU0FycmF5PE5TSFRUUENvb2tpZSAqPiAqKSljb21wbGV0aW9u
SGFuZGxlcgorLSAodm9pZClhbGxDb29raWVzOih2b2lkICheKShOU0FycmF5PE5TSFRUUENvb2tp
ZSAqPiAqKSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIF9jb29raWVTdG9yZS0+Y29va2llcyhb
aGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKV0oY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgYXV0byByYXdIYW5kbGVyID0g
KHZvaWQgKF4pKE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICopKWhhbmRsZXIuZ2V0KCk7CkBAIC02
MSwxNCArODQsNiBAQCAtICh2b2lkKWZldGNoQ29va2llczoodm9pZCAoXikoTlNBcnJheTxOU0hU
VFBDb29raWUgKj4gKikpY29tcGxldGlvbkhhbmRsZXIKICAgICB9KTsKIH0KIAotLSAodm9pZClm
ZXRjaENvb2tpZXNGb3JVUkw6KE5TVVJMICopdXJsIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0FycmF5PE5TSFRUUENvb2tpZSAqPiAqKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9j
b29raWVTdG9yZS0+Y29va2llcyh1cmwsIFtoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhh
bmRsZXIgY29weV0pXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgewot
ICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNBcnJheTxOU0hUVFBDb29raWUg
Kj4gKikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgcmF3SGFuZGxlcihjb3JlQ29va2llc1RvTlND
b29raWVzKGNvb2tpZXMpKTsKLSAgICB9KTsKLX0KLQogLSAodm9pZClzZXRDb29raWU6KE5TSFRU
UENvb2tpZSAqKWNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoKSljb21wbGV0aW9u
SGFuZGxlcgogewogICAgIF9jb29raWVTdG9yZS0+c2V0Q29va2llKGNvb2tpZSwgW2hhbmRsZXIg
PSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSldKCkgewpAQCAtODgsNjUgKzEwMywy
MyBAQCAtICh2b2lkKWRlbGV0ZUNvb2tpZTooTlNIVFRQQ29va2llICopY29va2llIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKSgpKWNvbXBsZQogICAgIH0pOwogfQogCi0tICh2b2lkKXNldENv
b2tpZXM6KE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICopY29va2llcyBmb3JVUkw6KE5TVVJMICop
VVJMIG1haW5Eb2N1bWVudFVSTDooTlNVUkwgKiltYWluRG9jdW1lbnRVUkwgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpYWRkT2JzZXJ2ZXI6
KGlkPFdLSFRUUENvb2tpZVN0b3JlT2JzZXJ2ZXI+KW9ic2VydmVyCiB7Ci0gICAgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4gY29yZUNvb2tpZXM7Ci0gICAgY29yZUNvb2tpZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShjb29raWVzLmNvdW50KTsKLSAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2ll
IDogY29va2llcykKLSAgICAgICAgY29yZUNvb2tpZXMudW5jaGVja2VkQXBwZW5kKGNvb2tpZSk7
CisgICAgYXV0byByZXN1bHQgPSBfb2JzZXJ2ZXJzLmFkZChvYnNlcnZlciwgbnVsbHB0cik7Cisg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgX2Nvb2tp
ZVN0b3JlLT5zZXRDb29raWVzKGNvcmVDb29raWVzLCBVUkwsIG1haW5Eb2N1bWVudFVSTCwgW2hh
bmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSldKCkgewotICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoKSloYW5kbGVyLmdldCgpOwotICAgICAgICBpZiAo
cmF3SGFuZGxlcikKLSAgICAgICAgICAgIHJhd0hhbmRsZXIoKTsKLSAgICB9KTsKKyAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxXS0hUVFBDb29raWVTdG9yZU9i
c2VydmVyPihvYnNlcnZlcik7CisgICAgX2Nvb2tpZVN0b3JlLT5yZWdpc3Rlck9ic2VydmVyKCpy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIH0KIAotLSAodm9pZClyZW1vdmVDb29raWVzU2luY2VE
YXRlOihOU0RhdGUgKilkYXRlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSgpKWNvbXBsZXRp
b25IYW5kbGVyCistICh2b2lkKXJlbW92ZU9ic2VydmVyOihpZDxXS0hUVFBDb29raWVTdG9yZU9i
c2VydmVyPilvYnNlcnZlcgogewotICAgIGF1dG8gc3lzdGVtQ2xvY2tUaW1lID0gc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludChzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpkdXJhdGlvbj4oc3RkOjpjaHJvbm86OmR1cmF0aW9u
PGRvdWJsZT4oZGF0ZS50aW1lSW50ZXJ2YWxTaW5jZTE5NzApKSk7CisgICAgYXV0byByZXN1bHQg
PSBfb2JzZXJ2ZXJzLnRha2Uob2JzZXJ2ZXIpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBfY29va2llU3RvcmUtPnJlbW92ZUNvb2tpZXNTaW5jZURhdGUoc3lzdGVt
Q2xvY2tUaW1lLCBbaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKV0o
KSB7Ci0gICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKSgpKWhhbmRsZXIuZ2V0KCk7
Ci0gICAgICAgIGlmIChyYXdIYW5kbGVyKQotICAgICAgICAgICAgcmF3SGFuZGxlcigpOwotICAg
IH0pOwotfQotCi0tICh2b2lkKXNldENvb2tpZUFjY2VwdFBvbGljeTooTlNIVFRQQ29va2llQWNj
ZXB0UG9saWN5KXBvbGljeSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoKSljb21wbGV0aW9u
SGFuZGxlcgotewotICAgIF9jb29raWVTdG9yZS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShw
b2xpY3ksIFtoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pXSgpIHsK
LSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKCkpaGFuZGxlci5nZXQoKTsKLSAg
ICAgICAgaWYgKHJhd0hhbmRsZXIpCi0gICAgICAgICAgICByYXdIYW5kbGVyKCk7Ci0gICAgfSk7
Ci19Ci0KLXN0YXRpYyBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kga2l0Q29va2llUG9saWN5VG9O
U0Nvb2tpZVBvbGljeShXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kga2l0UG9saWN5KQot
ewotICAgIHN3aXRjaCAoa2l0UG9saWN5KSB7Ci0gICAgY2FzZSBXZWJLaXQ6OkhUVFBDb29raWVB
Y2NlcHRQb2xpY3lBbHdheXM6Ci0gICAgICAgIHJldHVybiBOU0hUVFBDb29raWVBY2NlcHRQb2xp
Y3lBbHdheXM7Ci0gICAgY2FzZSBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3lOZXZlcjoK
LSAgICAgICAgcmV0dXJuIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU5ldmVyOwotICAgIGNhc2Ug
V2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW46
Ci0gICAgICAgIHJldHVybiBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1
bWVudERvbWFpbjsKLSAgICBjYXNlIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1
c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjoKLSAgICAgICAgLy8gQ2FzdCByZXF1aXJlZCBi
ZWNhdXNlIG9mIENGTmV0d29ya1NQSS4KLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TSFRU
UENvb2tpZUFjY2VwdFBvbGljeT4oTlNIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
TmV2ZXI7Ci19Ci0KLS0gKHZvaWQpZmV0Y2hDb29raWVBY2NlcHRQb2xpY3k6KHZvaWQgKF4pKE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeSkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfY29va2ll
U3RvcmUtPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koW2hhbmRsZXIgPSBhZG9wdE5TKFtjb21w
bGV0aW9uSGFuZGxlciBjb3B5XSldKFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xp
Y3kpIHsKLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSkpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgcmF3SGFuZGxlcihraXRDb29raWVQ
b2xpY3lUb05TQ29va2llUG9saWN5KHBvbGljeSkpOwotICAgIH0pOworICAgIF9jb29raWVTdG9y
ZS0+dW5yZWdpc3Rlck9ic2VydmVyKCpyZXN1bHQpOwogfQogCiAjcHJhZ21hIG1hcmsgV0tPYmpl
Y3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggZjQ3M2I1ZDgxMjE4ZWJm
MmYwMmE5YWZmZmJhYTVlMTQ5OTliOGFmNi4uYTczZGZkZGM5YjI3ZWMxOTFlZTc2MTYzOTU1NWJm
ZGJlZWM3ODg0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTI5Niw2ICsyOTYsMTAgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmEKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDExMDAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjb29raWVTdG9y
YWdlRGF0YSA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNyZWF0ZUlkZW50aWZ5aW5nRGF0
YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENv
b2tpZVN0b3JhZ2VdIF9jb29raWVTdG9yYWdlXSkpOworCisgICAgc3RhdGljIGludCBpID0gMDsK
KyAgICBbKE5TRGF0YSAqKWNvb2tpZVN0b3JhZ2VEYXRhLmdldCgpIHdyaXRlVG9GaWxlOltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL1ZvbHVtZXMvRGF0YS9GdWppVXNlci9kdW1wJWkucGxp
c3QiLCBpKytdIGF0b21pY2FsbHk6Tk9dOworCiAgICAgQVNTRVJUKHBhcmFtZXRlcnMudWlQcm9j
ZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKTsKICAgICBwYXJhbWV0ZXJzLnVp
UHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNv
b2tpZVN0b3JhZ2VEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNvb2tpZVN0b3JhZ2VEYXRh
LmdldCgpKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
b2tpZU1hbmFnZXJQcm94eS5jcHAKaW5kZXggMTAzODQ5N2E4YzFhYjI3ODU5ZTdhOTE3OWM1NDA0
Zjg4OGU3NzRjNS4uZmUzODQyZjU3Y2QyMzI2NjkwMmY1MjA2ODM5ZWI0N2NiN2FkNmQ3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKQEAgLTYwLDYgKzYwLDcgQEAgV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5h
Z2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQogCiBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQogeworICAgIEFTU0VSVChtX2Nvb2tpZU9i
c2VydmVycy5pc0VtcHR5KCkpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbGllbnQpCkBA
IC03NSw2ICs3NiwxNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xE
ZXN0cm95ZWQoKQogICAgIGludmFsaWRhdGVDYWxsYmFja01hcChtX2h0dHBDb29raWVBY2NlcHRQ
b2xpY3lDYWxsYmFja3MsIENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQp
OwogICAgIGludmFsaWRhdGVDYWxsYmFja01hcChtX3ZvaWRDYWxsYmFja3MsIENhbGxiYWNrQmFz
ZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwogICAgIGludmFsaWRhdGVDYWxsYmFja01h
cChtX2dldENvb2tpZXNDYWxsYmFja3MsIENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52
YWxpZGF0ZWQpOworCisgICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOworICAgIGZvciAo
YXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCisgICAgICAgICAgICBvYnNlcnZl
cnMuYXBwZW5kKG9ic2VydmVyKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDog
b2JzZXJ2ZXJzKQorICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3llZCgpOworCisgICAg
QVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5KikKQEAgLTIxMiwx
OSArMjI0LDUwIEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29v
a2llQ2hhbmdlcyhTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHByb2Nlc3NQb29sKCktPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CiB9CiAK
LXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFNl
c3Npb25JRCBzZXNzaW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykKKwor
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soV2Vi
Q29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxi
YWNrKQogewogICAgIGlmIChjYWxsYmFjaykKLSAgICAgICAgbV9jb29raWVPYnNlcnZlcnMuc2V0
KHNlc3Npb25JRCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICBtX2xlZ2FjeUNvb2tpZU9i
c2VydmVycy5zZXQoc2Vzc2lvbklELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgZWxzZQotICAg
ICAgICBtX2Nvb2tpZU9ic2VydmVycy5yZW1vdmUoc2Vzc2lvbklEKTsKKyAgICAgICAgbV9sZWdh
Y3lDb29raWVPYnNlcnZlcnMucmVtb3ZlKHNlc3Npb25JRCk7Cit9CisKK3ZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpyZWdpc3Rlck9ic2VydmVyKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9ic2VydmVyJiBvYnNlcnZlcikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fY29va2llT2Jz
ZXJ2ZXJzLnNldChzZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIqPigpKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmFkZCgmb2JzZXJ2ZXIpOworCisgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQorICAgICAgICBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKTsKK30K
Kwordm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnVucmVnaXN0ZXJPYnNlcnZlcihXZWJDb3Jl
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPYnNlcnZlciYgb2JzZXJ2ZXIpCit7CisgICAgYXV0byBp
dGVyYXRvciA9IG1fY29va2llT2JzZXJ2ZXJzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICBpZiAoaXRl
cmF0b3IgPT0gbV9jb29raWVPYnNlcnZlcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGl0ZXJhdG9yLT52YWx1ZS5yZW1vdmUoJm9ic2VydmVyKTsKKyAgICBpZiAoIWl0ZXJhdG9yLT52
YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29va2llT2JzZXJ2ZXJz
LnJlbW92ZShpdGVyYXRvcik7CisgICAgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lv
bklEKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2Uo
U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBtX2NsaWVudC5jb29raWVzRGlkQ2hhbmdlKHRo
aXMpOwotICAgIGlmIChhdXRvIGNhbGxiYWNrID0gbV9jb29raWVPYnNlcnZlcnMuZ2V0KHNlc3Np
b25JRCkpCisgICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBtX2xlZ2FjeUNvb2tpZU9ic2VydmVycy5n
ZXQoc2Vzc2lvbklEKSkKICAgICAgICAgY2FsbGJhY2soKTsKKworICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2Nvb2tpZU9ic2VydmVycy5maW5kKHNlc3Npb25JRCk7CisgICAgaWYgKGl0ZXJhdG9yID09
IG1fY29va2llT2JzZXJ2ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1
dG8qIG9ic2VydmVyIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICBvYnNlcnZlci0+Y29va2ll
c0RpZENoYW5nZSgpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
LCBGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5o
CmluZGV4IGZkZjg5MWUxNTg5YWMwZGQ3Mjk2ZjkzYTdmNGY3ZmM3NWZlMjkxZjEuLmY2NjI3MDBm
NjdiZWFjNTJiM2MxZmU3MWJmYTA0YjVhY2MxOGE0NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTg4LDYgKzg4LDE2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhXZWJDb3JlOjpTZXNz
aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJik7CiAKKyAgICBjbGFzcyBPYnNlcnZlciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PYnNlcnZlcigpIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgY29va2llc0RpZENoYW5nZSgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IG1hbmFnZXJEZXN0cm95ZWQoKSA9IDA7CisgICAgfTsKKworICAgIHZvaWQgcmVnaXN0ZXJPYnNl
cnZlcihXZWJDb3JlOjpTZXNzaW9uSUQsIE9ic2VydmVyJik7CisgICAgdm9pZCB1bnJlZ2lzdGVy
T2JzZXJ2ZXIoV2ViQ29yZTo6U2Vzc2lvbklELCBPYnNlcnZlciYpOworCiAjaWYgVVNFKFNPVVAp
CiAgICAgdm9pZCBzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VQYXRoLCB1aW50MzJfdCBzdG9yYWdlVHlwZSk7CiAgICAgdm9pZCBnZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShTdHJpbmcmIHN0b3JhZ2VQYXRoLCB1aW50MzJfdCYgc3RvcmFnZVR5cGUpIGNv
bnN0OwpAQCAtMTI4LDcgKzEzOCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPFZvaWRDYWxsYmFjaz4+IG1fdm9pZENhbGxiYWNrczsKICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBSZWZQdHI8R2V0Q29va2llc0NhbGxiYWNrPj4gbV9nZXRDb29raWVzQ2FsbGJhY2tzOwog
Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+
IG1fY29va2llT2JzZXJ2ZXJzOworICAgIEhhc2hNYXA8V2ViQ29yZTo6U2Vzc2lvbklELCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKKyAgICBIYXNoTWFw
PFdlYkNvcmU6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVy
czsKIAogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggYmI5NzYyYWZjZThh
ZDlhNzU2MGM2Zjg1YTk0NGZkNmM4ZmIwMmY0YS4uZDMxOGFhZWQwMjM2NjNhZWVhMjczNWI4MjFh
MThhZmYyYjFmYmVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCkBAIC0xMTUsMTAgKzExNSw2NSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogREVGSU5F
X0RFQlVHX09OTFlfR0xPQkFMKFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyLCBwcm9jZXNzUG9v
bENvdW50ZXIsICgiV2ViUHJvY2Vzc1Bvb2wiKSk7CiAKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0
ZUxpc3RlbmVySWRlbnRpZmllcigpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IG5leHRJZGVudGlm
aWVyID0gMTsKKyAgICByZXR1cm4gbmV4dElkZW50aWZpZXIrKzsKK30KKworc3RhdGljIEhhc2hN
YXA8dWludDY0X3QsIEZ1bmN0aW9uPHZvaWQoV2ViUHJvY2Vzc1Bvb2wmKT4+JiBwcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJGdW5jdGlvbk1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hNYXA8dWludDY0X3QsIEZ1bmN0aW9uPHZvaWQoV2ViUHJvY2Vzc1Bvb2wmKT4+PiBt
YXA7CisgICAgcmV0dXJuIG1hcDsKK30KKwordWludDY0X3QgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKEZ1bmN0aW9uPHZvaWQoV2ViUHJvY2Vzc1Bv
b2wmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQoZnVuY3Rpb24pOworCisgICAgYXV0byBp
ZGVudGlmaWVyID0gZ2VuZXJhdGVMaXN0ZW5lcklkZW50aWZpZXIoKTsKKyAgICBwcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJGdW5jdGlvbk1hcCgpLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKGZ1
bmN0aW9uKSk7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIodWludDY0X3QgaWRlbnRp
ZmllcikKK3sKKyAgICBwcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJGdW5jdGlvbk1hcCgpLnJl
bW92ZShpZGVudGlmaWVyKTsKK30KKwogUmVmPFdlYlByb2Nlc3NQb29sPiBXZWJQcm9jZXNzUG9v
bDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQog
ewogICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
UHJvY2Vzc1Bvb2woY29uZmlndXJhdGlvbikpOworICAgIGF1dG8gbmV3UG9vbCA9IGFkb3B0UmVm
KCpuZXcgV2ViUHJvY2Vzc1Bvb2woY29uZmlndXJhdGlvbikpOworCisgICAgYXV0byYgbGlzdGVu
ZXJNYXAgPSBwcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJGdW5jdGlvbk1hcCgpOworCisgICAg
VmVjdG9yPHVpbnQ2NF90PiBpZGVudGlmaWVyczsKKyAgICBpZGVudGlmaWVycy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGxpc3RlbmVyTWFwLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGlkZW50aWZp
ZXIgOiBsaXN0ZW5lck1hcC5rZXlzKCkpCisgICAgICAgIGlkZW50aWZpZXJzLnVuY2hlY2tlZEFw
cGVuZChpZGVudGlmaWVyKTsKKworICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaWRlbnRpZmll
cnMpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IGxpc3RlbmVyTWFwLmZpbmQoaWRlbnRpZmll
cik7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBsaXN0ZW5lck1hcC5lbmQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGUgRnVuY3Rpb24gb2Jq
ZWN0IHN0YXlzIGFsaXZlIHVudGlsIGFmdGVyIHRoZSBmdW5jdGlvbiBjYWxsIGhhcyBiZWVuIG1h
ZGUsCisgICAgICAgIC8vIHdlIHRlbXBvcmFyaWx5IG1vdmUgaXQgb3V0IG9mIHRoZSBtYXAuCisg
ICAgICAgIC8vIFRoaXMgcHJvdGVjdHMgaXQgZnJvbSB0aGUgRnVuY3Rpb24gY2FsbGluZyB1bnJl
Z2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyIHRoZXJlYnkKKyAgICAgICAgLy8gcmVt
b3ZpbmcgaXRzZWxmIGZyb20gdGhlIG1hcCBvZiBsaXN0ZW5lcnMuCisgICAgICAgIC8vIElmIHRo
ZSBpZGVudGlmaWVyIHN0aWxsIGV4aXN0cyBpbiB0aGUgbWFwIGxhdGVyLCB3ZSBtb3ZlIGl0IGJh
Y2sgaW4uCisgICAgICAgIEZ1bmN0aW9uPHZvaWQoV2ViUHJvY2Vzc1Bvb2wmKT4gZnVuY3Rpb24g
PSBXVEZNb3ZlKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIGZ1bmN0aW9uKG5ld1Bvb2wuZ2V0
KCkpOworCisgICAgICAgIGl0ZXJhdG9yID0gbGlzdGVuZXJNYXAuZmluZChpZGVudGlmaWVyKTsK
KyAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGxpc3RlbmVyTWFwLmVuZCgpKSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUg
PSBXVEZNb3ZlKGZ1bmN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBuZXdQ
b29sOwogfQogCiBzdGF0aWMgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4mIHByb2Nlc3NQb29scygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDJiMDdhNGUx
MmMwN2JkY2M3ZmM4MGRiZjg4YmI5ZDhiNzVkOGJiODkuLjI5ZDAwMmM4ZWFkZDI0MzNhZjEyNDAy
NmMwOGNmMWYyMDg5OThkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCkBAIC0zOTksNiArMzk5LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29va2llU3Rv
cmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbCk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB1aW50
NjRfdCByZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihGdW5jdGlvbjx2b2lkKFdl
YlByb2Nlc3NQb29sJik+JiYpOworICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJQcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXIodWludDY0X3QgaWRlbnRpZmllcik7CisKIHByaXZhdGU6CiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDEyYzk2
MTEwMmJlZjVmMjUyZTZkNGRjNzUwODE3MTQyZjE2Y2E2MTIuLjdhY2Y5MWY2NDUxODA1MjM3YmEz
YWJjMzY5MTc0OGVlMjg0MTY5MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTEyNyw2ICsxMjcs
MTIgQEAgUmVmPFdlYlByb2Nlc3NQb29sPiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKICAgICByZXR1cm4gKipwb29scy5iZWdpbigpOwog
fQogCitXZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlTm90aWZpY2F0aW9ucygpCit7CisgICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29s
cygxLCBmYWxzZSk7CisgICAgcmV0dXJuIHBvb2xzLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBwb29s
cy5iZWdpbigpLT5nZXQoKTsKK30KKwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGly
ZWN0b3JpZXNJZk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1faGFzUmVzb2x2ZWREaXJlY3Rvcmll
cykKQEAgLTExMzAsNyArMTEzNiwyMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OndlYlByb2Nl
c3NEaWRDbG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUAogICAgICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyLT5wcm9jZXNzRGlkQ2xvc2VDb25uZWN0aW9uKHdlYlByb2Nlc3NQ
cm94eSwgY29ubmVjdGlvbik7CiB9CiAKLUhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4g
V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBjb3VudCkgY29uc3QKK2Jvb2wg
V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wm
IHByb2Nlc3NQb29sKSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGFTdG9yZSA9IHByb2Nlc3NQ
b29sLndlYnNpdGVEYXRhU3RvcmUoKSkgeworICAgICAgICBpZiAoJmRhdGFTdG9yZS0+d2Vic2l0
ZURhdGFTdG9yZSgpID09IHRoaXMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVs
c2UgaWYgKCZBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0
ZURhdGFTdG9yZSgpID09IHRoaXMpIHsKKyAgICAgICAgLy8gSWYgYSBwcm9jZXNzIHBvb2wgZG9l
c24ndCBoYXZlIGFuIGV4cGxpY2l0IGRhdGEgc3RvcmUgYW5kIHRoaXMgaXMgdGhlIGRlZmF1bHQg
V2Vic2l0ZURhdGFTdG9yZSwKKyAgICAgICAgLy8gYWRkIHRoYXQgcHJvY2VzcyBwb29sIHRvIHRo
ZSBzZXQuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGJlaGF2aW9yIGlzIHdlaXJkIGFuZCBuZWNl
c3NpdGF0ZWQgYnkgdGhlIGZhY3QgdGhhdCBwcm9jZXNzIHBvb2xzIGRvbid0IGFsd2F5cworICAg
ICAgICAvLyBoYXZlIGEgZGF0YSBzdG9yZTsgdGhleSBzaG91bGQuCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworSGFzaFNldDxSZWZQdHI8V2Vi
UHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGNvdW50
LCBib29sIGVuc3VyZUFQb29sRXhpc3RzKSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdl
YlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwogICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IHBy
b2Nlc3NlcygpKQpAQCAtMTEzOSwyNSArMTE2MSwxNyBAQCBIYXNoU2V0PFJlZlB0cjxXZWJQcm9j
ZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgY291bnQpIGNv
bgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENoZWNrIGlm
IHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgICAgICBpZiAoYXV0byBkYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9y
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCZkYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUo
KSA9PSB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vz
c1Bvb2wpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCZBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpID09IHRoaXMpIHsKLSAgICAgICAgICAgICAgICAv
LyBJZiBhIHByb2Nlc3MgcG9vbCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgZGF0YSBzdG9yZSBh
bmQgdGhpcyBpcyB0aGUgZGVmYXVsdCBXZWJzaXRlRGF0YVN0b3JlLAotICAgICAgICAgICAgICAg
IC8vIGFkZCB0aGF0IHByb2Nlc3MgcG9vbCB0byB0aGUgc2V0LgotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGJlaGF2aW9yIGlzIHdlaXJkIGFuZCBuZWNlc3NpdGF0ZWQgYnkgdGhlIGZh
Y3QgdGhhdCBwcm9jZXNzIHBvb2xzIGRvbid0IGFsd2F5cwotICAgICAgICAgICAgICAgIC8vIGhh
dmUgYSBkYXRhIHN0b3JlOyB0aGV5IHNob3VsZC4KLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9v
bHMuYWRkKHByb2Nlc3NQb29sKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAKICAg
ICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGNvdW50KQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHByb2Nlc3NQb29scy5pc0Vt
cHR5KCkgJiYgY291bnQpIHsKKyAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSAmJiBjb3Vu
dCAmJiBlbnN1cmVBUG9vbEV4aXN0cykgewogICAgICAgICBhdXRvIHByb2Nlc3NQb29sID0gV2Vi
UHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRl
V2l0aFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uKG1fY29uZmlndXJhdGlvbikpOwogICAg
ICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sLnB0cigpKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuaAppbmRleCBjYjQ4MzVjMzMzMWFkZTYwYTI3MjAzYTExMDExMDk5M2Q1YTA0MjJjLi4zNWM2
MTAwNjlhZGJiNzQxNDZjZjg1ZDAwNzg0ZmY2MGFhM2ZkY2U3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAg
LTEwNCw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgU3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VNYW5h
Z2VyKCkgeyByZXR1cm4gbV9zdG9yYWdlTWFuYWdlci5nZXQoKTsgfQogCiAgICAgUmVmPFdlYlBy
b2Nlc3NQb29sPiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7CisgICAg
V2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU5vdGlmaWNhdGlvbnMo
KTsKKyAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2Vic2l0ZURhdGFTdG9yZShXZWJDb3JlOjpT
ZXNzaW9uSUQpOwpAQCAtMTIxLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9y
bURlc3Ryb3koKTsKICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybVJlbW92ZVJlY2VudFNlYXJjaGVz
KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQpOwogCi0gICAgSGFzaFNldDxS
ZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHMoc2l6ZV90IGNvdW50ID0gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkgY29uc3Q7CisgICAgSGFzaFNldDxSZWZQdHI8
V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHMoc2l6ZV90IGNvdW50ID0gc3RkOjpudW1lcmlj
X2xpbWl0czxzaXplX3Q+OjptYXgoKSwgYm9vbCBlbnN1cmVBUG9vbEV4aXN0cyA9IHRydWUpIGNv
bnN0OwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgVmVjdG9yPFBsdWdp
bk1vZHVsZUluZm8+IHBsdWdpbnMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzOGU5ZDMwMWMxOTdhYTlhZTIyZjI5NzMxMzBhZDZh
ZWY4ODljMjNiLi4wMzNlNjUxMTZlZGYwN2MxNTE1Nzk4OTk2NTE1NTZkM2JiYWE1MWU3IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTctMDMtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisg
ICAgICAgIFVwZGF0ZSB0aGUgV0tIVFRQQ29va2llU3RvcmUgQVBJIHRvIGJlIHNpbXBsZXIgYW5k
IGFkZCBvYnNlcnZlcnMuCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTA5NjAwMD4gYW5kIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3NzYKKworICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06IFJlbmFtZWQg
ZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS0hUVFBDb29raWVT
dG9yYWdlLm1tLgorICAgICAgICAoLVtDb29raWVPYnNlcnZlciBjb29raWVzRGlkQ2hhbmdlSW5D
b29raWVTdG9yZTpdKToKKyAgICAgICAgKFRFU1QpOiBBbHNvIHRlc3QgZGVsZXRlIGFuZCBvYnNl
cnZlcnMuCisKIDIwMTctMDMtMTYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBDbGVhbiB1cCBXS0NvbnRlbnRFeHRlbnNpb24gQVBJCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGIyMWMzNjk4M2ExOGIzZGEzZTRlMWY2ZmVlYTBhZmFlOGJh
YzI0MDEuLmMzMDFhNmY2ZTlmN2UxMWVkMTZiYzk3ZThjZDNiNTk5MmU1ZWJkODMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xNTQsNyArMTU0LDcgQEAKIAkJNTFCQ0VFNEYxQzg0RjUzQjAw
NDJDODJFIC8qIEluZGV4ZWREQk11bHRpUHJvY2Vzcy0yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCQ0VFNEQxQzg0RjUyQzAwNDJD
ODJFIC8qIEluZGV4ZWREQk11bHRpUHJvY2Vzcy0yLmh0bWwgKi87IH07CiAJCTUxQ0QxQzZDMUIz
OENFNDMwMDE0MkNBNSAvKiBNb2RhbEFsZXJ0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0QxQzZBMUIzOENFMzYwMDE0MkNBNSAvKiBNb2RhbEFs
ZXJ0cy5tbSAqLzsgfTsKIAkJNTFDRDFDNzIxQjM4RDQ4NDAwMTQyQ0E1IC8qIG1vZGFsLWFsZXJ0
cy1pbi1uZXctYWJvdXQtYmxhbmstd2luZG93Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDRDFDNzExQjM4RDQ4NDAwMTQyQ0E1IC8q
IG1vZGFsLWFsZXJ0cy1pbi1uZXctYWJvdXQtYmxhbmstd2luZG93Lmh0bWwgKi87IH07Ci0JCTUx
RDEyNDk4MUU3NjNCMDIwMDJCMjgyMCAvKiBXS0hUVFBDb29raWVTdG9yYWdlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMTI0OTcxRTc2M0FGODAw
MkIyODIwIC8qIFdLSFRUUENvb2tpZVN0b3JhZ2UubW0gKi87IH07CisJCTUxRDEyNDk4MUU3NjNC
MDIwMDJCMjgyMCAvKiBXS0hUVFBDb29raWVTdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDEyNDk3MUU3NjNBRjgwMDJCMjgyMCAvKiBXS0hU
VFBDb29raWVTdG9yZS5tbSAqLzsgfTsKIAkJNTFEMTI0OUIxRTc4NTQyNTAwMkIyODIwIC8qIENv
b2tpZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjZGM0YyOTAxMzM0MkZFQjAwQTZCRjE5IC8qIENvb2tpZU1hbmFnZXIuY3BwICovOyB9
OwogCQk1MUU1QzcwMjE5MTlDM0IyMDBEOEIzRTEgLyogc2ltcGxlMi5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTc4MDM2MTkxOUFG
RjgwMDE4MjlBMiAvKiBzaW1wbGUyLmh0bWwgKi87IH07CiAJCTUxRTVDNzAzMTkxOUMzQjIwMEQ4
QjNFMSAvKiBzaW1wbGUzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFFNzgwMzcxOTE5QUZGODAwMTgyOUEyIC8qIHNpbXBsZTMuaHRt
bCAqLzsgfTsKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAJCTUxQ0I0QUQ3MUIzQTA3OUMwMEMxQjFD
NiAvKiBNb2RhbEFsZXJ0c1NQSS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNb2RhbEFsZXJ0c1NQSS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
Q0QxQzZBMUIzOENFMzYwMDE0MkNBNSAvKiBNb2RhbEFsZXJ0cy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1vZGFsQWxlcnRzLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUNEMUM3MTFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWlu
LW5ldy1hYm91dC1ibGFuay13aW5kb3cuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJtb2RhbC1hbGVydHMtaW4t
bmV3LWFib3V0LWJsYW5rLXdpbmRvdy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTFEMTI0OTcxRTc2M0FGODAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0b3JhZ2UubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0hUVFBDb29raWVTdG9yYWdl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUQxMjQ5NzFFNzYzQUY4MDAyQjI4
MjAgLyogV0tIVFRQQ29va2llU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS0hUVFBDb29raWVTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTFFNUM3MDQxOTE5RUE1RjAwRDhCM0UxIC8qIFNob3VsZEtlZXBDdXJyZW50QmFja0Zv
cndhcmRMaXN0SXRlbUluTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTaG91bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU2QTg5MjFEMkYxQkVDMDBDMDA0QjYgLyogTG9j
YWxTdG9yYWdlQ2xlYXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBMb2NhbFN0b3JhZ2VDbGVhci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFF
NkE4OTUxRDJGMUM3NzAwQzAwNEI2IC8qIExvY2FsU3RvcmFnZUNsZWFyLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSBMb2NhbFN0b3JhZ2VDbGVhci5odG1sOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTY2MSw3ICsxNjYxLDcgQEAKIAkJCQk1MTIwQzgzQzFFNjc1MDc5
MDAyNUIyNTAgLyogV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tICovLAogCQkJCTVDOUU1
Njg0MURGOTE0M0QwMEM5RUUzMyAvKiBXZWJzaXRlUG9saWNpZXMubW0gKi8sCiAJCQkJMUY4MzU3
MUExRDNGRkIwRTAwRTM5NjdCIC8qIFdLQmFja0ZvcndhcmRMaXN0Lm1tICovLAotCQkJCTUxRDEy
NDk3MUU3NjNBRjgwMDJCMjgyMCAvKiBXS0hUVFBDb29raWVTdG9yYWdlLm1tICovLAorCQkJCTUx
RDEyNDk3MUU3NjNBRjgwMDJCMjgyMCAvKiBXS0hUVFBDb29raWVTdG9yZS5tbSAqLywKIAkJCQkz
NzVFMEUxNTFENjY2NzQ0MDBFRkVDMkMgLyogV0tOU051bWJlci5tbSAqLywKIAkJCQkzN0I0N0Uy
RTFENjRFN0NBMDA1RjRFRkYgLyogV0tPYmplY3QubW0gKi8sCiAJCQkJQTE0QUFCNjExRTc4RDdE
RTAwQzFBREMyIC8qIFdLUERGVmlldy5tbSAqLywKQEAgLTI3NDYsNyArMjc0Niw3IEBACiAJCQkJ
N0NDRTdFRjQxQTQxMUFFNjAwNDQ3QzRDIC8qIEZpbmRNYXRjaGVzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M4M0UwNDAxRDBBNjNFMzAwRkVCQ0YzIC8qIEZpcnN0UmVzcG9uZGVyU2Nyb2xsaW5n
UG9zaXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzgzRTBCQzFEMEE2NTA3MDBGRUJDRjMg
LyogRml4ZWRMYXlvdXRTaXplLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFEMTI0OTgxRTc2M0Iw
MjAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0b3JhZ2UubW0gaW4gU291cmNlcyAqLywKKwkJCQk1
MUQxMjQ5ODFFNzYzQjAyMDAyQjI4MjAgLyogV0tIVFRQQ29va2llU3RvcmUubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3Q0NFN0VGNTFBNDExQUU2MDA0NDdDNEMgLyogRm9yY2VSZXBhaW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTM3QjQ3RTMwMUQ2NEU3Q0EwMDVGNEVGRiAvKiBXS09iamVjdC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUMwMUE0MTFBN0UwMDQ0N0M0QyAvKiBGcmFnbWVu
dE5hdmlnYXRpb24ubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLSFRUUENvb2tpZVN0b3JhZ2UubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS0hUVFBDb29raWVTdG9yYWdlLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjk4ZDcwZDY0MDdiZGJjMmE4NDE3NzMyNDNk
MzU1MzkxN2Y3Mjk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLSFRUUENvb2tpZVN0
b3JhZ2UubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKLSNpbXBv
cnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XS0hUVFBDb29raWVT
dG9yZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KLSNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLXN0YXRpYyBi
b29sIGdvdEZsYWc7Ci0KLVRFU1QoV2ViS2l0MiwgV0tIVFRQQ29va2llU3RvcmFnZSkKLXsKLSAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJp
bmc6QCJPaCBoZWxsbyIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJr
aXQub3JnIl1dOwotCi0gICAgUmV0YWluUHRyPFdLSFRUUENvb2tpZVN0b3JlPiBjb29raWVTdG9y
ZSA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0uX2h0dHBDb29raWVTdG9y
ZTsKLQotICAgIE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpjb29raWVzID0gbmlsOwotICAgIFtj
b29raWVTdG9yZSBmZXRjaENvb2tpZXM6W2Nvb2tpZXNQdHIgPSAmY29va2llc10oTlNBcnJheTxO
U0hUVFBDb29raWUgKj4gKm5zQ29va2llcykgewotICAgICAgICAqY29va2llc1B0ciA9IFtuc0Nv
b2tpZXMgcmV0YWluXTsKLSAgICAgICAgZ290RmxhZyA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdEZsYWcpOwotCi0gICAgQVNTRVJUX0VRKGNvb2tp
ZXMuY291bnQsIDB1KTsKLSAgICBbY29va2llcyByZWxlYXNlXTsKLQotICAgIGdvdEZsYWcgPSBm
YWxzZTsKLQotICAgIFJldGFpblB0cjxOU0hUVFBDb29raWU+IGNvb2tpZTEgPSBbTlNIVFRQQ29v
a2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7Ci0gICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAi
LyIsCi0gICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiQ29va2llTmFtZSIsCi0gICAgICAgIE5T
SFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwKLSAgICAgICAgTlNIVFRQQ29va2llRG9t
YWluOiBAIi53d3cud2Via2l0Lm9yZyIsCi0gICAgICAgIE5TSFRUUENvb2tpZVNlY3VyZTogQCJU
UlVFIiwKLSAgICAgICAgTlNIVFRQQ29va2llRGlzY2FyZDogQCJUUlVFIiwKLSAgICAgICAgTlNI
VFRQQ29va2llTWF4aW11bUFnZTogQCIxMDAwMCIsCi0gICAgfV07Ci0KLSAgICBSZXRhaW5QdHI8
TlNIVFRQQ29va2llPiBjb29raWUyID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGll
czpAewotICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi9wYXRoIiwKLSAgICAgICAgTlNIVFRQ
Q29va2llTmFtZTogQCJPdGhlckNvb2tpZU5hbWUiLAotICAgICAgICBOU0hUVFBDb29raWVWYWx1
ZTogQCJPdGhlckNvb2tpZVZhbHVlIiwKLSAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIi53
d3cudzNjLm9yZyIsCi0gICAgICAgIE5TSFRUUENvb2tpZU1heGltdW1BZ2U6IEAiMTAwMDAiLAot
ICAgIH1dOwotCi0gICAgW2Nvb2tpZVN0b3JlIHNldENvb2tpZTpjb29raWUxLmdldCgpIGNvbXBs
ZXRpb25IYW5kbGVyOltdKCl7Ci0gICAgICAgIGdvdEZsYWcgPSB0cnVlOwotICAgIH1dOwotCi0g
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RGbGFnKTsKLSAgICBnb3RGbGFnID0gZmFs
c2U7Ci0KLSAgICBbY29va2llU3RvcmUgc2V0Q29va2llOmNvb2tpZTIuZ2V0KCkgY29tcGxldGlv
bkhhbmRsZXI6W10oKXsKLSAgICAgICAgZ290RmxhZyA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdEZsYWcpOwotICAgIGdvdEZsYWcgPSBmYWxzZTsK
LQotICAgIFtjb29raWVTdG9yZSBmZXRjaENvb2tpZXM6W2Nvb2tpZXNQdHIgPSAmY29va2llc10o
TlNBcnJheTxOU0hUVFBDb29raWUgKj4gKm5zQ29va2llcykgewotICAgICAgICAqY29va2llc1B0
ciA9IFtuc0Nvb2tpZXMgcmV0YWluXTsKLSAgICAgICAgZ290RmxhZyA9IHRydWU7Ci0gICAgfV07
Ci0KLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdEZsYWcpOwotCi0gICAgQVNTRVJU
X0VRKGNvb2tpZXMuY291bnQsIDJ1KTsKLQotICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUg
OiBjb29raWVzKSB7Ci0gICAgICAgIGlmIChbY29va2llLm5hbWUgaXNFcXVhbDpAIkNvb2tpZU5h
bWUiXSkgewotICAgICAgICAgICAgQVNTRVJUX1RSVUUoW2Nvb2tpZTEuZ2V0KCkucGF0aCBpc0Vx
dWFsVG9TdHJpbmc6Y29va2llLnBhdGhdKTsKLSAgICAgICAgICAgIEFTU0VSVF9UUlVFKFtjb29r
aWUxLmdldCgpLnZhbHVlIGlzRXF1YWxUb1N0cmluZzpjb29raWUudmFsdWVdKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9UUlVFKFtjb29raWUxLmdldCgpLmRvbWFpbiBpc0VxdWFsVG9TdHJpbmc6Y29v
a2llLmRvbWFpbl0pOwotICAgICAgICAgICAgQVNTRVJUX1RSVUUoY29va2llMS5nZXQoKS5zZWN1
cmUpOwotICAgICAgICAgICAgQVNTRVJUX1RSVUUoY29va2llMS5nZXQoKS5zZXNzaW9uT25seSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfVFJVRShbY29va2llMi5nZXQo
KS5wYXRoIGlzRXF1YWxUb1N0cmluZzpjb29raWUucGF0aF0pOwotICAgICAgICAgICAgQVNTRVJU
X1RSVUUoW2Nvb2tpZTIuZ2V0KCkudmFsdWUgaXNFcXVhbFRvU3RyaW5nOmNvb2tpZS52YWx1ZV0p
OwotICAgICAgICAgICAgQVNTRVJUX1RSVUUoW2Nvb2tpZTIuZ2V0KCkubmFtZSBpc0VxdWFsVG9T
dHJpbmc6Y29va2llLm5hbWVdKTsKLSAgICAgICAgICAgIEFTU0VSVF9UUlVFKFtjb29raWUyLmdl
dCgpLmRvbWFpbiBpc0VxdWFsVG9TdHJpbmc6Y29va2llLmRvbWFpbl0pOwotICAgICAgICAgICAg
QVNTRVJUX0ZBTFNFKGNvb2tpZTIuZ2V0KCkuc2VjdXJlKTsKLSAgICAgICAgICAgIEFTU0VSVF9G
QUxTRShjb29raWUyLmdldCgpLnNlc3Npb25Pbmx5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IFtjb29raWVzIHJlbGVhc2VdOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGQ4YTY1YjdkYjk1MWUyZGQ4Yzk0Yjg2ZTViNTMwZDdmZjJlZTNjOAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLSFRU
UENvb2tpZVN0b3JlLm1tCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCA8V2Vi
S2l0L1dLRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L1dLSFRUUENvb2tpZVN0b3JlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworc3RhdGljIGJvb2wgZ290
RmxhZzsKK3VpbnQ2NF90IG9ic2VydmVyQ2FsbGJhY2tzOworUmV0YWluUHRyPFdLSFRUUENvb2tp
ZVN0b3JlPiBnbG9iYWxDb29raWVTdG9yZTsKKworQGludGVyZmFjZSBDb29raWVPYnNlcnZlciA6
IE5TT2JqZWN0PFdLSFRUUENvb2tpZVN0b3JlT2JzZXJ2ZXI+CistICh2b2lkKWNvb2tpZXNEaWRD
aGFuZ2VJbkNvb2tpZVN0b3JlOihXS0hUVFBDb29raWVTdG9yZSAqKWNvb2tpZVN0b3JlOworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gQ29va2llT2JzZXJ2ZXIKKworLSAodm9pZCljb29raWVzRGlk
Q2hhbmdlSW5Db29raWVTdG9yZTooV0tIVFRQQ29va2llU3RvcmUgKiljb29raWVTdG9yZQorewor
ICAgIEFTU0VSVF9FUShjb29raWVTdG9yZSwgZ2xvYmFsQ29va2llU3RvcmUuZ2V0KCkpOworICAg
ICsrb2JzZXJ2ZXJDYWxsYmFja3M7Cit9CisKK0BlbmQKKworVEVTVChXZWJLaXQyLCBXS0hUVFBD
b29raWVTdG9yZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgW3dl
YlZpZXcgbG9hZEhUTUxTdHJpbmc6QCJPaCBoZWxsbyIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1dOworCisgICAgZ2xvYmFsQ29va2llU3RvcmUgPSBb
V0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdLl9odHRwQ29va2llU3RvcmU7Cisg
ICAgUmV0YWluUHRyPENvb2tpZU9ic2VydmVyPiBvYnNlcnZlcjEgPSBhZG9wdE5TKFtbQ29va2ll
T2JzZXJ2ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBSZXRhaW5QdHI8Q29va2llT2JzZXJ2ZXI+IG9i
c2VydmVyMiA9IGFkb3B0TlMoW1tDb29raWVPYnNlcnZlciBhbGxvY10gaW5pdF0pOworICAgIFtn
bG9iYWxDb29raWVTdG9yZSBhZGRPYnNlcnZlcjpvYnNlcnZlcjEuZ2V0KCldOworICAgIFtnbG9i
YWxDb29raWVTdG9yZSBhZGRPYnNlcnZlcjpvYnNlcnZlcjIuZ2V0KCldOworCisgICAgTlNBcnJh
eTxOU0hUVFBDb29raWUgKj4gKmNvb2tpZXMgPSBuaWw7CisgICAgW2dsb2JhbENvb2tpZVN0b3Jl
IGFsbENvb2tpZXM6W2Nvb2tpZXNQdHIgPSAmY29va2llc10oTlNBcnJheTxOU0hUVFBDb29raWUg
Kj4gKm5zQ29va2llcykgeworICAgICAgICAqY29va2llc1B0ciA9IFtuc0Nvb2tpZXMgcmV0YWlu
XTsKKyAgICAgICAgZ290RmxhZyA9IHRydWU7CisgICAgfV07CisKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmdvdEZsYWcpOworCisgICAgQVNTRVJUX0VRKGNvb2tpZXMuY291bnQsIDB1
KTsKKyAgICBbY29va2llcyByZWxlYXNlXTsKKworICAgIGdvdEZsYWcgPSBmYWxzZTsKKworICAg
IFJldGFpblB0cjxOU0hUVFBDb29raWU+IGNvb2tpZTEgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdp
dGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAg
IE5TSFRUUENvb2tpZU5hbWU6IEAiQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZh
bHVlOiBAIkNvb2tpZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIi53d3cu
d2Via2l0Lm9yZyIsCisgICAgICAgIE5TSFRUUENvb2tpZVNlY3VyZTogQCJUUlVFIiwKKyAgICAg
ICAgTlNIVFRQQ29va2llRGlzY2FyZDogQCJUUlVFIiwKKyAgICAgICAgTlNIVFRQQ29va2llTWF4
aW11bUFnZTogQCIxMDAwMCIsCisgICAgfV07CisKKyAgICBSZXRhaW5QdHI8TlNIVFRQQ29va2ll
PiBjb29raWUyID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAg
ICBOU0hUVFBDb29raWVQYXRoOiBAIi9wYXRoIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTog
QCJPdGhlckNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJPdGhlckNv
b2tpZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIi53d3cudzNjLm9yZyIs
CisgICAgICAgIE5TSFRUUENvb2tpZU1heGltdW1BZ2U6IEAiMTAwMDAiLAorICAgIH1dOworCisg
ICAgW2dsb2JhbENvb2tpZVN0b3JlIHNldENvb2tpZTpjb29raWUxLmdldCgpIGNvbXBsZXRpb25I
YW5kbGVyOltdKCl7CisgICAgICAgIGdvdEZsYWcgPSB0cnVlOworICAgIH1dOworCisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RGbGFnKTsKKyAgICBnb3RGbGFnID0gZmFsc2U7CisK
KyAgICBbZ2xvYmFsQ29va2llU3RvcmUgc2V0Q29va2llOmNvb2tpZTIuZ2V0KCkgY29tcGxldGlv
bkhhbmRsZXI6W10oKXsKKyAgICAgICAgZ290RmxhZyA9IHRydWU7CisgICAgfV07CisKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdEZsYWcpOworICAgIGdvdEZsYWcgPSBmYWxzZTsK
KworICAgIFtnbG9iYWxDb29raWVTdG9yZSBhbGxDb29raWVzOltjb29raWVzUHRyID0gJmNvb2tp
ZXNdKE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpuc0Nvb2tpZXMpIHsKKyAgICAgICAgKmNvb2tp
ZXNQdHIgPSBbbnNDb29raWVzIHJldGFpbl07CisgICAgICAgIGdvdEZsYWcgPSB0cnVlOworICAg
IH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RGbGFnKTsKKyAgICBnb3RG
bGFnID0gZmFsc2U7CisKKyAgICBBU1NFUlRfRVEoY29va2llcy5jb3VudCwgMnUpOworICAgIEFT
U0VSVF9FUShvYnNlcnZlckNhbGxiYWNrcywgNHUpOworCisgICAgZm9yIChOU0hUVFBDb29raWUg
KmNvb2tpZSA6IGNvb2tpZXMpIHsKKyAgICAgICAgaWYgKFtjb29raWUubmFtZSBpc0VxdWFsOkAi
Q29va2llTmFtZSJdKSB7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShbY29va2llMS5nZXQoKS5w
YXRoIGlzRXF1YWxUb1N0cmluZzpjb29raWUucGF0aF0pOworICAgICAgICAgICAgQVNTRVJUX1RS
VUUoW2Nvb2tpZTEuZ2V0KCkudmFsdWUgaXNFcXVhbFRvU3RyaW5nOmNvb2tpZS52YWx1ZV0pOwor
ICAgICAgICAgICAgQVNTRVJUX1RSVUUoW2Nvb2tpZTEuZ2V0KCkuZG9tYWluIGlzRXF1YWxUb1N0
cmluZzpjb29raWUuZG9tYWluXSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShjb29raWUxLmdl
dCgpLnNlY3VyZSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShjb29raWUxLmdldCgpLnNlc3Np
b25Pbmx5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFtjb29r
aWUyLmdldCgpLnBhdGggaXNFcXVhbFRvU3RyaW5nOmNvb2tpZS5wYXRoXSk7CisgICAgICAgICAg
ICBBU1NFUlRfVFJVRShbY29va2llMi5nZXQoKS52YWx1ZSBpc0VxdWFsVG9TdHJpbmc6Y29va2ll
LnZhbHVlXSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShbY29va2llMi5nZXQoKS5uYW1lIGlz
RXF1YWxUb1N0cmluZzpjb29raWUubmFtZV0pOworICAgICAgICAgICAgQVNTRVJUX1RSVUUoW2Nv
b2tpZTIuZ2V0KCkuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpjb29raWUuZG9tYWluXSk7CisgICAg
ICAgICAgICBBU1NFUlRfRkFMU0UoY29va2llMi5nZXQoKS5zZWN1cmUpOworICAgICAgICAgICAg
QVNTRVJUX0ZBTFNFKGNvb2tpZTIuZ2V0KCkuc2Vzc2lvbk9ubHkpOworICAgICAgICB9CisgICAg
fQorICAgIFtjb29raWVzIHJlbGVhc2VdOworCisgICAgW2dsb2JhbENvb2tpZVN0b3JlIGRlbGV0
ZUNvb2tpZTpjb29raWUyLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOltdKCl7CisgICAgICAgIGdv
dEZsYWcgPSB0cnVlOworICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZn
b3RGbGFnKTsKKyAgICBnb3RGbGFnID0gZmFsc2U7CisKKyAgICBbZ2xvYmFsQ29va2llU3RvcmUg
YWxsQ29va2llczpbY29va2llc1B0ciA9ICZjb29raWVzXShOU0FycmF5PE5TSFRUUENvb2tpZSAq
PiAqbnNDb29raWVzKSB7CisgICAgICAgICpjb29raWVzUHRyID0gW25zQ29va2llcyByZXRhaW5d
OworICAgICAgICBnb3RGbGFnID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZ290RmxhZyk7CisgICAgZ290RmxhZyA9IGZhbHNlOworCisgICAgQVNTRVJU
X0VRKGNvb2tpZXMuY291bnQsIDF1KTsKKyAgICBBU1NFUlRfRVEob2JzZXJ2ZXJDYWxsYmFja3Ms
IDZ1KTsKKworICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUgOiBjb29raWVzKSB7CisgICAg
ICAgIEFTU0VSVF9UUlVFKFtjb29raWUxLmdldCgpLnBhdGggaXNFcXVhbFRvU3RyaW5nOmNvb2tp
ZS5wYXRoXSk7CisgICAgICAgIEFTU0VSVF9UUlVFKFtjb29raWUxLmdldCgpLnZhbHVlIGlzRXF1
YWxUb1N0cmluZzpjb29raWUudmFsdWVdKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoW2Nvb2tpZTEu
Z2V0KCkuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpjb29raWUuZG9tYWluXSk7CisgICAgICAgIEFT
U0VSVF9UUlVFKGNvb2tpZTEuZ2V0KCkuc2VjdXJlKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY29v
a2llMS5nZXQoKS5zZXNzaW9uT25seSk7CisgICAgfQorICAgIFtjb29raWVzIHJlbGVhc2VdOwor
CisgICAgW2dsb2JhbENvb2tpZVN0b3JlIHJlbW92ZU9ic2VydmVyOm9ic2VydmVyMS5nZXQoKV07
CisgICAgW2dsb2JhbENvb2tpZVN0b3JlIHJlbW92ZU9ic2VydmVyOm9ic2VydmVyMi5nZXQoKV07
Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>