<?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>74244</bug_id>
          
          <creation_ts>2011-12-10 15:20:12 -0800</creation_ts>
          <short_desc>v8 benchmark takes 12-13 million function call slow paths due to extra arguments</short_desc>
          <delta_ts>2011-12-11 16:35:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>518830</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-10 15:20:12 -0800</bug_when>
    <thetext>v8 benchmark takes 12-13 million function call slow paths due to extra arguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518926</commentid>
    <comment_count>1</comment_count>
      <attachid>118713</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-11 14:17:30 -0800</bug_when>
    <thetext>Created attachment 118713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518929</commentid>
    <comment_count>2</comment_count>
      <attachid>118713</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-11 15:01:34 -0800</bug_when>
    <thetext>Comment on attachment 118713
Patch

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

r=me, though it would be good to verify kraken + sunspider are okay

&gt; Source/JavaScriptCore/interpreter/Interpreter.h:88
&gt; -    enum { MaxLargeThreadReentryDepth = 93, MaxSmallThreadReentryDepth = 32 };
&gt; +    enum { MaxLargeThreadReentryDepth = 93, MaxSmallThreadReentryDepth = 16 };
&gt;  #else
&gt; -    enum { MaxLargeThreadReentryDepth = 256, MaxSmallThreadReentryDepth = 32 };
&gt; +    enum { MaxLargeThreadReentryDepth = 256, MaxSmallThreadReentryDepth = 16 };

Sadness -- we really should switch to stack size limits rather than reentry shenanigans :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518938</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-11 16:29:27 -0800</bug_when>
    <thetext>&gt; r=me, though it would be good to verify kraken + sunspider are okay

Neutral on Kraken+SunSpider.

&gt; Sadness -- we really should switch to stack size limits rather than reentry shenanigans :-/

Yeah. I think we should also find the giant object(s) we&apos;re putting on the stack and put them on the heap instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518942</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-11 16:35:57 -0800</bug_when>
    <thetext>Committed r102545: &lt;http://trac.webkit.org/changeset/102545&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118713</attachid>
            <date>2011-12-11 14:17:30 -0800</date>
            <delta_ts>2011-12-11 15:01:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74244-20111211141727.patch</filename>
            <type>text/plain</type>
            <size>142911</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2NCBA
QAorMjAxMS0xMi0xMCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIHY4IGJlbmNobWFyayB0YWtlcyAxMi0xMyBtaWxsaW9uIGZ1bmN0aW9uIGNhbGwgc2xvdyBw
YXRocyBkdWUgdG8gZXh0cmEgYXJndW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03NDI0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgLmFyZ3VtZW50cyBmdW5jdGlvbiBvZiBvcmRlciB0
aGUgUmV2ZXJzZWQKKyAgICAgICAgCisgICAgICAgIDEwJSBzcGVlZHVwIG9uIHY4LXJheXRyYWNl
LCAxLjclIHNwZWVkdXAgb24gdjggb3ZlcmFsbCwgbmV1dHJhbCBvdGhlcndpc2UuCisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1
ZVByb2ZpbGVGb3JBcmd1bWVudCk6IENsYXJpZmllZCB0aGF0IHRoZSBpbnRlcmZhY2UKKyAgICAg
ICAgdG8gdGhpcyBmdW5jdGlvbiBpcyBhbiBhcmd1bWVudCBudW1iZXIuCisKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dENvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppc0FyZ3VtZW50
TnVtYmVyKTogU3dpdGNoZWQgdG8gdXNpbmcgQ2FsbEZyYW1lCisgICAgICAgIGhlbHBlciBmdW5j
dGlvbnMgZm9yIGNvbXB1dGluZyBvZmZzZXRzIGZvciBhcmd1bWVudHMsIHJhdGhlciB0aGFuIGRv
aW5nCisgICAgICAgIHRoZSBtYXRoIGJ5IGhhbmQuCisgICAgICAgIAorICAgICAgICBTd2l0Y2hl
ZCB0byBpdGVyYXRpbmcgYXJndW1lbnQgb2Zmc2V0cyBiYWNrd2FyZHMgKC0tKSBpbnN0ZWFkIG9m
IGZvcndhcmRzICgrKykuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6Q2FsbEFyZ3VtZW50czo6dGhpc1JlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEFyZ3VtZW50czo6YXJndW1lbnRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkNhbGxBcmd1bWVudHM6OnJlZ2lzdGVyT2Zmc2V0KTogVXBkYXRlZCBmb3IgYXJndW1lbnRzIGJl
aW5nIHJldmVyc2VkLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6
IEFsbG9jYXRlIGFyZ3VtZW50cyBpbiByZXZlcnNlIG9yZGVyLgorCisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZU1pbk1heCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhp
U3RhY2spOiBVc2UgYWJzdHJhY3QgYXJndW1lbnQgaW5kaWNlcworICAgICAgICB0aGF0IGp1c3Qt
aW4tdGltZSBjb252ZXJ0IHRvIGJ5dGVjb2RlIG9wZXJhbmRzIChpLmUuLCBpbmRleGVzIGluIHRo
ZSByZWdpc3RlcgorICAgICAgICBmaWxlKSB0aHJvdWdoIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMg
bWVhbnMgb25seSBvbmUgcGllY2Ugb2YgY29kZSBuZWVkcworICAgICAgICB0byBrbm93IGhvdyBh
cmd1bWVudHMgYXJlIGxhaWQgb3V0IGluIHRoZSByZWdpc3RlciBmaWxlLgorCisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6IERpdHRv
LgorCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OnZhbHVlUHJvZmlsZUZvcik6IERpdHRvLgorCisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKTog
VGhlIHdob2xlIHBvaW50IG9mIHRoaXMgcGF0Y2g6CisgICAgICAgIFRyZWF0IHRvbyBtYW55IGFy
Z3VtZW50cyBhcyBhbiBhcml0eSBtYXRjaC4KKworICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6
CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6dmFyaWFibGVGb3JJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6T1NSRXhpdDo6b3BlcmFuZEZvckluZGV4KTogVXNlIGhlbHBlciBmdW5jdGlv
bnMsIGFzIGFib3ZlLgorCisgICAgICAgICogZGZnL0RGR09wZXJhbmRzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6b3BlcmFuZFRvQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50
VG9PcGVyYW5kKTogVGhlc2UgYXJlIG5vdyB0aGUgb25seSB0d28gbGluZXMgb2YgY29kZSBpbgor
ICAgICAgICB0aGUgREZHIGNvbXBpbGVyIHRoYXQga25vdyBob3cgYXJndW1lbnRzIGFyZSBsYWlk
IG91dCBpbiBtZW1vcnkuCisKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6b3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldE9wZXJhbmQpOiBVc2UgaGVscGVyIGZ1
bmN0aW9ucywgYXMgYWJvdmUuCisKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6IFRo
ZSB3aG9sZSBwb2ludCBvZiB0aGlzIHBhdGNoOgorICAgICAgICBUcmVhdCB0b28gbWFueSBhcmd1
bWVudHMgYXMgYW4gYXJpdHkgbWF0Y2guCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KTogVXNlIGhlbHBlciBmdW5jdGlvbnMsIGFzIGFib3ZlLgorICAgICAgICAKKyAgICAgICAgQWxz
bywgZG9uJ3QgdGFnIHRoZSBjYWxsZXIgZnJhbWUgc2xvdCBhcyBhIGNlbGwsIGJlY2F1c2UgaXQn
cyBub3QgYSBjZWxsLgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6IFVzZSBoZWxwZXIg
ZnVuY3Rpb25zLCBhcyBhYm92ZS4KKworICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOiBVc2UgaGVs
cGVyIGZ1bmN0aW9ucywgYXMgYWJvdmUuCisKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKTogVXNlIGFscmVhZHktY29tcHV0ZWQKKyAgICAgICAg
YXJndW1lbnQgdmlydHVhbCByZWdpc3RlciBpbnN0ZWFkIG9mIHJlY29tcHV0aW5nIGJ5IGhhbmQu
CisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbEZyYW1lU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmFyZ3VtZW50U2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNhbGxGcmFtZVRhZ1Nsb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjYWxsRnJhbWVQYXlsb2FkU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmFyZ3VtZW50VGFnU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmFyZ3VtZW50UGF5bG9hZFNsb3QpOiBBZGRlZCBhIGZldyBoZWxwZXIKKyAgICAgICAgZnVu
Y3Rpb25zIGZvciBkZWFsaW5nIHdpdGggY2FsbGVlIGFyZ3VtZW50cyBzcGVjaWZpY2FsbHkuIFRo
ZXNlIHN0aWxsCisgICAgICAgIGJ1aWxkIG9uIHRvcCBvZiBvdXIgb3RoZXIgaGVscGVyIGZ1bmN0
aW9ucywgYW5kIGhhdmUgbm8gZGlyZWN0IGtub3dsZWRnZQorICAgICAgICBvZiBob3cgYXJndW1l
bnRzIGFyZSBsYWlkIG91dCBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KKworICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpyZXNldENhbGxBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjphZGRDYWxsQXJndW1lbnQpOiBSZW5hbWVkIGFyZ3VtZW50SW5k
ZXggdG8KKyAgICAgICAgYXJndW1lbnRPZmZzZXQgdG8gbWF0Y2ggQ2FsbEZyYW1lIG5hbWluZy4K
KworICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVyZW5j
ZUZvck9wZXJhbmQpOiBVc2UgaGVscGVyCisgICAgICAgIGZ1bmN0aW9ucywgYXMgYWJvdmUuCisK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0
YXRlOjphcmd1bWVudE9mZnNldCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YXJndW1lbnRP
ZmZzZXRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcmd1bWVudCk6
CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OnRoaXNBcmd1bWVudE9mZnNldCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
dGhpc1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRUaGlzVmFsdWUpOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6aG9zdFRoaXNSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNW
YWx1ZSk6IEFkZGVkIGEgYnVuY2ggb2YgaGVscGVyIGZ1bmN0aW9ucyBmb3IKKyAgICAgICAgY29t
cHV0aW5nIHdoZXJlIGFuIGFyZ3VtZW50IGlzIGluIHRoZSByZWdpc3RlciBmaWxlLiBBbnl0aGlu
ZyBpbiB0aGUKKyAgICAgICAgcnVudGltZSB0aGF0IG5lZWRzIHRvIGFjY2VzcyBhcmd1bWVudHMg
c2hvdWxkIHVzZSB0aGVzZSBoZWxwZXJzLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lQ2xvc3VyZS5oOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVDbG9zdXJlOjpzZXRUaGlzKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lQ2xvc3VyZTo6c2V0QXJndW1lbnQpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVDbG9zdXJlOjpyZXNldENhbGxGcmFtZSk6IFRoaXMgc3R1ZmYgaXMgYSBs
b3Qgc2ltcGxlciwgbm93CisgICAgICAgIHRoYXQgdG9vIG1hbnkgYXJndW1lbnRzIGNvdW50cyBh
cyBhbiBhcml0eSBtYXRjaCBhbmQgZG9lc24ndCByZXF1aXJlCisgICAgICAgIHByZXNlcnZpbmcg
dHdvIGNvcGllcyBvZiBvdXIgYXJndW1lbnRzLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6c2xpZGVSZWdpc3Rlcldp
bmRvd0ZvckNhbGwpOiBPbmx5IG5lZWQgdG8gZG8gc29tZXRoaW5nCisgICAgICAgIHNwZWNpYWwg
aWYgdGhlIGNhbGxlciBwcm92aWRlZCB0b28gZmV3IGFyZ3VtZW50cy4KKyAgICAgICAgCisgICAg
ICAgIEtleSBzaW1wbGlmaWNhdGlvbjogV2UgbmV2ZXIgbmVlZCB0byBtYWludGFpbiB0d28gY29w
aWVzIG9mIG91ciBhcmd1bWVudHMKKyAgICAgICAgYW55bW9yZS4KKworICAgICAgICAoSlNDOjpl
dmFsKToKKyAgICAgICAgKEpTQzo6bG9hZFZhcmFyZ3MpOiBVc2UgaGVscGVyIGZ1bmN0aW9ucy4K
KworICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKTogVXBkYXRlZCBm
b3IgbmV3IGludGVyZmFjZS4KKworICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKTogU2VyaW91c2x5LCB0aG91Z2g6IHVzZSBoZWxwZXIK
KyAgICAgICAgZnVuY3Rpb25zLgorCisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRl
RXhlY3V0ZSk6IE5vIG5lZWQgdG8gY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93CisgICAgICAgIHdo
ZW4gY2FsbGluZyBob3N0IGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkgaGF2ZSB6ZXJvIGNhbGxlZSBy
ZWdpc3RlcnMuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlQXJndW1lbnRz
KTogRXhwbGljaXRseSB0ZWFyIG9mZiB0aGUgYXJndW1lbnRzCisgICAgICAgIG9iamVjdCwgc2lu
Y2UgdGhlcmUncyBubyBzcGVjaWFsIGNvbnN0cnVjdG9yIGZvciB0aGlzIGFueW1vcmUuCisKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOiBSZWR1Y2VkIHRoZSBDKysgcmUtZW50
cnkgZGVwdGggYmVjYXVzZSBzb21lCisgICAgICAgIHdvcmtlcnMgdGVzdHMgd2VyZSBoaXR0aW5n
IHN0YWNrIG92ZXJmbG93IGluIHNvbWUgb2YgbXkgdGVzdGluZy4gV2Ugc2hvdWxkCisgICAgICAg
IG1ha2UgdGhpcyB0ZXN0IG1vcmUgZXhhY3QgaW4gZnV0dXJlLgorCisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmg6IERlYXRoIHRvIGFsbCBydW50aW1lIGtub3dsZWRnZSBvZiBh
cmd1bWVudAorICAgICAgICBsb2NhdGlvbiB0aGF0IGRvZXMgbm90IGJlbG9uZyB0byB0aGUgQ2Fs
bEZyYW1lIGNsYXNzIQorCisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGUpOiBJIGFtIGEgYnJva2VuIHJlY29yZCBhbmQgSSB1c2UgaGVscGVy
IGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIEFsc28sIHRoZSB3aG9sZSBwb2ludCBvZiB0
aGlzIHBhdGNoOiBUcmVhdCB0b28gbWFueSBhcmd1bWVudHMgYXMgYW4gYXJpdHkgbWF0Y2guCisK
KyAgICAgICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOiBVcGRhdGVkIHRoZSBhcmd1bWVudCBjb3B5aW5n
IG1hdGggdG8gdXNlCisgICAgICAgIGhlbHBlciBmdW5jdGlvbnMsIGZvciBiYWNrd2FyZHMtY29y
cmVjdG5lc3MuIFJlbW92ZWQgdGhlIGNvbmRpdGlvbgorICAgICAgICBwZXJ0YWluaW5nIHRvIGRl
Y2xhcmVkIGFyZ3VtZW50IGNvdW50IGJlY2F1c2UsIG5vdyB0aGF0IGFyZ3VtZW50cyBhcmUKKyAg
ICAgICAgYWx3YXlzIGluIGp1c3Qgb25lIHBsYWNlLCB0aGlzIG9wdGltaXphdGlvbiBpcyB2YWxp
ZCBmb3IgYWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgU3RhbmRhcmRpemVkIHRoZSBpZiBwcmVkaWNh
dGUgZm9yIGVhY2ggbGluZSBvZiB0aGUgb3B0aW1pemF0aW9uLiBUaGlzIG1pZ2h0CisgICAgICAg
IGZpeCBhIGJ1ZywgYnV0IEkgY291bGRuJ3QgZ2V0IHRoZSBidWcgdG8gY3Jhc2ggaW4gcHJhY3Rp
Y2UuCisKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NyZWF0ZV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2FyZ3VtZW50X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKTogUmVtb3ZlZCBjdGlfb3BfY3JlYXRlX2Fy
Z3VtZW50c19ub19wYXJhbXMKKyAgICAgICAgb3B0aW1pemF0aW9uIGJlY2F1c2UgaXQncyBubyBs
b25nZXIgYW4gb3B0aW1pemF0aW9uLCBub3cgdGhhdCBhcmd1bWVudHMKKyAgICAgICAgYXJlIGFs
d2F5cyBjb250aWd1b3VzIGluIGEga25vd24gbG9jYXRpb24uCisgICAgICAgIAorICAgICAgICBV
cGRhdGVkIGFyZ3VtZW50IGFjY2VzcyBvcGNvZGUgbWF0aCBmb3IgYmFja3dhcmRzLWNvcnJlY3Ru
ZXNzLgorCisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6YXJpdHlD
aGVja0Zvcik6IFVwZGF0ZWQganVzdCBsaWtlIHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsLiBU
aGlzCisgICAgICAgIGZ1bmN0aW9uIGlzIHNsaWdodGx5IGRpZmZlcmVudCBiZWNhdXNlIGl0IGNv
cGllcyB0aGUgY2FsbCBmcmFtZSBpbgorICAgICAgICBhZGRpdGlvbiB0byB0aGUgYXJndW1lbnRz
LiAoSW4gdGhlIEludGVycHJldGVyLCB0aGUgY2FsbCBmcmFtZSBpcyBub3QKKyAgICAgICAgc2V0
IHVwIGJ5IHRoaXMgcG9pbnQuKQorCisgICAgICAgIChKU0M6OmxhenlMaW5rRm9yKTogVGhlIHdo
b2xlIHBvaW50IG9mIHRoaXMgcGF0Y2g6IFRyZWF0IHRvbyBtYW55CisgICAgICAgIGFyZ3VtZW50
cyBhcyBhbiBhcml0eSBtYXRjaC4KKworICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElP
Tik6IFVwZGF0ZWQgZm9yIG5ldyBpdGVyZmFjZSB0byB0ZWFyT2ZmKCkuCisKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAg
ICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpsb2FkRG91YmxlQXJndW1lbnQpOgorICAg
ICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpsb2FkQ2VsbEFyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZEludDMyQXJndW1lbnQpOiBVc2UgaGVs
cGVyIGZ1bmN0aW9ucyEgVGhleQorICAgICAgICBidWlsZCBzdHJvbmcgYm9uZXMgYW5kIHRlZXRo
IQorCisgICAgICAgICogcnVudGltZS9BcmdMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6QXJnTGlz
dDo6Z2V0U2xpY2UpOgorICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6c2xvd0Fw
cGVuZCk6CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFyZ3VtZW50QnVmZmVyOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcik6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyOjp+TWFya2VkQXJndW1lbnRCdWZmZXIpOgorICAgICAgICAoSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6YXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6YXBw
ZW5kKToKKyAgICAgICAgKEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXI6OnJlbW92ZUxhc3QpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bGFzdCk6CisgICAgICAgIChKU0M6
OkFyZ0xpc3Q6OkFyZ0xpc3QpOgorICAgICAgICAoSlNDOjpBcmdMaXN0OjphdCk6IFVwZGF0ZWQg
Zm9yIGJhY2t3YXJkcy1jb3JyZWN0bmVzcy4gV1RGOjpWZWN0b3IgZG9lc24ndAorICAgICAgICBw
bGF5IG5pY2Ugd2l0aCBiYWNrd2FyZHMtbmVzcywgc28gSSBjaGFuZ2VkIHRvIHVzaW5nIG1hbnVh
bCBhbGxvY2F0aW9uLgorICAgICAgICAKKyAgICAgICAgRml4ZWQgYSBGSVhNRSBhYm91dCBub3Qg
YWxsIHZhbHVlcyBiZWluZyBtYXJrZWQgaW4gdGhlIGNhc2Ugb2Ygb3V0LW9mLWxpbmUKKyAgICAg
ICAgYXJndW1lbnRzLiBJIGhhZCB0byByZXdyaXRlIHRoZSBsb29wIGFueXdheSwgYW5kIEkgZGlk
bid0IGZlZWwgbGlrZQorICAgICAgICBtYWludGFpbmluZyBmaWRlbGl0eSB0byBpdHMgb2xkIGJ1
Z3MuCisKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkFy
Z3VtZW50czo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6QXJn
dW1lbnRzOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpBcmd1bWVu
dHM6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnB1dCk6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6dGVhck9mZik6CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMu
aDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBcmd1
bWVudHM6OkFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6YXJndW1lbnQpOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKTogU2Vjb25kYXJ5IGJlbmVm
aXQgb2YgdGhpcyBwYXRjaDogZGVsZXRlZAorICAgICAgICBsb3RzIG9mIHRyaWNreSBjb2RlIGRl
c2lnbmVkIHRvIG1haW50YWluIHR3byBkaWZmZXJlbnQgY29waWVzIG9mIGZ1bmN0aW9uCisgICAg
ICAgIGFyZ3VtZW50cy4gTm93IHRoYXQgYXJndW1lbnRzIGFyZSBhbHdheXMgY29udGlndW91cyBp
biBvbmUgcGxhY2UgaW4gbWVtb3J5LAorICAgICAgICB0aGlzIGNvbXBsZXhpdHkgY2FuIGdvIGF3
YXkuCisgICAgICAgIAorICAgICAgICBSZWR1Y2VkIGRvd24gdG8gb25lIGNyZWF0ZSBmdW5jdGlv
biBmb3IgdGhlIEFyZ3VtZW50cyBjbGFzcywgZnJvbSB0aHJlZS4KKworICAgICAgICBNb3ZlZCB0
ZWFyT2ZmKCkgaW50byBhbiBvdXQtb2YtbGluZSBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgaHVnZS4K
KyAgICAgICAgCisgICAgICAgIE1vdmVkIGxvZ2ljIGFib3V0IHdoZXRoZXIgdG8gdGVhciBvZmYg
ZWFnZXJseSBpbnRvIHRoZSBBcmd1bWVudHMgY2xhc3MsCisgICAgICAgIHNvIHdlIGRpZG4ndCBo
YXZlIHRvIGR1cGxpY2F0ZSBpdCBlbHNld2hlcmUuCisKKyAgICAgICAgKiBydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp2aXNpdENoaWxkcmVuKTogUmVuYW1lZCBtX251
bVBhcmFtZXRlcnNNaW51c1RoaXMgdG8KKyAgICAgICAgbV9udW1DYXB0dXJlZEFyZ3MgYmVjYXVz
ZSBpZiB0aGUgdmFsdWUgcmVhbGx5IHdlcmUgbV9udW1QYXJhbWV0ZXJzTWludXNUaGlzCisgICAg
ICAgIHdlIHdvdWxkIGJlIG1hcmtpbmcgdG9vIG11Y2guIChXZSBzaG91bGRuJ3QgbWFyayAndGhp
cycgYmVjYXVzZSBpdCBjYW4ndAorICAgICAgICBiZSBjYXB0dXJlZC4pIEFsc28sIHVzZSBoZWxw
ZXIgZnVuY3Rpb25zLgorCisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKTogVXNlIGhlbHBlciBmdW5jdGlvbnMuCisK
KyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
b3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOiBVc2UgaGVscGVy
IGZ1bmN0aW9ucywgYXMgYWJvdmUuCisKIDIwMTEtMTItMTAgIE1hcmsgSGFobmVuYmVyZyAgPG1o
YWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0MgdGVzdGFwaSBpcyBjcmFzaGluZyBv
biBXaW5kb3dzCkBAIC0yMDM1Niw3ICsyMDYxNyw3IEBACiAgICAgICAgIChKU0M6OlByZWRpY3Rp
b25UcmFja2VyOjpjb3B5TG9jYWxzRnJvbSk6CiAgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFj
a2VyOjpudW1iZXJPZkFyZ3VtZW50cyk6CiAgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFja2Vy
OjpudW1iZXJPZlZhcmlhYmxlcyk6Ci0gICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFja2VyOjph
cmd1bWVudEluZGV4Rm9yT3BlcmFuZCk6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFja2Vy
Ojphcmd1bWVudE9mZnNldEZvck9wZXJhbmQpOgogICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJh
Y2tlcjo6cHJlZGljdEFyZ3VtZW50KToKICAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6
OnByZWRpY3QpOgogICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJlZGljdEdsb2Jh
bFZhcik6CkBAIC0yMjA5MSw3ICsyMjM1Miw3IEBACiAgICAgICAgIChKU0M6OkRGRzo6UHJlZGlj
dGlvblRyYWNrZXI6OmluaXRpYWxpemVTaW1pbGFyVG8pOgogICAgICAgICAoSlNDOjpERkc6OlBy
ZWRpY3Rpb25UcmFja2VyOjpudW1iZXJPZkFyZ3VtZW50cyk6CiAgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblRyYWNrZXI6Om51bWJlck9mVmFyaWFibGVzKToKLSAgICAgICAgKEpTQzo6REZH
OjpQcmVkaWN0aW9uVHJhY2tlcjo6YXJndW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjphcmd1bWVudE9mZnNldEZvck9wZXJhbmQpOgog
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpwcmVkaWN0QXJndW1lbnQpOgog
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpwcmVkaWN0KToKICAgICAgICAg
KEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJlZGljdEdsb2JhbFZhcik6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDI1
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1MSwxMiArNjUxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpnZW5lcmljQmluYXJ5U2VhcmNoPFZhbHVlUHJvZmls
ZSwgaW50LCBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldD4obV92YWx1ZVByb2ZpbGVzLCBt
X3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIH0KLSAgICAg
ICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChpbnQgYXJndW1lbnRJbmRl
eCkKKyAgICAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChpbnQgYXJn
dW1lbnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGFyZ3VtZW50SW5kZXg7
Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBtX3ZhbHVl
UHJvZmlsZXMuc2l6ZSgpKQorICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gYXJndW1lbnQ7Cisg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gbV92YWx1ZVByb2ZpbGVzLnNpemUoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gdmFs
dWVQcm9maWxlKGFyZ3VtZW50SW5kZXgpOworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1
bHQgPSB2YWx1ZVByb2ZpbGUoaW5kZXgpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC0+bV9ieXRl
Y29kZU9mZnNldCAhPSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTAyNTQxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQog
ICAgICwgbV9zY29wZU5vZGUocHJvZ3JhbU5vZGUpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCi0gICAgLCBtX3RoaXNSZWdpc3RlcihSZWdpc3RlckZpbGU6OlByb2dyYW1Db2RlVGhpc1Jl
Z2lzdGVyKQorICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSkKICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRo
KDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDApCkBAIC0zOTYsMTYgKzM5NiwxNSBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuCiAgICAgICAgIGNvZGVCbG9jay0+
bV9udW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKIAogICAgIEZ1bmN0aW9u
UGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKTsKLSAg
ICBzaXplX3QgcGFyYW1ldGVyQ291bnQgPSBwYXJhbWV0ZXJzLnNpemUoKTsKLSAgICBpbnQgbmV4
dFBhcmFtZXRlckluZGV4ID0gLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIHBh
cmFtZXRlckNvdW50IC0gMTsKLSAgICBtX3BhcmFtZXRlcnMuZ3JvdygxICsgcGFyYW1ldGVyQ291
bnQpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKKyAgICBtX3BhcmFtZXRlcnMuZ3Jvdyhw
YXJhbWV0ZXJzLnNpemUoKSArIDEpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKIAogICAg
IC8vIEFkZCAidGhpcyIgYXMgYSBwYXJhbWV0ZXIKLSAgICBtX3RoaXNSZWdpc3Rlci5zZXRJbmRl
eChuZXh0UGFyYW1ldGVySW5kZXgpOworICAgIGludCBuZXh0UGFyYW1ldGVySW5kZXggPSBDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOworICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4
KG5leHRQYXJhbWV0ZXJJbmRleC0tKTsKICAgICArK21fY29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnM7CiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudDsgKytp
KQotICAgICAgICBhZGRQYXJhbWV0ZXIocGFyYW1ldGVyc1tpXSwgKytuZXh0UGFyYW1ldGVySW5k
ZXgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkK
KyAgICAgICAgYWRkUGFyYW1ldGVyKHBhcmFtZXRlcnNbaV0sIG5leHRQYXJhbWV0ZXJJbmRleC0t
KTsKIAogICAgIHByZXNlcnZlTGFzdFZhcigpOwogCkBAIC00MzUsNyArNDM0LDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YQogICAgICwgbV9zeW1ib2xUYWJsZShz
eW1ib2xUYWJsZSkKICAgICAsIG1fc2NvcGVOb2RlKGV2YWxOb2RlKQogICAgICwgbV9jb2RlQmxv
Y2soY29kZUJsb2NrKQotICAgICwgbV90aGlzUmVnaXN0ZXIoUmVnaXN0ZXJGaWxlOjpQcm9ncmFt
Q29kZVRoaXNSZWdpc3RlcikKKyAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0Fy
Z3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWlj
U2NvcGVEZXB0aCgwKQogICAgICwgbV9iYXNlU2NvcGVEZXB0aChjb2RlQmxvY2stPmJhc2VTY29w
ZURlcHRoKCkpCkBAIC0xODAxLDkgKzE4MDAsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhbGwoCiAgICAgICAgIGVtaXRNb3ZlKGNhbGxBcmd1bWVudHMucHJvZmlsZUhv
b2tSZWdpc3RlcigpLCBmdW5jKTsKIAogICAgIC8vIEdlbmVyYXRlIGNvZGUgZm9yIGFyZ3VtZW50
cy4KLSAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBhcmd1bWVu
dCA9IDA7CiAgICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0gY2FsbEFyZ3VtZW50cy5hcmd1
bWVudHNOb2RlKCktPm1fbGlzdE5vZGU7IG47IG4gPSBuLT5tX25leHQpCi0gICAgICAgIGVtaXRO
b2RlKGNhbGxBcmd1bWVudHMuYXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KyspLCBuKTsK
KyAgICAgICAgZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy5hcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50
KyspLCBuKTsKIAogICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGNhbGwgZnJhbWUuCiAgICAgVmVj
dG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
PiBjYWxsRnJhbWU7CkBAIC0xODIwLDcgKzE4MTksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdENhbGwoCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIGVtaXRPcGNvZGUob3Bj
b2RlSUQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVu
YwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLmNvdW50KCkpOyAvLyBh
cmdDb3VudAorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkpOyAvLyBhcmdDb3VudAogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChjYWxsQXJndW1lbnRzLnJlZ2lzdGVyT2Zmc2V0KCkpOyAvLyByZWdpc3Rlck9mZnNldAog
ICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3Bf
Y2FsbF9wdXRfcmVzdWx0KTsKQEAgLTE5MDAsMTAgKzE4OTksMTAgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdAogICAgICAgICBlbWl0TW92ZShjYWxsQXJndW1lbnRz
LnByb2ZpbGVIb29rUmVnaXN0ZXIoKSwgZnVuYyk7CiAKICAgICAvLyBHZW5lcmF0ZSBjb2RlIGZv
ciBhcmd1bWVudHMuCi0gICAgdW5zaWduZWQgYXJndW1lbnRJbmRleCA9IDA7CisgICAgdW5zaWdu
ZWQgYXJndW1lbnQgPSAwOwogICAgIGlmIChBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlID0g
Y2FsbEFyZ3VtZW50cy5hcmd1bWVudHNOb2RlKCkpIHsKICAgICAgICAgZm9yIChBcmd1bWVudExp
c3ROb2RlKiBuID0gYXJndW1lbnRzTm9kZS0+bV9saXN0Tm9kZTsgbjsgbiA9IG4tPm1fbmV4dCkK
LSAgICAgICAgICAgIGVtaXROb2RlKGNhbGxBcmd1bWVudHMuYXJndW1lbnRSZWdpc3Rlcihhcmd1
bWVudEluZGV4KyspLCBuKTsKKyAgICAgICAgICAgIGVtaXROb2RlKGNhbGxBcmd1bWVudHMuYXJn
dW1lbnRSZWdpc3Rlcihhcmd1bWVudCsrKSwgbik7CiAgICAgfQogCiAgICAgaWYgKG1fc2hvdWxk
RW1pdFByb2ZpbGVIb29rcykgewpAQCAtMTkyMCw3ICsxOTE5LDcgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdAogCiAgICAgZW1pdE9wY29kZShvcF9jb25zdHJ1Y3Qp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLmNvdW50KCkpOyAvLyBhcmdDb3Vu
dAorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpOyAvLyBhcmdDb3VudAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChj
YWxsQXJndW1lbnRzLnJlZ2lzdGVyT2Zmc2V0KCkpOyAvLyByZWdpc3Rlck9mZnNldAogICAgIGlm
IChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfY2FsbF9w
dXRfcmVzdWx0KTsKQEAgLTIzNjIsNyArMjM2MSw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6
OmlzQXJndW1lbnROdW1iZXIKICAgICBSZWdpc3RlcklEKiByZWdpc3RlcklEID0gcmVnaXN0ZXJG
b3IoaWRlbnQpOwogICAgIGlmICghcmVnaXN0ZXJJRCB8fCByZWdpc3RlcklELT5pbmRleCgpID49
IDApCiAgICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcmVnaXN0ZXJJRC0+aW5kZXgoKSAt
IG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkgLSAxID09IGFyZ3VtZW50TnVtYmVyOworICAgIHJldHVy
biByZWdpc3RlcklELT5pbmRleCgpID09IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1l
bnROdW1iZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDEwMjU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIoKSB7IHJldHVybiBt
X2FyZ3ZbMF0uZ2V0KCk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRSZWdpc3Rlcih1
bnNpZ25lZCBpKSB7IHJldHVybiBtX2FyZ3ZbaSArIDFdLmdldCgpOyB9Ci0gICAgICAgIHVuc2ln
bmVkIHJlZ2lzdGVyT2Zmc2V0KCkgeyByZXR1cm4gdGhpc1JlZ2lzdGVyKCktPmluZGV4KCkgKyBj
b3VudCgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9Ci0gICAgICAgIHVu
c2lnbmVkIGNvdW50KCkgeyByZXR1cm4gbV9hcmd2LnNpemUoKTsgfQorICAgICAgICB1bnNpZ25l
ZCByZWdpc3Rlck9mZnNldCgpIHsgcmV0dXJuIG1fYXJndi5sYXN0KCktPmluZGV4KCkgKyBDYWxs
RnJhbWU6Om9mZnNldEZvcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsgfQorICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fYXJndi5z
aXplKCk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlcigpIHsgcmV0
dXJuIG1fcHJvZmlsZUhvb2tSZWdpc3Rlci5nZXQoKTsgfQogICAgICAgICBBcmd1bWVudHNOb2Rl
KiBhcmd1bWVudHNOb2RlKCkgeyByZXR1cm4gbV9hcmd1bWVudHNOb2RlOyB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAJKHJldmlzaW9uIDEwMjU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDExICszMTksMTcgQEAg
aW5saW5lIENhbGxBcmd1bWVudHM6OkNhbGxBcmd1bWVudHMoQnl0ZQogICAgIGlmIChnZW5lcmF0
b3Iuc2hvdWxkRW1pdFByb2ZpbGVIb29rcygpKQogICAgICAgICBtX3Byb2ZpbGVIb29rUmVnaXN0
ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAKLSAgICBuZXdBcmd1bWVudChnZW5lcmF0
b3IpOyAvLyAndGhpcycgcmVnaXN0ZXIuCi0gICAgaWYgKCFhcmd1bWVudHNOb2RlKQotICAgICAg
ICByZXR1cm47Ci0gICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0gYXJndW1lbnRzTm9kZS0+
bV9saXN0Tm9kZTsgbjsgbiA9IG4tPm1fbmV4dCkKLSAgICAgICAgbmV3QXJndW1lbnQoZ2VuZXJh
dG9yKTsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSAxOyAvLyAndGhp
cycgcmVnaXN0ZXIuCisgICAgaWYgKGFyZ3VtZW50c05vZGUpIHsKKyAgICAgICAgZm9yIChBcmd1
bWVudExpc3ROb2RlKiBub2RlID0gYXJndW1lbnRzTm9kZS0+bV9saXN0Tm9kZTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPm1fbmV4dCkKKyAgICAgICAgICAgICsrYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CisgICAgfQorCisgICAgbV9hcmd2Lmdyb3coYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OworICAgIGZvciAoaW50IGkgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7IGkgPj0g
MDsgLS1pKSB7CisgICAgICAgIG1fYXJndltpXSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
KyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oaSkgPT0gbV9hcmd2LnNpemUoKSAt
IDEgfHwgbV9hcmd2W2ldLT5pbmRleCgpID09IG1fYXJndltpICsgMV0tPmluZGV4KCkgKyAxKTsK
KyAgICB9CiB9CiAKIGlubGluZSB2b2lkIENhbGxBcmd1bWVudHM6Om5ld0FyZ3VtZW50KEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDE0ICs3NiwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VDb2RlQmxvY2soKTsK
IAogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXguCi0gICAgYm9vbCBoYW5kbGVNaW5NYXgo
Ym9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCBmaXJz
dEFyZywgaW50IGxhc3RBcmcpOworICAgIGJvb2wgaGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3Vs
dCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgCiAgICAgLy8gSGFuZGxlIGNhbGxz
LiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2lj
cy4KICAgICB2b2lkIGhhbmRsZUNhbGwoSW50ZXJwcmV0ZXIqLCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAg
Ly8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlm
IHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9vbCB1
c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgs
IGludCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpT
RnVuY3Rpb24qLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCB1bnNpZ25lZCBuZXh0T2Zmc2V0
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wg
dXNlc1Jlc3VsdCwgaW50IGNhbGxUYXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUluZGV4
LCBpbnQgcmVzdWx0T3BlcmFuZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uLCBK
U0Z1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAg
IC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVk
ZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW50
cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50
IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBi
b29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJ
bnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIC8vIFByZXBhcmUgdG8gcGFyc2Ug
YSBibG9jay4KICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAvLyBQYXJzZSBh
IHNpbmdsZSBiYXNpYyBibG9jayBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCkBAIC0xOTksNyAr
MTk5LDcgQEAgcHJpdmF0ZToKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBh
Ym92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCiAgICAgTm9kZUluZGV4IGdl
dEFyZ3VtZW50KHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9w
ZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251
bUFyZ3VtZW50cyk7CiAKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwpAQCAtMjQ4LDcgKzI0OCw3
IEBAIHByaXZhdGU6CiAgICAgfQogICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IG9wZXJhbmQsIE5v
ZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFu
ZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemU7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1l
bnQob3BlcmFuZCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsK
IAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3Vt
ZW50KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
b3BlcmFuZCkpLCB2YWx1ZSk7CkBAIC0yNjYsNyArMjY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleDsKICAgICAgICAgaW50IGluZGV4OwogICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZCAr
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7CisgICAgICAgICAgICBpbmRleCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQp
OwogICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChpbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpbmRleCA9
IG9wZXJhbmQ7CkBAIC01NzgsMTUgKzU3OCwxNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsK
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArICh1bnNpZ25l
ZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCisgICAgICAgICAgICBtX3BhcmFtZXRlclNs
b3RzID0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291bnQ7CisKICAg
ICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLSAgICAgICAgaW50IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdDb3VudCAtIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgYXJnSWR4
ID0gZmlyc3RBcmcgKyAob3AgPT0gQ29uc3RydWN0ID8gMSA6IDApOyBhcmdJZHggPCBmaXJzdEFy
ZyArIGFyZ0NvdW50OyBhcmdJZHgrKykKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChh
cmdJZHgpKTsKKyAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gb3AgPT0gQ2FsbCA/IDAg
OiAxOworICAgICAgICBmb3IgKGludCBpID0gMCArIGR1bW15VGhpc0FyZ3VtZW50OyBpIDwgYXJn
Q291bnQ7ICsraSkKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKGkpKSk7CisKICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBh
ZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
KTsKICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+
dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKICAgICAgICAgICAgIHNldChwdXRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOwotICAgICAgICBpZiAoUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplICsgKHVuc2lnbmVkKWFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90
cykKLSAgICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemUgKyBhcmdDb3VudDsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAg
IApAQCAtODk1LDExICs4OTcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKElu
dGVycHJlCiAgICAgZWxzZQogICAgICAgICBjYWxsVHlwZSA9IFVua25vd25GdW5jdGlvbjsKICAg
ICBpZiAoY2FsbFR5cGUgIT0gVW5rbm93bkZ1bmN0aW9uKSB7Ci0gICAgICAgIGludCBhcmdDb3Vu
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAg
ICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBmaXJzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0IC0gYXJnQ291bnQgLSBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgIGludCBsYXN0QXJnID0g
Zmlyc3RBcmcgKyBhcmdDb3VudCAtIDE7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgLy8g
RG8gd2UgaGF2ZSBhIHJlc3VsdD8KICAgICAgICAgYm9vbCB1c2VzUmVzdWx0ID0gZmFsc2U7CiAg
ICAgICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFrZSBjb21waWxlciBoYXBweQpAQCAt
OTMwLDcgKzkzMCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW50ZXJwcmUK
ICAgICAgICAgICAgIGlmICghY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbikKICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9u
KSwgY2FsbFRhcmdldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYW5kbGVJbnRy
aW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFz
dEFyZywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWModXNl
c1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCByZWdpc3Rlck9mZnNldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCFjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IE5lZWQgdG8ga2VlcCB0aGUgY2FsbCB0YXJnZXQgYWxpdmUgZm9yIE9TUi4gV2UgY291bGQgZWFz
aWx5IG9wdGltaXplIHRoaXMgb3V0IGlmIHdlIHdhbnRlZAogICAgICAgICAgICAgICAgICAgICAv
LyB0bywgc2luY2UgYXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgdGhlIGNhbGwgdGFyZ2V0IGlz
IGEgY29uc3RhbnQuIEl0J3MganVzdCB0aGF0IE9TUiBpc24ndApAQCAtOTQwLDE0ICs5NDAsMTQg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChoYW5kbGVJbmxpbmluZyh1c2VzUmVzdWx0LCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBjYWxsVGFyZ2V0LCByZXN1bHRPcGVyYW5kLCBjZXJ0YWluQWJvdXRFeHBlY3Rl
ZEZ1bmN0aW9uLCBleHBlY3RlZEZ1bmN0aW9uLCBmaXJzdEFyZywgbGFzdEFyZywgbmV4dE9mZnNl
dCwga2luZCkpCisgICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwg
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbFRhcmdldCwgcmVzdWx0T3BlcmFu
ZCwgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiwgZXhwZWN0ZWRGdW5jdGlvbiwgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgICAgICAKICAgICBhZGRDYWxsKGlu
dGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKIH0KIAotYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwgTm9k
ZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRh
aW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIGlu
dCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJv
b2wgdXNlc1Jlc3VsdCwgaW50IGNhbGxUYXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUlu
ZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
LCBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8vIEZpcnN0LCB0aGUgcmVhbGx5IHNpbXBsZSBj
aGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0aW9uPwogICAgIGlmICghZXhwZWN0
ZWRGdW5jdGlvbikKQEAgLTk1OSw3ICs5NTksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyhib29sCiAgICAgCiAgICAgLy8gRG9lcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50
cyB3ZSdyZSBwYXNzaW5nIG1hdGNoIHRoZSBhcml0eSBvZiB0aGUgdGFyZ2V0PyBXZSBjb3VsZAog
ICAgIC8vIGlubGluZSBhcml0eSBjaGVjayBmYWlsdXJlcywgYnV0IGZvciBzaW1wbGljaXR5IHdl
IGN1cnJlbnRseSBkb24ndC4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihleGVjdXRhYmxlLT5w
YXJhbWV0ZXJDb3VudCgpKSArIDEgIT0gbGFzdEFyZyAtIGZpcnN0QXJnICsgMSkKKyAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50PihleGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKSArIDEgIT0gYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICAvLyBIYXZlIHdlIGV4Y2VlZGVkIGlubGluZSBzdGFjayBkZXB0aCwgb3IgYXJlIHdlIHRyeWlu
ZyB0byBpbmxpbmUgYSByZWN1cnNpdmUgY2FsbD8KQEAgLTEwMDAsMTAgKzEwMDAsMTAgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIAogICAgIC8vIEZJWE1F
OiBEb24ndCBmbHVzaCBjb25zdGFudHMhCiAgICAgCi0gICAgZm9yIChpbnQgYXJnID0gZmlyc3RB
cmcgKyAxOyBhcmcgPD0gbGFzdEFyZzsgKythcmcpCi0gICAgICAgIGZsdXNoKGFyZyk7CisgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKQorICAg
ICAgICBmbHVzaChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKICAgICAK
LSAgICBpbnQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQobGFzdEFyZykgKyAxOworICAgIGludCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZWdpc3Rlck9mZnNldCkgLSBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFy
ZWEgdXNlZCBieSB0aGUgY2FsbCBmcmFtZSBpcyByZXNlcnZlZC4KICAgICBmb3IgKGludCBhcmcg
PSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSArIGNvZGVCbG9jay0+bV9udW1WYXJzOyBhcmctLSA+IGlubGluZUNhbGxGcmFtZVN0YXJ0ICsg
MTspCkBAIC0xMTIzLDIzICsxMTIzLDIzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKGJvb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBl
IG9wLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9w
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKIHsK
ICAgICBpZiAoIXVzZXNSZXN1bHQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGxh
c3RBcmcgPT0gZmlyc3RBcmcpIHsKKyAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gMSkgeyAvLyBNYXRoLm1pbigpCiAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjb25zdGFu
dE5hTigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAKLSAgICBpZiAobGFz
dEFyZyA9PSBmaXJzdEFyZyArIDEpIHsKLSAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGdldFRv
TnVtYmVyKGZpcnN0QXJnICsgMSkpOworICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9PSAyKSB7IC8vIE1hdGgubWluKHgpCisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBnZXRU
b051bWJlcihyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBpZiAobGFzdEFyZyA9PSBmaXJzdEFyZyAr
IDIpIHsKLSAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhO
b2RlVXNlQm90dG9tKSwgZ2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAxKSwgZ2V0VG9OdW1iZXIoZmly
c3RBcmcgKyAyKSkpOworICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAzKSB7
IC8vIE1hdGgubWluKHgsIHkpCisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBo
KG9wLCBPcEluZm8oTm9kZVVzZUJvdHRvbSksIGdldFRvTnVtYmVyKHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMSkpLCBnZXRUb051bWJlcihyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDIpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBA
IC0xMTQ3LDcgKzExNDcsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9v
bCB1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljIGlu
dHJpbnNpYywgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uKQorLy8gRklYTUU6IFdlIGRlYWQtY29kZS1lbGltaW5hdGUgdW51c2VkIE1hdGggaW50cmlu
c2ljcywgYnV0IHRoYXQncyBpbnZhbGlkIGJlY2F1c2UKKy8vIHRoZXkgbmVlZCB0byBwZXJmb3Jt
IHRoZSBUb051bWJlciBjb252ZXJzaW9uLCB3aGljaCBjYW4gaGF2ZSBzaWRlLWVmZmVjdHMuCiti
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQg
cmVzdWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikK
IHsKICAgICBzd2l0Y2ggKGludHJpbnNpYykgewogICAgIGNhc2UgQWJzSW50cmluc2ljOiB7CkBA
IC0xMTU3LDEwICsxMTU5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGJvbwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHRoaXMgYXJndW1lbnQuIElmIHdlIGRvbid0
IGhhdmUgYSBmaXJzdAotICAgICAgICAvLyBhcmd1bWVudCB0aGVuIG1ha2UgdGhpcyBKU0NvbnN0
YW50KE5hTikuCi0gICAgICAgIGludCBhYnNBcmcgPSBmaXJzdEFyZyArIDE7Ci0gICAgICAgIGlm
IChhYnNBcmcgPiBsYXN0QXJnKSB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9PSAxKSB7IC8vIE1hdGguYWJzKCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5k
LCBjb25zdGFudE5hTigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBA
IC0xMTY4LDIxICsxMTY3LDIxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNp
Yyhib28KICAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50
QWJzKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgc2V0KHJlc3VsdE9w
ZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhBYnMsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgZ2V0VG9O
dW1iZXIoYWJzQXJnKSkpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChB
cml0aEFicywgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
Ci0gICAgICAgIAorCiAgICAgY2FzZSBNaW5JbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBoYW5k
bGVNaW5NYXgodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIGZpcnN0QXJnLCBs
YXN0QXJnKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heCh1c2VzUmVzdWx0LCByZXN1bHRP
cGVyYW5kLCBBcml0aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKICAgICAgICAgCiAgICAgY2FzZSBNYXhJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBo
YW5kbGVNaW5NYXgodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgQXJpdGhNYXgsIGZpcnN0QXJn
LCBsYXN0QXJnKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heCh1c2VzUmVzdWx0LCByZXN1
bHRPcGVyYW5kLCBBcml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKTsKICAgICAgICAgCiAgICAgY2FzZSBTcXJ0SW50cmluc2ljOiB7CiAgICAgICAgIGlm
ICghdXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGZpcnN0QXJnID09IGxhc3RBcmcpIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5zcXJ0KCkKICAgICAgICAgICAgIHNldChyZXN1
bHRPcGVyYW5kLCBjb25zdGFudE5hTigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkBAIC0xMTkwLDE1ICsxMTg5LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9h
dGluZ1BvaW50U3FydCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTcXJ0LCBnZXRUb051bWJl
cihmaXJzdEFyZyArIDEpKSk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBo
KEFyaXRoU3FydCwgZ2V0VG9OdW1iZXIocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZCgxKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEFycmF5UHVzaEludHJpbnNpYzogewotICAgICAgICBpZiAoZmlyc3RBcmcgKyAxICE9IGxhc3RB
cmcpCisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IGFycmF5UHVz
aCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
Z2V0KGZpcnN0QXJnKSwgZ2V0KGZpcnN0QXJnICsgMSkpOworICAgICAgICBOb2RlSW5kZXggYXJy
YXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIGlmICh1c2VzUmVz
dWx0KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFycmF5UHVzaCk7CiAgICAgICAg
IApAQCAtMTIwNiwzNiArMTIwNSw0NCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMoYm9vCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wSW50cmluc2ljOiB7
Ci0gICAgICAgIGlmIChmaXJzdEFyZyAhPSBsYXN0QXJnKQorICAgICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCi0gICAgICAgIE5vZGVJbmRleCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9w
SW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQoZmlyc3RBcmcpKTsKKyAgICAgICAgTm9k
ZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKDApLCBPcEluZm8o
cHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7
CiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQs
IGFycmF5UG9wKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY2FzZSBDaGFy
Q29kZUF0SW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChmaXJzdEFyZyArIDEgIT0gbGFzdEFyZykK
KyAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghKG1fZ3JhcGhbZ2V0KGZpcnN0QXJnKV0ucHJl
ZGljdGlvbigpICYgUHJlZGljdFN0cmluZykpCisKKyAgICAgICAgaW50IHRoaXNPcGVyYW5kID0g
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKTsKKyAgICAgICAgaWYgKCEobV9n
cmFwaFtnZXQodGhpc09wZXJhbmQpXS5wcmVkaWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5nKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBzdG9y
YWdlID0gYWRkVG9HcmFwaChHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBnZXQoZmlyc3RBcmcp
LCBnZXRUb0ludDMyKGZpcnN0QXJnICsgMSkpOwotICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUg
PSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIGdldChmaXJzdEFyZyksIGdldFRvSW50MzIo
Zmlyc3RBcmcgKyAxKSwgc3RvcmFnZSk7CisgICAgICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpOworICAgICAgICBOb2RlSW5kZXggc3Rv
cmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgZ2V0KHRoaXNPcGVy
YW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKKyAgICAgICAgTm9kZUluZGV4IGNoYXJD
b2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBnZXQodGhpc09wZXJhbmQpLCBnZXRU
b0ludDMyKGluZGV4T3BlcmFuZCksIHN0b3JhZ2UpOworCiAgICAgICAgIGlmICh1c2VzUmVzdWx0
KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAgICAgY2FzZSBDaGFyQXRJbnRyaW5zaWM6IHsKLSAgICAgICAg
aWYgKGZpcnN0QXJnICsgMSAhPSBsYXN0QXJnKQorICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KCEobV9ncmFwaFtnZXQoZmlyc3RBcmcpXS5wcmVkaWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5nKSkK
KworICAgICAgICBpbnQgdGhpc09wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDApOworICAgICAgICBpZiAoIShtX2dyYXBoW2dldCh0aGlzT3BlcmFuZCldLnByZWRp
Y3Rpb24oKSAmIFByZWRpY3RTdHJpbmcpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gYWRkVG9HcmFwaChHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlLCBnZXQoZmlyc3RBcmcpLCBnZXRUb0ludDMyKGZpcnN0QXJnICsgMSkpOwotICAgICAg
ICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgZ2V0KGZpcnN0
QXJnKSwgZ2V0VG9JbnQzMihmaXJzdEFyZyArIDEpLCBzdG9yYWdlKTsKKyAgICAgICAgaW50IGlu
ZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7CisgICAg
ICAgIE5vZGVJbmRleCBzdG9yYWdlID0gYWRkVG9HcmFwaChHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOworICAgICAg
ICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgZ2V0KHRoaXNP
cGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpLCBzdG9yYWdlKTsKKwogICAgICAgICBp
ZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI2Nyw3ICsxMjc0LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBt
X2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNh
bGxGcmFtZSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3Vt
ZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1f
bnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJn
dW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NE
YXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBzZXRBcmd1
bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSkpOwogICAgICAgICAgICAgbV9ncmFwaC5t
X2FyZ3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNl
dEFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
c2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKQEAgLTIyMDcsNyAr
MjIxNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAg
ICAgICAgICAgcHJpbnRmKCIgICAgICBEaWQgbm90IGZpbmQgbm9kZSwgYWRkaW5nIHBoaS5cbiIp
OwogI2VuZGlmCiAKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dy
YXBoKFBoaSwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1l
bnRQaGlTdGFjayA/IHZhck5vIC0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSA6IHZhck5vKSkpOworICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8obmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrID8gYXJndW1lbnRUb09wZXJh
bmQodmFyTm8pIDogc3RhdGljX2Nhc3Q8aW50Pih2YXJObykpKSk7CiAgICAgICAgICAgICAgICAg
dmFyID0gdmFsdWVJblByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGlmIChzdGFja1R5cGUg
PT0gQXJndW1lbnRQaGlTdGFjaykKICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9j
ay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJl
ZGVjZXNzb3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDEwMjU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2Rl
SW5kZXggbm9kZUluZGV4LCBDbwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGludCBvcGVy
YW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CiAgICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHByaW50ZigiJXNhcmcldSglcykiLCBo
YXNQcmludGVkID8gIiwgIiA6ICIiLCBvcGVyYW5kIC0gY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIo
KSwgbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOworICAgICAg
ICAgICAgcHJpbnRmKCIlc2FyZyV1KCVzKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG9wZXJh
bmRUb0FyZ3VtZW50KG9wZXJhbmQpLCBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVB
Y2Nlc3NEYXRhKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHByaW50ZigiJXNyJXUoJXMp
IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgb3BlcmFuZCwgbmFtZU9mVmFyaWFibGVBY2Nlc3NE
YXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEwMjU0MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MTk3LDcgKzE5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewogICAgICAg
ICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLmxvY2FsKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS5sb2NhbCgpICsg
bV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwor
ICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgp
KTsKICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGF0KG1fYXJn
dW1lbnRzW2FyZ3VtZW50XSkudmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQoYXJndW1lbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDEwMjU0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyAr
MjU2LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIGNv
bXBpbGVFbnRyeSgpOwogCiAgICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgYnJhbmNoMzIoRXF1YWwsIEdQ
UkluZm86OnJlZ1QxLCBJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1Rv
KGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKKyAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIEdQUklu
Zm86OnJlZ1QxLCBJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGZy
b21Bcml0eUNoZWNrLCB0aGlzKTsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVv
Zih2b2lkKikpOwogICAgIENhbGwgY2FsbEFyaXR5Q2hlY2sgPSBjYWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTAyNTQxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdDb3JyZWN0
YWJsZUp1bXBQb2ludC5oIgogI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRlICJERkdP
cGVyYW5kcy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQ
cm9maWxlLmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgpAQCAtMTEyLDE0ICsxMTMsMTAg
QEAgc3RydWN0IE9TUkV4aXQgewogICAgIHsKICAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1
bWVudHMuc2l6ZSgpOwogICAgIH0KLSAgICBpbnQgb3BlcmFuZEZvckFyZ3VtZW50KGludCBhcmd1
bWVudCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcmd1bWVudCAtIG1fYXJndW1lbnRz
LnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICB9CiAgICAg
aW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAo
aW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YW5kRm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmRUb0FyZ3Vt
ZW50KGluZGV4KTsKICAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOwog
ICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJ
KHJldmlzaW9uIDEwMjU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFu
ZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE1IEBACiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAorI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBoZWxwZXIgZnVuY3Rpb24g
dG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgorLy8gYXJn
dW1lbnQgMCBpcyAndGhpcycuCiBpbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3Bl
cmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7IH0KK2lubGluZSBpbnQgb3BlcmFuZFRvQXJndW1l
bnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC1vcGVyYW5kICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKTsgfQoraW5saW5lIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQp
IHsgcmV0dXJuIC1hcmd1bWVudCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIApAQCAt
MTA1LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQogICAg
IHsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAg
ICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3Bl
cmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CiAgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNb
YXJndW1lbnRdOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTE3LDcgKzEyMCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAg
ICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3Bl
cmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CiAgICAgICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVu
dF0gPSB2YWx1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMDI1NDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NTgsMTAgKzY1OCwxMCBAQCBpbmxpbmUgdm9pZCogbGlua0ZvcihFeGVjU3Rh
dGUqIGV4ZWNDYWxsCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBj
b2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihraW5k
KTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
PT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpCi0gICAg
ICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9y
KGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKGV4ZWND
YWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkKICAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS5hZGRyZXNzRm9yQ2FsbCgpOwogICAgIH0KICAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlu
a0luZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1OCw0
MyArMTI1OCwyNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAg
ICAgR1BSUmVnIGNhbGxlZVBheWxvYWRHUFIgPSBjYWxsZWUucGF5bG9hZEdQUigpOwogICAgIHVz
ZShjYWxsZWVOb2RlSW5kZXgpOwogCi0gICAgLy8gdGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJz
dCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCisgICAg
Ly8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1bmN0
aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCiAgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4g
c3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtQXJncyA9
IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLm51
bUNoaWxkcmVuKCkgLSAxOwogCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJn
dW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9y
IGl0LgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbnVtQXJncyArIGR1bW15VGhpc0FyZ3VtZW50
OworICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNz
ZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQpLCBjYWxsRnJhbWVQYXlsb2FkU2xvdChSZWdpc3Rl
ckZpbGU6OkFyZ3VtZW50Q291bnQpKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBjYWxsRnJhbWVUYWdTbG90KFJlZ2lz
dGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBjYWxsRnJhbWVQYXlsb2FkU2xvdChSZWdpc3RlckZpbGU6OkNhbGxl
ckZyYW1lKSk7CisgICAgbV9qaXQuc3RvcmUzMihjYWxsZWVQYXlsb2FkR1BSLCBjYWxsRnJhbWVQ
YXlsb2FkU2xvdChSZWdpc3RlckZpbGU6OkNhbGxlZSkpOworICAgIG1faml0LnN0b3JlMzIoY2Fs
bGVlVGFnR1BSLCBjYWxsRnJhbWVUYWdTbG90KFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSk7CiAKLSAg
ICAvLyBhbW91bnQgb2Ygc3R1ZmYgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3RlcikpIHRoYXQg
d2UgbmVlZCB0byBwbGFjZSBhdCB0aGUKLSAgICAvLyB0b3Agb2YgdGhlIEpTIHN0YWNrLgotICAg
IGludCBjYWxsRGF0YVNpemUgPSAwOwotCi0gICAgLy8gZmlyc3QgdGhlcmUgYXJlIHRoZSBhcmd1
bWVudHMKLSAgICBjYWxsRGF0YVNpemUgKz0gbnVtUGFzc2VkQXJnczsKLQotICAgIC8vIGFuZCB0
aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhlYWRlcgotICAgIGNhbGxEYXRhU2l6ZSArPSBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0KLSAgICBtX2ppdC5zdG9yZTMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyksIHBheWxvYWRPZkNhbGxE
YXRhKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOwotICAgIG1faml0LnN0b3JlMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ09mQ2FsbERh
dGEoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7Ci0gICAgbV9qaXQuc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBheWxvYWRPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6
Q2FsbGVyRnJhbWUpKTsKLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxs
ZXJGcmFtZSkpOwotCi0gICAgZm9yIChpbnQgYXJnSWR4ID0gMDsgYXJnSWR4IDwgbnVtQXJnczsg
YXJnSWR4KyspIHsKLSAgICAgICAgTm9kZUluZGV4IGFyZ05vZGVJbmRleCA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBhcmdJZHhdOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgIE5vZGVJ
bmRleCBhcmdOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5m
aXJzdENoaWxkKCkgKyAxICsgaV07CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBh
cmdOb2RlSW5kZXgpOwogICAgICAgICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOwog
ICAgICAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7CiAgICAgICAg
IHVzZShhcmdOb2RlSW5kZXgpOwogCi0gICAgICAgIG1faml0LnN0b3JlMzIoYXJnVGFnR1BSLCB0
YWdPZkNhbGxEYXRhKC1jYWxsRGF0YVNpemUgKyBhcmdJZHggKyBkdW1teVRoaXNBcmd1bWVudCkp
OwotICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIHBheWxvYWRPZkNhbGxEYXRh
KC1jYWxsRGF0YVNpemUgKyBhcmdJZHggKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICBt
X2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgYXJndW1lbnRUYWdTbG90KGkgKyBkdW1teVRoaXNBcmd1
bWVudCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIGFyZ3VtZW50UGF5
bG9hZFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CiAgICAgfQogCi0gICAgbV9qaXQuc3Rv
cmUzMihjYWxsZWVUYWdHUFIsIHRhZ09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsK
LSAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVBheWxvYWRHUFIsIHBheWxvYWRPZkNhbGxEYXRhKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlKSk7Ci0KICAgICBmbHVzaFJlZ2lzdGVycygpOwogCiAgICAgR1BS
UmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CkBAIC0xMzA4LDggKzEyOTIsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZVBh
eWxvYWRHUFIsIHRhcmdldFRvQ2hlY2spKTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVUYWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoY2FsbGVlUGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
c2NvcGVDaGFpbikpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1
bHRQYXlsb2FkR1BSLCBwYXlsb2FkT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4p
KTsKLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIHRhZ09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7Cisg
ICAgbV9qaXQuc3RvcmVQdHIocmVzdWx0UGF5bG9hZEdQUiwgY2FsbEZyYW1lUGF5bG9hZFNsb3Qo
UmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CisgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBjYWxsRnJhbWVUYWdTbG90KFJl
Z2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOwogCiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTAyNTQxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIxNyw0NyArMTIxNywzNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlJiBub2RlCiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsK
ICAgICB1c2UoY2FsbGVlTm9kZUluZGV4KTsKICAgICAKLSAgICAvLyB0aGUgY2FsbCBpbnN0cnVj
dGlvbidzIGZpcnN0IGNoaWxkIGlzIGVpdGhlciB0aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBv
ciB0aGUKKyAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIGVpdGhl
ciB0aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0aGUKICAgICAvLyByZWNlaXZlciAobWV0
aG9kIGNhbGwpLiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgotICAgIGlu
dCBudW1BcmdzID0gbm9kZS5udW1DaGlsZHJlbigpIC0gMTsKKyAgICBpbnQgbnVtUGFzc2VkQXJn
cyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CiAgICAgCi0gICAgaW50IG51bVBhc3NlZEFyZ3Mg
PSBudW1BcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bVBhc3Nl
ZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudCkpKSwgY2FsbEZyYW1lU2xvdChSZWdpc3RlckZpbGU6
OkFyZ3VtZW50Q291bnQpKTsKKyAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgY2FsbEZyYW1lU2xvdChSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSk7CisgICAg
bV9qaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBjYWxsRnJhbWVTbG90KFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVlKSk7CiAgICAgCi0gICAgLy8gYW1vdW50IG9mIHN0dWZmIChpbiB1bml0cyBvZiBzaXplb2Yo
UmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8gcGxhY2UgYXQgdGhlCi0gICAgLy8gdG9wIG9mIHRo
ZSBKUyBzdGFjay4KLSAgICBpbnQgY2FsbERhdGFTaXplID0gMDsKLQotICAgIC8vIGZpcnN0IHRo
ZXJlIGFyZSB0aGUgYXJndW1lbnRzCi0gICAgY2FsbERhdGFTaXplICs9IG51bVBhc3NlZEFyZ3M7
Ci0gICAgCi0gICAgLy8gYW5kIHRoZW4gdGhlcmUgaXMgdGhlIGNhbGwgZnJhbWUgaGVhZGVyCi0g
ICAgY2FsbERhdGFTaXplICs9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAg
ICAKLSAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIobnVtUGFzc2VkQXJncykpKSwgYWRkcmVzc09mQ2FsbERhdGEo
UmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7Ci0gICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVyRnJhbWUpKTsKLSAgICAKLSAgICBmb3IgKGludCBhcmdJZHggPSAwOyBhcmdJZHggPCBudW1B
cmdzOyBhcmdJZHgrKykgewotICAgICAgICBOb2RlSW5kZXggYXJnTm9kZUluZGV4ID0gbV9qaXQu
Z3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGFyZ0lkeF07
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAg
Tm9kZUluZGV4IGFyZ05vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltu
b2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRo
aXMsIGFyZ05vZGVJbmRleCk7CiAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CiAg
ICAgICAgIHVzZShhcmdOb2RlSW5kZXgpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoYXJnR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YSgtY2FsbERhdGFTaXplICsgYXJnSWR4ICsgZHVt
bXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoYXJnR1BSLCBhcmd1bWVu
dFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CiAgICAgfQotICAgIAotICAgIG1faml0LnN0
b3JlUHRyKGNhbGxlZUdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUp
KTsKLSAgICAKKwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgCisKICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKICAg
ICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CiAgICAgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGg7Ci0gICAgCisKICAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0
cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9D
aGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxl
ZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRH
UFIpOwotICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CisgICAgbV9qaXQuc3RvcmVQdHIocmVzdWx0R1BSLCBj
YWxsRnJhbWVTbG90KFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOwogCiAgICAgbV9qaXQuYWRk
UHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTAyNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2Myw5ICs5NjMsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAKICAgICAgICAgICAgIGNhc2UgSW5saW5lU3Rh
cnQ6IHsKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYXJndW1lbnRzU3RhcnQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IC0gUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBW
YWx1ZVJlY292ZXJ5IHJlY292ZXJ5ID0gY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IobV92YXJpYWJs
ZXNbYXJndW1lbnRzU3RhcnQgKyBpXSk7CisgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5ID0g
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IobV92YXJpYWJsZXNbaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGkpXSk7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZWNvdmVyeSBjYW5ub3QgcG9pbnQgdG8gcmVnaXN0
ZXJzLCBzaW5jZSB0aGUgY2FsbCBmcmFtZSByZWlmaWNhdGlvbiBpc24ndAogICAgICAgICAgICAg
ICAgICAgICAvLyBhcyBzbWFydCBhcyBPU1IsIHNvIGl0IGNhbid0IGhhbmRsZSB0aGF0LiBUaGUg
ZXhjZXB0aW9uIGlzIHRoZSB0aGlzIGFyZ3VtZW50LAogICAgICAgICAgICAgICAgICAgICAvLyB3
aGljaCB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBiZSBhYmxlIHRvIHJlY292ZXIuCkBAIC0xMDIw
LDggKzEwMjAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAg
ICAgICAgIH0KICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1ZBTFVFX1JFQ09WRVJJ
RVMpCi0gICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAtbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyBvcGVyYW5kIDwgLVJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgKytvcGVyYW5kKQotICAgICAgICAgICAgY29tcHV0ZVZhbHVl
UmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChzdGRlcnIpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29tcHV0ZVZh
bHVlUmVjb3ZlcnlGb3IoYXJndW1lbnRUb09wZXJhbmQoaSkpLmR1bXAoc3RkZXJyKTsKICAgICAg
ICAgCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIDogIik7CiAgICAgICAgIApAQCAtMTA1NCw4
ICsxMDU0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAg
ICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwog
ICAgIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtUGFy
YW1ldGVyczsgKytpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSAoVmlydHVhbFJlZ2lzdGVyKShtX2ppdC5jb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyKCkgKyBp
KTsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gYXQobV9qaXQuZ3JhcGgo
KS5tX2FyZ3VtZW50c1tpXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBhdChtX2ppdC5n
cmFwaCgpLm1fYXJndW1lbnRzW2ldKS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5wcmVkaWN0aW9uKCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaWYgKGlzSW50
MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
OTAsMjAgKzg5MCwzNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2ZGb3JP
YmplY3QoTm9kZSYsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVn
IHNjcmF0Y2hBbmRSZXN1bHRSZWcpOwogICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2YoTm9kZSYp
OwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3NPZkNhbGxEYXRhKGlu
dCBpZHgpCisgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgorICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxGcmFtZVNsb3QoaW50IHNsb3QpCiAgICAgewot
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIChtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBpZHgp
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIHNsb3QpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgfQorCisgICAgLy8gQWNjZXNzIHRvIG91ciBm
aXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFyZ3Vt
ZW50U2xvdChpbnQgYXJndW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIChtX2ppdC5jb2RlQmxvY2so
KS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgdGFnT2ZDYWxsRGF0
YShpbnQgaWR4KQorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxGcmFtZVRhZ1Nsb3Qo
aW50IHNsb3QpCisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIChtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgKyBzbG90KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxGcmFtZVBheWxvYWRTbG90
KGludCBzbG90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICsgc2xvdCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXJndW1lbnRUYWdTbG90
KGludCBhcmd1bWVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0LmNvZGVCbG9jaygpLT5tX251
bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCAobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsg
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIHBheWxvYWRPZkNh
bGxEYXRhKGludCBpZHgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXJndW1lbnRQYXls
b2FkU2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIChtX2ppdC5jb2RlQmxvY2so
KS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBpZHgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIChtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgKyBhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0xMDQ1LDI2ICsxMDYy
LDI2IEBAIHByaXZhdGU6CiAgICAgLy8gc3RhY2suIE9uIG90aGVyIGFyY2hpdGVjdHVyZXMgd2Ug
bWF5IG5lZWQgdG8gc29ydCB2YWx1ZXMgaW50byB0aGUKICAgICAvLyBjb3JyZWN0IHJlZ2lzdGVy
cy4KICNpZiAhTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIHVuc2lnbmVkIG1fY2Fs
bEFyZ3VtZW50SW5kZXg7Ci0gICAgdm9pZCByZXNldENhbGxBcmd1bWVudHMoKSB7IG1fY2FsbEFy
Z3VtZW50SW5kZXggPSAwOyB9CisgICAgdW5zaWduZWQgbV9jYWxsQXJndW1lbnRPZmZzZXQ7Cisg
ICAgdm9pZCByZXNldENhbGxBcmd1bWVudHMoKSB7IG1fY2FsbEFyZ3VtZW50T2Zmc2V0ID0gMDsg
fQogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNpbmcgaW50ZXJuYWxseSB0byBpbXBsZW1l
bnQgdGhlIGNhbGxPcGVyYXRpb24gbWV0aG9kcy4KICAgICB2b2lkIGFkZENhbGxBcmd1bWVudChH
UFJSZWcgdmFsdWUpCiAgICAgewotICAgICAgICBtX2ppdC5wb2tlKHZhbHVlLCBtX2NhbGxBcmd1
bWVudEluZGV4KyspOworICAgICAgICBtX2ppdC5wb2tlKHZhbHVlLCBtX2NhbGxBcmd1bWVudE9m
ZnNldCsrKTsKICAgICB9CiAgICAgdm9pZCBhZGRDYWxsQXJndW1lbnQoVHJ1c3RlZEltbTMyIGlt
bSkKICAgICB7Ci0gICAgICAgIG1faml0LnBva2UoaW1tLCBtX2NhbGxBcmd1bWVudEluZGV4Kysp
OworICAgICAgICBtX2ppdC5wb2tlKGltbSwgbV9jYWxsQXJndW1lbnRPZmZzZXQrKyk7CiAgICAg
fQogICAgIHZvaWQgYWRkQ2FsbEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIgcG9pbnRlcikKICAgICB7
Ci0gICAgICAgIG1faml0LnBva2UocG9pbnRlciwgbV9jYWxsQXJndW1lbnRJbmRleCsrKTsKKyAg
ICAgICAgbV9qaXQucG9rZShwb2ludGVyLCBtX2NhbGxBcmd1bWVudE9mZnNldCsrKTsKICAgICB9
CiAgICAgdm9pZCBhZGRDYWxsQXJndW1lbnQoRlBSUmVnIHZhbHVlKQogICAgIHsKLSAgICAgICAg
bV9qaXQuc3RvcmVEb3VibGUodmFsdWUsIEpJVENvbXBpbGVyOjpBZGRyZXNzKEpJVENvbXBpbGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9jYWxsQXJndW1lbnRJbmRleCAqIHNpemVvZih2b2lk
KikpKTsKLSAgICAgICAgbV9jYWxsQXJndW1lbnRJbmRleCArPSBzaXplb2YoZG91YmxlKSAvIHNp
emVvZih2b2lkKik7CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHZhbHVlLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fY2FsbEFyZ3Vt
ZW50T2Zmc2V0ICogc2l6ZW9mKHZvaWQqKSkpOworICAgICAgICBtX2NhbGxBcmd1bWVudE9mZnNl
dCArPSBzaXplb2YoZG91YmxlKSAvIHNpemVvZih2b2lkKik7CiAgICAgfQogCiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzKEZQUlJlZyBhcmcxKQpAQCAtMjA3NSw3ICsyMDky
LDcgQEAgcHJpdmF0ZToKICAgICBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JP
cGVyYW5kKGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1
bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAg
ICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CiAgICAgICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdOwogICAgICAgICB9CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAko
cmV2aXNpb24gMTAyNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTggKzE0MywzMiBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAgICAgICAgIGlubGluZSBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOwogCiAgICAg
ICAgIC8vIEFjY2VzcyB0byBhcmd1bWVudHMuCi0gICAgICAgIGludCBob3N0VGhpc1JlZ2lzdGVy
KCkgeyByZXR1cm4gLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCk7IH0KLSAgICAgICAgSlNWYWx1ZSBob3N0VGhpc1ZhbHVlKCkg
eyByZXR1cm4gdGhpc1tob3N0VGhpc1JlZ2lzdGVyKCldLmpzVmFsdWUoKTsgfQogICAgICAgICBz
aXplX3QgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkgLSAxOyB9CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50XS5pKCk7
IH0KLSAgICAgICAgSlNWYWx1ZSBhcmd1bWVudChpbnQgYXJndW1lbnROdW1iZXIpCisgICAgICAg
IHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXQoc2l6ZV90IGFyZ3VtZW50KSB7IHJldHVybiBzX2Zp
cnN0QXJndW1lbnRPZmZzZXQgLSBhcmd1bWVudDsgfQorICAgICAgICBzdGF0aWMgaW50IGFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhzaXplX3QgYXJndW1lbnQpIHsgcmV0dXJuIHNfdGhpc0Fy
Z3VtZW50T2Zmc2V0IC0gYXJndW1lbnQ7IH0KKworICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50KHNp
emVfdCBhcmd1bWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50ID49IGFy
Z3VtZW50Q291bnQoKSkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpc1thcmd1bWVudE9mZnNldChhcmd1bWVudCldLmpzVmFsdWUo
KTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCwg
SlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IGFyZ3VtZW50SW5kZXgg
PSAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gdGhpc1tSZWdpc3RlckZpbGU6
OkFyZ3VtZW50Q291bnRdLmkoKSArIGFyZ3VtZW50TnVtYmVyICsgMTsKLSAgICAgICAgICAgIGlm
IChhcmd1bWVudEluZGV4ID49IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICByZXR1cm4g
dGhpc1thcmd1bWVudEluZGV4XS5qc1ZhbHVlKCk7CisgICAgICAgICAgICB0aGlzW2FyZ3VtZW50
T2Zmc2V0KGFyZ3VtZW50KV0gPSB2YWx1ZTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBp
bnQgdGhpc0FyZ3VtZW50T2Zmc2V0KCkgeyByZXR1cm4gYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKDApOyB9CisgICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlKCkgeyByZXR1cm4gdGhpc1t0aGlz
QXJndW1lbnRPZmZzZXQoKV0uanNWYWx1ZSgpOyB9CisgICAgICAgIHZvaWQgc2V0VGhpc1ZhbHVl
KEpTVmFsdWUgdmFsdWUpIHsgdGhpc1t0aGlzQXJndW1lbnRPZmZzZXQoKV0gPSB2YWx1ZTsgfQor
CisgICAgICAgIHN0YXRpYyBpbnQgb2Zmc2V0Rm9yKHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykgeyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IH0KKworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
ZXNlLgorICAgICAgICBpbnQgaG9zdFRoaXNSZWdpc3RlcigpIHsgcmV0dXJuIHRoaXNBcmd1bWVu
dE9mZnNldCgpOyB9CisgICAgICAgIEpTVmFsdWUgaG9zdFRoaXNWYWx1ZSgpIHsgcmV0dXJuIHRo
aXNWYWx1ZSgpOyB9CisKICAgICAgICAgc3RhdGljIENhbGxGcmFtZSogbm9DYWxsZXIoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KEhvc3RDYWxsRnJhbWVGbGFnKTsgfQog
CiAgICAgICAgIGJvb2wgaGFzSG9zdENhbGxGcmFtZUZsYWcoKSBjb25zdCB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih0aGlzKSAmIEhvc3RDYWxsRnJhbWVGbGFnOyB9CkBAIC0x
ODIsNiArMTk2LDkgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
c3RhdGljIGNvbnN0IGludHB0cl90IEhvc3RDYWxsRnJhbWVGbGFnID0gMTsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBzX3RoaXNBcmd1bWVudE9mZnNldCA9IC0xIC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNfZmlyc3RBcmd1
bWVudE9mZnNldCA9IHNfdGhpc0FyZ3VtZW50T2Zmc2V0IC0gMTsKKwogI2lmbmRlZiBOREVCVUcK
ICAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUoKTsKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xvc3Vy
ZS5oCShyZXZpc2lvbiAxMDI1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNSArNDEsMTkgQEAg
c3RydWN0IENhbGxGcmFtZUNsb3N1cmUgewogICAgIAogICAgIHZvaWQgc2V0VGhpcyhKU1ZhbHVl
IHZhbHVlKQogICAgIHsKLSAgICAgICAgbmV3Q2FsbEZyYW1lWy1SZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemUgLSBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXNdID0gdmFsdWU7Ci0g
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHBhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpcykKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZVstUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplIC0gcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXNdID0gdmFsdWU7CisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhp
c1ZhbHVlKHZhbHVlKTsKICAgICB9CiAKICAgICB2b2lkIHNldEFyZ3VtZW50KGludCBhcmd1bWVu
dCwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmIChhcmd1bWVudCArIDEgPCBwYXJh
bWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgICAgICAgICBuZXdDYWxsRnJhbWVbYXJndW1l
bnQgKyAxIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gcGFyYW1ldGVyQ291
bnRJbmNsdWRpbmdUaGlzXSA9IHZhbHVlOwotCi0gICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA+IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcykKLSAgICAgICAgICAgIG5l
d0NhbGxGcmFtZVthcmd1bWVudCArIDEgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUgLSBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpc10gPSB2YWx1ZTsKKyAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChhcmd1bWVu
dCwgdmFsdWUpOwogICAgIH0KIAogICAgIHZvaWQgcmVzZXRDYWxsRnJhbWUoKQogICAgIHsKICAg
ICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHNjb3BlQ2hhaW4pOwogICAgICAgICBm
b3IgKGludCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGkgPCBwYXJhbWV0ZXJDb3Vu
dEluY2x1ZGluZ1RoaXM7ICsraSkKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZVtpIC0gUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlz
XSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50
KGksIGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTAyNTQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY3LDQxICszNjcsMzEgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50
ZXJwcmV0ZXI6OnJlc29sdmVUaAogCiAjZW5kaWYgLy8gRU5BQkxFKElOVEVSUFJFVEVSKQogCi1B
TFdBWVNfSU5MSU5FIENhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OnNsaWRlUmVnaXN0ZXJXaW5kb3dG
b3JDYWxsKENvZGVCbG9jayogbmV3Q29kZUJsb2NrLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmls
ZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHNpemVfdCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ2Mp
CitBTFdBWVNfSU5MSU5FIENhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OnNsaWRlUmVnaXN0ZXJXaW5k
b3dGb3JDYWxsKENvZGVCbG9jayogbmV3Q29kZUJsb2NrLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVy
RmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHNpemVfdCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQogewotICAgIFJlZ2lzdGVyKiByID0gY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlciogbmV3RW5kID0gciArIHJlZ2lzdGVyT2Zmc2V0
ICsgbmV3Q29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKLQotICAgIGlmIChMSUtFTFko
YXJnYyA9PSBuZXdDb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpIHsgLy8gY29ycmVjdCBudW1i
ZXIgb2YgYXJndW1lbnRzCi0gICAgICAgIGlmIChVTkxJS0VMWSghcmVnaXN0ZXJGaWxlLT5ncm93
KG5ld0VuZCkpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHIgKz0gcmVnaXN0ZXJP
ZmZzZXQ7Ci0gICAgfSBlbHNlIGlmIChhcmdjIDwgbmV3Q29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnMpIHsgLy8gdG9vIGZldyBhcmd1bWVudHMgLS0gZmlsbCBpbiB0aGUgYmxhbmtzCi0gICAgICAg
IHNpemVfdCBvbWl0dGVkQXJnQ291bnQgPSBuZXdDb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAt
IGFyZ2M7Ci0gICAgICAgIHJlZ2lzdGVyT2Zmc2V0ICs9IG9taXR0ZWRBcmdDb3VudDsKLSAgICAg
ICAgbmV3RW5kICs9IG9taXR0ZWRBcmdDb3VudDsKLSAgICAgICAgaWYgKCFyZWdpc3RlckZpbGUt
Pmdyb3cobmV3RW5kKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByICs9IHJlZ2lz
dGVyT2Zmc2V0OwotCi0gICAgICAgIFJlZ2lzdGVyKiBhcmd2ID0gciAtIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG9taXR0ZWRBcmdDb3VudDsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvbWl0dGVkQXJnQ291bnQ7ICsraSkKLSAgICAgICAgICAgIGFyZ3ZbaV0g
PSBqc1VuZGVmaW5lZCgpOwotICAgIH0gZWxzZSB7IC8vIHRvbyBtYW55IGFyZ3VtZW50cyAtLSBj
b3B5IGV4cGVjdGVkIGFyZ3VtZW50cywgbGVhdmluZyB0aGUgZXh0cmEgYXJndW1lbnRzIGJlaGlu
ZAotICAgICAgICBzaXplX3QgbnVtUGFyYW1ldGVycyA9IG5ld0NvZGVCbG9jay0+bV9udW1QYXJh
bWV0ZXJzOwotICAgICAgICByZWdpc3Rlck9mZnNldCArPSBudW1QYXJhbWV0ZXJzOwotICAgICAg
ICBuZXdFbmQgKz0gbnVtUGFyYW1ldGVyczsKLQotICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+
Z3JvdyhuZXdFbmQpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHIgKz0gcmVnaXN0
ZXJPZmZzZXQ7CisgICAgLy8gVGhpcyBlbnN1cmVzIGVub3VnaCBzcGFjZSBmb3IgdGhlIHdvcnN0
IGNhc2Ugc2NlbmFyaW8gb2YgemVybyBhcmd1bWVudHMgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuCisg
ICAgaWYgKCFyZWdpc3RlckZpbGUtPmdyb3coY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lz
dGVyT2Zmc2V0ICsgbmV3Q29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBuZXdDb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgUmVn
aXN0ZXIqIGFyZ3YgPSByIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gbnVt
UGFyYW1ldGVycyAtIGFyZ2M7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtUGFy
YW1ldGVyczsgKytpKQotICAgICAgICAgICAgYXJndltpICsgYXJnY10gPSBhcmd2W2ldOwotICAg
IH0KKyAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gbmV3Q29kZUJsb2NrLT5t
X251bVBhcmFtZXRlcnMpIHsKKyAgICAgICAgUmVnaXN0ZXIqIG5ld0NhbGxGcmFtZSA9IGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgcmV0dXJuIENhbGxG
cmFtZTo6Y3JlYXRlKG5ld0NhbGxGcmFtZSk7CisgICAgfQorCisgICAgLy8gVG9vIGZldyBhcmd1
bWVudHMgLS0gY29weSBhcmd1bWVudHMsIHRoZW4gZmlsbCBpbiBtaXNzaW5nIGFyZ3VtZW50cyB3
aXRoIHVuZGVmaW5lZC4KKyAgICBzaXplX3QgZGVsdGEgPSBuZXdDb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyAtIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgIENhbGxGcmFtZSogbmV3
Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJl
Z2lzdGVyT2Zmc2V0ICsgZGVsdGEpOworCisgICAgUmVnaXN0ZXIqIGRzdCA9ICZuZXdDYWxsRnJh
bWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSk7CisgICAgUmVn
aXN0ZXIqIGVuZCA9IGRzdCAtIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgIGZvciAo
IDsgZHN0ICE9IGVuZDsgLS1kc3QpCisgICAgICAgICpkc3QgPSAqKGRzdCAtIGRlbHRhKTsKKwor
ICAgIGVuZCAtPSBkZWx0YTsKKyAgICBmb3IgKCA7IGRzdCAhPSBlbmQ7IC0tZHN0KQorICAgICAg
ICAqZHN0ID0ganNVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShy
KTsKKyAgICByZXR1cm4gbmV3Q2FsbEZyYW1lOwogfQogCiAjaWYgRU5BQkxFKElOVEVSUFJFVEVS
KQpAQCAtNDYzLDcgKzQ1Myw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUp
OwogICAgIH0KIAotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tl
ZFIoY2FsbGVyQ29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOworICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gY2FsbGVyRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEFTU0VSVChpc1Zh
bGlkVGhpc09iamVjdCh0aGlzVmFsdWUsIGNhbGxGcmFtZSkpOwogICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyOwogICAgIHJl
dHVybiBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgY2Fs
bGVyU2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIGludGVycHJldGVyLT5yZWdp
c3RlckZpbGUoKS5iZWdpbigpICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSk7CkBAIC00NzksMTYgKzQ2OSwxMCBAQCBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFt
ZSogY2FsbEZyCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIHVu
c2lnbmVkIHBhcmFtZXRlckNvdW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9udW1QYXJh
bWV0ZXJzOwotICAgICAgICBSZWdpc3Rlciogc3JjID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAt
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIHBhcmFtZXRlckNvdW50OwotICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiBwYXJhbWV0ZXJDb3VudCkKLSAg
ICAgICAgICAgIHNyYyAtPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICAgICAgUmVn
aXN0ZXIqIGRzdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdpc3RlcjsK
LSAgICAgICAgZHN0WzBdID0gdGhpc1ZhbHVlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKLSAgICAgICAgICAgIGRzdFtp
XSA9IHNyY1tpXTsKLQogICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgbmV3Q2FsbEZy
YW1lLT5zZXRUaGlzVmFsdWUodGhpc1ZhbHVlKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAgbmV3Q2Fs
bEZyYW1lLT5zZXRBcmd1bWVudChpLCBjYWxsRnJhbWUtPmFyZ3VtZW50KGkpKTsKICAgICAgICAg
cmV0dXJuIG5ld0NhbGxGcmFtZTsKICAgICB9CiAKQEAgLTQ5OCwxMCArNDgyLDggQEAgQ2FsbEZy
YW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgICAgICAgICAgY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxG
cmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBSZWdpc3Rl
ciogZHN0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyOwotICAg
ICAgICBkc3RbMF0gPSB0aGlzVmFsdWU7Ci0KICAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygxKTsKKyAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRUaGlz
VmFsdWUodGhpc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIG5ld0NhbGxGcmFtZTsKICAgICB9CiAK
QEAgLTUxOCwxMSArNTAwLDkgQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNh
bGxGcgogICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQotICAgICAgICBSZWdpc3RlciogZHN0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSArIGZpcnN0RnJlZVJlZ2lzdGVyOwotICAgICAgICBkc3RbMF0gPSB0aGlzVmFsdWU7Ci0gICAg
ICAgIGFyZ3NPYmplY3QtPmNvcHlUb1JlZ2lzdGVycyhjYWxsRnJhbWUsICZkc3RbMV0sIGFyZ0Nv
dW50KTsKLQogICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKGFyZ0NvdW50ICsgMSk7CisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKHRo
aXNWYWx1ZSk7CisgICAgICAgIGFyZ3NPYmplY3QtPmNvcHlUb0FyZ3VtZW50cyhjYWxsRnJhbWUs
IG5ld0NhbGxGcmFtZSwgYXJnQ291bnQpOwogICAgICAgICByZXR1cm4gbmV3Q2FsbEZyYW1lOwog
ICAgIH0KIApAQCAtNTM0LDExICs1MTQsOSBAQCBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxG
cmFtZSogY2FsbEZyCiAgICAgICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRp
b24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIFJlZ2lzdGVyKiBkc3QgPSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgZmlyc3RGcmVlUmVnaXN0ZXI7Ci0gICAgICAgIGRzdFswXSA9IHRoaXNWYWx1
ZTsKLSAgICAgICAgYXJyYXktPmNvcHlUb1JlZ2lzdGVycyhjYWxsRnJhbWUsICZkc3RbMV0sIGFy
Z0NvdW50KTsKLQogICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKGFyZ0NvdW50ICsgMSk7CisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVl
KHRoaXNWYWx1ZSk7CisgICAgICAgIGFycmF5LT5jb3B5VG9Bcmd1bWVudHMoY2FsbEZyYW1lLCBu
ZXdDYWxsRnJhbWUsIGFyZ0NvdW50KTsKICAgICAgICAgcmV0dXJuIG5ld0NhbGxGcmFtZTsKICAg
ICB9CiAKQEAgLTU0OSwxNSArNTI3LDEzIEBAIENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZy
YW1lKiBjYWxsRnIKICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0g
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICBSZWdpc3RlciogZHN0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0
RnJlZVJlZ2lzdGVyOwotICAgIGRzdFswXSA9IHRoaXNWYWx1ZTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkgewotICAgICAgICBkc3RbaSArIDFdID0gYXNPYmpl
Y3QoYXJndW1lbnRzKS0+Z2V0KGNhbGxGcmFtZSwgaSk7CisgICAgbmV3Q2FsbEZyYW1lLT5zZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmdDb3VudCArIDEpOworICAgIG5ld0NhbGxGcmFt
ZS0+c2V0VGhpc1ZhbHVlKHRoaXNWYWx1ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
cmdDb3VudDsgKytpKSB7CisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgYXNP
YmplY3QoYXJndW1lbnRzKS0+Z2V0KGNhbGxGcmFtZSwgaSkpOwogICAgICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKSkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgIH0KLQotICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoYXJnQ291bnQgKyAxKTsKICAgICByZXR1cm4gbmV3Q2FsbEZyYW1lOwogfQogCkBAIC03
MDAsNyArNjc2LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbAog
ICAgICAgICAgICAgYXNBcmd1bWVudHMoYXJndW1lbnRzKS0+ZGlkVGVhck9mZkFjdGl2YXRpb24o
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGFjdGl2YXRpb24pOwogICAgIH0gZWxzZSBpZiAob2xk
Q29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgIW9sZENvZGVCbG9jay0+aXNTdHJpY3RNb2Rl
KCkpIHsKICAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihvbGRDb2RlQmxvY2stPmFyZ3VtZW50c1Jl
Z2lzdGVyKCkpKS5qc1ZhbHVlKCkpCi0gICAgICAgICAgICBhc0FyZ3VtZW50cyhhcmd1bWVudHMp
LT50ZWFyT2ZmKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGFzQXJndW1l
bnRzKGFyZ3VtZW50cyktPnRlYXJPZmYoY2FsbEZyYW1lKTsKICAgICB9CiAKICAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwpAQCAtOTg1LDcgKzk2
MSw3IEBAIGZhaWxlZEpTT05QOgogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZy
YW1lOjpjcmVhdGUob2xkRW5kICsgY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycyA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KICAgICBuZXdDYWxs
RnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBDYWxsRnJhbWU6Om5vQ2FsbGVy
KCksIGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCAwKTsKLSAgICBuZXdDYWxsRnJhbWUtPnVu
Y2hlY2tlZFIobmV3Q2FsbEZyYW1lLT5ob3N0VGhpc1JlZ2lzdGVyKCkpID0gSlNWYWx1ZSh0aGlz
T2JqKTsKKyAgICBuZXdDYWxsRnJhbWUtPnNldFRoaXNWYWx1ZSh0aGlzT2JqKTsKICAgICBUb3BD
YWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBuZXdD
YWxsRnJhbWUpOwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVk
UHJvZmlsZXJSZWZlcmVuY2UoKTsKQEAgLTEwMzAsMTQgKzEwMDYsMTMgQEAgSlNWYWx1ZSBJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAgIGludCBhcmdDb3VudCA9IDEgKyBhcmdz
LnNpemUoKTsgLy8gaW1wbGljaXQgInRoaXMiIHBhcmFtZXRlcgogICAgIHNpemVfdCByZWdpc3Rl
ck9mZnNldCA9IGFyZ0NvdW50ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwog
Ci0gICAgaWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG9sZEVuZCArIHJlZ2lzdGVyT2Zmc2V0KSkK
KyAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCAr
IHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICBpZiAoIW1fcmVnaXN0ZXJGaWxlLmdyb3cobmV3Q2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCi0gICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJh
bWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQpOwotICAgIHNpemVfdCBkc3QgPSAwOwotICAg
IG5ld0NhbGxGcmFtZS0+dW5jaGVja2VkUigwKSA9IHRoaXNWYWx1ZTsKKyAgICBuZXdDYWxsRnJh
bWUtPnNldFRoaXNWYWx1ZSh0aGlzVmFsdWUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJncy5zaXplKCk7ICsraSkKLSAgICAgICAgbmV3Q2FsbEZyYW1lLT51bmNoZWNrZWRSKCsrZHN0
KSA9IGFyZ3MuYXQoaSk7CisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgYXJn
cy5hdChpKSk7CiAKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgewogICAgICAgICBT
Y29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gY2FsbERhdGEuanMuc2NvcGVDaGFp
bjsKQEAgLTEwNTEsNyArMTAyNiw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxs
KENhbGxGcmEKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0g
JmNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxs
KCk7Ci0gICAgICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKG5l
d0NvZGVCbG9jaywgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHJlZ2lzdGVyT2Zmc2V0
LCBhcmdDb3VudCk7CisgICAgICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dG
b3JDYWxsKG5ld0NvZGVCbG9jaywgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIDAsIGFy
Z0NvdW50KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7CiAgICAgICAg
ICAgICBtX3JlZ2lzdGVyRmlsZS5zaHJpbmsob2xkRW5kKTsKICAgICAgICAgICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwpAQCAtMTA4
OCw3ICsxMDYzLDYgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQog
CiAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCk7CiAgICAgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLSAgICBuZXdDYWxsRnJh
bWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0
ZXJPZmZzZXQpOwogICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCAwLCBzY29wZUNoYWluLCBjYWxs
RnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ0NvdW50LCBmdW5jdGlvbik7CiAKICAg
ICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBuZXdDYWxsRnJhbWUpOwpAQCAtMTEzMSwxMCArMTEwNSwxMCBAQCBKU09iamVjdCogSW50ZXJw
cmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgaWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG9s
ZEVuZCArIHJlZ2lzdGVyT2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhy
b3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICBDYWxsRnJhbWUqIG5ld0Nh
bGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCk7Ci0gICAgc2l6ZV90IGRzdCA9IDA7
CisgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQg
KyByZWdpc3Rlck9mZnNldCk7CisgICAgbmV3Q2FsbEZyYW1lLT5zZXRUaGlzVmFsdWUoanNVbmRl
ZmluZWQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQot
ICAgICAgICBuZXdDYWxsRnJhbWUtPnVuY2hlY2tlZFIoKytkc3QpID0gYXJncy5hdChpKTsKKyAg
ICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBhcmdzLmF0KGkpKTsKIAogICAgIGlm
IChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVKUykgewogICAgICAgICBTY29wZUNoYWlu
Tm9kZSogY29uc3RydWN0RGF0YVNjb3BlQ2hhaW4gPSBjb25zdHJ1Y3REYXRhLmpzLnNjb3BlQ2hh
aW47CkBAIC0xMTQ4LDcgKzExMjIsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVD
b25zdHJ1Y3QoCiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9
ICZjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVG
b3JDb25zdHJ1Y3QoKTsKLSAgICAgICAgbmV3Q2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRv
d0ZvckNhbGwobmV3Q29kZUJsb2NrLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgcmVn
aXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsKKyAgICAgICAgbmV3Q2FsbEZyYW1lID0gc2xpZGVSZWdp
c3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxG
cmFtZSwgMCwgYXJnQ291bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkp
IHsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRFbmQpOwogICAgICAgICAg
ICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1l
KSk7CkBAIC0xMTg4LDcgKzExNjIsNiBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVD
b25zdHJ1Y3QoCiAKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSG9z
dCk7CiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKTsKLSAgICBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShuZXdDYWxsRnJhbWUt
PnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwogICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgw
LCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ0Nv
dW50LCBjb25zdHJ1Y3Rvcik7CiAKICAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1l
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBuZXdDYWxsRnJhbWUpOwpAQCAtMTIxOSwyNSArMTE5
MiwyMyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVwYXJlRm9yCiB7CiAgICAg
QVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRpb24pOwogICAgIAotICAgIGlm
IChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCkgewotICAgICAg
ICBpZiAobV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRy
eURlcHRoKSB7Ci0gICAgICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUp
OwotICAgICAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKLSAgICAgICAgfQorICAg
IGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICAgICAg
cmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKKworICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBN
YXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJm
bG93RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsK
ICAgICB9Ci0gICAgCisKICAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9yZWdpc3RlckZpbGUuZW5k
KCk7Ci0gICAgaWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG9sZEVuZCArIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSkgeworICAgIHNpemVfdCByZWdpc3Rlck9mZnNldCA9IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworCisg
ICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQgKyBy
ZWdpc3Rlck9mZnNldCk7CisgICAgaWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG5ld0NhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxG
cmFtZSk7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAgICAgfQogCi0gICAg
Q2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQpOwotICAg
IC8vIFdlIGluaXRpYWxpc2UgfHRoaXN8IHVubmVjZXNzYXJpbHkgaGVyZSBmb3IgdGhlIHNha2Ug
b2YgY29kZSBjbGFyaXR5Ci0gICAgc2l6ZV90IGRzdCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKQotICAgICAgICBuZXdDYWxsRnJh
bWUtPnVuY2hlY2tlZFIoZHN0KyspID0ganNVbmRlZmluZWQoKTsKLSAgICAKICAgICBKU09iamVj
dCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwg
c2NvcGVDaGFpbik7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIHRocm93RXJyb3IoY2FsbEZy
YW1lLCBlcnJvcik7CkBAIC0xMjQ2LDcgKzEyMTcsNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVy
cHJldGVyOjpwcmVwYXJlRm9yCiAgICAgfQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CiAKLSAgICBuZXdD
YWxsRnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChjb2RlQmxvY2ssICZtX3JlZ2lz
dGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OworICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9j
aywgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKTsKICAgICBpZiAoVU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkpIHsKICAgICAgICAgdGhy
b3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgbV9yZWdpc3RlckZpbGUu
c2hyaW5rKG9sZEVuZCk7CkBAIC0xMzY3LDcgKzEzMzgsNyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlKEV2YWxFeGVjdXRhCiAKICAgICBBU1NFUlQoY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnMgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhpcycuCiAgICAgbmV3Q2FsbEZyYW1l
LT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZy
YW1lRmxhZygpLCBjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycywgMCk7Ci0gICAgbmV3Q2FsbEZy
YW1lLT51bmNoZWNrZWRSKG5ld0NhbGxGcmFtZS0+aG9zdFRoaXNSZWdpc3RlcigpKSA9IHRoaXNW
YWx1ZTsKKyAgICBuZXdDYWxsRnJhbWUtPnNldFRoaXNWYWx1ZSh0aGlzVmFsdWUpOwogCiAgICAg
VG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
bmV3Q2FsbEZyYW1lKTsKIApAQCAtMzUxMCwxMiArMzQ4MSw3IEBAIHNraXBfaWRfY3VzdG9tX3Nl
bGY6CiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGFyZ3VtZW50c1Jl
Z2lzdGVyKS5qc1ZhbHVlKCk7CiAgICAgICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gY2FsbEZyYW1l
LT5yKHByb3BlcnR5KS5qc1ZhbHVlKCk7CiAgICAgICAgIGlmICghYXJndW1lbnRzICYmIHN1YnNj
cmlwdC5pc1VJbnQzMigpICYmIHN1YnNjcmlwdC5hc1VJbnQzMigpIDwgY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZyA9IHN1YnNjcmlwdC5hc1VJ
bnQzMigpICsgMTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBpZiAoYXJnIDwg
bnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IGNhbGxGcmFtZS0+cihhcmcgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
LSBudW1QYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IGNhbGxGcmFtZS0+cihhcmcgLSBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemUgLSBudW1QYXJhbWV0ZXJzIC0gY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgLSAxKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
Y2FsbEZyYW1lLT5hcmd1bWVudChzdWJzY3JpcHQuYXNVSW50MzIoKSk7CiAgICAgICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKICAgICAgICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQpAQCAtNDMyNSwxMSArNDI5MSw2IEBAIHNr
aXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3Qp
IHsKICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCk7CiAgICAgICAgICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxG
cmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVy
cygpKSkgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAg
ICAgICAgICAgIH0KLQogICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9Q
Q09ERV9MRU5HVEgob3BfY2FsbCksIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgYXJnQ291bnQsIGFz
T2JqZWN0KHYpKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWU7CiAgICAgICAgICAg
ICB7CkBAIC00NDUyLDcgKzQ0MTMsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAg
ICAgICAgIGFzQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlKS0+ZGlkVGVhck9mZkFjdGl2YXRpb24o
Kmdsb2JhbERhdGEsIGFzQWN0aXZhdGlvbihhY3RpdmF0aW9uVmFsdWUpKTsKICAgICAgICAgfSBl
bHNlIGlmIChKU1ZhbHVlIGFyZ3VtZW50c1ZhbHVlID0gY2FsbEZyYW1lLT5yKHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHMpKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIGlm
ICghY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICBhc0FyZ3VtZW50
cyhhcmd1bWVudHNWYWx1ZSktPnRlYXJPZmYoKmdsb2JhbERhdGEpOworICAgICAgICAgICAgICAg
IGFzQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlKS0+dGVhck9mZihjYWxsRnJhbWUpOwogICAgICAg
ICB9CiAKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdGVhcl9vZmZfYWN0aXZhdGlv
bik7CkBAIC00NDc0LDcgKzQ0MzUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBB
U1NFUlQoIWNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpICYmIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCktPnVzZXNBcmd1bWVudHMoKSk7CiAKICAgICAgICAgaWYgKEpTVmFsdWUg
YXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihzcmMx
KSkuanNWYWx1ZSgpKQotICAgICAgICAgICAgYXNBcmd1bWVudHMoYXJndW1lbnRzKS0+dGVhck9m
ZigqZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBhc0FyZ3VtZW50cyhhcmd1bWVudHMpLT50ZWFy
T2ZmKGNhbGxGcmFtZSk7CiAKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdGVhcl9v
ZmZfYXJndW1lbnRzKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtNDcyNywxMCAr
NDY4OCw2IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGlmIChjb25zdHJ1Y3RUeXBl
ID09IENvbnN0cnVjdFR5cGVIb3N0KSB7CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICAgICAgQ2FsbEZyYW1l
KiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygp
ICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZWdpc3RlckZpbGUtPmdyb3co
bmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwotICAgICAgICAgICAg
ICAgIGdvdG8gdm1fdGhyb3c7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXdDYWxsRnJh
bWUtPmluaXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpLCBzY29wZUNoYWlu
LCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBhc09iamVjdCh2KSk7CiAKICAgICAgICAgICAgIEpTVmFs
dWUgcmV0dXJuVmFsdWU7CkBAIC01MTM1LDcgKzUwOTIsOSBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpyZXRyaWV2ZUFyZ3VtZW50cyhDCiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAgICAgfQog
Ci0gICAgcmV0dXJuIEFyZ3VtZW50czo6Y3JlYXRlQW5kVGVhck9mZihmdW5jdGlvbkNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkNhbGxGcmFtZSk7CisgICAgQXJndW1lbnRzKiBhcmd1
bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZShmdW5jdGlvbkNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBmdW5jdGlvbkNhbGxGcmFtZSk7CisgICAgYXJndW1lbnRzLT50ZWFyT2ZmKGZ1bmN0aW9uQ2Fs
bEZyYW1lKTsKKyAgICByZXR1cm4gSlNWYWx1ZShhcmd1bWVudHMpOwogfQogCiBKU1ZhbHVlIElu
dGVycHJldGVyOjpyZXRyaWV2ZUNhbGxlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlv
biogZnVuY3Rpb24pIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDkgKzgzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIFdl
IHVzZSBhIHNtYWxsZXIgcmVlbnRyYW5jeSBsaW1pdCBvbiBpUGhvbmUgYmVjYXVzZSBvZiB0aGUg
aGlnaCBhbW91bnQgb2YKICAgICAvLyBzdGFjayBzcGFjZSByZXF1aXJlZCBvbiB0aGUgd2ViIHRo
cmVhZC4KLSAgICBlbnVtIHsgTWF4TGFyZ2VUaHJlYWRSZWVudHJ5RGVwdGggPSA5MywgTWF4U21h
bGxUaHJlYWRSZWVudHJ5RGVwdGggPSAzMiB9OworICAgIGVudW0geyBNYXhMYXJnZVRocmVhZFJl
ZW50cnlEZXB0aCA9IDkzLCBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA9IDE2IH07CiAjZWxz
ZQotICAgIGVudW0geyBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCA9IDI1NiwgTWF4U21hbGxU
aHJlYWRSZWVudHJ5RGVwdGggPSAzMiB9OworICAgIGVudW0geyBNYXhMYXJnZVRocmVhZFJlZW50
cnlEZXB0aCA9IDI1NiwgTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggPSAxNiB9OwogI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKIAogICAgIGNsYXNzIEludGVycHJldGVyIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlz
aW9uIDEwMjU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
ckZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIENvZGVCbG9jayA9IC0xLAogICAgICAgICB9OwogCi0gICAgICAgIGVudW0g
eyBQcm9ncmFtQ29kZVRoaXNSZWdpc3RlciA9IC1DYWxsRnJhbWVIZWFkZXJTaXplIC0gMSB9Owot
CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZGVmYXVsdENhcGFjaXR5ID0gNTEyICogMTAy
NDsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb21taXRTaXplID0gMTYgKiAxMDI0Owog
ICAgICAgICAvLyBBbGxvdyA4ayBvZiBleGNlc3MgcmVnaXN0ZXJzIGJlZm9yZSB3ZSBzdGFydCB0
cnlpbmcgdG8gcmVhcCB0aGUgcmVnaXN0ZXJmaWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCShyZXZpc2lvbiAxMDI1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NywxOCArNTU3LDE4IEBAIEpJVENvZGUgSklUOjpw
cml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAg
ICAgICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ID09ICh1bnNpZ25lZCktMSk7CiAgICAgICAg
IGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGFyZ3Vt
ZW50UmVnaXN0ZXIgPSAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gbV9jb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVyczsgYXJndW1lbnRSZWdpc3RlciA8IC1SZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemU7ICsrYXJndW1lbnRSZWdpc3RlcikgeworICAgICAgICAgICAg
Zm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29u
c3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAo
dG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9u
J3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yCi0gICAgICAgICAgICAgICAgICAg
ICYmIGFyZ3VtZW50UmVnaXN0ZXIgPT0gLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSAtIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgaWYgKG1f
Y29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9jay0+YWRkVmFsdWVQcm9maWxlKC0xKTsKICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudFJlZ2lzdGVyICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWdUMCk7CiAjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgYXJndW1lbnRSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudFJlZ2lzdGVyICogc2l6
ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
cmVnVDEpOworICAgICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCByZWdUMSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShGaXJzdFByb2ZpbGluZ1NpdGUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTYwNyw3ICs2
MDcsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgICAg
IGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgUmVnaXN0ZXJG
aWxlOjpDb2RlQmxvY2spOwogCiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFi
ZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0
aGlzKTsKIAogICAgICAgICBKSVRTdHViQ2FsbCh0aGlzLCBtX2NvZGVCbG9jay0+bV9pc0NvbnN0
cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlD
aGVjaykuY2FsbChjYWxsRnJhbWVSZWdpc3Rlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDEwMjU0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
LDkgKzE0NSw3IEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KIAog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogICAgIEp1bXBMaXN0IGVuZDsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPnVzZXNBcmd1bWVudHMoKQotICAgICAgICAmJiBhcmd1bWVudHMgPT0gbV9jb2RlQmxv
Y2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkKLSAgICAgICAgJiYgbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyA9PSAxKSB7CisgICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYg
YXJndW1lbnRzID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKSB7CiAgICAgICAg
IGVtaXRMb2FkVGFnKGFyZ3VtZW50cywgcmVnVDEpOwogICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpKTsKIApAQCAtMTY3LDI0ICsxNjUsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFy
YXJncyhJbnN0cnVjdGlvbgogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHRhZ0ZvcihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QzKSk7CiAg
ICAgICAgIHN0b3JlMzIocmVnVDIsIHBheWxvYWRGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENv
dW50LCByZWdUMykpOwogCi0gICAgICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnIGFuZCBjb3B5IGFy
Z3VtZW50cy4KLSAgICAgICAgbmVnMzIocmVnVDIpOworICAgICAgICAvLyBJbml0aWFsaXplICd0
aGlzJy4KICAgICAgICAgZW1pdExvYWQodGhpc1ZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgICAg
ICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgLShSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSkp
OwotICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSAtKFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKSk7CisgICAgICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSArIChDYWxsRnJhbWU6OnRoaXNBcmd1bWVu
dE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpKTsKKyAgICAg
ICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykgKyAoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKSk7CisKKyAgICAgICAgLy8gQ29weSBhcmd1
bWVudHMuCisgICAgICAgIG5lZzMyKHJlZ1QyKTsKICAgICAgICAgZW5kLmFwcGVuZChicmFuY2hB
ZGQzMihaZXJvLCBJbW0zMigxKSwgcmVnVDIpKTsKKyAgICAgICAgLy8gcmVnVDI6IC1hcmd1bWVu
dENvdW50OwogCiAgICAgICAgIExhYmVsIGNvcHlMb29wID0gbGFiZWwoKTsKLSAgICAgICAgbG9h
ZDMyKEJhc2VJbmRleChjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSAtKChSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUgKyAxKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKSwgcmVnVDApOwotICAgICAgICBsb2FkMzIoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykgLSgoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgMSkgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSksIHJlZ1QxKTsKLSAgICAgICAgc3RvcmUzMihyZWdU
MCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpIC0oUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpKTsKLSAgICAgICAgc3Rv
cmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykgLShSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSkpOworICAgICAg
ICBsb2FkMzIoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMiwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpICsoQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KSwgcmVnVDApOworICAgICAgICBsb2FkMzIoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykg
KyhDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpLCByZWdUMSk7CisgICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRl
eChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSArKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSkpOworICAgICAgICBzdG9yZTMyKHJlZ1QxLCBC
YXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSArKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSkpOwogICAgICAgICBicmFuY2hBZGQzMihO
b25aZXJvLCBJbW0zMigxKSwgcmVnVDIpLmxpbmtUbyhjb3B5TG9vcCwgdGhpcyk7CiAKICAgICAg
ICAgZW5kLmFwcGVuZChqdW1wKCkpOwogICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+bV9u
dW1QYXJhbWV0ZXJzID09IDEpCisgICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkg
JiYgYXJndW1lbnRzID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKQogICAgICAg
ICBzbG93Q2FzZS5saW5rKHRoaXMpOwogCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX2xvYWRfdmFyYXJncyk7CkBAIC0xOTMsNyArMTk0LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMy
KGZpcnN0RnJlZVJlZ2lzdGVyKSk7CiAgICAgc3R1YkNhbGwuY2FsbChyZWdUMyk7CiAKLSAgICBp
ZiAobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9PSAxKQorICAgIGlmIChtX2NvZGVCbG9j
ay0+dXNlc0FyZ3VtZW50cygpICYmIGFyZ3VtZW50cyA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRz
UmVnaXN0ZXIoKSkKICAgICAgICAgZW5kLmxpbmsodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOSArNjQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKICAgICBKdW1wTGlzdCBlbmQ7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT51
c2VzQXJndW1lbnRzKCkKLSAgICAgICAgJiYgYXJndW1lbnRzID09IG1fY29kZUJsb2NrLT5hcmd1
bWVudHNSZWdpc3RlcigpCi0gICAgICAgICYmIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMg
PT0gMSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIGFyZ3VtZW50
cyA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkgewogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSkpKTsKIApAQCAtODYsMjIgKzg0LDI1IEBAIHZvaWQgSklUOjpjb21waWxl
TG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRp
YXRlKHJlZ1QwLCByZWdUMik7CiAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNzKHJlZ1Qx
LCBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpKSk7CiAKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycgYW5kIGNvcHkgYXJn
dW1lbnRzLgorICAgICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDIs
IEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICAgICAgLy8gQ29weSBhcmd1bWVu
dHMuCiAgICAgICAgIG5lZzMyKHJlZ1QwKTsKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDAsIHJlZ1QwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJl
Z1QyKTsKLSAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRp
bWVzRWlnaHQsIC0oUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpKTsKICAgICAgICAgZW5kLmFwcGVuZChicmFuY2hB
ZGRQdHIoWmVybywgSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIC8vIHJlZ1QwOiAtYXJndW1l
bnRDb3VudAogCiAgICAgICAgIExhYmVsIGNvcHlMb29wID0gbGFiZWwoKTsKLSAgICAgICAgbG9h
ZFB0cihCYXNlSW5kZXgoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwLCBUaW1lc0VpZ2h0LCAtKChS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAxKSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKSwgcmVnVDIpOwotICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFz
ZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCwgLShSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSkpOworICAg
ICAgICBsb2FkUHRyKEJhc2VJbmRleChjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAsIFRpbWVzRWln
aHQsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSwgcmVnVDIpOworICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICAgICAgYnJh
bmNoQWRkUHRyKE5vblplcm8sIEltbTMyKDEpLCByZWdUMCkubGlua1RvKGNvcHlMb29wLCB0aGlz
KTsKIAogICAgICAgICBlbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgfQogCi0gICAgaWYgKG1fY29k
ZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPT0gMSkKKyAgICBpZiAobV9jb2RlQmxvY2stPnVzZXNB
cmd1bWVudHMoKSAmJiBhcmd1bWVudHMgPT0gbV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVy
KCkpCiAgICAgICAgIHNsb3dDYXNlLmxpbmsodGhpcyk7CiAKICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfbG9hZF92YXJhcmdzKTsKQEAgLTExMCw3ICsxMTEsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoSW1tMzIoZmlyc3RGcmVlUmVnaXN0ZXIpKTsKICAgICBzdHViQ2FsbC5jYWxsKHJlZ1Qx
KTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID09IDEpCisgICAgaWYg
KG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgYXJndW1lbnRzID09IG1fY29kZUJsb2Nr
LT5hcmd1bWVudHNSZWdpc3RlcigpKQogICAgICAgICBlbmQubGluayh0aGlzKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMTAyNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYyLDExICsxNDYyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX2FyZ3VtZW50cyhJbnN0cgogCiAgICAgSnVtcCBhcmdzQ3JlYXRlZCA9IGJy
YW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IoZHN0KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID09IDEp
Ci0gICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzX25vX3Bh
cmFtcykuY2FsbCgpOwotICAgIGVsc2UKLSAgICAgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29w
X2NyZWF0ZV9hcmd1bWVudHMpLmNhbGwoKTsKLQorICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9jcmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0U3RvcmUodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGRzdCksIHJl
Z1QxLCByZWdUMCk7CiAKQEAgLTE2MTAsMjQgKzE2MDYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnRfYnlfdmFsKEluCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihS
ZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QzKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCByZWdUMykpOwogICAgIAotICAgIEp1bXAgc2tpcE91
dG9mTGluZVBhcmFtczsKLSAgICBpbnQgbnVtQXJncyA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnM7Ci0gICAgaWYgKG51bUFyZ3MpIHsKLSAgICAgICAgSnVtcCBub3RJbkluUGxhY2VBcmdz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgSW1tMzIobnVtQXJncykpOwotICAgICAg
ICBhZGRQdHIoSW1tMzIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0oUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplICsgbnVtQXJncykgKiBzaXplb2YoUmVnaXN0ZXIpKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdU
MiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVnVDApOwotICAgICAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDIsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwot
ICAgICAgICBza2lwT3V0b2ZMaW5lUGFyYW1zID0ganVtcCgpOwotICAgICAgICBub3RJbkluUGxh
Y2VBcmdzLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgYWRkUHRyKEltbTMyKHN0YXRpY19jYXN0
PHVuc2lnbmVkPigtKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3Mp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwotICAgIG11
bDMyKFRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDMsIHJlZ1QzKTsKLSAgICBz
dWJQdHIocmVnVDMsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDIs
IFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSks
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDIsIFRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGlm
IChudW1BcmdzKQotICAgICAgICBza2lwT3V0b2ZMaW5lUGFyYW1zLmxpbmsodGhpcyk7CisgICAg
bmVnMzIocmVnVDIpOworICAgIGxvYWRQdHIoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxv
YWQpICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMCk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgoY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDEpOwogICAgIGVtaXRTdG9yZShkc3Qs
IHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTE2NDIsMTEgKzE2MjMsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIGlmIChtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzID09IDEpCi0gICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1l
bnRzX25vX3BhcmFtcykuY2FsbCgpOwotICAgIGVsc2UKLSAgICAgICAgSklUU3R1YkNhbGwodGhp
cywgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHMpLmNhbGwoKTsKLSAgICAKKyAgICBKSVRTdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cykuY2FsbCgpOwogICAgIGVtaXRTdG9yZShh
cmd1bWVudHMsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlKHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3Rlcihhcmd1bWVudHMpLCByZWdUMSwgcmVnVDApOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMDI1NDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTg0LDEwICsxMTg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyhJ
bnN0cgogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAKICAgICBKdW1wIGFyZ3NDcmVhdGVkID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7Ci0gICAgaWYgKG1f
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPT0gMSkKLSAgICAgICAgSklUU3R1YkNhbGwodGhp
cywgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zKS5jYWxsKCk7Ci0gICAgZWxzZQot
ICAgICAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cykuY2FsbCgp
OworICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGRzdCkpOwogICAgIGFyZ3NDcmVhdGVk
LmxpbmsodGhpcyk7CkBAIC0xNDkxLDIzICsxNDg4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9hcmd1bWVudF9ieV92YWwoSW4KICAgICAvLyByZWdUMSBub3cgY29udGFpbnMgdGhlIGludGVn
ZXIgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHdlIHdhbnQsIGluY2x1ZGluZyB0aGlzCiAgICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJl
Z1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCByZWdU
MikpOwotICAgIAotICAgIEp1bXAgc2tpcE91dG9mTGluZVBhcmFtczsKLSAgICBpbnQgbnVtQXJn
cyA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnM7Ci0gICAgaWYgKG51bUFyZ3MpIHsKLSAg
ICAgICAgSnVtcCBub3RJbkluUGxhY2VBcmdzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgSW1tMzIobnVtQXJncykpOwotICAgICAgICBhZGRQdHIoSW1tMzIoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KC0oUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtQXJncykgKiBz
aXplb2YoUmVnaXN0ZXIpKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIGxv
YWRQdHIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgMCksIHJlZ1QwKTsKLSAg
ICAgICAgc2tpcE91dG9mTGluZVBhcmFtcyA9IGp1bXAoKTsKLSAgICAgICAgbm90SW5JblBsYWNl
QXJncy5saW5rKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICBhZGRQdHIoSW1tMzIoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KC0oUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtQXJn
cykgKiBzaXplb2YoUmVnaXN0ZXIpKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAg
bXVsMzIoVHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCByZWdUMiwgcmVnVDIpOwotICAg
IHN1YlB0cihyZWdUMiwgcmVnVDApOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCwgMCksIHJlZ1QwKTsKLSAgICBpZiAobnVtQXJncykKLSAgICAgICAgc2tp
cE91dG9mTGluZVBhcmFtcy5saW5rKHRoaXMpOworCisgICAgbmVnMzIocmVnVDEpOworICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgoY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVu
dE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSksIHJlZ1QwKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQogCkBAIC0xNTIyLDEw
ICsxNTA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YQogICAg
IAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAg
aWYgKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPT0gMSkKLSAgICAgICAgSklUU3R1YkNh
bGwodGhpcywgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zKS5jYWxsKCk7Ci0gICAg
ZWxzZQotICAgICAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cyku
Y2FsbCgpOworICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5j
YWxsKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50cykp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlz
aW9uIDEwMjU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjA2LDQ2ICsyMjA2LDMxIEBAIGlubGluZSBDYWxsRnJhbWUqIGFy
aXR5Q2hlY2tGb3IoQ2FsbEZyYW0KICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9u
KGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVCghY2FsbGVlLT5pc0hvc3RGdW5jdGlv
bigpKTsKICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZjYWxsZWUtPmpzRXhlY3V0YWJs
ZSgpLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihraW5kKTsKLSAgICBpbnQgYXJnQ291bnQgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7Ci0gICAgUmV0dXJuQWRkcmVzc1B0
ciBwYyA9IGNhbGxGcmFtZS0+cmV0dXJuUEMoKTsKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7CiAKLSAg
ICBBU1NFUlQoYXJnQ291bnQgIT0gbmV3Q29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpOworICAg
IC8vIFRoaXMgZW5zdXJlcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlv
IG9mIHplcm8gYXJndW1lbnRzIHBhc3NlZCBieSB0aGUgY2FsbGVyLgorICAgIGlmICghcmVnaXN0
ZXJGaWxlLT5ncm93KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBuZXdDb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycyArIG5ld0NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIEFTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IG5l
d0NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKTsKKworICAgIC8vIFRvbyBmZXcgYXJndW1lbnRz
IC0tIGNvcHkgY2FsbCBmcmFtZSBhbmQgYXJndW1lbnRzLCB0aGVuIGZpbGwgaW4gbWlzc2luZyBh
cmd1bWVudHMgd2l0aCB1bmRlZmluZWQuCisgICAgc2l6ZV90IGRlbHRhID0gbmV3Q29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMgLSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICBSZWdp
c3Rlciogc3JjID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlciogZHN0ID0g
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGRlbHRhOworCisgICAgaW50IGk7CisgICAgaW50IGVu
ZCA9IC1DYWxsRnJhbWU6Om9mZnNldEZvcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7Cisg
ICAgZm9yIChpID0gLTE7IGkgPj0gZW5kOyAtLWkpCisgICAgICAgIGRzdFtpXSA9IHNyY1tpXTsK
KworICAgIGVuZCAtPSBkZWx0YTsKKyAgICBmb3IgKCA7IGkgPj0gZW5kOyAtLWkpCisgICAgICAg
IGRzdFtpXSA9IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBDYWxsRnJhbWUqIG9sZENhbGxGcmFtZSA9
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLQotICAgIFJlZ2lzdGVyKiByOwotICAgIGlmIChh
cmdDb3VudCA+IG5ld0NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHNpemVf
dCBudW1QYXJhbWV0ZXJzID0gbmV3Q29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnM7Ci0gICAgICAg
IHIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgbnVtUGFyYW1ldGVyczsKLSAgICAgICAgUmVn
aXN0ZXIqIG5ld0VuZCA9IHIgKyBuZXdDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwot
ICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdFbmQpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgUmVnaXN0ZXIqIGFyZ3YgPSByIC0gUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplIC0gbnVtUGFyYW1ldGVycyAtIGFyZ0NvdW50OwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bVBhcmFtZXRlcnM7ICsraSkKLSAgICAgICAgICAgIGFyZ3Zb
aSArIGFyZ0NvdW50XSA9IGFyZ3ZbaV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90IG9t
aXR0ZWRBcmdDb3VudCA9IG5ld0NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gYXJnQ291bnQ7
Ci0gICAgICAgIHIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgb21pdHRlZEFyZ0NvdW50Owot
ICAgICAgICBSZWdpc3RlciogbmV3RW5kID0gciArIG5ld0NvZGVCbG9jay0+bV9udW1DYWxsZWVS
ZWdpc3RlcnM7Ci0gICAgICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93KG5ld0VuZCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBSZWdpc3RlciogYXJndiA9IHIgLSBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBvbWl0dGVkQXJnQ291bnQ7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb21pdHRlZEFyZ0NvdW50OyArK2kpCi0gICAgICAgICAgICBh
cmd2W2ldID0ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBjYWxsRnJhbWUgPSBDYWxsRnJh
bWU6OmNyZWF0ZShyKTsKLSAgICBjYWxsRnJhbWUtPnNldENhbGxlckZyYW1lKG9sZENhbGxGcmFt
ZSk7Ci0gICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmdDb3Vu
dCk7Ci0gICAgY2FsbEZyYW1lLT5zZXRDYWxsZWUoY2FsbGVlKTsKLSAgICBjYWxsRnJhbWUtPnNl
dFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZSgpKTsKLSAgICBjYWxsRnJhbWUtPnNldFJldHVyblBD
KHBjLnZhbHVlKCkpOwotICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKG5ld0NvZGVCbG9jayk7
Ci0KLSAgICBBU1NFUlQoKHZvaWQqKWNhbGxGcmFtZSA8PSByZWdpc3RlckZpbGUtPmVuZCgpKTsK
LSAgICByZXR1cm4gY2FsbEZyYW1lOworICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2Fs
bEZyYW1lOjpjcmVhdGUoZHN0KTsKKyAgICBBU1NFUlQoKHZvaWQqKW5ld0NhbGxGcmFtZSA8PSBy
ZWdpc3RlckZpbGUtPmVuZCgpKTsKKyAgICByZXR1cm4gbmV3Q2FsbEZyYW1lOwogfQogCiBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfY2FsbF9hcml0eUNoZWNrKQpAQCAtMjI5MSw3ICsy
Mjc2LDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxGcmFtZSogY2FsbAogICAgICAg
ICBpZiAoZXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY29kZUJsb2NrID0g
JmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3Ioa2luZCk7Ci0gICAgICAg
IGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykKKyAgICAgICAgaWYgKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4o
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpCiAgICAgICAgICAgICB8fCBjYWxsTGlua0luZm8t
PmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MpCiAgICAgICAgICAgICBjb2Rl
UHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tG
b3Ioa2luZCk7CiAgICAgICAgIGVsc2UKQEAgLTIzNzUsMjQgKzIzNjAsMTcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZShhcmd1bWVudHMpKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2Rl
ZEpTVmFsdWUsIG9wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zKQotewotICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0g
QXJndW1lbnRzOjpjcmVhdGVOb1BhcmFtZXRlcnMoKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShh
cmd1bWVudHMpKTsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZf
YWN0aXZhdGlvbikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAK
LSAgICBBU1NFUlQoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxT
Y29wZUNoYWluKCkpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxs
RnJhbWU7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4oKSk7CiAgICAgSlNWYWx1ZSBhY3RpdmF0aW9uVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3Nb
MF0uanNWYWx1ZSgpOwogICAgIGlmICghYWN0aXZhdGlvblZhbHVlKSB7CiAgICAgICAgIGlmIChK
U1ZhbHVlIHYgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpCi0g
ICAgICAgICAgICAgICAgYXNBcmd1bWVudHModiktPnRlYXJPZmYoKnN0YWNrRnJhbWUuZ2xvYmFs
RGF0YSk7CisgICAgICAgICAgICBpZiAoIWNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpKQorICAgICAgICAgICAgICAgIGFzQXJndW1lbnRzKHYpLT50ZWFyT2ZmKGNhbGxGcmFt
ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0MDYsOCArMjM4NCw5
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3RlYXJfb2ZmX2EKIHsKICAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBBU1NFUlQoc3RhY2tGcmFtZS5j
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkgJiYgIXN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKTsKLSAgICBhc0FyZ3Vt
ZW50cyhzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpKS0+dGVhck9mZigqc3RhY2tGcmFtZS5n
bG9iYWxEYXRhKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lOworICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkg
JiYgIWNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSk7CisgICAg
YXNBcmd1bWVudHMoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSktPnRlYXJPZmYoY2FsbEZy
YW1lKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHJvZmlsZV93aWxsX2Nh
bGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxMDI1
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyNiw3ICszMjYsNiBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfY3JlYXRlX3RoaXMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfY29udmVydF90aGlzKFNUVUJfQVJHU19ERUNM
QVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2NyZWF0ZV9hcmd1
bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZGVsX2J5X2lkKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2RlbF9i
eV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfZGl2KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMTAyNTQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDEzICs0NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgbG9hZERvdWJsZUFyZ3VtZW50KGludCBhcmd1bWVudCwgRlBSZWdpc3Rl
cklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzcmMgPSBhcmd1bWVudFRvVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50KTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOwog
ICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWREb3VibGUoc3JjLCBkc3QsIHNj
cmF0Y2gpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkQ2VsbEFyZ3Vt
ZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHNyYyA9IGFyZ3VtZW50VG9WaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnQpOworICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChzcmMsIGRz
dCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFyZ3VtZW50
LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAgICAgICAg
ICAgdW5zaWduZWQgc3JjID0gYXJndW1lbnRUb1ZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudCk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3Vt
ZW50KTsKICAgICAgICAgICAgIGZhaWxUYXJnZXQgPSBlbWl0TG9hZEludDMyKHNyYywgZHN0KTsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTE0OSwxMCArMTQ5LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBhcmd1bWVudFRvVmlydHVh
bFJlZ2lzdGVyKHVuc2lnbmVkIGFyZ3VtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gLXN0YXRpY19jYXN0PGludD4oUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsg
KG1fZXhwZWN0ZWRBcmdDb3VudCAtIGFyZ3VtZW50KSk7Ci0gICAgICAgIH0KIAogICAgICAgICB2
b2lkIHRhZ1JldHVybkFzSW50MzIoKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRleCwgQQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcmVzdWx0Lm1fYXJncyA9IG1fYXJncyArIHN0YXJ0SW5k
ZXg7CisgICAgcmVzdWx0Lm1fYXJncyA9IG1fYXJncyAtIHN0YXJ0SW5kZXg7CiAgICAgcmVzdWx0
Lm1fYXJnQ291bnQgPSAgbV9hcmdDb3VudCAtIHN0YXJ0SW5kZXg7CiB9CiAKQEAgLTUyLDMyICs1
MiwzNyBAQCB2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoSGVhCiAKIHZvaWQg
TWFya2VkQXJndW1lbnRCdWZmZXI6OnNsb3dBcHBlbmQoSlNWYWx1ZSB2KQogeworICAgIGludCBu
ZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkgKiA0OworICAgIEVuY29kZWRKU1ZhbHVlKiBuZXdCdWZm
ZXIgPSAmKG5ldyBFbmNvZGVkSlNWYWx1ZVtuZXdDYXBhY2l0eV0pW25ld0NhcGFjaXR5IC0gMV07
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyArK2kpCisgICAgICAgIG5l
d0J1ZmZlclstaV0gPSBtX2J1ZmZlclstaV07CisKKyAgICBpZiAobV9jYXBhY2l0eSAhPSBpbmxp
bmVDYXBhY2l0eSkKKyAgICAgICAgZGVsZXRlIFtdICZtX2J1ZmZlclstKG1fY2FwYWNpdHkgLSAx
KV07CisKKyAgICBtX2J1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICBtX2NhcGFjaXR5ID0gbmV3Q2Fw
YWNpdHk7CisKKyAgICBtX2J1ZmZlclstbV9zaXplXSA9IEpTVmFsdWU6OmVuY29kZSh2KTsKKyAg
ICArK21fc2l6ZTsKKworICAgIGlmIChtX21hcmtTZXQpCisgICAgICAgIHJldHVybjsKKwogICAg
IC8vIEFzIGxvbmcgYXMgb3VyIHNpemUgc3RheXMgd2l0aGluIG91ciBWZWN0b3IncyBpbmxpbmUg
CiAgICAgLy8gY2FwYWNpdHksIGFsbCBvdXIgdmFsdWVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0
YWNrLCBhbmQgCiAgICAgLy8gdGhlcmVmb3JlIGRvbid0IG5lZWQgZXhwbGljaXQgbWFya2luZy4g
T25jZSBvdXIgc2l6ZSBleGNlZWRzCiAgICAgLy8gb3VyIFZlY3RvcidzIGlubGluZSBjYXBhY2l0
eSwgdGhvdWdoLCBvdXIgdmFsdWVzIG1vdmUgdG8gdGhlIAogICAgIC8vIGhlYXAsIHdoZXJlIHRo
ZXkgZG8gbmVlZCBleHBsaWNpdCBtYXJraW5nLgotICAgIGlmICghbV9tYXJrU2V0KSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBFdmVuIGlmIHYgaXMgbm90IGEgSlNDZWxsKiwgaWYgcHJldmlvdXMgdmFs
dWVzIGluIHRoZSBidWZmZXIKLSAgICAgICAgLy8gYXJlLCB0aGVuIHRoZXkgd29uJ3QgYmUgbWFy
a2VkIQotICAgICAgICBpZiAoSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodikpIHsKLSAgICAgICAg
ICAgIExpc3RTZXQmIG1hcmtTZXQgPSBoZWFwLT5tYXJrTGlzdFNldCgpOwotICAgICAgICAgICAg
bWFya1NldC5hZGQodGhpcyk7Ci0gICAgICAgICAgICBtX21hcmtTZXQgPSAmbWFya1NldDsKLSAg
ICAgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpIHsKKyAgICAg
ICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAoSlNWYWx1ZTo6ZGVjb2RlKG1fYnVmZmVyWy1pXSkp
OworICAgICAgICBpZiAoIWhlYXApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBt
X21hcmtTZXQgPSAmaGVhcC0+bWFya0xpc3RTZXQoKTsKKyAgICAgICAgbV9tYXJrU2V0LT5hZGQo
dGhpcyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLQotICAgIGlmIChtX3ZlY3Rvci5zaXplKCkg
PCBtX3ZlY3Rvci5jYXBhY2l0eSgpKSB7Ci0gICAgICAgIG1fdmVjdG9yLnVuY2hlY2tlZEFwcGVu
ZCh2KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIDR4IGdyb3d0aCB3b3VsZCBi
ZSBleGNlc3NpdmUgZm9yIGEgbm9ybWFsIHZlY3RvciwgYnV0IGl0J3MgT0sgZm9yIExpc3RzIAot
ICAgIC8vIGJlY2F1c2UgdGhleSdyZSBzaG9ydC1saXZlZC4KLSAgICBtX3ZlY3Rvci5yZXNlcnZl
Q2FwYWNpdHkobV92ZWN0b3IuY2FwYWNpdHkoKSAqIDQpOwotICAgIAotICAgIG1fdmVjdG9yLnVu
Y2hlY2tlZEFwcGVuZCh2KTsKLSAgICBtX2J1ZmZlciA9IG1fdmVjdG9yLmRhdGEoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
TGlzdC5oCShyZXZpc2lvbiAxMDI1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcmdMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBcmdMaXN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gODsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDg7CiAgICAgICAgIHR5cGVkZWYgVmVj
dG9yPFJlZ2lzdGVyLCBpbmxpbmVDYXBhY2l0eT4gVmVjdG9yVHlwZTsKICAgICAgICAgdHlwZWRl
ZiBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4gTGlzdFNldDsKIApAQCAtNDYsNDQgKzQ2
LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSByZWFk
LXdyaXRlIGxpc3QsIHRvIHdoaWNoIHlvdSBtYXkgYXBwZW5kIHZhbHVlcy4KICAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSBhbGwgY2xpZW50cyBvZiB0aGlzIEFQSSwgdGhlbiByZW1vdmUgdGhpcyBB
UEkuCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyKCkKLSAgICAgICAgICAgIDogbV9pc1Vz
aW5nSW5saW5lQnVmZmVyKHRydWUpCisgICAgICAgICAgICA6IG1fc2l6ZSgwKQorICAgICAgICAg
ICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQorICAgICAgICAgICAgLCBtX2J1ZmZlcigm
bV9pbmxpbmVCdWZmZXJbbV9jYXBhY2l0eSAtIDFdKQogICAgICAgICAgICAgLCBtX21hcmtTZXQo
MCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICAsIG1faXNSZWFkT25seShmYWxzZSkKLSNl
bmRpZgogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1ZmZlciA9IG1fdmVjdG9yLmRhdGEoKTsK
LSAgICAgICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb25zdHJ1
Y3RvciBmb3IgYSByZWFkLW9ubHkgbGlzdCB3aG9zZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gYWxs
b2NhdGVkIGVsc2V3aGVyZS4KLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIoUmVnaXN0ZXIq
IGJ1ZmZlciwgc2l6ZV90IHNpemUpCi0gICAgICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAg
ICAgICAgICAgICwgbV9zaXplKHNpemUpCi0gICAgICAgICAgICAsIG1faXNVc2luZ0lubGluZUJ1
ZmZlcih0cnVlKQotICAgICAgICAgICAgLCBtX21hcmtTZXQoMCkKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICAsIG1faXNSZWFkT25seSh0cnVlKQotI2VuZGlmCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZShXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJ1
ZmZlciwgc2l6ZV90IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9tYXJr
U2V0KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotCi0gICAgICAgICAgICBtX2J1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPihidWZmZXIpOwotICAgICAgICAgICAg
bV9zaXplID0gc2l6ZTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBtX2lzUmVhZE9ubHkg
PSB0cnVlOwotI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICB+TWFya2VkQXJndW1lbnRCdWZm
ZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9tYXJrU2V0KQogICAgICAgICAgICAg
ICAgIG1fbWFya1NldC0+cmVtb3ZlKHRoaXMpOworCisgICAgICAgICAgICBpZiAobV9jYXBhY2l0
eSAhPSBpbmxpbmVDYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBkZWxldGUgW10gJm1fYnVmZmVy
Wy0obV9jYXBhY2l0eSAtIDEpXTsKICAgICAgICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CkBAIC05MSw0NSArNjcsMzYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgSlNWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGkgPCBtX3NpemUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVy
W2ldLmpzVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAg
ICAgICAgaWYgKGkgPj0gbV9zaXplKQorICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fYnVmZmVyWy1pXSk7
CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFyKCkKICAgICAgICAgewotICAgICAgICAg
ICAgbV92ZWN0b3IuY2xlYXIoKTsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gMDsKICAgICAgICAg
ICAgIG1fc2l6ZSA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGFwcGVuZChKU1ZhbHVl
IHYpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pc1JlYWRPbmx5KTsKKyAgICAg
ICAgICAgIGlmIChtX3NpemUgPj0gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2xvd0FwcGVuZCh2KTsKIAotICAgICAgICAgICAgaWYgKG1faXNVc2luZ0lubGluZUJ1ZmZlciAm
JiBtX3NpemUgPCBpbmxpbmVDYXBhY2l0eSkgewotICAgICAgICAgICAgICAgIG1fdmVjdG9yLnVu
Y2hlY2tlZEFwcGVuZCh2KTsKLSAgICAgICAgICAgICAgICArK21fc2l6ZTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gUHV0dGluZyB0aGlzIGNhc2UgYWxsIGluIG9u
ZSBmdW5jdGlvbiBtZWFzdXJhYmx5IGltcHJvdmVzCi0gICAgICAgICAgICAgICAgLy8gdGhlIHBl
cmZvcm1hbmNlIG9mIHRoZSBmYXN0ICJqdXN0IGFwcGVuZCB0byBpbmxpbmUgYnVmZmVyIiBjYXNl
LgotICAgICAgICAgICAgICAgIHNsb3dBcHBlbmQodik7Ci0gICAgICAgICAgICAgICAgKyttX3Np
emU7Ci0gICAgICAgICAgICAgICAgbV9pc1VzaW5nSW5saW5lQnVmZmVyID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2J1ZmZlclstbV9zaXplXSA9IEpTVmFsdWU6OmVuY29k
ZSh2KTsKKyAgICAgICAgICAgICsrbV9zaXplOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBy
ZW1vdmVMYXN0KCkKICAgICAgICAgeyAKICAgICAgICAgICAgIEFTU0VSVChtX3NpemUpOwogICAg
ICAgICAgICAgbV9zaXplLS07Ci0gICAgICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGxhc3QoKSAKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUKG1fc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXJbbV9zaXplIC0g
MV0uanNWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2J1ZmZl
clstKG1fc2l6ZSAtIDEpXSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2
b2lkIG1hcmtMaXN0cyhIZWFwUm9vdFZpc2l0b3ImLCBMaXN0U2V0Jik7CkBAIC0xMzcsMTUgKzEw
NCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHNsb3dB
cHBlbmQoSlNWYWx1ZSk7CiAgICAgICAgIAotICAgICAgICBSZWdpc3RlciogbV9idWZmZXI7CiAg
ICAgICAgIHNpemVfdCBtX3NpemU7Ci0gICAgICAgIGJvb2wgbV9pc1VzaW5nSW5saW5lQnVmZmVy
OwotCi0gICAgICAgIFZlY3RvclR5cGUgbV92ZWN0b3I7CisgICAgICAgIHNpemVfdCBtX2NhcGFj
aXR5OworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBtX2lubGluZUJ1ZmZlcltpbmxpbmVDYXBhY2l0
eV07CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBtX2J1ZmZlcjsKICAgICAgICAgTGlzdFNldCog
bV9tYXJrU2V0OwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYm9vbCBtX2lzUmVhZE9ubHk7Ci0j
ZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIFByb2hpYml0cyBuZXcgLyBkZWxldGUs
IHdoaWNoIHdvdWxkIGJyZWFrIEdDLgpAQCAtMTczLDI0ICsxMzYsMjQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICAsIG1fYXJnQ291bnQoMCkKICAgICAgICAgewogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIEFyZ0xpc3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAgICAg
OiBtX2FyZ3MocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oJmV4ZWNbZXhlYy0+aG9zdFRoaXNS
ZWdpc3RlcigpICsgMV0pKQorICAgICAgICAgICAgOiBtX2FyZ3MocmVpbnRlcnByZXRfY2FzdDxK
U1ZhbHVlKj4oJmV4ZWNbQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKV0pKQogICAgICAgICAg
ICAgLCBtX2FyZ0NvdW50KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgewogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIEFyZ0xpc3QoY29uc3QgTWFya2VkQXJndW1lbnRCdWZm
ZXImIGFyZ3MpCiAgICAgICAgICAgICA6IG1fYXJncyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUq
PihhcmdzLm1fYnVmZmVyKSkKICAgICAgICAgICAgICwgbV9hcmdDb3VudChhcmdzLnNpemUoKSkK
ICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSBhdChzaXplX3QgaWR4KSBj
b25zdAorICAgICAgICBKU1ZhbHVlIGF0KHNpemVfdCBpKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoaWR4IDwgbV9hcmdDb3VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9h
cmdzW2lkeF07Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IGlmIChpID49IG1fYXJnQ291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgICAgICAgICByZXR1cm4gbV9hcmdzWy1pXTsKICAgICAgICAgfQogCiAgICAgICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2FyZ0NvdW50OyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDEwMjU0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDEyICszNyw2IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoQXJn
dW1lbnRzKTsKIAogY29uc3QgQ2xhc3NJbmZvIEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJndW1l
bnRzIiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShBcmd1bWVudHMpIH07CiAKLUFyZ3VtZW50czo6fkFyZ3VtZW50cygpCi17Ci0gICAgaWYgKGQt
PmV4dHJhQXJndW1lbnRzICE9IGQtPmV4dHJhQXJndW1lbnRzRml4ZWRCdWZmZXIpCi0gICAgICAg
IGRlbGV0ZSBbXSBkLT5leHRyYUFyZ3VtZW50czsKLX0KLQogdm9pZCBBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBcmd1
bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oY2VsbCk7CkBAIC01Miw5NCAr
NDYsMjkgQEAgdm9pZCBBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIEpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCiAgICAgaWYgKHRo
aXNPYmplY3QtPmQtPnJlZ2lzdGVyQXJyYXkpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KHRoaXNPYmplY3QtPmQtPnJlZ2lzdGVyQXJyYXkuZ2V0KCksIHRoaXNPYmplY3QtPmQtPm51bVBh
cmFtZXRlcnMpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPmQtPmV4dHJhQXJndW1lbnRzKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIG51bUV4dHJhQXJndW1lbnRzID0gdGhpc09iamVjdC0+ZC0+bnVtQXJn
dW1lbnRzIC0gdGhpc09iamVjdC0+ZC0+bnVtUGFyYW1ldGVyczsKLSAgICAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXModGhpc09iamVjdC0+ZC0+ZXh0cmFBcmd1bWVudHMsIG51bUV4dHJhQXJndW1l
bnRzKTsKLSAgICB9Ci0KKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+
ZC0+cmVnaXN0ZXJBcnJheS5nZXQoKSwgdGhpc09iamVjdC0+ZC0+bnVtQXJndW1lbnRzKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+ZC0+Y2FsbGVlKTsKLQogICAgIGlmICh0aGlz
T2JqZWN0LT5kLT5hY3RpdmF0aW9uKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+ZC0+YWN0aXZhdGlvbik7CiB9CiAKLXZvaWQgQXJndW1lbnRzOjpjb3B5VG9SZWdpc3RlcnMo
RXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlciogYnVmZmVyLCB1aW50MzJfdCBtYXhTaXplKQordm9p
ZCBBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCB1aW50MzJfdCBsZW5ndGgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKGQtPm92ZXJy
b2RlTGVuZ3RoKSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtaW4oZ2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpLCBtYXhTaXplKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAg
YnVmZmVyW2ldID0gZ2V0KGV4ZWMsIGkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKExJS0VMWSghZC0+ZGVsZXRlZEFyZ3VtZW50cykpIHsKLSAgICAgICAgdW5zaWduZWQgcGFy
YW1ldGVyc0xlbmd0aCA9IG1pbihtaW4oZC0+bnVtUGFyYW1ldGVycywgZC0+bnVtQXJndW1lbnRz
KSwgbWF4U2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKDsgaSA8
IHBhcmFtZXRlcnNMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGQtPnJlZ2lz
dGVyc1tkLT5maXJzdFBhcmFtZXRlckluZGV4ICsgaV0uZ2V0KCk7Ci0gICAgICAgIGZvciAoOyBp
IDwgZC0+bnVtQXJndW1lbnRzOyArK2kpCi0gICAgICAgICAgICBidWZmZXJbaV0gPSBkLT5leHRy
YUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10uZ2V0KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgcGFyYW1ldGVyc0xlbmd0aCA9IG1pbihtaW4oZC0+
bnVtUGFyYW1ldGVycywgZC0+bnVtQXJndW1lbnRzKSwgbWF4U2l6ZSk7Ci0gICAgdW5zaWduZWQg
aSA9IDA7Ci0gICAgZm9yICg7IGkgPCBwYXJhbWV0ZXJzTGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
aWYgKCFkLT5kZWxldGVkQXJndW1lbnRzW2ldKQotICAgICAgICAgICAgYnVmZmVyW2ldID0gZC0+
cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXS5nZXQoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYnVmZmVyW2ldID0gZ2V0KGV4ZWMsIGkpOwotICAgIH0KLSAgICBmb3Ig
KDsgaSA8IGQtPm51bUFyZ3VtZW50czsgKytpKSB7Ci0gICAgICAgIGlmICghZC0+ZGVsZXRlZEFy
Z3VtZW50c1tpXSkKLSAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGQtPmV4dHJhQXJndW1lbnRzW2kg
LSBkLT5udW1QYXJhbWV0ZXJzXS5nZXQoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxl
bmd0aChleGVjKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIWQtPmRlbGV0ZWRBcmd1bWVudHNb
aV0pCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGFyZ3VtZW50KGkpLmdl
dCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnVmZmVyW2ldID0gZ2V0KGV4ZWMsIGkp
OworICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwog
ICAgIH0KIH0KIAogdm9pZCBBcmd1bWVudHM6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywg
TWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgaWYgKFVOTElLRUxZKGQtPm92ZXJy
b2RlTGVuZ3RoKSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7IAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIAotICAgICAgICAgICAgYXJncy5hcHBlbmQo
Z2V0KGV4ZWMsIGkpKTsgCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoTElLRUxZ
KCFkLT5kZWxldGVkQXJndW1lbnRzKSkgewotICAgICAgICBpZiAoTElLRUxZKCFkLT5udW1QYXJh
bWV0ZXJzKSkgewotICAgICAgICAgICAgYXJncy5pbml0aWFsaXplKGQtPmV4dHJhQXJndW1lbnRz
LCBkLT5udW1Bcmd1bWVudHMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGQtPm51bVBhcmFtZXRlcnMgPT0gZC0+bnVtQXJndW1lbnRzKSB7Ci0gICAgICAg
ICAgICBhcmdzLmluaXRpYWxpemUoJmQtPnJlZ2lzdGVyc1tkLT5maXJzdFBhcmFtZXRlckluZGV4
XSwgZC0+bnVtQXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNMZW5ndGggPSBtaW4oZC0+bnVtUGFyYW1ldGVycywg
ZC0+bnVtQXJndW1lbnRzKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGZvciAo
OyBpIDwgcGFyYW1ldGVyc0xlbmd0aDsgKytpKQotICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+
cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXS5nZXQoKSk7Ci0gICAgICAgIGZv
ciAoOyBpIDwgZC0+bnVtQXJndW1lbnRzOyArK2kpCi0gICAgICAgICAgICBhcmdzLmFwcGVuZChk
LT5leHRyYUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10uZ2V0KCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcGFyYW1ldGVyc0xlbmd0aCA9IG1pbihkLT5u
dW1QYXJhbWV0ZXJzLCBkLT5udW1Bcmd1bWVudHMpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAg
IGZvciAoOyBpIDwgcGFyYW1ldGVyc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghZC0+ZGVs
ZXRlZEFyZ3VtZW50c1tpXSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGQtPnJlZ2lzdGVyc1tk
LT5maXJzdFBhcmFtZXRlckluZGV4ICsgaV0uZ2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwotICAgIH0KLSAgICBmb3IgKDsgaSA8IGQt
Pm51bUFyZ3VtZW50czsgKytpKSB7Ci0gICAgICAgIGlmICghZC0+ZGVsZXRlZEFyZ3VtZW50c1tp
XSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1Q
YXJhbWV0ZXJzXS5nZXQoKSk7CisgICAgdWludDMyX3QgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKGV4
ZWMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
aWYgKCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJndW1lbnRzW2ldKQorICAg
ICAgICAgICAgYXJncy5hcHBlbmQoYXJndW1lbnQoaSkuZ2V0KCkpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwogICAgIH0KQEAgLTE0OSwxMCAr
NzgsNyBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRlCiB7CiAgICAg
QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIGlm
IChpIDwgdGhpc09iamVjdC0+ZC0+bnVtQXJndW1lbnRzICYmICghdGhpc09iamVjdC0+ZC0+ZGVs
ZXRlZEFyZ3VtZW50cyB8fCAhdGhpc09iamVjdC0+ZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkpIHsK
LSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5kLT5udW1QYXJhbWV0ZXJzKSB7Ci0gICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmQtPnJlZ2lzdGVyc1t0aGlzT2JqZWN0LT5k
LT5maXJzdFBhcmFtZXRlckluZGV4ICsgaV0uZ2V0KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+ZC0+ZXh0cmFBcmd1bWVudHNbaSAtIHRo
aXNPYmplY3QtPmQtPm51bVBhcmFtZXRlcnNdLmdldCgpKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5nZXQoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMTg5LDEwICsxMTUsNyBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsCiAgICAgYm9vbCBpc0FycmF5SW5kZXg7CiAgICAgdW5zaWduZWQgaSA9IHBy
b3BlcnR5TmFtZS50b0FycmF5SW5kZXgoaXNBcnJheUluZGV4KTsKICAgICBpZiAoaXNBcnJheUlu
ZGV4ICYmIGkgPCB0aGlzT2JqZWN0LT5kLT5udW1Bcmd1bWVudHMgJiYgKCF0aGlzT2JqZWN0LT5k
LT5kZWxldGVkQXJndW1lbnRzIHx8ICF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzW2ld
KSkgewotICAgICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmQtPm51bVBhcmFtZXRlcnMpIHsKLSAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+ZC0+cmVnaXN0ZXJzW3RoaXNPYmpl
Y3QtPmQtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXS5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5kLT5leHRyYUFyZ3VtZW50c1tp
IC0gdGhpc09iamVjdC0+ZC0+bnVtUGFyYW1ldGVyc10uZ2V0KCkpOworICAgICAgICBzbG90LnNl
dFZhbHVlKHRoaXNPYmplY3QtPmFyZ3VtZW50KGkpLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkBAIC0yMjEsMTAgKzE0NCw3IEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IKICAgICBib29sIGlzQXJyYXlJbmRleDsKICAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleChpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0Fy
cmF5SW5kZXggJiYgaSA8IHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50cyAmJiAoIXRoaXNPYmpl
Y3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVu
dHNbaV0pKSB7Ci0gICAgICAgIGlmIChpIDwgdGhpc09iamVjdC0+ZC0+bnVtUGFyYW1ldGVycykg
ewotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmQtPnJl
Z2lzdGVyc1t0aGlzT2JqZWN0LT5kLT5maXJzdFBhcmFtZXRlckluZGV4ICsgaV0uZ2V0KCksIE5v
bmUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cih0aGlzT2JqZWN0LT5kLT5leHRyYUFyZ3VtZW50c1tpIC0gdGhpc09iamVjdC0+ZC0+bnVtUGFy
YW1ldGVyc10uZ2V0KCksIE5vbmUpOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
dGhpc09iamVjdC0+YXJndW1lbnQoaSkuZ2V0KCksIE5vbmUpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgCkBAIC0yNjQsMTEgKzE4NCw4IEBAIHZvaWQgQXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2IKIHZvaWQgQXJndW1lbnRzOjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxBcmd1bWVudHMqPihjZWxsKTsKLSAgICBp
ZiAoaSA8IHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50cyAmJiAoIXRoaXNPYmplY3QtPmQtPmRl
bGV0ZWRBcmd1bWVudHMgfHwgIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pKSB7
Ci0gICAgICAgIGlmIChpIDwgdGhpc09iamVjdC0+ZC0+bnVtUGFyYW1ldGVycykKLSAgICAgICAg
ICAgIHRoaXNPYmplY3QtPmQtPnJlZ2lzdGVyc1t0aGlzT2JqZWN0LT5kLT5maXJzdFBhcmFtZXRl
ckluZGV4ICsgaV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdC0+ZC0+YWN0aXZh
dGlvbiA/IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHRoaXNPYmplY3QtPmQtPmFjdGl2YXRpb24uZ2V0
KCkpIDogY2VsbCwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzT2JqZWN0
LT5kLT5leHRyYUFyZ3VtZW50c1tpIC0gdGhpc09iamVjdC0+ZC0+bnVtUGFyYW1ldGVyc10uc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgIGlmIChpIDwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50cykgJiYgKCF0aGlz
T2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzIHx8ICF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJn
dW1lbnRzW2ldKSkgeworICAgICAgICB0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTI4MiwxMCArMTk5LDcgQEAgdm9pZCBBcmd1bWVudHM6OnB1dChKU0NlbGwqIGNlbGws
IEV4ZWNTdAogICAgIGJvb2wgaXNBcnJheUluZGV4OwogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUudG9BcnJheUluZGV4KGlzQXJyYXlJbmRleCk7CiAgICAgaWYgKGlzQXJyYXlJbmRleCAm
JiBpIDwgdGhpc09iamVjdC0+ZC0+bnVtQXJndW1lbnRzICYmICghdGhpc09iamVjdC0+ZC0+ZGVs
ZXRlZEFyZ3VtZW50cyB8fCAhdGhpc09iamVjdC0+ZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkpIHsK
LSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5kLT5udW1QYXJhbWV0ZXJzKQotICAgICAgICAg
ICAgdGhpc09iamVjdC0+ZC0+cmVnaXN0ZXJzW3RoaXNPYmplY3QtPmQtPmZpcnN0UGFyYW1ldGVy
SW5kZXggKyBpXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LT5kLT5hY3RpdmF0
aW9uID8gc3RhdGljX2Nhc3Q8SlNDZWxsKj4odGhpc09iamVjdC0+ZC0+YWN0aXZhdGlvbi5nZXQo
KSkgOiBzdGF0aWNfY2FzdDxKU0NlbGwqPih0aGlzT2JqZWN0KSwgdmFsdWUpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5kLT5leHRyYUFyZ3VtZW50c1tpIC0gdGhpc09i
amVjdC0+ZC0+bnVtUGFyYW1ldGVyc10uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVj
dCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTM2Miw0ICsyNzYsNTUgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogYwogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lKTsKIH0KIAordm9pZCBBcmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCit7CisgICAgaWYgKGlzVG9ybk9mZigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIWQtPm51bUFyZ3VtZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgZC0+cmVn
aXN0ZXJBcnJheSA9IGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPltkLT5u
dW1Bcmd1bWVudHNdKTsKKyAgICBkLT5yZWdpc3RlcnMgPSBkLT5yZWdpc3RlckFycmF5LmdldCgp
ICsgQ2FsbEZyYW1lOjpvZmZzZXRGb3IoZC0+bnVtQXJndW1lbnRzICsgMSk7CisKKyAgICBpZiAo
IWNhbGxGcmFtZS0+aXNJbmxpbmVDYWxsRnJhbWUoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGQtPm51bUFyZ3VtZW50czsgKytpKQorICAgICAgICAgICAgYXJndW1lbnQoaSku
c2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjYWxsRnJhbWUtPmFyZ3VtZW50KGkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY2FsbEZyYW1lLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGQtPm51bUFyZ3VtZW50czsgKytpKSB7CisgICAgICAgIFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbaSArIDFdOworICAgICAg
ICAvLyBJbiB0aGUgZnV0dXJlIHdlJ2xsIHN1cHBvcnQgZGlzcGxhY2VkIHJlY292ZXJpZXMgKGlu
ZGljYXRpbmcgdGhhdCB0aGUKKyAgICAgICAgLy8gYXJndW1lbnQgd2FzIGZsdXNoZWQgdG8gYSBk
aWZmZXJlbnQgbG9jYXRpb24pLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBkbworICAgICAgICAvLyB0
aGF0IHNvIHRoaXMgY29kZSB3aWxsIGZhaWwgaWYgdGhhdCB3ZXJlIHRvIGhhcHBlbi4gT24gdGhl
IG90aGVyIGhhbmQsCisgICAgICAgIC8vIGl0J3MgbXVjaCBsZXNzIGxpa2VseSB0aGF0IHdlJ2xs
IHN1cHBvcnQgaW4tcmVnaXN0ZXIgcmVjb3ZlcmllcyBzaW5jZQorICAgICAgICAvLyB0aGlzIGNv
ZGUgZG9lcyBub3QgKGVhc2lseSkgaGF2ZSBhY2Nlc3MgdG8gcmVnaXN0ZXJzLgorICAgICAgICBK
U1ZhbHVlIHZhbHVlOworICAgICAgICBSZWdpc3RlciogbG9jYXRpb24gPSAmY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKVtDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpXTsKKyAgICAgICAgc3dpdGNo
IChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVy
RmlsZToKKyAgICAgICAgICAgIHZhbHVlID0gbG9jYXRpb24tPmpzVmFsdWUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZElu
dDMyOgorICAgICAgICAgICAgdmFsdWUgPSBqc051bWJlcihsb2NhdGlvbi0+dW5ib3hlZEludDMy
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJG
aWxlQXNVbmJveGVkQ2VsbDoKKyAgICAgICAgICAgIHZhbHVlID0gbG9jYXRpb24tPnVuYm94ZWRD
ZWxsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRCb29sZWFuOgorICAgICAgICAgICAgdmFsdWUgPSBqc0Jvb2xlYW4obG9j
YXRpb24tPnVuYm94ZWRCb29sZWFuKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29uc3RhbnQ6CisgICAgICAgICAgICB2YWx1ZSA9IHJlY292ZXJ5LmNvbnN0YW50KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYXJn
dW1lbnQoaSkuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAg
fQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAxMDI1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMjYgKzM5LDIw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBcmd1bWVudHNEYXRhKCkgeyB9CiAgICAgICAg
IFdyaXRlQmFycmllcjxKU0FjdGl2YXRpb24+IGFjdGl2YXRpb247CiAKLSAgICAgICAgdW5zaWdu
ZWQgbnVtUGFyYW1ldGVyczsKLSAgICAgICAgcHRyZGlmZl90IGZpcnN0UGFyYW1ldGVySW5kZXg7
CiAgICAgICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50czsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVyczsKICAgICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVu
a25vd24+ID4gcmVnaXN0ZXJBcnJheTsKIAotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGV4dHJhQXJndW1lbnRzOwogICAgICAgICBPd25BcnJheVB0cjxib29sPiBkZWxldGVkQXJndW1l
bnRzOwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gZXh0cmFBcmd1bWVudHNGaXhlZEJ1
ZmZlcls0XTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwogICAg
ICAgICBib29sIG92ZXJyb2RlTGVuZ3RoIDogMTsKICAgICAgICAgYm9vbCBvdmVycm9kZUNhbGxl
ZSA6IDE7CiAgICAgICAgIGJvb2wgb3ZlcnJvZGVDYWxsZXIgOiAxOwogICAgICAgICBib29sIGlz
U3RyaWN0TW9kZSA6IDE7Ci0gICAgICAgIGJvb2wgaXNJbmxpbmVGcmFtZSA6IDE7IC8vIElmIHRy
dWUsIGFsbCBhcmd1bWVudHMgYXJlIGluIHRoZSBleHRyYUFyZ3VtZW50cyBidWZmZXIuCiAgICAg
fTsKIAotCiAgICAgY2xhc3MgQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
ICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC02
OSwyMyArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFyZ3VtZW50cy0+Zmlu
aXNoQ3JlYXRpb24oY2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZUFuZFRl
YXJPZmYoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKGFsbG9jYXRl
Q2VsbDxBcmd1bWVudHM+KGdsb2JhbERhdGEuaGVhcCkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOwot
ICAgICAgICAgICAgYXJndW1lbnRzLT5maW5pc2hDcmVhdGlvbkFuZFRlYXJPZmYoY2FsbEZyYW1l
KTsKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZU5vUGFyYW1ldGVycyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4oZ2xv
YmFsRGF0YS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSwgTm9QYXJhbWV0ZXJzKTsKLSAgICAg
ICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBOb1BhcmFtZXRlcnMp
OwotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKLSAgICAgICAgfQogCi0gICAgICAgIC8v
IFVzZSBhbiBlbnVtIGJlY2F1c2Ugb3RoZXJ3aXNlIGdjYyBpbnNpc3RzIG9uIGRvaW5nIGEgbWVt
b3J5Ci0gICAgICAgIC8vIHJlYWQuCiAgICAgICAgIGVudW0geyBNYXhBcmd1bWVudHMgPSAweDEw
MDAwIH07CiAKICAgICBwcml2YXRlOgpAQCAtOTUsOCArNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgQXJndW1lbnRzKENhbGxGcmFtZSosIE5vUGFyYW1ldGVyc1R5cGUpOwogCiAgICAg
cHVibGljOgotICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVudHMoKTsKLQogICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkBAIC0xMTAsOCArODYsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiBkLT5udW1Bcmd1bWVudHM7IAogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICB2b2lkIGNvcHlUb1JlZ2lzdGVycyhFeGVjU3RhdGUqIGV4ZWMsIFJl
Z2lzdGVyKiBidWZmZXIsIHVpbnQzMl90IG1heFNpemUpOwotICAgICAgICB2b2lkIHRlYXJPZmYo
SlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSos
IENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CisgICAgICAgIHZvaWQgdGVhck9mZihDYWxs
RnJhbWUqKTsKICAgICAgICAgYm9vbCBpc1Rvcm5PZmYoKSBjb25zdCB7IHJldHVybiBkLT5yZWdp
c3RlckFycmF5OyB9CiAgICAgICAgIHZvaWQgZGlkVGVhck9mZkFjdGl2YXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24pCiAgICAgICAgIHsKQEAg
LTEyOSwxMyArMTA1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAotICAgICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uQnV0RG9udFRlYXJPZmYoQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oQ2FsbEZyYW1lKik7Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb25BbmRUZWFy
T2ZmKENhbGxGcmFtZSopOwotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKENhbGxGcmFtZSos
IE5vUGFyYW1ldGVyc1R5cGUpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBnZXRBcmd1
bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFt
ZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYgYXJnYyk7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKQEAgLTE0Nyw2ICsxMTksOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBjcmVhdGVTdHJpY3RNb2RlQ2FsbGVySWZOZWNlc3NhcnkoRXhlY1N0
YXRlKik7CiAgICAgICAgIHZvaWQgY3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KEV4
ZWNTdGF0ZSopOwogCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoc2l6
ZV90KTsKKwogICAgICAgICB2b2lkIGluaXQoQ2FsbEZyYW1lKik7CiAKICAgICAgICAgT3duUHRy
PEFyZ3VtZW50c0RhdGE+IGQ7CkBAIC0xNjAsMjUgKzEzNCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4oYXNPYmplY3QodmFsdWUpKTsK
ICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgQXJndW1lbnRzOjpnZXRBcmd1bWVudHNE
YXRhKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiYgZnVuY3Rpb24sIHB0cmRpZmZf
dCYgZmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQmIGFyZ2MpCi0gICAg
ewotICAgICAgICBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSk7Ci0K
LSAgICAgICAgaW50IG51bVBhcmFtZXRlcnMgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCktPnBh
cmFtZXRlckNvdW50KCk7Ci0gICAgICAgIGFyZ2MgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsbEZyYW1lLT5pc0lubGlu
ZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgQVNTRVJUKGFyZ2MgPT0gbnVtUGFyYW1ldGVycyAr
IDEpOwotCi0gICAgICAgIGlmIChhcmdjIDw9IG51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICBh
cmd2ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSAtIG51bVBhcmFtZXRlcnM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyZ3Yg
PSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplIC0gbnVtUGFyYW1ldGVycyAtIGFyZ2M7Ci0KLSAgICAgICAgYXJnYyAtPSAxOyAvLyAtIDEg
dG8gc2tpcCAidGhpcyIKLSAgICAgICAgZmlyc3RQYXJhbWV0ZXJJbmRleCA9IC1SZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBudW1QYXJhbWV0ZXJzOwotICAgIH0KLQogICAgIGlu
bGluZSBBcmd1bWVudHM6OkFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAg
OiBKU05vbkZpbmFsT2JqZWN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCiAgICAgICAgICwgZChh
ZG9wdFB0cihuZXcgQXJndW1lbnRzRGF0YSkpCkBAIC0xOTAsMTkxICsxNDUsMzAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICwgZChhZG9wdFB0cihuZXcgQXJndW1lbnRzRGF0YSkpCiAgICAg
ewogICAgIH0KLSAgICAKLSAgICBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9u
QnV0RG9udFRlYXJPZmYoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi0gICAgewotICAgICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAg
ICAgICBwdHJkaWZmX3QgZmlyc3RQYXJhbWV0ZXJJbmRleDsKLSAgICAgICAgUmVnaXN0ZXIqIGFy
Z3Y7Ci0gICAgICAgIGludCBudW1Bcmd1bWVudHM7Ci0gICAgICAgIGdldEFyZ3VtZW50c0RhdGEo
Y2FsbEZyYW1lLCBjYWxsZWUsIGZpcnN0UGFyYW1ldGVySW5kZXgsIGFyZ3YsIG51bUFyZ3VtZW50
cyk7Ci0KLSAgICAgICAgZC0+bnVtUGFyYW1ldGVycyA9IGNhbGxlZS0+anNFeGVjdXRhYmxlKCkt
PnBhcmFtZXRlckNvdW50KCk7Ci0gICAgICAgIGQtPmZpcnN0UGFyYW1ldGVySW5kZXggPSBmaXJz
dFBhcmFtZXRlckluZGV4OwotICAgICAgICBkLT5udW1Bcmd1bWVudHMgPSBudW1Bcmd1bWVudHM7
Ci0gICAgICAgIGQtPmlzSW5saW5lRnJhbWUgPSBmYWxzZTsKLQotICAgICAgICBkLT5yZWdpc3Rl
cnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkpOwotCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZXh0cmFBcmd1
bWVudHM7Ci0gICAgICAgIGlmIChkLT5udW1Bcmd1bWVudHMgPD0gZC0+bnVtUGFyYW1ldGVycykK
LSAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzID0gMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBudW1FeHRyYUFyZ3VtZW50cyA9IGQtPm51bUFyZ3VtZW50cyAtIGQtPm51
bVBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBpZiAobnVtRXh0cmFBcmd1bWVudHMgPiBzaXplb2Yo
ZC0+ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcikgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkKLSAgICAgICAgICAgICAgICBleHRyYUFyZ3VtZW50cyA9IG5ldyBXcml0ZUJhcnJpZXI8
VW5rbm93bj5bbnVtRXh0cmFBcmd1bWVudHNdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGV4dHJhQXJndW1lbnRzID0gZC0+ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcjsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FeHRyYUFyZ3VtZW50czsgKytp
KQotICAgICAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzW2ldLnNldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgdGhpcywgYXJndltkLT5udW1QYXJhbWV0ZXJzICsgaV0uanNWYWx1ZSgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGQtPmV4dHJhQXJndW1lbnRzID0gZXh0cmFBcmd1bWVudHM7Ci0K
LSAgICAgICAgZC0+Y2FsbGVlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgdGhpcywgY2Fs
bGVlKTsKLSAgICAgICAgZC0+b3ZlcnJvZGVMZW5ndGggPSBmYWxzZTsKLSAgICAgICAgZC0+b3Zl
cnJvZGVDYWxsZWUgPSBmYWxzZTsKLSAgICAgICAgZC0+b3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsK
LSAgICAgICAgZC0+aXNTdHJpY3RNb2RlID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJp
Y3RNb2RlKCk7Ci0gICAgfQogCi0gICAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVh
dGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICBpbmxpbmUgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBBcmd1bWVudHM6OmFyZ3VtZW50KHNpemVfdCBpKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KCFjYWxsRnJhbWUtPmlzSW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICBmaW5pc2hDcmVhdGlv
bkJ1dERvbnRUZWFyT2ZmKGNhbGxGcmFtZSk7Ci0gICAgICAgIGlmIChkLT5pc1N0cmljdE1vZGUp
Ci0gICAgICAgICAgICB0ZWFyT2ZmKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIGQtPnJlZ2lzdGVyc1tDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpXTsKICAgICB9
CiAKLSAgICBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uQW5kVGVhck9mZihD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENy
ZWF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOwotICAgICAgICAKLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotCi0g
ICAgICAgIHB0cmRpZmZfdCBmaXJzdFBhcmFtZXRlckluZGV4OwotICAgICAgICBSZWdpc3Rlciog
YXJndjsKLSAgICAgICAgaW50IG51bUFyZ3VtZW50czsKLSAgICAgICAgZ2V0QXJndW1lbnRzRGF0
YShjYWxsRnJhbWUsIGNhbGxlZSwgZmlyc3RQYXJhbWV0ZXJJbmRleCwgYXJndiwgbnVtQXJndW1l
bnRzKTsKLSAgICAgICAgCi0gICAgICAgIGQtPm51bVBhcmFtZXRlcnMgPSBjYWxsZWUtPmpzRXhl
Y3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpOwotICAgICAgICBkLT5maXJzdFBhcmFtZXRlcklu
ZGV4ID0gZmlyc3RQYXJhbWV0ZXJJbmRleDsKLSAgICAgICAgZC0+bnVtQXJndW1lbnRzID0gbnVt
QXJndW1lbnRzOwotICAgICAgICAKLSAgICAgICAgaWYgKGQtPm51bVBhcmFtZXRlcnMpIHsKLSAg
ICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGQtPm51bVBhcmFtZXRlcnMgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICBzaXplX3QgcmVnaXN0ZXJB
cnJheVNpemUgPSBkLT5udW1QYXJhbWV0ZXJzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBP
d25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRB
cnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W3JlZ2lzdGVyQXJyYXlTaXplXSk7Ci0g
ICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5pc0lubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmlu
bGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVnaXN0ZXJBcnJheVNpemU7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2kgKyAxXTsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSB3ZSdsbCBzdXBwb3J0IGRpc3BsYWNlZCBy
ZWNvdmVyaWVzIChpbmRpY2F0aW5nIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFy
Z3VtZW50IHdhcyBmbHVzaGVkIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uKSwgYnV0IGZvciBub3cg
d2UgZG9uJ3QgZG8KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBzbyB0aGlzIGNvZGUgd2ls
bCBmYWlsIGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uIE9uIHRoZSBvdGhlciBoYW5kLAotICAgICAg
ICAgICAgICAgICAgICAvLyBpdCdzIG11Y2ggbGVzcyBsaWtlbHkgdGhhdCB3ZSdsbCBzdXBwb3J0
IGluLXJlZ2lzdGVyIHJlY292ZXJpZXMgc2luY2UKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhp
cyBjb2RlIGRvZXMgbm90IChlYXNpbHkpIGhhdmUgYWNjZXNzIHRvIHJlZ2lzdGVycy4KLSAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0
ZXIqIGxvY2F0aW9uID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGkgLSByZWdpc3Rlck9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gbG9jYXRpb24tPmpzVmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJl
Z2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBqc051bWJlcihsb2NhdGlvbi0+dW5ib3hlZEludDMyKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJG
aWxlQXNVbmJveGVkQ2VsbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbG9jYXRp
b24tPnVuYm94ZWRDZWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFu
OgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBqc0Jvb2xlYW4obG9jYXRpb24tPnVu
Ym94ZWRCb29sZWFuKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHJlY292ZXJ5LmNvbnN0YW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJBcnJheVtpXS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVnaXN0ZXJBcnJheVNpemU7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXJBcnJheVtpXS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKClbaSAtIHJlZ2lzdGVyT2Zmc2V0XS5qc1ZhbHVlKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheS5nZXQoKSArIGQt
Pm51bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAg
ICAgICAgICBkLT5yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheS5yZWxlYXNlKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZXh0cmFBcmd1
bWVudHM7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPmlzSW5saW5lQ2FsbEZyYW1lKCkpCi0gICAg
ICAgICAgICBBU1NFUlQoZC0+bnVtQXJndW1lbnRzID09IGQtPm51bVBhcmFtZXRlcnMpOwotICAg
ICAgICBpZiAoZC0+bnVtQXJndW1lbnRzIDw9IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAgICAg
ICBleHRyYUFyZ3VtZW50cyA9IDA7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtRXh0cmFBcmd1bWVudHMgPSBkLT5udW1Bcmd1bWVudHMgLSBkLT5udW1QYXJhbWV0ZXJz
OwotICAgICAgICAgICAgaWYgKG51bUV4dHJhQXJndW1lbnRzID4gc2l6ZW9mKGQtPmV4dHJhQXJn
dW1lbnRzRml4ZWRCdWZmZXIpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0gICAg
ICAgICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSBuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W251
bUV4dHJhQXJndW1lbnRzXTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBleHRy
YUFyZ3VtZW50cyA9IGQtPmV4dHJhQXJndW1lbnRzRml4ZWRCdWZmZXI7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFBcmd1bWVudHM7ICsraSkKLSAgICAgICAg
ICAgICAgICBleHRyYUFyZ3VtZW50c1tpXS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRo
aXMsIGFyZ3ZbZC0+bnVtUGFyYW1ldGVycyArIGldLmpzVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGQtPmV4dHJhQXJndW1lbnRzID0gZXh0cmFBcmd1bWVudHM7CiAKKyAg
ICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgp
KTsKKyAgICAgICAgZC0+bnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7
CisgICAgICAgIGQtPnJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVu
a25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAgICAgICAgIGQtPmNhbGxlZS5zZXQo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNhbGxlZSk7CiAgICAgICAgIGQtPm92ZXJy
b2RlTGVuZ3RoID0gZmFsc2U7CiAgICAgICAgIGQtPm92ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAg
ICAgICAgIGQtPm92ZXJyb2RlQ2FsbGVyID0gZmFsc2U7Ci0gICAgICAgIGQtPmlzSW5saW5lRnJh
bWUgPSBjYWxsRnJhbWUtPmlzSW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgIGQtPmlzU3RyaWN0
TW9kZSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOwotICAgIH0KLQot
ICAgIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIE5vUGFyYW1ldGVyc1R5cGUpCi0gICAgewotICAgICAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+aXNJbmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKLSAgICAgICAgQVNTRVJUKCFhc0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpLT5qc0V4
ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgbnVtQXJn
dW1lbnRzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7Ci0KLSAgICAgICAgZC0+bnVtUGFy
YW1ldGVycyA9IDA7Ci0gICAgICAgIGQtPm51bUFyZ3VtZW50cyA9IG51bUFyZ3VtZW50czsKLSAg
ICAgICAgZC0+aXNJbmxpbmVGcmFtZSA9IGZhbHNlOwotCi0gICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogZXh0cmFBcmd1bWVudHM7Ci0gICAgICAgIGlmIChudW1Bcmd1bWVudHMgPiBzaXpl
b2YoZC0+ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcikgLyBzaXplb2YoUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSBuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W251bUFy
Z3VtZW50c107Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzID0gZC0+
ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcjsKLQotICAgICAgICBSZWdpc3RlciogYXJndiA9IGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
LSBudW1Bcmd1bWVudHMgLSAxOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
QXJndW1lbnRzOyArK2kpCi0gICAgICAgICAgICBleHRyYUFyZ3VtZW50c1tpXS5zZXQoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFyZ3ZbaV0uanNWYWx1ZSgpKTsKLQotICAgICAgICBk
LT5leHRyYUFyZ3VtZW50cyA9IGV4dHJhQXJndW1lbnRzOwotCi0gICAgICAgIGQtPmNhbGxlZS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5j
YWxsZWUoKSkpOwotICAgICAgICBkLT5vdmVycm9kZUxlbmd0aCA9IGZhbHNlOwotICAgICAgICBk
LT5vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwotICAgICAgICBkLT5vdmVycm9kZUNhbGxlciA9IGZh
bHNlOwotICAgICAgICBkLT5pc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKTsKLSAgICAgICAgaWYgKGQtPmlzU3RyaWN0TW9kZSkKLSAgICAgICAgICAg
IHRlYXJPZmYoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIGlubGluZSB2
b2lkIEFyZ3VtZW50czo6dGVhck9mZihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgewot
ICAgICAgICBBU1NFUlQoIWlzVG9ybk9mZigpKTsKLQotICAgICAgICBpZiAoIWQtPm51bVBhcmFt
ZXRlcnMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0
ID0gZC0+bnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
LSAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplID0gZC0+bnVtUGFyYW1ldGVyczsKIAot
ICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5
ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W3JlZ2lzdGVyQXJyYXlT
aXplXSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJBcnJheVNpemU7
IGkrKykKLSAgICAgICAgICAgIHJlZ2lzdGVyQXJyYXlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IGQtPnJlZ2lzdGVyc1tpIC0gcmVnaXN0ZXJPZmZzZXRdLmdldCgpKTsKLSAgICAgICAgZC0+cmVn
aXN0ZXJzID0gcmVnaXN0ZXJBcnJheS5nZXQoKSArIHJlZ2lzdGVyT2Zmc2V0OwotICAgICAgICBk
LT5yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheS5yZWxlYXNlKCk7CisgICAgICAgIC8vIFRo
ZSBieXRlY29kZSBnZW5lcmF0b3Igb21pdHMgb3BfdGVhcl9vZmZfYWN0aXZhdGlvbiBpbiBjYXNl
cyBvZiBubworICAgICAgICAvLyBkZWNsYXJlZCBwYXJhbWV0ZXJzLCBzbyB3ZSBuZWVkIHRvIHRl
YXIgb2ZmIGltbWVkaWF0ZWx5LgorICAgICAgICBpZiAoZC0+aXNTdHJpY3RNb2RlIHx8ICFjYWxs
ZWUtPmpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpKQorICAgICAgICAgICAgdGVhck9m
ZihjYWxsRnJhbWUpOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDEw
MjU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFt
ZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBY3RpdmF0aW9uKTsK
QEAgLTQxLDcgKzQzLDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTQWN0aXZhdGlvbjo6c19pbmZvID0g
ewogCiBKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5hY3RpdmF0aW9uU3RydWN0
dXJlLmdldCgpLCBmdW5jdGlvbkV4ZWN1dGFibGUtPnN5bWJvbFRhYmxlKCksIGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkpCi0gICAgLCBtX251bVBhcmFtZXRlcnNNaW51c1RoaXMoc3RhdGljX2Nhc3Q8
aW50PihmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCkpKQorICAgICwgbV9udW1D
YXB0dXJlZEFyZ3MobWF4KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBmdW5jdGlvbkV4ZWN1
dGFibGUtPnBhcmFtZXRlckNvdW50KCkpKQogICAgICwgbV9udW1DYXB0dXJlZFZhcnMoZnVuY3Rp
b25FeGVjdXRhYmxlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQoKSkKICAgICAsIG1fcmVxdWlyZXNE
eW5hbWljQ2hlY2tzKGZ1bmN0aW9uRXhlY3V0YWJsZS0+dXNlc0V2YWwoKSkKICAgICAsIG1fYXJn
dW1lbnRzUmVnaXN0ZXIoZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZSgpLmFy
Z3VtZW50c1JlZ2lzdGVyKCkpCkBAIC03NywxMCArNzksMTAgQEAgdm9pZCBKU0FjdGl2YXRpb246
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIGlmICghcmVnaXN0ZXJBcnJheSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMocmVnaXN0ZXJBcnJheSwgdGhpc09i
amVjdC0+bV9udW1QYXJhbWV0ZXJzTWludXNUaGlzKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyhyZWdpc3RlckFycmF5LCB0aGlzT2JqZWN0LT5tX251bUNhcHR1cmVkQXJncyk7CiAKLSAgICAv
LyBTa2lwIHRoZSBjYWxsIGZyYW1lLCB3aGljaCBzaXRzIGJldHdlZW4gdGhlIHBhcmFtZXRlcnMg
YW5kIHZhcnMuCi0gICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMocmVnaXN0ZXJBcnJheSArIHRoaXNP
YmplY3QtPm1fbnVtUGFyYW1ldGVyc01pbnVzVGhpcyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSwgdGhpc09iamVjdC0+bV9udW1DYXB0dXJlZFZhcnMpOworICAgIC8vIFNraXAg
J3RoaXMnIGFuZCBjYWxsIGZyYW1lLgorICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHJlZ2lzdGVy
QXJyYXkgKyBDYWxsRnJhbWU6Om9mZnNldEZvcih0aGlzT2JqZWN0LT5tX251bUNhcHR1cmVkQXJn
cyArIDEpLCB0aGlzT2JqZWN0LT5tX251bUNhcHR1cmVkVmFycyk7CiB9CiAKIGlubGluZSBib29s
IEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcg
Kzg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGFyZ3VtZW50
c0dldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IE5FVkVSX0lOTElORSBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXRBcmd1bWVudHNHZXR0
ZXIoKTsKIAotICAgICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzTWludXNUaGlzOworICAgICAgICBp
bnQgbV9udW1DYXB0dXJlZEFyZ3M7CiAgICAgICAgIGludCBtX251bUNhcHR1cmVkVmFycyA6IDMx
OwogICAgICAgICBib29sIG1fcmVxdWlyZXNEeW5hbWljQ2hlY2tzIDogMTsKICAgICAgICAgaW50
IG1fYXJndW1lbnRzUmVnaXN0ZXI7CkBAIC0xMTcsMTcgKzExNywyNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBpbmxpbmUgdm9pZCBKU0FjdGl2YXRpb246OnRlYXJPZmYoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX3JlZ2lzdGVyQXJyYXkpOworICAg
ICAgICBBU1NFUlQobV9udW1DYXB0dXJlZFZhcnMgKyBtX251bUNhcHR1cmVkQXJncyk7CiAKLSAg
ICAgICAgc2l6ZV90IG51bUxvY2FscyA9IG1fbnVtQ2FwdHVyZWRWYXJzICsgbV9udW1QYXJhbWV0
ZXJzTWludXNUaGlzOworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBDYWxsRnJhbWU6Om9m
ZnNldEZvcihtX251bUNhcHR1cmVkQXJncyArIDEpOworICAgICAgICBzaXplX3QgcmVnaXN0ZXJB
cnJheVNpemUgPSByZWdpc3Rlck9mZnNldCArIG1fbnVtQ2FwdHVyZWRWYXJzOwogCi0gICAgICAg
IGlmICghbnVtTG9jYWxzKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBPd25BcnJheVB0
cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihu
ZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W3JlZ2lzdGVyQXJyYXlTaXplXSk7CisgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheS5nZXQoKSArIHJl
Z2lzdGVyT2Zmc2V0OwogCi0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IG1fbnVtUGFyYW1l
dGVyc01pbnVzVGhpcyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAg
ICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplID0gbnVtTG9jYWxzICsgUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAvLyBDb3B5IGFsbCBhcmd1bWVudHMgdGhhdCBj
YW4gYmUgY2FwdHVyZWQgYnkgbmFtZSBvciBieSB0aGUgYXJndW1lbnRzIG9iamVjdC4KKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bUNhcHR1cmVkQXJnczsgKytpKSB7CisgICAgICAg
ICAgICBpbnQgaW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpOworICAgICAgICAg
ICAgcmVnaXN0ZXJzW2luZGV4XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9yZWdpc3RlcnNbaW5k
ZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNraXAgJ3RoaXMnIGFuZCBjYWxs
IGZyYW1lLgorCisgICAgICAgIC8vIENvcHkgYWxsIGNhcHR1cmVkIHZhcnMuCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9udW1DYXB0dXJlZFZhcnM7ICsraSkKKyAgICAgICAgICAgIHJl
Z2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9yZWdpc3RlcnNbaV0uZ2V0KCkpOwog
Ci0gICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJy
YXkgPSBjb3B5UmVnaXN0ZXJBcnJheShnbG9iYWxEYXRhLCBtX3JlZ2lzdGVycyAtIHJlZ2lzdGVy
T2Zmc2V0LCByZWdpc3RlckFycmF5U2l6ZSwgbV9udW1QYXJhbWV0ZXJzTWludXNUaGlzICsgMSk7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJh
eS5nZXQoKSArIHJlZ2lzdGVyT2Zmc2V0OwogICAgICAgICBzZXRSZWdpc3RlcnMocmVnaXN0ZXJz
LCByZWdpc3RlckFycmF5LnJlbGVhc2UoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTAyNTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NjUsMjIgKzEyNjUsMjIgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4
ZQogICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwogfQogCi12b2lkIEpTQXJyYXk6
OmNvcHlUb1JlZ2lzdGVycyhFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyKiBidWZmZXIsIHVpbnQz
Ml90IG1heFNpemUpCit2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4
ZWMsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1aW50MzJfdCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJU
KG1fc3RvcmFnZS0+bV9sZW5ndGggPj0gbWF4U2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1heFNp
emUpOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3Zl
Y3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obWF4U2l6ZSwgbV92ZWN0b3JMZW5n
dGgpOworICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOworICAgIFVOVVNFRF9Q
QVJBTShsZW5ndGgpOwogICAgIHVuc2lnbmVkIGkgPSAwOworICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7CiAgICAgZm9yICg7IGkgPCB2ZWN0b3JF
bmQ7ICsraSkgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07
CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBidWZmZXJbaV0g
PSB2LmdldCgpOworICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOwog
ICAgIH0KIAotICAgIGZvciAoOyBpIDwgbWF4U2l6ZTsgKytpKQotICAgICAgICBidWZmZXJbaV0g
PSBnZXQoZXhlYywgaSk7CisgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgY2Fs
bEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwogfQogCiB1bnNpZ25lZCBKU0Fy
cmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMDI1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0
YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKLSAgICAgICAgdm9pZCBjb3B5VG9SZWdpc3Rl
cnMoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqLCB1aW50MzJfdCk7CisgICAgICAgIHZvaWQgY29weVRv
QXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKICAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgICAgIHsK
</data>
<flag name="review"
          id="118541"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>