<?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>184164</bug_id>
          
          <creation_ts>2018-03-29 16:54:18 -0700</creation_ts>
          <short_desc>Make WTF::String poisonable</short_desc>
          <delta_ts>2018-03-30 12:47:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>184167</dependson>
    
    <dependson>184168</dependson>
    
    <dependson>184169</dependson>
    
    <dependson>184172</dependson>
    
    <dependson>184179</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1410446</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 16:54:18 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410447</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 16:54:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/39020677&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410448</commentid>
    <comment_count>2</comment_count>
      <attachid>336819</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 16:57:32 -0700</bug_when>
    <thetext>Created attachment 336819
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410450</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-29 17:00:39 -0700</bug_when>
    <thetext>Attachment 336819 did not pass style-queue:


ERROR: Source/WTF/wtf/Forward.h:159:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/text/AtomicString.h:221:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/text/WTFString.h:544:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:42:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:138:  The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/text/WTFString.h:176:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:190:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:193:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:194:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:197:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:198:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:214:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:256:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:257:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:259:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:260:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:428:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:429:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:449:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:450:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:457:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:473:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/text/WTFString.h:544:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/ChangeLog:94:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/WTF/wtf/text/WTFString.cpp:443:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WTF/wtf/text/WTFString.cpp:976:  The parameter name &quot;impl&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/text/WTFString.cpp:977:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 27 in 51 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410458</commentid>
    <comment_count>4</comment_count>
      <attachid>336819</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-03-29 17:32:42 -0700</bug_when>
    <thetext>Comment on attachment 336819
patch

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

Initial thoughts:
This can still be split into many smaller easier-to-review-and-land patches.
1) assume COMPILER_SUPPORTS(CXX_REFERENCE_QUALIFIED_FUNCTIONS) is always true
2) remove WTF_EXPORT_STRING_API
3) introduce WTF_LAZY_INSTANTIATE
4) remove declarations of WTF::String
5) change codePointCompareLessThan and WTF::characters
6) fix const and nullptr and clean up some things
7) introduce a template parameter to String

I&apos;m also not sure I like having BasicString and PoisonableString.  Could PoisonableString just be String?

&gt; Source/WebCore/ChangeLog:35
&gt; +        Neither base has any data members.

I don&apos;t think we need to duplicate this whole message 6 times.

&gt; Source/WebCore/ChangeLog:94
&gt; +        No new tests (OOPS!).

This should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410472</commentid>
    <comment_count>5</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 18:27:36 -0700</bug_when>
    <thetext>Sounds good, I&apos;ll start with the split you suggest!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410486</commentid>
    <comment_count>6</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 18:52:05 -0700</bug_when>
    <thetext>I added he first 3 patches you suggested as blocking this one. I&apos;ll continue with the others later, meatspace calls for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410654</commentid>
    <comment_count>7</comment_count>
      <attachid>336819</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-30 10:35:21 -0700</bug_when>
    <thetext>Comment on attachment 336819
patch

1) As we discussed yesterday in person, we shouldn&apos;t land this because of our new plan.
2) This approach is far too complicated for the small value it introduces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410707</commentid>
    <comment_count>8</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-30 12:47:10 -0700</bug_when>
    <thetext>&gt; I&apos;m also not sure I like having BasicString and PoisonableString.  Could
&gt; PoisonableString just be String?

Forgot to reply to this part: it could be, but then String is templated and has a default template parameter. It then means that in quite a few places you need to spell it out as String&lt;&gt; just to get the default. One of my earlier approaches did that and it was pretty ugly.

Now I have:
  using String = PoisonableString&lt;&gt;;

Another option is to have:
  class String : public PoisonableString&lt;&gt; {
  public:
    // All the constructors are re-implemented here to forward to the base class.
  };

I didn&apos;t try it out but it seemed more pain that just the using type alias.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336819</attachid>
            <date>2018-03-29 16:57:32 -0700</date>
            <delta_ts>2018-03-30 10:35:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Make-WTF-String-poisonable.patch</filename>
            <type>text/plain</type>
            <size>241747</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA1MjVlZjljM2NjZjNhNGJmMGE0ZmRkYzU2MDQ1ZGI4MDdmMjE0YWU2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDYgTWFyIDIwMTggMTA6NTc6NTEgLTA4MDAKU3ViamVjdDogW1BBVENIXSBNYWtlIFdU
Rjo6U3RyaW5nIHBvaXNvbmFibGUKCldlIHdhbnQgdG8gYmUgYWJsZSB0byBwb2lzb24gV1RGOjpT
dHJpbmcgdGhlIHNhbWUgd2F5IHdlIGNhbiBwb2lzb24gUmVmPD4sClJlZlB0cjw+LCBXcml0ZUJh
cnJpZXI8PiBhbmQgZnJpZW5kcyB1c2luZyB3dGYvUG9pc29uZWQuaC4gSW4gdGhlb3J5IHRoaXMg
aXMKdmVyeSBzaW1wbGU6IFN0cmluZyBvbmx5IGhvbGRzIGEgUmVmUHRyPFN0cmluZ0ltcGw+LCBh
bmQgYWxsIHdlIGhhdmUgdG8gZG8gaXMKcGFzcyBhIHBvaXNvbmVkIHBvaW50ZXIgdHJhaXQgdG8g
dGhlIGNvbnRhaW5lZCBSZWZQdHIgYW5kIGNhbGwgaXQgYSBkYXkuIEluCnByYWN0aWNlIHdlIGhh
dmUgdGhpcyBwYXRjaC4KCk1ha2UgV1RGIFN0cmluZyB0ZW1wbGF0ZWQsIHdpdGggRHVtcFB0clRy
YWl0czxTdHJpbmdJbXBsPiBhcyB0aGUgZGVmYXVsdC4gVGhpcwpmdW5jdGlvbmFsbHkgY2hhbmdl
cyBub3RoaW5nLCBidXQgYWxsb3dzIHBvaXNvbmluZyB0byB0cmlja2xlIHRvIFN0cmluZydzClJl
ZlB0ci4gSW4gdHVybiB0aGlzIHJlcXVpcmVzIHVwZGF0aW5nIGFsbCBmb3J3YXJkIGRlY2xhcmF0
aW9ucyBvZiBTdHJpbmcuIFRoaXMKaXMgZWFzaWVyIHRvIGRvIGluIEZvcndhcmQuaCAod2hpY2gg
Y29udGFpbnMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQp0ZW1wbGF0ZSksIGFuZCB0byB1cGRh
dGUgYWxsIGNvZGUgd2hpY2ggZm93YXJkLWRlY2xhcmVzIFN0cmluZyB0byBpbnN0ZWFkCmluY2x1
ZGUgRm9yd2FyZC5oLgoKQWRkIGEgcHJpdmF0ZSBub24tdGVtcGxhdGVkIGJhc2UgY2xhc3MgdG8g
U3RyaW5nLCBCYXNpY1N0cmluZywgc28gdGhhdCBpdHMKdGVtcGxhdGVkIG1ldGhvZHMgY2FuIHNp
bXBseSBmb3J3YXJkIHRvIHRoZSBiYXNlLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiBhIC5jcHAK
ZmlsZS4gT3RoZXJ3aXNlIHdlJ2QgbmVlZCB0byBleHBvc2UgdGhlIFN0cmluZyBpbXBsZW1lbnRh
dGlvbiBpbiB0aGUgaGVhZGVyCmJlY2F1c2UgU3RyaW5nIGlzIG5vdyB0ZW1wbGF0ZWQuIFRoaXMg
aXMgc29tZXdoYXQgc2ltaWxhciB0byB3aGF0IHN0ZDo6c3RyaW5nCmRvZXMgd2l0aCBzdGQ6OmJh
c2ljX3N0cmluZyAoaW4gYSB3YXkgdGhlIHBvaW50ZXIgdHJhaXRzIGFyZSBraW5kIG9mIGxpa2UK
c3RkOjpjaGFyX3RyYWl0cykuCgpBZGQgYSBwdWJsaWMgbm9uLXRlbXBsYXRlZCBiYXNlIGNsYXNz
IHRvIFN0cmluZywgU3RyaW5nTWFrZXIsIHdoaWNoIGhvbGRzIGFsbAp0aGUgc3RhdGljIG1ldGhv
ZHMgd2hpY2ggY2FuIGNyZWF0ZSBhIFN0cmluZy4gVGhpcyBhbHNvIGFsbG93cyBpbXBsZW1lbnRp
bmcKdGhpbmdzIGluIGEgLmNwcCBmaWxlLgoKTmVpdGhlciBiYXNlIGhhcyBhbnkgZGF0YSBtZW1i
ZXJzLgoKVGhlIGNoYXJhY3RlcnMoKSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gaXMgbm93IGEg
ZnJlZS1mdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUKU3RyaW5nIGJ5IGNvbnN0IHJlZmVyZW5jZS4g
VGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIG1lbWJlciB0ZW1wbGF0ZXMgY2FuJ3QgYmUKc3BlY2lh
bGl6ZWQgd2l0aG91dCBmdWxseSBzcGVjaWFsaXppbmcgdGhlIGNsYXNzIGFzIHdlbGwuIFRoaXMg
YWxzbyByZXF1aXJlcwpzb21lIGlzX3NhbWUgbWFnaWMgdG8gbWF0Y2ggTENoYXIgLyBVQ2hhciBj
b3JyZWN0bHkuCgpJIG1hZGUgc29tZSBmdW5jdGlvbnMgSnVzdCBXb3JrIHdpdGggcG9pc29uZWQg
c3RyaW5ncywgYW5kIG90aGVycyBub3QgKGUuZy4gYnkKdXNpbmcgU3RyaW5nIGluIHNvbWUgcGxh
Y2VzLCBvciBieSBub3QgaGF2aW5nIGFuIGV4dHJhIHRlbXBsYXRlIHBhcmFtZXRlciBmb3IKdGhl
IFZlY3RvcjxTdHJpbmc+IHR5cGUgcmV0dXJuZWQpLiBJZiB0aGlzIGlzIGV2ZXIgYW4gaXNzdWUg
YmVjYXVzZSB3ZSB3YW50IHRvCm1pZ3JhdGUgc3RyaW5ncyBmcm9tIG9uZSBwb2lzb24gdG8gYW5v
dGhlciB0aGVuIHdlIGNhbiBhZGQgc2ltcGxlIGhlbHBlcnMgb3IgYWRkCmEgdGVtcGxhdGUgcGFy
YW1ldGVyIHRvIHRoZSByZWxldmFudCBjb2RlLiBJJ20gd2FyeSBvZiBtYWtpbmcgdGhlIGNvZGUg
bW9yZQpjb21wbGV4IGlmIHdlIGRvbid0IHRyeSB0byBtaXggcG9pc29ucy4gVGhlIHJlYXNvbiBJ
IHRoaW5rIHRoaXMgaXMgY29ycmVjdCBpcwpiZWNhdXNlIHdlIG9ubHkgZXZlciB3YW50IHRvIHBv
aXNvbiBTdHJpbmcgd2hlbiBzdG9yaW5nIHRoZSBzdHJpbmcgaW4gYSBjbGFzcwp3aGljaCBpcyBh
dHRhY2tlci1jb250cm9sbGFibGUuIFdoZW4gZnVuY3Rpb25zIHBhc3Mgc3RyaW5ncyBhcm91bmQg
YW5kIHN0b3JlCnRoZW0gb24gdGhlIHN0YWNrIHdlIG1vc3RseSBqdXN0IHdhbnQgU3RyaW5nLCBu
byBwb2lzb24gbmVlZGVkLgoKSW5saW5lIGEgYnVuY2ggb2YgZnVuY3Rpb25zIG1hcmtlZCBhcyBu
ZWVkaW5nIGlubGluaW5nIGZyb20gYSBGSVhNRSBpbgpXVEZTdHJpbmcuY3BwIHRvIHRoZSBoZWFk
ZXIuIFRoZXkgd2VyZSBhbGwgb25lLWxpbmVycyB3aGljaCBjaGVjayBmb3IgbnVsbAptX2ltcGws
IGFuZCB0aGVuIGZvcndhcmQgdG8gU3RyaW5nSW1wbC4KClJlbW92ZSBDT01QSUxFUl9TVVBQT1JU
UyhDWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMpLCBpdCdzIHN1cHBvcnRlZCBieQph
bGwgY29tcGlsZXJzIFdlYktpdCBzdXBwb3J0cyAoaXQncyBhIEMrKzExIGZlYXR1cmUsICpkZXRl
Y3Rpb24qIG9mIGl0IHdpdGgKX19oYXNfZXh0ZW5zaW9uIHdhcyBhZGRlZCB0byBjbGFuZyBvbiBN
YXkgMTN0aCAyMDExLCBhbmQgVlMyMDE1IC8gR0NDIHN1cHBvcnQKaXQpLgoKTWFyayBhIGJ1bmNo
IG9mIFN0cmluZ0ltcGwgYXMgY29uc3QsIGFuZCBvdGhlcnMgbm90LiBUaGlzIGNvbnN0IGJ1c2lu
ZXNzIHdpdGgKU3RyaW5nSW1wbCBpcyByZWFsbHkgYSBtZXNzIChhcyB0aGUgRklYTUUgaW4gdGhl
cmUgYXR0ZXN0cykhCgpSZW1vdmUgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGFzIHJlcXVlc3RlZCBi
eSBhIEZJWE1FLCBhbmQgdXNlIFdURl9FWFBPUlRfUFJJVkFURQppbnN0ZWFkLiBOb3RlIHRoYXQg
bWFueSBvZiB0aGUgZnVuY3Rpb25zIHdoaWNoIHVzZWQgdG8gYmUgZXhwb3J0ZWQgYXJlIG5vdwpz
aW1wbGUgaW5saW5lIGZ1bmN0aW9ucyB3aGljaCB1bnBvaXNvbiBhbmQgZm9yd2FyZCB0byBhbiBp
bXBsZW1lbnRhdGlvbi4gVGhleQpkb24ndCBuZWVkIHRvIGJlIGV4cG9ydGVkIGFueW1vcmUsIGJ1
dCB3aGF0IHRoZXkgZm9yd2FyZCB0byBkb2VzLgoKSW50cm9kdWNlIFdURl9MQVpZX0lOU1RBTlRJ
QVRFIHRvIGZvcndhcmQtZGVjbGFyZSBmdW5jdGlvbnMgd2hpY2gganVzdCBwYXNzCnBhcmFtZXRl
cnMgdG8gYW5vdGhlciBmdW5jdGlvbiwgYW5kIHJldHVybiB3aGF0ZXZlciB0aGF0IG90aGVyIGZ1
bmN0aW9uCnJldHVybmVkLCB3aXRob3V0IGhhdmluZyB0byBpbmNsdWRlIHRoZSByZXR1cm4ncyAv
IHBhcmFtZXRlcnMnIHR5cGUgaGVhZGVyLiBUaGlzCm1lYW5zIHRoYXQgV1RGU3RyaW5nLmggZG9l
c24ndCBuZWVkIHRvIGluY2x1ZGUgUmV0YWluUHRyLmggYW5kIENTdHJpbmcuaC4KCm1lc3NhZ2Vz
LnB5OiBDaGFuZ2UgV2ViS2l0IGdlbmVyYXRlZCBoZWFkZXJzIHNvIHRoYXQgdGhleSBwcm9wZXJs
eSBpbmNsdWRlCkZvcndhcmQuaCBpbnN0ZWFkIG9mIGZvcndhcmQtZGVjbGFyaW5nIFN0cmluZy4K
CkFkZCBhIGBjaGFyYWN0ZXJBdGAgbWV0aG9kIHRvIFN0cmluZ0ltcGwgdG8gbWF0Y2ggdGhlIG9u
ZSBpbiBTdHJpbmcgYW5kIG1ha2UgaXQKZWFzaWVyIHRvIG1pZ3JhdGUuIEl0IGFscmVhZHkgaGFz
IGBhdGAsIHdoaWNoIGFzc2VydHMgb24gb3ZlcmFzc2VydHMgb24gb3ZlcmZsb3cKaW5zdGVhZCBv
ZiByZXR1cm5pbmcgMCAoYXMgU3RyaW5nJ3MgYGNoYXJhY3RlckF0YCBkb2VzKS4KCkFsbG93IGJ1
aWxkaW5nIGFuZCBjb25jYXRlbmF0aW5nIHN0cmluZ3Mgd2l0aCBTdHJpbmdJbXBsKiwgd2hpY2gg
Y29tZXMgaW4gaGFuZHkKd2hlbiB3ZSBwYXNzIHRoZW0gYXJvdW5kIGEgYml0IG1vcmUgdG8gYXZv
aWQgdGhlIHBvaXNvbmVkIG1lbWJlcnMuCgpPdmVyYWxsIHRoaXMgcGF0Y2ggc2hvdWxkIGRvIGV4
YWN0bHkgbm90aGluZy4gQWxsIGNvZGUgc3RpbGwgdXNlcyB1bnBvaXNvbmVkCnN0cmluZ3MsIGFu
ZCBJIGhhdmUgYSBmb2xsb3ctdXAgcGF0Y2ggd2hpY2ggcG9pc29ucyBzZWxlY3Qgc3RyaW5ncyBp
biBKU0MuIEknbGwKcG9zdCB0aGF0IHBhdGNoIHNlcGFyYXRlbHkgYXMgaXQncyBxdWl0ZSBiaWcg
YW5kIEkgd2FudCB0byBpc29sYXRlIGFueQpyZWdyZXNzaW9ucyBJIG1heSBpbnRyb2R1Y2UuCgpJ
J3ZlIHJ1biBhIGJ1bmNoIG9mIHRlc3RzIGFuZCB0aGlzIGxvb2tzIHBlcmYgbmV1dHJhbCwgYW5k
IHNvIGRvZXMgbXkgSlNDIHN0cmluZwpwb2lzb25pbmcgcGF0Y2ggc28gZmFyLiBGcm9tLXNjcmF0
Y2ggYnVpbGQgdGltZSBmb3IgYWxsIG9mIFNhZmFyaSBzZWVtcyB0bwoqZGVjcmVhc2UqIGJ5IDE1
JSBvbiBteSBNQlAsIHdoaWNoIHdhcyBzdXJwcmlzaW5nLCBzbyBJJ20gZ3Vlc3Npbmcgd2UgbWln
aHQgaGF2ZQpsYXJnZSB2YXJpYW5jZS4KLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICB8IDEwMiArKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVDb252ZXJzaW9uLmggICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcCAgfCAgIDMgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oICAgICAgICAgIHwgICA3ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGFyc2VyLmggICAgICAgICAgICB8ICAgMiArLQogU291
cmNlL1dURi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMDEgKysr
KysrCiBTb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMyAtCiBTb3VyY2UvV1RGL3d0Zi9FeHBvcnRNYWNyb3MuaCAgICAgICAgICAgICAgICAgICAg
ICB8ICAgMyArLQogU291cmNlL1dURi93dGYvRm9yd2FyZC5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgNjQgKy0KIFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaCAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvV1RGL3d0Zi9Qb2lzb25lZC5oICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMyArLQogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uY3BwICAg
ICAgICAgICAgICAgICAgICAgfCAgIDUgLQogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaCAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTIgKy0KIFNvdXJjZS9XVEYvd3RmL1JlZi5oICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0IC0KIFNvdXJjZS9XVEYvd3RmL1JlZlB0ci5o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0IC0KIFNvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbWljU3RyaW5nLmggICAgICAgICAgICAgICAgIHwgIDczICstCiBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21pY1N0cmluZ0ltcGwuaCAgICAgICAgICAgICB8ICAzMCArLQogU291cmNlL1dURi93
dGYvdGV4dC9DU3RyaW5nLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDEgLQogU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oICAgICAgICAgICAgICAgIHwgIDE3ICstCiBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmggICAgICAgICAgICB8ICAxOCAr
CiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwICAgICAgICAgICAgICAgICB8ICAx
NiArLQogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggICAgICAgICAgICAgICAgICAg
fCAyMTEgKysrLS0tCiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaCAgICAgICAgICAg
ICAgICAgICB8ICAzNiArLQogU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmggICAgICAg
ICAgICAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCAg
ICAgICAgICAgICAgICAgIHwgNzEzICsrKysrKystLS0tLS0tLS0tLS0tCiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1dURlN0cmluZy5oICAgICAgICAgICAgICAgICAgICB8IDczMiArKysrKysrKysrKyst
LS0tLS0tLS0KIFNvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwICAgICAgICAgICAg
ICAgIHwgIDM0ICstCiBTb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAgICAg
ICAgICAgICB8ICAgNiArLQogU291cmNlL1dURi93dGYvdGV4dC9tYWMvU3RyaW5nTWFjLm1tICAg
ICAgICAgICAgICAgfCAgMjYgKy0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgMTI1ICsrKysKIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hIZWFkZXJzLmNwcCAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVEZWNsYXJhdGlvbi5jcHAgICAgICAgICB8ICAgMiArLQogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhcmlhYmxlRGF0YS5jcHAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2Nz
cy9tYWtlcHJvcC5wbCAgICAgICAgICAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvV2ViQ29y
ZS9kb20vRE9NU3RyaW5nTGlzdC5jcHAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwICAgICAgIHwgICAyICstCiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCB8ICAgMiAr
LQogU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCAgICAgICAgfCAg
IDIgKy0KIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgICAg
IHwgICAyICstCiAuLi4vcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgg
ICAgICB8ICAgNSArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZS5oICAgICAg
ICAgICAgICAgfCAgIDUgKy0KIC4uLi9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlQVZLaXQuaCAgIHwgICA1ICstCiAuLi4vcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0LmggICB8ICAgNSArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bh
dGhXYWxrZXIuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmggICAgIHwgICA2ICstCiBTb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOTggKysrCiAuLi4vU2NyaXB0cy93
ZWJraXQvTGVnYWN5TWVzc2FnZXMtZXhwZWN0ZWQuaCAgICAgICB8ICAgNCAtCiBTb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L01lc3NhZ2VzLWV4cGVjdGVkLmggICB8ICAgNCAtCiAuLi4vU2Ny
aXB0cy93ZWJraXQvTWVzc2FnZXNTdXBlcmNsYXNzLWV4cGVjdGVkLmggICB8ICAgNSArLQogU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSAgICAgICAgICAgfCAgIDIgKwog
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgfCAgOTUg
KysrCiAuLi4vV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmggICB8
ICAgNSArLQogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgOTYgKysrCiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwICAg
ICAgICAgICB8ICAgNiArLQogNTggZmlsZXMgY2hhbmdlZCwgMTc4MCBpbnNlcnRpb25zKCspLCAx
MDczIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDAyZDAyN2IuLmM3
ODU1YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxOC0w
My0yOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBX
VEY6OlN0cmluZyBwb2lzb25hYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODQxNjQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM5MDIwNjc3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgV1RG
OjpTdHJpbmcgcG9pc29uYWJsZQorCisgICAgICAgIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBwb2lz
b24gV1RGOjpTdHJpbmcgdGhlIHNhbWUgd2F5IHdlIGNhbiBwb2lzb24gUmVmPD4sCisgICAgICAg
IFJlZlB0cjw+LCBXcml0ZUJhcnJpZXI8PiBhbmQgZnJpZW5kcyB1c2luZyB3dGYvUG9pc29uZWQu
aC4gSW4gdGhlb3J5IHRoaXMgaXMKKyAgICAgICAgdmVyeSBzaW1wbGU6IFN0cmluZyBvbmx5IGhv
bGRzIGEgUmVmUHRyPFN0cmluZ0ltcGw+LCBhbmQgYWxsIHdlIGhhdmUgdG8gZG8gaXMKKyAgICAg
ICAgcGFzcyBhIHBvaXNvbmVkIHBvaW50ZXIgdHJhaXQgdG8gdGhlIGNvbnRhaW5lZCBSZWZQdHIg
YW5kIGNhbGwgaXQgYSBkYXkuIEluCisgICAgICAgIHByYWN0aWNlIHdlIGhhdmUgdGhpcyBwYXRj
aC4KKworICAgICAgICBNYWtlIFdURiBTdHJpbmcgdGVtcGxhdGVkLCB3aXRoIER1bXBQdHJUcmFp
dHM8U3RyaW5nSW1wbD4gYXMgdGhlIGRlZmF1bHQuIFRoaXMKKyAgICAgICAgZnVuY3Rpb25hbGx5
IGNoYW5nZXMgbm90aGluZywgYnV0IGFsbG93cyBwb2lzb25pbmcgdG8gdHJpY2tsZSB0byBTdHJp
bmcncworICAgICAgICBSZWZQdHIuIEluIHR1cm4gdGhpcyByZXF1aXJlcyB1cGRhdGluZyBhbGwg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgU3RyaW5nLiBUaGlzCisgICAgICAgIGlzIGVhc2llciB0
byBkbyBpbiBGb3J3YXJkLmggKHdoaWNoIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0
aGUKKyAgICAgICAgdGVtcGxhdGUpLCBhbmQgdG8gdXBkYXRlIGFsbCBjb2RlIHdoaWNoIGZvd2Fy
ZC1kZWNsYXJlcyBTdHJpbmcgdG8gaW5zdGVhZAorICAgICAgICBpbmNsdWRlIEZvcndhcmQuaC4K
KworICAgICAgICBBZGQgYSBwcml2YXRlIG5vbi10ZW1wbGF0ZWQgYmFzZSBjbGFzcyB0byBTdHJp
bmcsIEJhc2ljU3RyaW5nLCBzbyB0aGF0IGl0cworICAgICAgICB0ZW1wbGF0ZWQgbWV0aG9kcyBj
YW4gc2ltcGx5IGZvcndhcmQgdG8gdGhlIGJhc2UsIHdoaWNoIGlzIGltcGxlbWVudGVkIGluIGEg
LmNwcAorICAgICAgICBmaWxlLiBPdGhlcndpc2Ugd2UnZCBuZWVkIHRvIGV4cG9zZSB0aGUgU3Ry
aW5nIGltcGxlbWVudGF0aW9uIGluIHRoZSBoZWFkZXIKKyAgICAgICAgYmVjYXVzZSBTdHJpbmcg
aXMgbm93IHRlbXBsYXRlZC4gVGhpcyBpcyBzb21ld2hhdCBzaW1pbGFyIHRvIHdoYXQgc3RkOjpz
dHJpbmcKKyAgICAgICAgZG9lcyB3aXRoIHN0ZDo6YmFzaWNfc3RyaW5nIChpbiBhIHdheSB0aGUg
cG9pbnRlciB0cmFpdHMgYXJlIGtpbmQgb2YgbGlrZQorICAgICAgICBzdGQ6OmNoYXJfdHJhaXRz
KS4KKworICAgICAgICBBZGQgYSBwdWJsaWMgbm9uLXRlbXBsYXRlZCBiYXNlIGNsYXNzIHRvIFN0
cmluZywgU3RyaW5nTWFrZXIsIHdoaWNoIGhvbGRzIGFsbAorICAgICAgICB0aGUgc3RhdGljIG1l
dGhvZHMgd2hpY2ggY2FuIGNyZWF0ZSBhIFN0cmluZy4gVGhpcyBhbHNvIGFsbG93cyBpbXBsZW1l
bnRpbmcKKyAgICAgICAgdGhpbmdzIGluIGEgLmNwcCBmaWxlLgorCisgICAgICAgIE5laXRoZXIg
YmFzZSBoYXMgYW55IGRhdGEgbWVtYmVycy4KKworICAgICAgICBUaGUgY2hhcmFjdGVycygpIHRl
bXBsYXRlIG1lbWJlciBmdW5jdGlvbiBpcyBub3cgYSBmcmVlLWZ1bmN0aW9uIHdoaWNoIHRha2Vz
IHRoZQorICAgICAgICBTdHJpbmcgYnkgY29uc3QgcmVmZXJlbmNlLiBUaGlzIGlzIHJlcXVpcmVk
IGJlY2F1c2UgbWVtYmVyIHRlbXBsYXRlcyBjYW4ndCBiZQorICAgICAgICBzcGVjaWFsaXplZCB3
aXRob3V0IGZ1bGx5IHNwZWNpYWxpemluZyB0aGUgY2xhc3MgYXMgd2VsbC4gVGhpcyBhbHNvIHJl
cXVpcmVzCisgICAgICAgIHNvbWUgaXNfc2FtZSBtYWdpYyB0byBtYXRjaCBMQ2hhciAvIFVDaGFy
IGNvcnJlY3RseS4KKworICAgICAgICBJIG1hZGUgc29tZSBmdW5jdGlvbnMgSnVzdCBXb3JrIHdp
dGggcG9pc29uZWQgc3RyaW5ncywgYW5kIG90aGVycyBub3QgKGUuZy4gYnkKKyAgICAgICAgdXNp
bmcgU3RyaW5nIGluIHNvbWUgcGxhY2VzLCBvciBieSBub3QgaGF2aW5nIGFuIGV4dHJhIHRlbXBs
YXRlIHBhcmFtZXRlciBmb3IKKyAgICAgICAgdGhlIFZlY3RvcjxTdHJpbmc+IHR5cGUgcmV0dXJu
ZWQpLiBJZiB0aGlzIGlzIGV2ZXIgYW4gaXNzdWUgYmVjYXVzZSB3ZSB3YW50IHRvCisgICAgICAg
IG1pZ3JhdGUgc3RyaW5ncyBmcm9tIG9uZSBwb2lzb24gdG8gYW5vdGhlciB0aGVuIHdlIGNhbiBh
ZGQgc2ltcGxlIGhlbHBlcnMgb3IgYWRkCisgICAgICAgIGEgdGVtcGxhdGUgcGFyYW1ldGVyIHRv
IHRoZSByZWxldmFudCBjb2RlLiBJJ20gd2FyeSBvZiBtYWtpbmcgdGhlIGNvZGUgbW9yZQorICAg
ICAgICBjb21wbGV4IGlmIHdlIGRvbid0IHRyeSB0byBtaXggcG9pc29ucy4gVGhlIHJlYXNvbiBJ
IHRoaW5rIHRoaXMgaXMgY29ycmVjdCBpcworICAgICAgICBiZWNhdXNlIHdlIG9ubHkgZXZlciB3
YW50IHRvIHBvaXNvbiBTdHJpbmcgd2hlbiBzdG9yaW5nIHRoZSBzdHJpbmcgaW4gYSBjbGFzcwor
ICAgICAgICB3aGljaCBpcyBhdHRhY2tlci1jb250cm9sbGFibGUuIFdoZW4gZnVuY3Rpb25zIHBh
c3Mgc3RyaW5ncyBhcm91bmQgYW5kIHN0b3JlCisgICAgICAgIHRoZW0gb24gdGhlIHN0YWNrIHdl
IG1vc3RseSBqdXN0IHdhbnQgU3RyaW5nLCBubyBwb2lzb24gbmVlZGVkLgorCisgICAgICAgIElu
bGluZSBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBtYXJrZWQgYXMgbmVlZGluZyBpbmxpbmluZyBmcm9t
IGEgRklYTUUgaW4KKyAgICAgICAgV1RGU3RyaW5nLmNwcCB0byB0aGUgaGVhZGVyLiBUaGV5IHdl
cmUgYWxsIG9uZS1saW5lcnMgd2hpY2ggY2hlY2sgZm9yIG51bGwKKyAgICAgICAgbV9pbXBsLCBh
bmQgdGhlbiBmb3J3YXJkIHRvIFN0cmluZ0ltcGwuCisKKyAgICAgICAgUmVtb3ZlIENPTVBJTEVS
X1NVUFBPUlRTKENYWF9SRUZFUkVOQ0VfUVVBTElGSUVEX0ZVTkNUSU9OUyksIGl0J3Mgc3VwcG9y
dGVkIGJ5CisgICAgICAgIGFsbCBjb21waWxlcnMgV2ViS2l0IHN1cHBvcnRzIChpdCdzIGEgQysr
MTEgZmVhdHVyZSwgKmRldGVjdGlvbiogb2YgaXQgd2l0aAorICAgICAgICBfX2hhc19leHRlbnNp
b24gd2FzIGFkZGVkIHRvIGNsYW5nIG9uIE1heSAxM3RoIDIwMTEsIGFuZCBWUzIwMTUgLyBHQ0Mg
c3VwcG9ydAorICAgICAgICBpdCkuCisKKyAgICAgICAgTWFyayBhIGJ1bmNoIG9mIFN0cmluZ0lt
cGwgYXMgY29uc3QsIGFuZCBvdGhlcnMgbm90LiBUaGlzIGNvbnN0IGJ1c2luZXNzIHdpdGgKKyAg
ICAgICAgU3RyaW5nSW1wbCBpcyByZWFsbHkgYSBtZXNzIChhcyB0aGUgRklYTUUgaW4gdGhlcmUg
YXR0ZXN0cykhCisKKyAgICAgICAgUmVtb3ZlIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBhcyByZXF1
ZXN0ZWQgYnkgYSBGSVhNRSwgYW5kIHVzZSBXVEZfRVhQT1JUX1BSSVZBVEUKKyAgICAgICAgaW5z
dGVhZC4gTm90ZSB0aGF0IG1hbnkgb2YgdGhlIGZ1bmN0aW9ucyB3aGljaCB1c2VkIHRvIGJlIGV4
cG9ydGVkIGFyZSBub3cKKyAgICAgICAgc2ltcGxlIGlubGluZSBmdW5jdGlvbnMgd2hpY2ggdW5w
b2lzb24gYW5kIGZvcndhcmQgdG8gYW4gaW1wbGVtZW50YXRpb24uIFRoZXkKKyAgICAgICAgZG9u
J3QgbmVlZCB0byBiZSBleHBvcnRlZCBhbnltb3JlLCBidXQgd2hhdCB0aGV5IGZvcndhcmQgdG8g
ZG9lcy4KKworICAgICAgICBJbnRyb2R1Y2UgV1RGX0xBWllfSU5TVEFOVElBVEUgdG8gZm9yd2Fy
ZC1kZWNsYXJlIGZ1bmN0aW9ucyB3aGljaCBqdXN0IHBhc3MKKyAgICAgICAgcGFyYW1ldGVycyB0
byBhbm90aGVyIGZ1bmN0aW9uLCBhbmQgcmV0dXJuIHdoYXRldmVyIHRoYXQgb3RoZXIgZnVuY3Rp
b24KKyAgICAgICAgcmV0dXJuZWQsIHdpdGhvdXQgaGF2aW5nIHRvIGluY2x1ZGUgdGhlIHJldHVy
bidzIC8gcGFyYW1ldGVycycgdHlwZSBoZWFkZXIuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCBX
VEZTdHJpbmcuaCBkb2Vzbid0IG5lZWQgdG8gaW5jbHVkZSBSZXRhaW5QdHIuaCBhbmQgQ1N0cmlu
Zy5oLgorCisgICAgICAgIG1lc3NhZ2VzLnB5OiBDaGFuZ2UgV2ViS2l0IGdlbmVyYXRlZCBoZWFk
ZXJzIHNvIHRoYXQgdGhleSBwcm9wZXJseSBpbmNsdWRlCisgICAgICAgIEZvcndhcmQuaCBpbnN0
ZWFkIG9mIGZvcndhcmQtZGVjbGFyaW5nIFN0cmluZy4KKworICAgICAgICBBZGQgYSBgY2hhcmFj
dGVyQXRgIG1ldGhvZCB0byBTdHJpbmdJbXBsIHRvIG1hdGNoIHRoZSBvbmUgaW4gU3RyaW5nIGFu
ZCBtYWtlIGl0CisgICAgICAgIGVhc2llciB0byBtaWdyYXRlLiBJdCBhbHJlYWR5IGhhcyBgYXRg
LCB3aGljaCBhc3NlcnRzIG9uIG92ZXJhc3NlcnRzIG9uIG92ZXJmbG93CisgICAgICAgIGluc3Rl
YWQgb2YgcmV0dXJuaW5nIDAgKGFzIFN0cmluZydzIGBjaGFyYWN0ZXJBdGAgZG9lcykuCisKKyAg
ICAgICAgQWxsb3cgYnVpbGRpbmcgYW5kIGNvbmNhdGVuYXRpbmcgc3RyaW5ncyB3aXRoIFN0cmlu
Z0ltcGwqLCB3aGljaCBjb21lcyBpbiBoYW5keQorICAgICAgICB3aGVuIHdlIHBhc3MgdGhlbSBh
cm91bmQgYSBiaXQgbW9yZSB0byBhdm9pZCB0aGUgcG9pc29uZWQgbWVtYmVycy4KKworICAgICAg
ICBPdmVyYWxsIHRoaXMgcGF0Y2ggc2hvdWxkIGRvIGV4YWN0bHkgbm90aGluZy4gQWxsIGNvZGUg
c3RpbGwgdXNlcyB1bnBvaXNvbmVkCisgICAgICAgIHN0cmluZ3MsIGFuZCBJIGhhdmUgYSBmb2xs
b3ctdXAgcGF0Y2ggd2hpY2ggcG9pc29ucyBzZWxlY3Qgc3RyaW5ncyBpbiBKU0MuIEknbGwKKyAg
ICAgICAgcG9zdCB0aGF0IHBhdGNoIHNlcGFyYXRlbHkgYXMgaXQncyBxdWl0ZSBiaWcgYW5kIEkg
d2FudCB0byBpc29sYXRlIGFueQorICAgICAgICByZWdyZXNzaW9ucyBJIG1heSBpbnRyb2R1Y2Uu
CisKKyAgICAgICAgSSd2ZSBydW4gYSBidW5jaCBvZiB0ZXN0cyBhbmQgdGhpcyBsb29rcyBwZXJm
IG5ldXRyYWwsIGFuZCBzbyBkb2VzIG15IEpTQyBzdHJpbmcKKyAgICAgICAgcG9pc29uaW5nIHBh
dGNoIHNvIGZhci4gRnJvbS1zY3JhdGNoIGJ1aWxkIHRpbWUgZm9yIGFsbCBvZiBTYWZhcmkgc2Vl
bXMgdG8KKyAgICAgICAgKmRlY3JlYXNlKiBieSAxNSUgb24gbXkgTUJQLCB3aGljaCB3YXMgc3Vy
cHJpc2luZywgc28gSSdtIGd1ZXNzaW5nIHdlIG1pZ2h0IGhhdmUKKyAgICAgICAgbGFyZ2UgdmFy
aWFuY2UuCisKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb252ZXJzaW9uLmg6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHA6CisgICAgICAgIChKU0M6OmpvaW5TdHJpbmdzKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNw
bGl0U3RyaW5nQnlPbmVDaGFyYWN0ZXJJbXBsKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorICAgICAgICAqIHlhcnIvWWFyclBhcnNlci5oOgorICAgICAgICAoSlNDOjpZYXJyOjpQ
YXJzZXI6OlBhcnNlcik6CisKIDIwMTgtMDMtMjggIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0
QGFwcGxlLmNvbT4KIAogICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nIHN0b3BzIG9uIGFy
aXRobWV0aWMgb3ZlcmZsb3cgaW5zdGVhZCBvZiBwcm9wYWdhdGluZyBpdCB1cHdhcmRzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29udmVyc2lvbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uaAppbmRleCBkN2I3
NjNlLi44ZWFmYTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29udmVyc2lvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b252ZXJzaW9uLmgKQEAgLTI0LDEyICsyNCw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvR3JlZ29yaWFuRGF0ZVRpbWUuaD4KIAot
bmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQogbmFt
ZXNwYWNlIEpTQyB7CiAKIGVudW0gRGF0ZVRpbWVGb3JtYXQgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCmluZGV4IGVhOTMwYjUuLjViZGQ5
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9p
bmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5l
ci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgam9pblN0cmluZ3Mo
Y29uc3QgVmVjdG9yPFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZz4mIHMKICAgICAgICAg
ICAgIGFwcGVuZFN0cmluZ1RvRGF0YShkYXRhLCBzdHJpbmdzW2ldLnZpZXcpOwogICAgICAgICB9
CiAgICAgfQotICAgIEFTU0VSVChkYXRhID09IHJlc3VsdC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5
cGU+KCkgKyBqb2luZWRMZW5ndGgpOworICAgIEFTU0VSVChkYXRhID09IFdURjo6Y2hhcmFjdGVy
czxDaGFyYWN0ZXJUeXBlPihyZXN1bHQpICsgam9pbmVkTGVuZ3RoKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAppbmRleCBhMGQzNjAxLi5kZTFlMjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ29sbGF0b3IuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTEyNTcsNyArMTI1OCw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIGJvb2wgc3BsaXRTdHJpbmdCeU9uZUNoYXJhY3RlckltcGwoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5CiAKICAgICAvLyAxMi4gTGV0IHEgPSBwLgogICAgIHNpemVfdCBtYXRjaFBvc2l0
aW9uOwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMgPSBzdHJpbmctPmNoYXJh
Y3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0
ZXJzID0gV1RGOjpjaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCpzdHJpbmcpOwogICAgIC8vIDEz
LiBSZXBlYXQsIHdoaWxlIHEgIT0gcwogICAgIC8vICAgYS4gQ2FsbCBTcGxpdE1hdGNoKFMsIHEs
IFIpIGFuZCBsZXQgeiBiZSBpdHMgTWF0Y2hSZXN1bHQgcmVzdWx0LgogICAgIC8vICAgYi4gSWYg
eiBpcyBmYWlsdXJlLCB0aGVuIGxldCBxID0gcSsxLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAppbmRleCAxMTZmZjNhLi5iYzM0MTIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtNDMsMTQgKzQzLDkgQEAKICNpbmNsdWRl
ICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllcklubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgVW5pcXVlZFN0cmlu
Z0ltcGw7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
RGVmZXJHQzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXJzZXIuaAppbmRleCBmMTZm
MTFmLi44NjQ5MjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
UGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhcnNlci5oCkBA
IC0yMTIsNyArMjEyLDcgQEAgcHJpdmF0ZToKICAgICBQYXJzZXIoRGVsZWdhdGUmIGRlbGVnYXRl
LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIGJvb2wgaXNVbmljb2RlLCB1bnNpZ25lZCBiYWNrUmVm
ZXJlbmNlTGltaXQpCiAgICAgICAgIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAgICAgLCBt
X2JhY2tSZWZlcmVuY2VMaW1pdChiYWNrUmVmZXJlbmNlTGltaXQpCi0gICAgICAgICwgbV9kYXRh
KHBhdHRlcm4uY2hhcmFjdGVyczxDaGFyVHlwZT4oKSkKKyAgICAgICAgLCBtX2RhdGEoV1RGOjpj
aGFyYWN0ZXJzPENoYXJUeXBlPihwYXR0ZXJuKSkKICAgICAgICAgLCBtX3NpemUocGF0dGVybi5s
ZW5ndGgoKSkKICAgICAgICAgLCBtX2lzVW5pY29kZShpc1VuaWNvZGUpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBm
NGM2NTE5Li5iZTU4MzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAxOC0wMy0yOSAgSkYgQmFz
dGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBXVEY6OlN0cmluZyBw
b2lzb25hYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODQxNjQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM5MDIwNjc3PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgV1RGOjpTdHJpbmcgcG9p
c29uYWJsZQorCisgICAgICAgIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBwb2lzb24gV1RGOjpTdHJp
bmcgdGhlIHNhbWUgd2F5IHdlIGNhbiBwb2lzb24gUmVmPD4sCisgICAgICAgIFJlZlB0cjw+LCBX
cml0ZUJhcnJpZXI8PiBhbmQgZnJpZW5kcyB1c2luZyB3dGYvUG9pc29uZWQuaC4gSW4gdGhlb3J5
IHRoaXMgaXMKKyAgICAgICAgdmVyeSBzaW1wbGU6IFN0cmluZyBvbmx5IGhvbGRzIGEgUmVmUHRy
PFN0cmluZ0ltcGw+LCBhbmQgYWxsIHdlIGhhdmUgdG8gZG8gaXMKKyAgICAgICAgcGFzcyBhIHBv
aXNvbmVkIHBvaW50ZXIgdHJhaXQgdG8gdGhlIGNvbnRhaW5lZCBSZWZQdHIgYW5kIGNhbGwgaXQg
YSBkYXkuIEluCisgICAgICAgIHByYWN0aWNlIHdlIGhhdmUgdGhpcyBwYXRjaC4KKworICAgICAg
ICBNYWtlIFdURiBTdHJpbmcgdGVtcGxhdGVkLCB3aXRoIER1bXBQdHJUcmFpdHM8U3RyaW5nSW1w
bD4gYXMgdGhlIGRlZmF1bHQuIFRoaXMKKyAgICAgICAgZnVuY3Rpb25hbGx5IGNoYW5nZXMgbm90
aGluZywgYnV0IGFsbG93cyBwb2lzb25pbmcgdG8gdHJpY2tsZSB0byBTdHJpbmcncworICAgICAg
ICBSZWZQdHIuIEluIHR1cm4gdGhpcyByZXF1aXJlcyB1cGRhdGluZyBhbGwgZm9yd2FyZCBkZWNs
YXJhdGlvbnMgb2YgU3RyaW5nLiBUaGlzCisgICAgICAgIGlzIGVhc2llciB0byBkbyBpbiBGb3J3
YXJkLmggKHdoaWNoIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUKKyAgICAgICAg
dGVtcGxhdGUpLCBhbmQgdG8gdXBkYXRlIGFsbCBjb2RlIHdoaWNoIGZvd2FyZC1kZWNsYXJlcyBT
dHJpbmcgdG8gaW5zdGVhZAorICAgICAgICBpbmNsdWRlIEZvcndhcmQuaC4KKworICAgICAgICBB
ZGQgYSBwcml2YXRlIG5vbi10ZW1wbGF0ZWQgYmFzZSBjbGFzcyB0byBTdHJpbmcsIEJhc2ljU3Ry
aW5nLCBzbyB0aGF0IGl0cworICAgICAgICB0ZW1wbGF0ZWQgbWV0aG9kcyBjYW4gc2ltcGx5IGZv
cndhcmQgdG8gdGhlIGJhc2UsIHdoaWNoIGlzIGltcGxlbWVudGVkIGluIGEgLmNwcAorICAgICAg
ICBmaWxlLiBPdGhlcndpc2Ugd2UnZCBuZWVkIHRvIGV4cG9zZSB0aGUgU3RyaW5nIGltcGxlbWVu
dGF0aW9uIGluIHRoZSBoZWFkZXIKKyAgICAgICAgYmVjYXVzZSBTdHJpbmcgaXMgbm93IHRlbXBs
YXRlZC4gVGhpcyBpcyBzb21ld2hhdCBzaW1pbGFyIHRvIHdoYXQgc3RkOjpzdHJpbmcKKyAgICAg
ICAgZG9lcyB3aXRoIHN0ZDo6YmFzaWNfc3RyaW5nIChpbiBhIHdheSB0aGUgcG9pbnRlciB0cmFp
dHMgYXJlIGtpbmQgb2YgbGlrZQorICAgICAgICBzdGQ6OmNoYXJfdHJhaXRzKS4KKworICAgICAg
ICBBZGQgYSBwdWJsaWMgbm9uLXRlbXBsYXRlZCBiYXNlIGNsYXNzIHRvIFN0cmluZywgU3RyaW5n
TWFrZXIsIHdoaWNoIGhvbGRzIGFsbAorICAgICAgICB0aGUgc3RhdGljIG1ldGhvZHMgd2hpY2gg
Y2FuIGNyZWF0ZSBhIFN0cmluZy4gVGhpcyBhbHNvIGFsbG93cyBpbXBsZW1lbnRpbmcKKyAgICAg
ICAgdGhpbmdzIGluIGEgLmNwcCBmaWxlLgorCisgICAgICAgIE5laXRoZXIgYmFzZSBoYXMgYW55
IGRhdGEgbWVtYmVycy4KKworICAgICAgICBUaGUgY2hhcmFjdGVycygpIHRlbXBsYXRlIG1lbWJl
ciBmdW5jdGlvbiBpcyBub3cgYSBmcmVlLWZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZQorICAgICAg
ICBTdHJpbmcgYnkgY29uc3QgcmVmZXJlbmNlLiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgbWVt
YmVyIHRlbXBsYXRlcyBjYW4ndCBiZQorICAgICAgICBzcGVjaWFsaXplZCB3aXRob3V0IGZ1bGx5
IHNwZWNpYWxpemluZyB0aGUgY2xhc3MgYXMgd2VsbC4gVGhpcyBhbHNvIHJlcXVpcmVzCisgICAg
ICAgIHNvbWUgaXNfc2FtZSBtYWdpYyB0byBtYXRjaCBMQ2hhciAvIFVDaGFyIGNvcnJlY3RseS4K
KworICAgICAgICBJIG1hZGUgc29tZSBmdW5jdGlvbnMgSnVzdCBXb3JrIHdpdGggcG9pc29uZWQg
c3RyaW5ncywgYW5kIG90aGVycyBub3QgKGUuZy4gYnkKKyAgICAgICAgdXNpbmcgU3RyaW5nIGlu
IHNvbWUgcGxhY2VzLCBvciBieSBub3QgaGF2aW5nIGFuIGV4dHJhIHRlbXBsYXRlIHBhcmFtZXRl
ciBmb3IKKyAgICAgICAgdGhlIFZlY3RvcjxTdHJpbmc+IHR5cGUgcmV0dXJuZWQpLiBJZiB0aGlz
IGlzIGV2ZXIgYW4gaXNzdWUgYmVjYXVzZSB3ZSB3YW50IHRvCisgICAgICAgIG1pZ3JhdGUgc3Ry
aW5ncyBmcm9tIG9uZSBwb2lzb24gdG8gYW5vdGhlciB0aGVuIHdlIGNhbiBhZGQgc2ltcGxlIGhl
bHBlcnMgb3IgYWRkCisgICAgICAgIGEgdGVtcGxhdGUgcGFyYW1ldGVyIHRvIHRoZSByZWxldmFu
dCBjb2RlLiBJJ20gd2FyeSBvZiBtYWtpbmcgdGhlIGNvZGUgbW9yZQorICAgICAgICBjb21wbGV4
IGlmIHdlIGRvbid0IHRyeSB0byBtaXggcG9pc29ucy4gVGhlIHJlYXNvbiBJIHRoaW5rIHRoaXMg
aXMgY29ycmVjdCBpcworICAgICAgICBiZWNhdXNlIHdlIG9ubHkgZXZlciB3YW50IHRvIHBvaXNv
biBTdHJpbmcgd2hlbiBzdG9yaW5nIHRoZSBzdHJpbmcgaW4gYSBjbGFzcworICAgICAgICB3aGlj
aCBpcyBhdHRhY2tlci1jb250cm9sbGFibGUuIFdoZW4gZnVuY3Rpb25zIHBhc3Mgc3RyaW5ncyBh
cm91bmQgYW5kIHN0b3JlCisgICAgICAgIHRoZW0gb24gdGhlIHN0YWNrIHdlIG1vc3RseSBqdXN0
IHdhbnQgU3RyaW5nLCBubyBwb2lzb24gbmVlZGVkLgorCisgICAgICAgIElubGluZSBhIGJ1bmNo
IG9mIGZ1bmN0aW9ucyBtYXJrZWQgYXMgbmVlZGluZyBpbmxpbmluZyBmcm9tIGEgRklYTUUgaW4K
KyAgICAgICAgV1RGU3RyaW5nLmNwcCB0byB0aGUgaGVhZGVyLiBUaGV5IHdlcmUgYWxsIG9uZS1s
aW5lcnMgd2hpY2ggY2hlY2sgZm9yIG51bGwKKyAgICAgICAgbV9pbXBsLCBhbmQgdGhlbiBmb3J3
YXJkIHRvIFN0cmluZ0ltcGwuCisKKyAgICAgICAgUmVtb3ZlIENPTVBJTEVSX1NVUFBPUlRTKENY
WF9SRUZFUkVOQ0VfUVVBTElGSUVEX0ZVTkNUSU9OUyksIGl0J3Mgc3VwcG9ydGVkIGJ5CisgICAg
ICAgIGFsbCBjb21waWxlcnMgV2ViS2l0IHN1cHBvcnRzIChpdCdzIGEgQysrMTEgZmVhdHVyZSwg
KmRldGVjdGlvbiogb2YgaXQgd2l0aAorICAgICAgICBfX2hhc19leHRlbnNpb24gd2FzIGFkZGVk
IHRvIGNsYW5nIG9uIE1heSAxM3RoIDIwMTEsIGFuZCBWUzIwMTUgLyBHQ0Mgc3VwcG9ydAorICAg
ICAgICBpdCkuCisKKyAgICAgICAgTWFyayBhIGJ1bmNoIG9mIFN0cmluZ0ltcGwgYXMgY29uc3Qs
IGFuZCBvdGhlcnMgbm90LiBUaGlzIGNvbnN0IGJ1c2luZXNzIHdpdGgKKyAgICAgICAgU3RyaW5n
SW1wbCBpcyByZWFsbHkgYSBtZXNzIChhcyB0aGUgRklYTUUgaW4gdGhlcmUgYXR0ZXN0cykhCisK
KyAgICAgICAgUmVtb3ZlIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBhcyByZXF1ZXN0ZWQgYnkgYSBG
SVhNRSwgYW5kIHVzZSBXVEZfRVhQT1JUX1BSSVZBVEUKKyAgICAgICAgaW5zdGVhZC4gTm90ZSB0
aGF0IG1hbnkgb2YgdGhlIGZ1bmN0aW9ucyB3aGljaCB1c2VkIHRvIGJlIGV4cG9ydGVkIGFyZSBu
b3cKKyAgICAgICAgc2ltcGxlIGlubGluZSBmdW5jdGlvbnMgd2hpY2ggdW5wb2lzb24gYW5kIGZv
cndhcmQgdG8gYW4gaW1wbGVtZW50YXRpb24uIFRoZXkKKyAgICAgICAgZG9uJ3QgbmVlZCB0byBi
ZSBleHBvcnRlZCBhbnltb3JlLCBidXQgd2hhdCB0aGV5IGZvcndhcmQgdG8gZG9lcy4KKworICAg
ICAgICBJbnRyb2R1Y2UgV1RGX0xBWllfSU5TVEFOVElBVEUgdG8gZm9yd2FyZC1kZWNsYXJlIGZ1
bmN0aW9ucyB3aGljaCBqdXN0IHBhc3MKKyAgICAgICAgcGFyYW1ldGVycyB0byBhbm90aGVyIGZ1
bmN0aW9uLCBhbmQgcmV0dXJuIHdoYXRldmVyIHRoYXQgb3RoZXIgZnVuY3Rpb24KKyAgICAgICAg
cmV0dXJuZWQsIHdpdGhvdXQgaGF2aW5nIHRvIGluY2x1ZGUgdGhlIHJldHVybidzIC8gcGFyYW1l
dGVycycgdHlwZSBoZWFkZXIuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCBXVEZTdHJpbmcuaCBk
b2Vzbid0IG5lZWQgdG8gaW5jbHVkZSBSZXRhaW5QdHIuaCBhbmQgQ1N0cmluZy5oLgorCisgICAg
ICAgIG1lc3NhZ2VzLnB5OiBDaGFuZ2UgV2ViS2l0IGdlbmVyYXRlZCBoZWFkZXJzIHNvIHRoYXQg
dGhleSBwcm9wZXJseSBpbmNsdWRlCisgICAgICAgIEZvcndhcmQuaCBpbnN0ZWFkIG9mIGZvcndh
cmQtZGVjbGFyaW5nIFN0cmluZy4KKworICAgICAgICBBZGQgYSBgY2hhcmFjdGVyQXRgIG1ldGhv
ZCB0byBTdHJpbmdJbXBsIHRvIG1hdGNoIHRoZSBvbmUgaW4gU3RyaW5nIGFuZCBtYWtlIGl0Cisg
ICAgICAgIGVhc2llciB0byBtaWdyYXRlLiBJdCBhbHJlYWR5IGhhcyBgYXRgLCB3aGljaCBhc3Nl
cnRzIG9uIG92ZXJhc3NlcnRzIG9uIG92ZXJmbG93CisgICAgICAgIGluc3RlYWQgb2YgcmV0dXJu
aW5nIDAgKGFzIFN0cmluZydzIGBjaGFyYWN0ZXJBdGAgZG9lcykuCisKKyAgICAgICAgQWxsb3cg
YnVpbGRpbmcgYW5kIGNvbmNhdGVuYXRpbmcgc3RyaW5ncyB3aXRoIFN0cmluZ0ltcGwqLCB3aGlj
aCBjb21lcyBpbiBoYW5keQorICAgICAgICB3aGVuIHdlIHBhc3MgdGhlbSBhcm91bmQgYSBiaXQg
bW9yZSB0byBhdm9pZCB0aGUgcG9pc29uZWQgbWVtYmVycy4KKworICAgICAgICBPdmVyYWxsIHRo
aXMgcGF0Y2ggc2hvdWxkIGRvIGV4YWN0bHkgbm90aGluZy4gQWxsIGNvZGUgc3RpbGwgdXNlcyB1
bnBvaXNvbmVkCisgICAgICAgIHN0cmluZ3MsIGFuZCBJIGhhdmUgYSBmb2xsb3ctdXAgcGF0Y2gg
d2hpY2ggcG9pc29ucyBzZWxlY3Qgc3RyaW5ncyBpbiBKU0MuIEknbGwKKyAgICAgICAgcG9zdCB0
aGF0IHBhdGNoIHNlcGFyYXRlbHkgYXMgaXQncyBxdWl0ZSBiaWcgYW5kIEkgd2FudCB0byBpc29s
YXRlIGFueQorICAgICAgICByZWdyZXNzaW9ucyBJIG1heSBpbnRyb2R1Y2UuCisKKyAgICAgICAg
SSd2ZSBydW4gYSBidW5jaCBvZiB0ZXN0cyBhbmQgdGhpcyBsb29rcyBwZXJmIG5ldXRyYWwsIGFu
ZCBzbyBkb2VzIG15IEpTQyBzdHJpbmcKKyAgICAgICAgcG9pc29uaW5nIHBhdGNoIHNvIGZhci4g
RnJvbS1zY3JhdGNoIGJ1aWxkIHRpbWUgZm9yIGFsbCBvZiBTYWZhcmkgc2VlbXMgdG8KKyAgICAg
ICAgKmRlY3JlYXNlKiBieSAxNSUgb24gbXkgTUJQLCB3aGljaCB3YXMgc3VycHJpc2luZywgc28g
SSdtIGd1ZXNzaW5nIHdlIG1pZ2h0IGhhdmUKKyAgICAgICAgbGFyZ2UgdmFyaWFuY2UuCisKKyAg
ICAgICAgKiB3dGYvQ29tcGlsZXIuaDoKKyAgICAgICAgKiB3dGYvRXhwb3J0TWFjcm9zLmg6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAg
ICAgICAqIHd0Zi9Qb2lzb25lZC5oOgorICAgICAgICAqIHd0Zi9QcmludFN0cmVhbS5jcHA6Cisg
ICAgICAgICogd3RmL1ByaW50U3RyZWFtLmg6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIHd0Zi9SZWYuaDoKKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmg6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6
Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmNvbnRhaW5zSWdu
b3JpbmdBU0NJSUNhc2UgY29uc3QpOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmZpbmQg
Y29uc3QpOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6c3RhcnRzV2l0aCBjb25zdCk6
CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
IGNvbnN0KToKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjplbmRzV2l0aCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSBjb25z
dCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhKToKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5n
OjpBdG9taWNTdHJpbmcpOgorICAgICAgICAoV1RGOjpuc1N0cmluZ05pbElmRW1wdHkpOgorICAg
ICAgICAoV1RGOjpzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKToKKyAgICAgICAg
KFdURjo6ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbWlj
U3RyaW5nSW1wbC5oOgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuaDoKKyAgICAgICAgKiB3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6
YXBwZW5kVW5pbml0aWFsaXplZFNsb3cpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKiB3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0lt
cGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzdWJzdHJpbmcgY29uc3QpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6cmV2ZXJzZUZpbmQgY29uc3QpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6
OkludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJpbmdJbXBsPjo6Zmx1c2gpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjaGFyYWN0ZXJBdCBjb25zdCk6CisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nVmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpTdHJpbmdWaWV3
KToKKyAgICAgICAgKiB3dGYvdGV4dC9TeW1ib2xJbXBsLmg6CisgICAgICAgICogd3RmL3RleHQv
V1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6QmFzaWNTdHJpbmc6OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6OkJhc2ljU3RyaW5nOjphcHBlbmQpOgorICAgICAgICAoV1RGOjpCYXNpY1N0cmlu
Zzo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6QmFzaWNTdHJpbmc6OmNoYXJhY3RlclN0YXJ0aW5n
QXQpOgorICAgICAgICAoV1RGOjpCYXNpY1N0cmluZzo6dHJ1bmNhdGUpOgorICAgICAgICAoV1RG
OjpzdHJpbmdSZW1vdmVJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OkJhc2ljU3RyaW5nOjpyZW1v
dmUpOgorICAgICAgICAoV1RGOjpCYXNpY1N0cmluZzo6c3Vic3RyaW5nU2hhcmluZ0ltcGwpOgor
ICAgICAgICAoV1RGOjpCYXNpY1N0cmluZzo6cGVyY2VudGFnZSk6CisgICAgICAgIChXVEY6OkJh
c2ljU3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbik6CisgICAgICAgIChXVEY6
OmNyZWF0ZVdpdGhGb3JtYXRBbmRBcmd1bWVudHMpOgorICAgICAgICAoV1RGOjpCYXNpY1N0cmlu
Zzo6Zm9ybWF0V2l0aEFyZ3VtZW50cyk6CisgICAgICAgIChXVEY6OkJhc2ljU3RyaW5nOjpudW1i
ZXIpOgorICAgICAgICAoV1RGOjpCYXNpY1N0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0
KToKKyAgICAgICAgKFdURjo6QmFzaWNTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRXaWR0aCk6
CisgICAgICAgIChXVEY6OkJhc2ljU3RyaW5nOjppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQp
OgorICAgICAgICAoV1RGOjpCYXNpY1N0cmluZzo6c3BsaXQpOgorICAgICAgICAoV1RGOjpCYXNp
Y1N0cmluZzo6YXNjaWkpOgorICAgICAgICAoV1RGOjpCYXNpY1N0cmluZzo6bGF0aW4xKToKKyAg
ICAgICAgKFdURjo6QmFzaWNTdHJpbmc6OnV0ZjgpOgorICAgICAgICAoV1RGOjpTdHJpbmdNYWtl
cjo6bWFrZThCaXRGcm9tMTZCaXRTb3VyY2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdNYWtlcjo6
bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdNYWtlcjo6ZnJv
bVVURjgpOgorICAgICAgICAoV1RGOjpTdHJpbmdNYWtlcjo6ZnJvbVVURjhXaXRoTGF0aW4xRmFs
bGJhY2spOgorICAgICAgICAoV1RGOjpCYXNpY1N0cmluZzo6c2hvdyk6CisgICAgICAgIChhc2Np
aURlYnVnKToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6
QVNDSUlMaXRlcmFsOjpBU0NJSUxpdGVyYWwpOgorICAgICAgICAoV1RGOjpBU0NJSUxpdGVyYWw6
Om9wZXJhdG9yIGNvbnN0IGNoYXIqKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjplcXVhbElnbm9yaW5nTnVsbGl0
eSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OmNvZGVQb2ludENv
bXBhcmVMZXNzVGhhbik6CisgICAgICAgIChXVEY6OmNvZGVQb2ludENvbXBhcmUpOgorICAgICAg
ICAoV1RGOjpJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uVHJhaXQ8U3RyaW5nPjo6Zmx1c2gpOgor
ICAgICAgICAoV1RGOjpQb2lzb25hYmxlU3RyaW5nPFQ+OjpQb2lzb25hYmxlU3RyaW5nKToKKyAg
ICAgICAgKFdURjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXVEY6OlBvaXNvbmFibGVTdHJpbmc8
VD46OmNoYXJhY3RlckF0IGNvbnN0KToKKyAgICAgICAgKFdURjo6UG9pc29uYWJsZVN0cmluZzxU
Pjo6cmVwbGFjZSk6CisgICAgICAgIChXVEY6OlBvaXNvbmFibGVTdHJpbmc8VD46OnJlcGxhY2VX
aXRoTGl0ZXJhbCk6CisgICAgICAgIChXVEY6OlBvaXNvbmFibGVTdHJpbmc8VD46OnNwbGl0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6UG9pc29uYWJsZVN0cmluZzxUPjo6ZGVmYXVsdFdyaXRpbmdE
aXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV1RGOjpQb2lzb25hYmxlU3RyaW5nPFQ+OjpjbGVh
ckltcGxJZk5vdFNoYXJlZCk6CisgICAgICAgIChXVEY6OlBvaXNvbmFibGVTdHJpbmc8VD46OmFz
c2VydENhZ2VkIGNvbnN0KToKKyAgICAgICAgKFdURjo6UG9pc29uYWJsZVN0cmluZzxUPjo6cmVs
ZWFzZUFzc2VydENhZ2VkIGNvbnN0KToKKyAgICAgICAgKFdURjo6TlNTdHJpbmcgY29uc3QpOgor
ICAgICAgICAoV1RGOjpuc1N0cmluZ05pbElmRW1wdHkpOgorICAgICAgICAoV1RGOjpTdHJpbmdN
YWtlcjo6bWFrZThCaXRGcm9tMTZCaXRTb3VyY2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdNYWtl
cjo6ZnJvbVVURjgpOgorICAgICAgICAoV1RGOjpTdHJpbmdNYWtlcjo6ZnJvbVVURjhXaXRoTGF0
aW4xRmFsbGJhY2spOgorICAgICAgICAoV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSk6CisgICAgICAgIChXVEY6OmVxdWFsSWdub3JpbmdBU0NJSUNhc2UpOgorICAgICAgICAoV1RG
OjpzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKToKKyAgICAgICAgKiB3dGYvdGV4
dC9jZi9TdHJpbmdDRi5jcHA6CisgICAgICAgIChXVEY6OkJhc2ljU3RyaW5nOjpjcmVhdGUpOgor
ICAgICAgICAoV1RGOjpCYXNpY1N0cmluZzo6Y3JlYXRlQ0ZTdHJpbmcpOgorICAgICAgICAqIHd0
Zi90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ1dyYXBwZXJD
RkFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVD
RlN0cmluZyk6CisgICAgICAgICogd3RmL3RleHQvbWFjL1N0cmluZ01hYy5tbToKKyAgICAgICAg
KFdURjo6QmFzaWNTdHJpbmc6OmNyZWF0ZSk6CisKIDIwMTgtMDMtMjggIFJvYmluIE1vcmlzc2V0
ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5n
IHN0b3BzIG9uIGFyaXRobWV0aWMgb3ZlcmZsb3cgaW5zdGVhZCBvZiBwcm9wYWdhdGluZyBpdCB1
cHdhcmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oIGIvU291cmNlL1dU
Ri93dGYvQ29tcGlsZXIuaAppbmRleCBjMTBkNzljLi5lOWUzYTZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9Db21waWxlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0NvbXBpbGVyLmgKQEAg
LTY2LDcgKzY2LDYgQEAKICNkZWZpbmUgV1RGX0NPTVBJTEVSX0NMQU5HIDEKICNkZWZpbmUgV1RG
X0NPTVBJTEVSX1NVUFBPUlRTX0JMT0NLUyBDT01QSUxFUl9IQVNfQ0xBTkdfRkVBVFVSRShibG9j
a3MpCiAjZGVmaW5lIFdURl9DT01QSUxFUl9TVVBQT1JUU19DX1NUQVRJQ19BU1NFUlQgQ09NUElM
RVJfSEFTX0NMQU5HX0ZFQVRVUkUoY19zdGF0aWNfYXNzZXJ0KQotI2RlZmluZSBXVEZfQ09NUElM
RVJfU1VQUE9SVFNfQ1hYX1JFRkVSRU5DRV9RVUFMSUZJRURfRlVOQ1RJT05TIENPTVBJTEVSX0hB
U19DTEFOR19GRUFUVVJFKGN4eF9yZWZlcmVuY2VfcXVhbGlmaWVkX2Z1bmN0aW9ucykKICNkZWZp
bmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRTX0NYWF9FWENFUFRJT05TIENPTVBJTEVSX0hBU19DTEFO
R19GRUFUVVJFKGN4eF9leGNlcHRpb25zKQogI2RlZmluZSBXVEZfQ09NUElMRVJfU1VQUE9SVFNf
QlVJTFRJTl9JU19UUklWSUFMTFlfQ09QWUFCTEUgQ09NUElMRVJfSEFTX0NMQU5HX0ZFQVRVUkUo
aXNfdHJpdmlhbGx5X2NvcHlhYmxlKQogCkBAIC04OSw3ICs4OCw2IEBACiAvKiBOb3RlOiBUaGlz
IHNlY3Rpb24gbXVzdCBjb21lIGFmdGVyIHRoZSBDbGFuZyBzZWN0aW9uIHNpbmNlIHdlIGNoZWNr
ICFDT01QSUxFUihDTEFORykgaGVyZS4gKi8KICNpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpICYm
ICFDT01QSUxFUihDTEFORykKICNkZWZpbmUgV1RGX0NPTVBJTEVSX0dDQyAxCi0jZGVmaW5lIFdU
Rl9DT01QSUxFUl9TVVBQT1JUU19DWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMgMQog
CiAjZGVmaW5lIEdDQ19WRVJTSU9OIChfX0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18g
KiAxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQogI2RlZmluZSBHQ0NfVkVSU0lPTl9BVF9MRUFT
VChtYWpvciwgbWlub3IsIHBhdGNoKSAoR0NDX1ZFUlNJT04gPj0gKG1ham9yICogMTAwMDAgKyBt
aW5vciAqIDEwMCArIHBhdGNoKSkKQEAgLTEyOCw3ICsxMjYsNiBAQAogI2lmIGRlZmluZWQoX01T
Q19WRVIpCiAKICNkZWZpbmUgV1RGX0NPTVBJTEVSX01TVkMgMQotI2RlZmluZSBXVEZfQ09NUElM
RVJfU1VQUE9SVFNfQ1hYX1JFRkVSRU5DRV9RVUFMSUZJRURfRlVOQ1RJT05TIDEKIAogI2lmIF9N
U0NfVkVSIDwgMTkxMAogI2Vycm9yICJQbGVhc2UgdXNlIGEgbmV3ZXIgdmVyc2lvbiBvZiBWaXN1
YWwgU3R1ZGlvLiBXZWJLaXQgcmVxdWlyZXMgVlMyMDE3IG9yIG5ld2VyIHRvIGNvbXBpbGUuIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRXhwb3J0TWFjcm9zLmggYi9Tb3VyY2UvV1RGL3d0
Zi9FeHBvcnRNYWNyb3MuaAppbmRleCBlNDg5NWE0Li5kZTYzNTk0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9FeHBvcnRNYWNyb3MuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9FeHBvcnRNYWNy
b3MuaApAQCAtODgsNiArODgsNSBAQAogCiAjZW5kaWYgLy8gVVNFKEVYUE9SVF9NQUNST1MpCiAK
LS8vIEZJWE1FOiBXZSBzaG91bGQgcmVwbGFjZSBXVEZfRVhQT1JUREFUQSBhbmQgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIHdpdGggV1RGX0VYUE9SVF9QUklWQVRFLgorLy8gRklYTUU6IFdlIHNob3Vs
ZCByZXBsYWNlIFdURl9FWFBPUlREQVRBIGFuZCB3aXRoIFdURl9FWFBPUlRfUFJJVkFURS4KICNk
ZWZpbmUgV1RGX0VYUE9SVERBVEEgV1RGX0VYUE9SVF9QUklWQVRFCi0jZGVmaW5lIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBXVEZfRVhQT1JUX1BSSVZBVEUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAppbmRleCA0MmZhZDgxLi5i
YmUwOWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNl
L1dURi93dGYvRm9yd2FyZC5oCkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgT3JkaW5hbE51bWJl
cjsKIGNsYXNzIFByaW50U3RyZWFtOwogY2xhc3MgU0hBMTsKIGNsYXNzIFNlY29uZHM7Ci1jbGFz
cyBTdHJpbmc7CiBjbGFzcyBTdHJpbmdCdWlsZGVyOwogY2xhc3MgU3RyaW5nSW1wbDsKIGNsYXNz
IFN0cmluZ1ZpZXc7CiBjbGFzcyBUZXh0UG9zaXRpb247CiBjbGFzcyBUZXh0U3RyZWFtOworY2xh
c3MgVW5pcXVlZFN0cmluZ0ltcGw7CiBjbGFzcyBXYWxsVGltZTsKIAogc3RydWN0IEZhc3RNYWxs
b2M7CkBAIC01MywxMiArNTMsMTUgQEAgc3RydWN0IEZhc3RNYWxsb2M7CiB0ZW1wbGF0ZTx0eXBl
bmFtZT4gY2xhc3MgQ29tcGxldGlvbkhhbmRsZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRHVtYlB0clRyYWl0czsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEdW1iVmFsdWVU
cmFpdHM7Cit0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+IHN0cnVjdCBQb2lzb25lZFB0clRy
YWl0czsKK3RlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4gc3RydWN0IFBvaXNvbmVkVmFsdWVU
cmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRnVuY3Rpb247CiB0ZW1wbGF0ZTx0eXBl
bmFtZT4gY2xhc3MgTGF6eU5ldmVyRGVzdHJveWVkOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNz
IE5ldmVyRGVzdHJveWVkOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvblNldDsKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVm
OwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFz
cyBSZWZQdHI7Cit0ZW1wbGF0ZTx0eXBlbmFtZSA9IER1bWJQdHJUcmFpdHM8U3RyaW5nSW1wbD4+
IGNsYXNzIFBvaXNvbmFibGVTdHJpbmc7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5n
QnVmZmVyOwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZD4gY2xhc3MgU3RyaW5n
VHlwZUFkYXB0ZXI7CiAKQEAgLTk3LDE5ICsxMDAsNzYgQEAgdXNpbmcgV1RGOjpMYXp5TmV2ZXJE
ZXN0cm95ZWQ7CiB1c2luZyBXVEY6Ok5ldmVyRGVzdHJveWVkOwogdXNpbmcgV1RGOjpPcHRpb25T
ZXQ7CiB1c2luZyBXVEY6Ok9yZGluYWxOdW1iZXI7Cit1c2luZyBXVEY6OlBvaXNvbmVkUHRyVHJh
aXRzOwordXNpbmcgV1RGOjpQb2lzb25lZFZhbHVlVHJhaXRzOwogdXNpbmcgV1RGOjpQcmludFN0
cmVhbTsKIHVzaW5nIFdURjo6UmVmOwogdXNpbmcgV1RGOjpSZWZQdHI7CiB1c2luZyBXVEY6OlNI
QTE7Ci11c2luZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcg
V1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwogdXNpbmcgV1RGOjpT
dHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247CiB1c2luZyBXVEY6OlRleHRTdHJl
YW07Cit1c2luZyBXVEY6OlVuaXF1ZWRTdHJpbmdJbXBsOwogdXNpbmcgV1RGOjpWYXJpYW50Owog
dXNpbmcgV1RGOjpWZWN0b3I7CiAKK25hbWVzcGFjZSBXVEYgeworLy8gQSBidW5jaCBvZiBjb2Rl
IHVzZXMgV1RGOjpTdHJpbmcsIGFuZCBhIGJ1bmNoIHVzZXMgdW5xdWFsaWZpZWQgU3RyaW5nLiBM
ZXQncyBzdXBwb3J0IGJvdGguCit1c2luZyBTdHJpbmcgPSBQb2lzb25hYmxlU3RyaW5nPD47Cit9
Cit1c2luZyBTdHJpbmcgPSBXVEY6OlN0cmluZzsKK3RlbXBsYXRlPHR5cGVuYW1lIFBvaXNvbj4g
dXNpbmcgUG9pc29uZWRTdHJpbmcgPSBXVEY6OlBvaXNvbmFibGVTdHJpbmc8UG9pc29uZWRQdHJU
cmFpdHM8UG9pc29uLCBTdHJpbmdJbXBsPj47CisKIHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIEU+
IHVzaW5nIEV4cGVjdGVkID0gc3RkOjpleHBlcmltZW50YWw6OmV4cGVjdGVkPFQsIEU+OwogdGVt
cGxhdGU8Y2xhc3MgRT4gdXNpbmcgVW5leHBlY3RlZCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp1bmV4
cGVjdGVkPEU+OworCisvLyBTb21ldGltZXMgYW4gaW5saW5lIG1ldGhvZCBzaW1wbHkgZm9yd2Fy
ZHMgdG8gYW5vdGhlciBvbmUgYW5kIGRvZXMgbm90aGluZyBlbHNlLiBJZiBpdCB3ZXJlCisvLyBq
dXN0IGEgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGF0IG1ldGhvZCB0aGVuIHlvdSB3b3VsZCBv
bmx5IG5lZWQgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mCisvLyBpdHMgcmV0dXJuIHR5cGVzIGFu
ZCBwYXJhbWV0ZXIgdHlwZXMgdG9vLCBidXQgYmVjYXVzZSBpdCdzIGlubGluZSBhbmQgaXQgYWN0
dWFsbHkgbmVlZHMgdG8KKy8vIHJldHVybiAvIHBhc3MgdGhlc2UgdHlwZXMgKGV2ZW4gdGhvdWdo
IGl0J3MganVzdCBwYXNzaW5nIHRocm91Z2ggd2hhdGV2ZXIgaXQgY2FsbGVkKSB5b3UKKy8vIG5v
dyBmaW5kIHlvdXJzZWxmIGhhdmluZyB0byBhY3R1YWxseSBoYXZlIGEgZnVsbCBkZWNsYXJhdGlv
biBvZiB0aGVzZSB0eXBlcy4gVGhhdCBtaWdodCBiZQorLy8gYW4gaW5jbHVkZSB5b3UnZCByYXRo
ZXIgYXZvaWQuCisvLworLy8gTm8gbW9yZS4gRW50ZXIgdGVtcGxhdGUgbWFnaWMgdG8gbGF6aWx5
IGluc3RhbnRpYXRlIHRoYXQgbWV0aG9kIQorLy8KKy8vIFRoaXMgbWFjcm8gbWFrZXMgdGhlIG1l
dGhvZCB3b3JrIGFzIGlmIHlvdSdkIGRlY2xhcmVkIHRoZSByZXR1cm4gLyBwYXJhbWV0ZXIgdHlw
ZXMgYXMgbm9ybWFsLAorLy8gYnV0IGZvcmNlcyBsYXp5IGluc3RhbnRpYXRpb24gb2YgdGhlIG1l
dGhvZCBhdCB0aGUgY2FsbCBzaXRlLCBhdCB3aGljaCBwb2ludCB0aGUgY2FsbGVyIChub3QKKy8v
IHRoZSBkZWNsYXJhdGlvbikgaGFkIGJldHRlciBoYXZlIGEgZnVsbCBkZWNsYXJhdGlvbiBvZiB0
aGUgcmV0dXJuIC8gcGFyYW1ldGVyIHR5cGVzLgorLy8KKy8vIFNpbXBseSBwYXNzIHRoZSBmb3J3
YXJkLWRlY2xhcmVkIHR5cGVzIHRvIHRoZSBtYWNybywgd2l0aCBhbiBhbGlhcyBmb3IgZWFjaCwg
YW5kIHRoZW4gZGVmaW5lCisvLyB5b3VyIGZ1bmN0aW9uIGFzIHlvdSBvdGhlcndpc2Ugd291bGQg
aGF2ZSBidXQgdXNpbmcgdGhlIGFsaWFzZWQgbmFtZS4gV2h5IHRoZSBhbGlhcz8gU28geW91Cisv
LyBjYW4gYmUgbGF6eSBvbiB0ZW1wbGF0ZWQgdHlwZXMhIFNhbXBsZSB1c2FnZToKKy8vCisvLyBz
dHJ1Y3QgRm9vOyAvLyBObyBuZWVkIHRvIGRlZmluZSBGb28hCisvLyB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorLy8gc3RydWN0IEEgeworLy8gICAgIEZvbyBkZWNsYXJlZChCYXIpOyAvLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucyBvZiBGb28gYW5kIEJhciBhcmUgc3VmZmljaWVudCBoZXJlLgorLy8gICAg
IC8vIFRoZSBiZWxvdyBjb2RlIHdvdWxkIG5vcm1hbGx5IHJlcXVpcmUgYSBkZWZpbml0aW9uIG9m
IEZvbyBhbmQgQmFyLgorLy8gICAgIFdURl9MQVpZX0lOU1RBTlRJQVRFKEZvbz1Gb28sIEJhcj1C
YXIpIEZvbyBmb3J3YXJkZXIoQmFyIGIpIHsgcmV0dXJuIGRlY2xhcmVkKGIpOyB9CisvLyB9Owor
I2RlZmluZSBXVEZfTEFaWV9KT0lOX1VOTEFaRShBLCBCKSBBIyNCCisjZGVmaW5lIFdURl9MQVpZ
X0pPSU4oQSwgQikgV1RGX0xBWllfSk9JTl9VTkxBWkUoQSwgQikKKyNkZWZpbmUgV1RGX0xBWllf
QVJHVU1FTlRfTlVNQkVSKF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBOLCAuLi4pIE4KKyNk
ZWZpbmUgV1RGX0xBWllfUkVWRVJTRV9TRVFVRU5DRSgpIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAK
KyNkZWZpbmUgV1RGX0xBWllfTlVNX0FSR1NfKC4uLikgV1RGX0xBWllfQVJHVU1FTlRfTlVNQkVS
KF9fVkFfQVJHU19fKQorI2RlZmluZSBXVEZfTEFaWV9OVU1fQVJHUyguLi4pIFdURl9MQVpZX05V
TV9BUkdTXyhfX1ZBX0FSR1NfXywgV1RGX0xBWllfUkVWRVJTRV9TRVFVRU5DRSgpKQorI2RlZmlu
ZSBXVEZfTEFaWV9DQUxMX0VBQ0goRiwuLi4pIFwKKyAgICBXVEZfTEFaWV9KT0lOKFdURl9MQVpZ
X0NBTExfRUFDSF8sIFdURl9MQVpZX05VTV9BUkdTKF9fVkFfQVJHU19fKSkoRiwgKF9fVkFfQVJH
U19fKSkKKyNkZWZpbmUgV1RGX0xBWllfTEFTVChfMSwgLi4uKSBfMQorI2RlZmluZSBXVEZfTEFa
WV9NT1JFKF8xLCAuLi4pIChfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV1RGX0xBWllfQ0FMTF9FQUNI
XzAoLi4uKQorI2RlZmluZSBXVEZfTEFaWV9DQUxMX0VBQ0hfMShGLCBBKSBGKFdURl9MQVpZX0xB
U1QgQSkgV1RGX0xBWllfQ0FMTF9FQUNIXzAoRiwgV1RGX0xBWllfTU9SRSBBKQorI2RlZmluZSBX
VEZfTEFaWV9DQUxMX0VBQ0hfMihGLCBBKSBGKFdURl9MQVpZX0xBU1QgQSkgV1RGX0xBWllfQ0FM
TF9FQUNIXzEoRiwgV1RGX0xBWllfTU9SRSBBKQorI2RlZmluZSBXVEZfTEFaWV9DQUxMX0VBQ0hf
MyhGLCBBKSBGKFdURl9MQVpZX0xBU1QgQSkgV1RGX0xBWllfQ0FMTF9FQUNIXzIoRiwgV1RGX0xB
WllfTU9SRSBBKQorI2RlZmluZSBXVEZfTEFaWV9DQUxMX0VBQ0hfNChGLCBBKSBGKFdURl9MQVpZ
X0xBU1QgQSkgV1RGX0xBWllfQ0FMTF9FQUNIXzMoRiwgV1RGX0xBWllfTU9SRSBBKQorI2RlZmlu
ZSBXVEZfTEFaWV9DQUxMX0VBQ0hfNShGLCBBKSBGKFdURl9MQVpZX0xBU1QgQSkgV1RGX0xBWllf
Q0FMTF9FQUNIXzQoRiwgV1RGX0xBWllfTU9SRSBBKQorI2RlZmluZSBXVEZfTEFaWV9DQUxMX0VB
Q0hfNihGLCBBKSBGKFdURl9MQVpZX0xBU1QgQSkgV1RGX0xBWllfQ0FMTF9FQUNIXzUoRiwgV1RG
X0xBWllfTU9SRSBBKQorI2RlZmluZSBXVEZfTEFaWV9DQUxMX0VBQ0hfNyhGLCBBKSBGKFdURl9M
QVpZX0xBU1QgQSkgV1RGX0xBWllfQ0FMTF9FQUNIXzYoRiwgV1RGX0xBWllfTU9SRSBBKQorI2Rl
ZmluZSBXVEZfTEFaWV9UWVBFKEFMSUFTX0FORF9UWVBFKSB0eXBlbmFtZSBBTElBU19BTkRfVFlQ
RSwKKyNkZWZpbmUgV1RGX0xBWllfSU5TVEFOVElBVEUoLi4uKSAgICAgICAgICAgICAgICAgICBc
CisgICAgdGVtcGxhdGU8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIFdURl9MQVpZX0NBTExfRUFDSChXVEZfTEFaWV9UWVBFLCBfX1ZBX0FSR1NfXykgIFwKKyAg
ICB0eXBlbmFtZSA9IHZvaWQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggMzVhMjdhNS4uZDc5NDAxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0hhc2hUcmFpdHMuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8bGltaXRzPgog
I2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9LZXlWYWx1ZVBhaXIuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KQEAgLTMwLDEwICszMSw2IEBACiAKIG5hbWVzcGFjZSBXVEYg
ewogCi1jbGFzcyBTdHJpbmc7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJh
aXRzOwotCiB0ZW1wbGF0ZTxib29sIGlzSW50ZWdlciwgdHlwZW5hbWUgVD4gc3RydWN0IEdlbmVy
aWNIYXNoVHJhaXRzQmFzZTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEdlbmVyaWNI
YXNoVHJhaXRzQmFzZTxmYWxzZSwgVD4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUG9p
c29uZWQuaCBiL1NvdXJjZS9XVEYvd3RmL1BvaXNvbmVkLmgKaW5kZXggODdhOGU1OC4uNDJhZTkz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUG9pc29uZWQuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9Qb2lzb25lZC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNp
bmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogI2RlZmluZSBFTkFCTEVfUE9JU09OX0FTU0VSVFMgMAogCkBAIC0y
NjYsNiArMjY3LDQgQEAgdXNpbmcgV1RGOjpBbHJlYWR5UG9pc29uZWQ7CiB1c2luZyBXVEY6OlBv
aXNvbjsKIHVzaW5nIFdURjo6UG9pc29uZWQ7CiB1c2luZyBXVEY6OlBvaXNvbmVkQml0czsKLXVz
aW5nIFdURjo6UG9pc29uZWRQdHJUcmFpdHM7Ci11c2luZyBXVEY6OlBvaXNvbmVkVmFsdWVUcmFp
dHM7CiB1c2luZyBXVEY6Om1ha2VQb2lzb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Q
cmludFN0cmVhbS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5jcHAKaW5kZXggOWUx
MWM5OS4uYjIyYzI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcApAQCAtOTIsMTEgKzkyLDYgQEAg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IENTdHJpbmcmIHN0cmlu
ZykKICAgICBvdXQucHJpbnQoc3RyaW5nLmRhdGEoKSk7CiB9CiAKLXZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBvdXQucHJp
bnQoc3RyaW5nLnV0ZjgoKSk7Ci19Ci0KIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmcpCiB7CiAgICAgaWYgKCFzdHJpbmcpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmggYi9Tb3VyY2UvV1RGL3d0Zi9Q
cmludFN0cmVhbS5oCmluZGV4IGE2OWQxZDAuLjRiNTMzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1ByaW50U3RyZWFtLmgKKysrIGIvU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHR1cGxlPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvUmF3UG9pbnRlci5oPgpAQCAtMzgsMTMgKzM5LDYgQEAKIAogbmFtZXNwYWNl
IFdURiB7CiAKLWNsYXNzIEF0b21pY1N0cmluZ0ltcGw7Ci1jbGFzcyBDU3RyaW5nOwotY2xhc3Mg
U3RyaW5nOwotY2xhc3MgU3RyaW5nSW1wbDsKLWNsYXNzIFN0cmluZ1ZpZXc7Ci1jbGFzcyBVbmlx
dWVkU3RyaW5nSW1wbDsKLQogaW5saW5lIGNvbnN0IGNoYXIqIGJvb2xGb3JQcmludGluZyhib29s
IHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSI7CkBAIC0xMDMs
MTQgKzk3LDE0IEBAIHByb3RlY3RlZDoKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgY29uc3QgU3RyaW5nVmlldyYpOwogV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0IENTdHJp
bmcmKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBjb25zdCBTdHJpbmcmKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBjb25zdCBTdHJpbmdJbXBsKik7CiBpbmxpbmUgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSB7IHBy
aW50SW50ZXJuYWwob3V0LCBiaXR3aXNlX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7
IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgVW5p
cXVlZFN0cmluZ0ltcGwqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBiaXR3aXNlX2Nhc3Q8
Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwmIHZhbHVlKSB7IHByaW50
SW50ZXJuYWwob3V0LCAmdmFsdWUpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIGNoYXIqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBDU3RyaW5nJiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ1N0cmluZyY+KHZhbHVlKSk7IH0KLWlubGluZSB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgU3RyaW5nJiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwg
c3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nJj4odmFsdWUpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBQb2lz
b25hYmxlU3RyaW5nPFQ+JiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgdmFsdWUuaW1wbCgp
KTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBQb2lzb25hYmxlU3RyaW5nPFQ+JiB2YWx1ZSkgeyBwcmludEludGVybmFs
KG91dCwgdmFsdWUuaW1wbCgpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJ
bnRlcm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqPih2YWx1ZSkp
OyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
VW5pcXVlZFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9SZWYuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZi5oCmluZGV4IDFhYWQ3NmYuLjNiMzE1OGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZi5o
CkBAIC0xMjUsMTIgKzEyNSw4IEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+IFJlZjxULCBQdHJUcmFpdHM+IHJlcGxhY2UoUmVmPFgsIFk+JiYpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKIAotI2lmIENPTVBJTEVSX1NVUFBPUlRTKENYWF9SRUZFUkVOQ0VfUVVB
TElGSUVEX0ZVTkNUSU9OUykKICAgICBSZWYgY29weVJlZigpICYmID0gZGVsZXRlOwogICAgIFJl
ZiBjb3B5UmVmKCkgY29uc3QgJiBXQVJOX1VOVVNFRF9SRVRVUk4geyByZXR1cm4gUmVmKCptX3B0
cik7IH0KLSNlbHNlCi0gICAgUmVmIGNvcHlSZWYoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4g
eyByZXR1cm4gUmVmKCptX3B0cik7IH0KLSNlbmRpZgogCiAgICAgVCYgbGVha1JlZigpIFdBUk5f
VU5VU0VEX1JFVFVSTgogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5o
IGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKaW5kZXggNjM2NWY2NC4uNTIyMDg1MzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0
ci5oCkBAIC05OSwxMiArOTksOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgVCogaGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oLTEpOyB9CiAKLSNp
ZiBDT01QSUxFUl9TVVBQT1JUUyhDWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMpCiAg
ICAgUmVmUHRyIGNvcHlSZWYoKSAmJiA9IGRlbGV0ZTsKICAgICBSZWZQdHIgY29weVJlZigpIGNv
bnN0ICYgV0FSTl9VTlVTRURfUkVUVVJOIHsgcmV0dXJuIFJlZlB0cihtX3B0cik7IH0KLSNlbHNl
Ci0gICAgUmVmUHRyIGNvcHlSZWYoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4geyByZXR1cm4g
UmVmUHRyKG1fcHRyKTsgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIFJlZlB0ciBh
ZG9wdFJlZjxULCBQdHJUcmFpdHM+KFQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oCmlu
ZGV4IGM5MGIxZmYuLjk0NGNjMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaApAQCAt
NjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nKFJlZlB0cjxBdG9taWNTdHJp
bmdJbXBsPiYmKTsKICAgICBBdG9taWNTdHJpbmcoY29uc3QgU3RhdGljU3RyaW5nSW1wbCopOwog
ICAgIEFUT01JQ1NUUklOR19DT05WRVJTSU9OIEF0b21pY1N0cmluZyhTdHJpbmdJbXBsKik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gQVRPTUlDU1RSSU5HX0NPTlZFUlNJT04gQXRvbWljU3Ry
aW5nKGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mKTsKICAgICBBVE9NSUNTVFJJTkdfQ09OVkVS
U0lPTiBBdG9taWNTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgQXRvbWljU3RyaW5nKFN0cmlu
Z0ltcGwqIGJhc2VTdHJpbmcsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpOwogCkBA
IC0xMDQsMzcgKzEwNSw0NiBAQCBwdWJsaWM6CiAKICAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2ln
bmVkIGludCBpKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ1tpXTsgfQogCi0gICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKGludCk7Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKHVuc2lnbmVkKTsKLSAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIEF0b21pY1N0cmluZyBudW1iZXIodW5zaWdu
ZWQgbG9uZyk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcg
bnVtYmVyKHVuc2lnbmVkIGxvbmcgbG9uZyk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0
YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKGRvdWJsZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKGludCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKHVuc2lnbmVkKTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIEF0b21pY1N0cmluZyBudW1iZXIodW5zaWduZWQgbG9uZyk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKHVuc2lnbmVkIGxvbmcg
bG9uZyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVy
KGRvdWJsZSk7CiAgICAgLy8gSWYgd2UgbmVlZCBtb3JlIG92ZXJsb2FkcyBvZiB0aGUgbnVtYmVy
IGZ1bmN0aW9uLCB3ZSBjYW4gYWRkIGFsbCB0aGUgb3RoZXJzIHRoYXQgU3RyaW5nIGhhcywgYnV0
IHRoZXNlIHNlZW0gdG8gZG8gZm9yIG5vdy4KIAogICAgIGJvb2wgY29udGFpbnMoVUNoYXIgY2hh
cmFjdGVyKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhjaGFyYWN0ZXIpOyB9CiAg
ICAgYm9vbCBjb250YWlucyhjb25zdCBMQ2hhciogc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZy5jb250YWlucyhzdHJpbmcpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBj
b250YWlucyhjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nLmNvbnRhaW5zKHN0cmluZyk7IH0KICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0
cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzdHJpbmcpOyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBjb250YWluc0lnbm9yaW5nQVNDSUlDYXNl
KGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmcuY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcpOyB9CiAgICAgYm9vbCBjb250YWlu
c0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZy5jb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZyk7IH0KIAogICAgIHNpemVf
dCBmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy5maW5kKGNoYXJhY3Rlciwgc3RhcnQpOyB9CiAgICAgc2l6ZV90IGZpbmQoY29u
c3QgTENoYXIqIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZy5maW5kKHN0cmluZywgc3RhcnQpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6
ZV90IGZpbmQoY29uc3QgUG9pc29uYWJsZVN0cmluZzxUPiYgc3RyaW5nLCB1bnNpZ25lZCBzdGFy
dCA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmZpbmQoc3RyaW5nLCBzdGFydCk7IH0KICAg
ICBzaXplX3QgZmluZChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kKHN0cmluZywgc3RhcnQpOyB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBQb2lzb25h
YmxlU3RyaW5nPFQ+JiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmcpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGZp
bmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBzdHJpbmcsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaW5nLCBzdGFydE9mZnNldCk7IH0KICAgICBzaXplX3QgZmluZElnbm9yaW5n
QVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nKTsgfQogICAgIHNpemVfdCBmaW5kSWdub3JpbmdB
U0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25z
dCB7IHJldHVybiBtX3N0cmluZy5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCBzdGFydE9m
ZnNldCk7IH0KICAgICBzaXplX3QgZmluZChDb2RlVW5pdE1hdGNoRnVuY3Rpb24gbWF0Y2hGdW5j
dGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kKG1h
dGNoRnVuY3Rpb24sIHN0YXJ0KTsgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBz
dGFydHNXaXRoKGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIHN0cmluZykgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmcuc3RhcnRzV2l0aChzdHJpbmcpOyB9CiAgICAgYm9vbCBzdGFydHNXaXRoKGNv
bnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5zdGFydHNXaXRoKHN0
cmluZyk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHN0YXJ0c1dpdGhJZ25vcmlu
Z0FTQ0lJQ2FzZShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBzdHJpbmcpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcpOyB9CiAgICAg
Ym9vbCBzdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcp
OyB9CiAgICAgYm9vbCBzdGFydHNXaXRoKFVDaGFyIGNoYXJhY3RlcikgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmcuc3RhcnRzV2l0aChjaGFyYWN0ZXIpOyB9CiAgICAgdGVtcGxhdGU8dW5zaWduZWQg
bWF0Y2hMZW5ndGg+IGJvb2wgc3RhcnRzV2l0aChjb25zdCBjaGFyICgmcHJlZml4KVttYXRjaExl
bmd0aF0pIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnN0YXJ0c1dpdGg8bWF0Y2hMZW5ndGg+KHBy
ZWZpeCk7IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgZW5kc1dpdGgoY29uc3Qg
UG9pc29uYWJsZVN0cmluZzxUPiYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5lbmRz
V2l0aChzdHJpbmcpOyB9CiAgICAgYm9vbCBlbmRzV2l0aChjb25zdCBTdHJpbmcmIHN0cmluZykg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcuZW5kc1dpdGgoc3RyaW5nKTsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGJvb2wgZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBQb2lzb25h
YmxlU3RyaW5nPFQ+JiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmVuZHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nKTsgfQogICAgIGJvb2wgZW5kc1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZShjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuZW5kc1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcpOyB9CiAgICAgYm9vbCBlbmRzV2l0aChVQ2hhciBj
aGFyYWN0ZXIpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmVuZHNXaXRoKGNoYXJhY3Rlcik7IH0K
ICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBtYXRjaExlbmd0aD4gYm9vbCBlbmRzV2l0aChjb25zdCBj
aGFyICgmcHJlZml4KVttYXRjaExlbmd0aF0pIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmVuZHNX
aXRoPG1hdGNoTGVuZ3RoPihwcmVmaXgpOyB9CiAKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
QXRvbWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3Q7Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIEF0b21pY1N0cmluZyBjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNv
bnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBBdG9taWNTdHJpbmcgY29udmVydFRvQVNDSUlM
b3dlcmNhc2UoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXRvbWljU3RyaW5nIGNv
bnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgY29uc3Q7CiAKICAgICBpbnQgdG9JbnQoYm9vbCogb2sg
PSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50b0ludChvayk7IH0KICAgICBkb3VibGUgdG9E
b3VibGUoYm9vbCogb2sgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50b0RvdWJsZShvayk7
IH0KQEAgLTE2OCw3ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgQ2FzZUNvbnZl
cnRUeXBlIHsgVXBwZXIsIExvd2VyIH07CiAgICAgdGVtcGxhdGU8Q2FzZUNvbnZlcnRUeXBlPiBB
dG9taWNTdHJpbmcgY29udmVydEFTQ0lJQ2FzZSgpIGNvbnN0OwogCi0gICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcgZnJvbVVURjhJbnRlcm5hbChjb25zdCBjaGFy
KiwgY29uc3QgY2hhciopOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgQXRvbWljU3Ry
aW5nIGZyb21VVEY4SW50ZXJuYWwoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKIAogICAgIFN0
cmluZyBtX3N0cmluZzsKIH07CkBAIC0xNzksMjYgKzE4OSwzNiBAQCBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJl
dHVybiBhLgogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IExDaGFy
Kik7CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3Qg
Y2hhciogYikgeyByZXR1cm4gV1RGOjplcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KGIpKTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNT
dHJpbmcmIGEsIGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGIpIHsgcmV0dXJuIGEuaW1wbCgpICYmIGVx
dWFsKGEuaW1wbCgpLCBiLmRhdGEoKSwgYi5zaXplKCkpOyB9ICAgIAotaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4g
ZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFBvaXNvbmFibGVT
dHJpbmc8VD4mIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5n
JiBhLCBjb25zdCBOZXZlckRlc3Ryb3llZDxQb2lzb25hYmxlU3RyaW5nPFQ+PiYgYikgeyByZXR1
cm4gZXF1YWwoYS5pbXBsKCksIGIuZ2V0KCkuaW1wbCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IE5l
dmVyRGVzdHJveWVkPGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4+JiBiKSB7IHJldHVybiBlcXVh
bChhLmltcGwoKSwgYi5nZXQoKS5pbXBsKCkpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IExDaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGIgPT0gYTsgfQot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+
JiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiLmlt
cGwoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgTmV2ZXJEZXN0cm95ZWQ8UG9pc29uYWJsZVN0cmluZzxUPj4mIGEsIGNvbnN0IEF0b21pY1N0
cmluZyYgYikgeyByZXR1cm4gZXF1YWwoYS5nZXQoKS5pbXBsKCksIGIuaW1wbCgpKTsgfQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBOZXZlckRlc3Ry
b3llZDxjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+PiYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBi
KSB7IHJldHVybiBlcXVhbChhLmdldCgpLmltcGwoKSwgYi5pbXBsKCkpOyB9CiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGEsIGNvbnN0IEF0b21pY1N0cmluZyYg
YikgeyByZXR1cm4gYiA9PSBhOyB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRv
bWljU3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGEuaW1wbCgpICE9
IGIuaW1wbCgpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYg
YSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQogaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuICEo
YSA9PSBiKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEs
IGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWlj
U3RyaW5nJiBhLCBjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBiKSB7IHJldHVybiAhZXF1YWwo
YS5pbXBsKCksIGIuaW1wbCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IE5ldmVyRGVzdHJveWVkPFBv
aXNvbmFibGVTdHJpbmc8VD4+JiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIuZ2V0KCku
aW1wbCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IE5ldmVyRGVzdHJveWVkPGNvbnN0IFBvaXNvbmFi
bGVTdHJpbmc8VD4+JiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIuZ2V0KCkuaW1wbCgp
KTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0
IFZlY3RvcjxVQ2hhcj4mIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQogaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBMQ2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiAh
KGIgPT0gYSk7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nJiBhLCBjb25z
dCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgYi5pbXBsKCkpOyB9
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBvaXNv
bmFibGVTdHJpbmc8VD4mIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIWVxdWFs
KGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgTmV2ZXJEZXN0cm95ZWQ8UG9pc29uYWJsZVN0cmluZzxUPj4mIGEs
IGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKGEuZ2V0KCkuaW1wbCgpLCBi
LmltcGwoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgUG9pc29uYWJsZVN0cmluZzxUPj4mIGEsIGNvbnN0
IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKGEuZ2V0KCkuaW1wbCgpLCBiLmltcGwo
KSk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9yPFVDaGFyPiYgYSwgY29u
c3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIAoraW5saW5lIGJvb2wg
b3BlcmF0b3IhKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKSB7IHJldHVybiBzdHJpbmcuaXNO
dWxsKCk7IH0KKwogYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIGNvbnN0IEF0b21pY1N0cmluZyYpOwotYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNv
bnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IFN0cmluZyYpOwotYm9vbCBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IEF0b21pY1N0cmluZyYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYs
IGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiwgY29uc3Qg
QXRvbWljU3RyaW5nJik7CiBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWlj
U3RyaW5nJiwgY29uc3QgY2hhciopOwotCiB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGJvb2wg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3Qg
Y2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pOwordGVtcGxhdGU8dW5zaWduZWQgbGVu
Z3RoPiBib29sIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWlj
U3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsK
IAogaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKCkKIHsKQEAgLTI0OSw2ICsyNjks
MTEgQEAgaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKGNvbnN0IFN0YXRpY1N0cmlu
Z0ltcGwqIHN0cmluZykKIHsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEF0b21p
Y1N0cmluZzo6QXRvbWljU3RyaW5nKGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIHN0cmluZykK
KyAgICA6IG1fc3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6OmFkZChzdHJpbmcuaW1wbCgpKSkKK3sK
K30KKwogaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogICAgIDogbV9zdHJpbmcoQXRvbWljU3RyaW5nSW1wbDo6YWRkKHN0cmluZy5pbXBsKCkp
KQogewpAQCAtMjgwLDYgKzMwNSwxNCBAQCBpbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9taWNTdHJp
bmcoTlNTdHJpbmcqIHN0cmluZykKIHsKIH0KIAorLy8gVXNlZCBpbiBhIHNtYWxsIG51bWJlciBv
ZiBwbGFjZXMgd2hlcmUgdGhlIGxvbmcgc3RhbmRpbmcgYmVoYXZpb3IgaGFzIGJlZW4gIm5pbCBp
ZiBlbXB0eSIuCitpbmxpbmUgTlNTdHJpbmcqIG5zU3RyaW5nTmlsSWZFbXB0eShjb25zdCBBdG9t
aWNTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICByZXR1cm4gKnN0cmluZy5pbXBsKCk7Cit9CisKICNlbmRpZgogCiAv
LyBEZWZpbmUgZXh0ZXJuYWwgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIGNvbW1vbmx5IHVzZWQg
YXRvbWljIHN0cmluZ3MuCkBAIC0zMjUsMTcgKzM1OCwyMyBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBs
ZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0
b21pYwogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcuc3Ry
aW5nKCksIGxvd2VyY2FzZUxldHRlcnMpOwogfQogCit0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+
IGlubGluZSBib29sIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRv
bWljU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhd
KQoreworICAgIHJldHVybiBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlQ29tbW9u
KHN0cmluZy5zdHJpbmcoKSwgbG93ZXJjYXNlTGV0dGVycyk7Cit9CisKKwogaW5saW5lIGJvb2wg
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYikKIHsKICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLnN0cmlu
ZygpLCBiLnN0cmluZygpKTsKIH0KIAotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBhLCBjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBiKQogewogICAgIHJldHVybiBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGEuc3RyaW5nKCksIGIpOwogfQogCi1pbmxpbmUgYm9vbCBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBi
KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpCiB7
CiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYSwgYi5zdHJpbmcoKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oCmluZGV4IDQwZGE3M2IuLjUyYzY4YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oCkBAIC0yOSw4ICsyOSw4IEBA
IGNsYXNzIEF0b21pY1N0cmluZ1RhYmxlOwogCiBjbGFzcyBBdG9taWNTdHJpbmdJbXBsIDogcHVi
bGljIFVuaXF1ZWRTdHJpbmdJbXBsIHsKIHB1YmxpYzoKLSAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBsb29rVXAoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRy
PEF0b21pY1N0cmluZ0ltcGw+IGxvb2tVcChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4g
bG9va1VwKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBsb29rVXAoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4g
bG9va1VwKFN0cmluZ0ltcGwqIHN0cmluZykKICAgICB7CiAgICAgICAgIGlmICghc3RyaW5nIHx8
IHN0cmluZy0+aXNBdG9taWMoKSkKQEAgLTQwLDI2ICs0MCwyNiBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgdm9pZCByZW1vdmUoQXRvbWljU3RyaW5nSW1wbCopOwogCi0gICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIHN0YXRpYyBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gYWRkKGNvbnN0IExDaGFy
Kik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8QXRvbWljU3RyaW5nSW1w
bD4gYWRkKGNvbnN0IExDaGFyKik7CiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUmVmUHRyPEF0
b21pY1N0cmluZ0ltcGw+IGFkZChjb25zdCBjaGFyKiBzKSB7IHJldHVybiBhZGQocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpKTsgfTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBhZGQoY29uc3QgTENoYXIqLCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21p
Y1N0cmluZ0ltcGw+IGFkZChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gYWRkKGNvbnN0
IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBhZGQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5n
dGgpOwogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBh
ZGQoY29uc3QgY2hhciogcywgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBhZGQocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpLCBsZW5ndGgpOyB9OwotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IGFkZChjb25zdCBVQ2hhciop
OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmluZ0lt
cGw+IGFkZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IGFk
ZChjb25zdCBVQ2hhciopOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPEF0
b21pY1N0cmluZ0ltcGw+IGFkZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJ
bXBsPiBhZGQoU3RyaW5nSW1wbCogc3RyaW5nKQogICAgIHsKICAgICAgICAgaWYgKCFzdHJpbmcp
CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KHN0cmlu
Zyk7CiAgICAgICAgIHJldHVybiBhZGQoKnN0cmluZyk7CiAgICAgfQotICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IGFkZChjb25zdCBTdGF0
aWNTdHJpbmdJbXBsKik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8QXRv
bWljU3RyaW5nSW1wbD4gYWRkTGl0ZXJhbChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0
cmluZ0ltcGw+IGFkZChjb25zdCBTdGF0aWNTdHJpbmdJbXBsKik7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWY8QXRvbWljU3RyaW5nSW1wbD4gYWRkTGl0ZXJhbChjb25zdCBjaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgLy8gUmV0dXJucyBudWxsIGlm
IHRoZSBpbnB1dCBkYXRhIGNvbnRhaW5zIGFuIGludmFsaWQgVVRGLTggc2VxdWVuY2UuCi0gICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gYWRk
VVRGOChjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBhZGRVVEY4KGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpOwogI2lmIFVTRShDRikKLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBhZGQoQ0ZTdHJpbmdS
ZWYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmluZ0lt
cGw+IGFkZChDRlN0cmluZ1JlZik7CiAjZW5kaWYKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ1RhYmxlUHJvdmlkZXI+CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBib29s
IGlzSW5BdG9taWNTdHJpbmdUYWJsZShTdHJpbmdJbXBsKik7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGlzSW5BdG9taWNTdHJpbmdUYWJsZShTdHJpbmdJbXBsKik7CiAjZW5k
aWYKIAogcHJpdmF0ZToKQEAgLTk1LDEwICs5NSwxMCBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gYWRkU2xvd0Nhc2Uoc3RyaW5nVGFibGUsIHN0cmluZyk7CiAgICAgfQogCi0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8QXRvbWljU3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2Uo
U3RyaW5nSW1wbCYpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPEF0b21p
Y1N0cmluZ0ltcGw+IGFkZFNsb3dDYXNlKEF0b21pY1N0cmluZ1RhYmxlJiwgU3RyaW5nSW1wbCYp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPEF0b21pY1N0cmluZ0ltcGw+IGFk
ZFNsb3dDYXNlKFN0cmluZ0ltcGwmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJl
ZjxBdG9taWNTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShBdG9taWNTdHJpbmdUYWJsZSYsIFN0cmlu
Z0ltcGwmKTsKIAotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21p
Y1N0cmluZ0ltcGw+IGxvb2tVcFNsb3dDYXNlKFN0cmluZ0ltcGwmKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBsb29rVXBTbG93Q2FzZShT
dHJpbmdJbXBsJik7CiB9OwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcu
aAppbmRleCBiZDE2ZjZkLi5mNjAyZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0NTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaApAQCAtMjYsNyAr
MjYsNiBAQAogI2lmbmRlZiBDU3RyaW5nX2gKICNkZWZpbmUgQ1N0cmluZ19oCiAKLSNpbmNsdWRl
IDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCA4NWIwYzIxLi5jZjdkZGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTIzNyw3ICsyMzcsNyBAQCBDaGFyVHlwZSog
U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZFNsb3codW5zaWduZWQgcmVxdWlyZWRM
ZW5ndGgpCiAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8Q2hhclR5cGU+KGV4cGFuZGVkQ2FwYWNp
dHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBB
U1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOwotICAgICAgICBhbGxvY2F0ZUJ1
ZmZlcihtX2xlbmd0aCA/IG1fc3RyaW5nLmNoYXJhY3RlcnM8Q2hhclR5cGU+KCkgOiAwLCBleHBh
bmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7CisgICAgICAgIGFsbG9j
YXRlQnVmZmVyKG1fbGVuZ3RoID8gV1RGOjpjaGFyYWN0ZXJzPENoYXJUeXBlPihtX3N0cmluZykg
OiAwLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7CiAgICAg
fQogICAgIAogICAgIENoYXJUeXBlKiByZXN1bHQgPSBnZXRCdWZmZXJDaGFyYWN0ZXJzPENoYXJU
eXBlPigpICsgbV9sZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDhl
NGM3MjAuLjExMzA4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBAIC02MCwy
MiArNjAsMjcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCiAgICAgewotICAgICAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgYXBwZW5k
KHN0cmluZy5pbXBsKCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZykKKyAgICB7CisgICAgICAgIGlmICghc3RyaW5nIHx8ICFzdHJpbmctPmxlbmd0
aCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGlu
ZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVD
YXBhY2l0eSBoYXMgbm90IGJlZW4gY2FsbGVkKQogICAgICAgICAvLyB0aGVuIGp1c3QgcmV0YWlu
IHRoZSBzdHJpbmcuCiAgICAgICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyKSB7Ci0gICAg
ICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpOworICAgICAgICAgICAgbV9zdHJpbmcgPSBjb25zdF9jYXN0PFN0cmluZ0ltcGwq
PihzdHJpbmcpOworICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOwogICAg
ICAgICAgICAgbV9pczhCaXQgPSBtX3N0cmluZy5pczhCaXQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgICAg
ICBhcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAg
IGlmIChzdHJpbmctPmlzOEJpdCgpKQorICAgICAgICAgICAgYXBwZW5kKHN0cmluZy0+Y2hhcmFj
dGVyczgoKSwgc3RyaW5nLT5sZW5ndGgoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFw
cGVuZChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgICAg
ICBhcHBlbmQoc3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLT5sZW5ndGgoKSk7CiAgICAg
fQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nQnVpbGRlciYgb3RoZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKaW5kZXggMThmZjNmOC4uZWY2NjliMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaApAQCAtMjU5LDYgKzI1OSwyNCBA
QCBwdWJsaWM6CiAgICAgfQogfTsKIAordGVtcGxhdGU8PgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nSW1wbCosIHZvaWQ+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZywg
dm9pZD4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKFN0cmluZ0ltcGwqIHN0cmlu
ZykKKyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmcsIHZvaWQ+KHN0cmluZykKKyAg
ICB7CisgICAgfQorfTsKKwordGVtcGxhdGU8PgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VW5p
cXVlZFN0cmluZ0ltcGwqLCB2b2lkPiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmcs
IHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihVbmlxdWVkU3RyaW5nSW1w
bCogc3RyaW5nKQorICAgICAgICA6IFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZywgdm9pZD4oc3Ry
aW5nKQorICAgIHsKKyAgICB9Cit9OworCiBpbmxpbmUgdm9pZCBzdW1XaXRoT3ZlcmZsb3coYm9v
bCYgb3ZlcmZsb3csIHVuc2lnbmVkJiB0b3RhbCwgdW5zaWduZWQgYWRkZW5kKQogewogICAgIHVu
c2lnbmVkIG9sZFRvdGFsID0gdG90YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRl
eCBmODM0OGQ1Li44ODIxODMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTI5
MSwxNCArMjkxLDE0IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3Qg
TENoYXIqIHN0cmluZykKICAgICByZXR1cm4gY3JlYXRlKHN0cmluZywgbGVuZ3RoKTsKIH0KIAot
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN1YnN0cmluZyh1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoKQorUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN1YnN0cmluZyh1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewogICAgIGlmIChzdGFydCA+PSBt
X2xlbmd0aCkKICAgICAgICAgcmV0dXJuICplbXB0eSgpOwogICAgIHVuc2lnbmVkIG1heExlbmd0
aCA9IG1fbGVuZ3RoIC0gc3RhcnQ7CiAgICAgaWYgKGxlbmd0aCA+PSBtYXhMZW5ndGgpIHsKICAg
ICAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAg
IHJldHVybiBjb25zdF9jYXN0PFN0cmluZ0ltcGwmPigqdGhpcyk7CiAgICAgICAgIGxlbmd0aCA9
IG1heExlbmd0aDsKICAgICB9CiAgICAgaWYgKGlzOEJpdCgpKQpAQCAtOTAxLDE0ICs5MDEsMTQg
QEAgZmxvYXQgU3RyaW5nSW1wbDo6dG9GbG9hdChib29sKiBvaykKICAgICByZXR1cm4gY2hhcmFj
dGVyc1RvRmxvYXQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKLXNpemVfdCBT
dHJpbmdJbXBsOjpmaW5kKENvZGVVbml0TWF0Y2hGdW5jdGlvbiBtYXRjaEZ1bmN0aW9uLCB1bnNp
Z25lZCBzdGFydCkKK3NpemVfdCBTdHJpbmdJbXBsOjpmaW5kKENvZGVVbml0TWF0Y2hGdW5jdGlv
biBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBzdGFydCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0
KCkpCiAgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIG1h
dGNoRnVuY3Rpb24sIHN0YXJ0KTsKICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigp
LCBtX2xlbmd0aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQpOwogfQogCi1zaXplX3QgU3RyaW5nSW1w
bDo6ZmluZChjb25zdCBMQ2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQorc2l6ZV90
IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgTENoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRl
eCkgY29uc3QKIHsKICAgICAvLyBDaGVjayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgdG8gbWF0
Y2ggYWdhaW5zdAogICAgIGlmICghbWF0Y2hTdHJpbmcpCkBAIC05ODAsNyArOTgwLDcgQEAgc2l6
ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgTENoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBp
bmRleCkKICAgICByZXR1cm4gaW5kZXggKyBpOwogfQogCi1zaXplX3QgU3RyaW5nSW1wbDo6Zmlu
ZChTdHJpbmdJbXBsKiBtYXRjaFN0cmluZykKK3NpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0
IFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nKSBjb25zdAogewogICAgIC8vIENoZWNrIGZvciBudWxs
IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0CiAgICAgaWYgKFVOTElLRUxZKCFtYXRjaFN0cmluZykp
CkBAIC0xMDE5LDcgKzEwMTksNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJbXBs
KiBtYXRjaFN0cmluZykKICAgICByZXR1cm4gZmluZElubmVyKGNoYXJhY3RlcnMxNigpLCBtYXRj
aFN0cmluZy0+Y2hhcmFjdGVyczE2KCksIDAsIGxlbmd0aCgpLCBtYXRjaExlbmd0aCk7CiB9CiAK
LXNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nLCB1bnNpZ25l
ZCBpbmRleCkKK3NpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IFN0cmluZ0ltcGwqIG1hdGNo
U3RyaW5nLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICAvLyBDaGVjayBmb3IgbnVsbCBv
ciBlbXB0eSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAogICAgIGlmIChVTkxJS0VMWSghbWF0Y2hT
dHJpbmcpKQpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25v
cmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywgdW5zaWduZWQKICAg
ICByZXR1cm4gOjpXVEY6OmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZSgqdGhpcywgKm1hdGNoU3RyaW5n
LCBzdGFydE9mZnNldCk7CiB9CiAKLXNpemVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChVQ2hh
ciBjaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4KQorc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VG
aW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGlz
OEJpdCgpKQogICAgICAgICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzOCgpLCBt
X2xlbmd0aCwgY2hhcmFjdGVyLCBpbmRleCk7CkBAIC0xMDg2LDcgKzEwODYsNyBAQCBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBzaXplX3QgcmV2ZXJzZUZpbmRJbm5lcihjb25zdCBTZWFyY2hDaGFyYWN0
ZXJUeXBlKiBzZWFyY2hDaAogICAgIHJldHVybiBkZWx0YTsKIH0KIAotc2l6ZV90IFN0cmluZ0lt
cGw6OnJldmVyc2VGaW5kKFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCkK
K3NpemVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywg
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgLy8gQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkg
c3RyaW5nIHRvIG1hdGNoIGFnYWluc3QKICAgICBpZiAoIW1hdGNoU3RyaW5nKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaAppbmRleCA3MDI5ZjE5Li5lMTJlMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaApAQCAtMjE4LDE2ICsyMTgsMTYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmdJbXBsKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBSZWY8U3RyaW5nSW1wbD4mJik7CiAKIHB1Ymxp
YzoKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIHZvaWQgZGVzdHJveShTdHJpbmdJ
bXBsKik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koU3RyaW5n
SW1wbCopOwogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1w
bD4gY3JlYXRlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0
cmluZ0ltcGw+IGNyZWF0ZThCaXRJZlBvc3NpYmxlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVh
dGUoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3Jl
YXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHRl
bXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVh
dGU4Qml0SWZQb3NzaWJsZShjb25zdCBWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYpOwot
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZThC
aXRJZlBvc3NpYmxlKGNvbnN0IFVDaGFyKik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIqKTsKIAog
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBjcmVhdGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOyB9Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IExDaGFy
Kik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRl
KGNvbnN0IExDaGFyKik7CiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+
IGNyZWF0ZShjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIGNyZWF0ZShyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oc3RyaW5nKSk7IH0KIAogICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1w
bD4gY3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoU3RyaW5nSW1wbCYsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKQEAgLTIzNSwxMyArMjM1LDEzIEBAIHB1YmxpYzoKICAgICB0
ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBj
cmVhdGVGcm9tTGl0ZXJhbChjb25zdCBjaGFyICgmKVtjaGFyYWN0ZXJDb3VudF0pOwogCiAgICAg
Ly8gRklYTUU6IFJlcGxhY2UgY2FsbHMgdG8gdGhlc2Ugb3ZlcmxvYWRzIG9mIGNyZWF0ZUZyb21M
aXRlcmFsIHRvIGNyZWF0ZVdpdGhvdXRDb3B5aW5nIGluc3RlYWQuCi0gICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlRnJvbUxpdGVyYWwoY29uc3Qg
Y2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRp
YyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlRnJvbUxpdGVyYWwoY29uc3QgY2hhciopOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZUZyb21MaXRlcmFs
KGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZUZyb21MaXRlcmFsKGNvbnN0IGNoYXIqKTsKIAot
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVdp
dGhvdXRDb3B5aW5nKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRob3V0Q29weWlu
Zyhjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgsIExDaGFyKiYpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0
cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRo
b3V0Q29weWluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29u
c3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBM
Q2hhciomKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBj
cmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiB0cnlD
cmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgQ2hhcmFjdGVyVHlwZSomKTsKIAog
ICAgIC8vIFJlYWxsb2NhdGUgdGhlIFN0cmluZ0ltcGwuIFRoZSBvcmlnaW5hbFN0cmluZyBtdXN0
IGJlIG9ubHkgb3duZWQgYnkgdGhlIFJlZiwKQEAgLTI2MSw4ICsyNjEsOCBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KICAgICBzdGF0
aWMgUmVmPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ1ZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJik7CiAKLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZG9wdChTdHJpbmdCdWZm
ZXI8VUNoYXI+JiYpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0cmlu
Z0ltcGw+IGFkb3B0KFN0cmluZ0J1ZmZlcjxMQ2hhcj4mJik7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRvcHQoU3RyaW5nQnVmZmVyPFVDaGFyPiYmKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZG9wdChTdHJp
bmdCdWZmZXI8TENoYXI+JiYpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KICAgICB1bnNpZ25lZCBtYXNrKCkgY29uc3QgeyByZXR1cm4gbV9tYXNr
OyB9CkBAIC0yNzgsNyArMjc4LDcgQEAgcHVibGljOgogICAgIHNpemVfdCBjb3N0KCkgY29uc3Q7
CiAgICAgc2l6ZV90IGNvc3REdXJpbmdHQygpOwogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXpl
X3Qgc2l6ZUluQnl0ZXMoKSBjb25zdDsKIAogICAgIGJvb2wgaXNTeW1ib2woKSBjb25zdCB7IHJl
dHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2w7IH0KICAg
ICBib29sIGlzQXRvbWljKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hG
bGFnU3RyaW5nS2luZElzQXRvbWljOyB9CkBAIC0yODgsMTMgKzI4OCwxMyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc1N1YlN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGJ1ZmZlck93bmVyc2hpcCgpID09
IEJ1ZmZlclN1YnN0cmluZzsgfQogI2VuZGlmCiAKLSAgICBzdGF0aWMgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIENTdHJpbmcgdXRmOEZvckNoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3Ry
aW5nIHV0ZjhGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZlcnNpb24pOwotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBDU3RyaW5nIHV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7Ci0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJpbmcgdXRmOChDb252ZXJzaW9uTW9kZSA9IExl
bmllbnRDb252ZXJzaW9uKSBjb25zdDsKKyAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklWQVRFIENT
dHJpbmcgdXRmOEZvckNoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHV0ZjhGb3JD
aGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnZl
cnNpb25Nb2RlID0gTGVuaWVudENvbnZlcnNpb24pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBD
U3RyaW5nIHV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29u
dmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIENTdHJpbmcgdXRmOChDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wg
dXRmOEltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY2hhciom
IGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIENvbnZlcnNpb25Nb2RlKTsKKyAgICBzdGF0aWMg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdXRmOEltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCwgY2hhciomIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIENvbnZl
cnNpb25Nb2RlKTsKICAgICAKICAgICAvLyBUaGUgaGlnaCBiaXRzIG9mICdoYXNoJyBhcmUgYWx3
YXlzIGVtcHR5LCBidXQgd2UgcHJlZmVyIHRvIHN0b3JlIG91ciBmbGFncwogICAgIC8vIGluIHRo
ZSBsb3cgYml0cyBiZWNhdXNlIGl0IG1ha2VzIHRoZW0gc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQg
dG8gYWNjZXNzLgpAQCAtMzcwLDEwMSArMzcwLDEwMiBAQCBwdWJsaWM6CiAgICAgLy8gaXRzIG93
biBjb3B5IG9mIHRoZSBzdHJpbmcuCiAgICAgUmVmPFN0cmluZ0ltcGw+IGlzb2xhdGVkQ29weSgp
IGNvbnN0OwogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBzdWJz
dHJpbmcodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxTdHJp
bmdJbXBsPiBzdWJzdHJpbmcodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgY29uc3Q7CiAKLSAgICBVQ2hhciBh
dCh1bnNpZ25lZCkgY29uc3Q7CisgICAgVUNoYXIgY2hhcmFjdGVyQXQodW5zaWduZWQpIGNvbnN0
OyAvLyBBcyB3aXRoIFN0cmluZywgb3V0LW9mLWJvdW5kcyByZXR1cm5zIDAuCisgICAgVUNoYXIg
YXQodW5zaWduZWQpIGNvbnN0OyAvLyBPdXQgb2YgYm91bmRzIGFzc2VydHMgb3V0LgogICAgIFVD
aGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLSAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgVUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVk
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVu
c2lnbmVkKTsKIAotICAgIGludCB0b0ludFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0g
MTApOwotICAgIHVuc2lnbmVkIHRvVUludFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0g
MTApOwotICAgIGludDY0X3QgdG9JbnQ2NFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0g
MTApOwotICAgIHVpbnQ2NF90IHRvVUludDY0U3RyaWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2Ug
PSAxMCk7Ci0gICAgaW50cHRyX3QgdG9JbnRQdHJTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFz
ZSA9IDEwKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHRvSW50U3RyaWN0KGJvb2wqIG9r
ID0gMCwgaW50IGJhc2UgPSAxMCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIHRv
VUludFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBpbnQ2NF90IHRvSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEw
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdWludDY0X3QgdG9VSW50NjRTdHJpY3QoYm9vbCog
b2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50cHRyX3Qg
dG9JbnRQdHJTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKIAotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBpbnQgdG9JbnQoYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFp
bGluZyBnYXJiYWdlCi0gICAgdW5zaWduZWQgdG9VSW50KGJvb2wqIG9rID0gMCk7IC8vIGlnbm9y
ZXMgdHJhaWxpbmcgZ2FyYmFnZQotICAgIGludDY0X3QgdG9JbnQ2NChib29sKiBvayA9IDApOyAv
LyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLSAgICB1aW50NjRfdCB0b1VJbnQ2NChib29sKiBv
ayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLSAgICBpbnRwdHJfdCB0b0ludFB0
cihib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgaW50IHRvSW50KGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcg
Z2FyYmFnZQorICAgIFdURl9FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCB0b1VJbnQoYm9vbCogb2sg
PSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGludDY0X3QgdG9JbnQ2NChib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJh
Z2UKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdWludDY0X3QgdG9VSW50NjQoYm9vbCogb2sgPSAw
KTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGlu
dHB0cl90IHRvSW50UHRyKGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFn
ZQogCiAgICAgLy8gRklYTUU6IExpa2UgdGhlIHN0cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNl
IGdpdmUgZmFsc2UgZm9yICJvayIgd2hlbiB0aGVyZSBpcyB0cmFpbGluZyBnYXJiYWdlLgogICAg
IC8vIExpa2UgdGhlIG5vbi1zdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVzZSByZXR1cm4gdGhl
IHZhbHVlIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KICAgICAvLyBJdCB3b3VsZCBi
ZSBiZXR0ZXIgaWYgdGhlc2Ugd2VyZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgYWJvdmUgZnVu
Y3Rpb25zIGluc3RlYWQuCi0gICAgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCk7Ci0gICAg
ZmxvYXQgdG9GbG9hdChib29sKiBvayA9IDApOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBkb3Vi
bGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQg
dG9GbG9hdChib29sKiBvayA9IDApOwogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxT
dHJpbmdJbXBsPiBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKLSAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdp
dGhvdXRMb2NhbGUoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+
IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJp
dCh1bnNpZ25lZCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBj
b252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxT
dHJpbmdJbXBsPiBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRM
b2NhbGUoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRU
b0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdCh1bnNpZ25l
ZCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9VcHBl
cmNhc2VXaXRob3V0TG9jYWxlKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxTdHJpbmdJ
bXBsPiBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxlSWRlbnRpZmllcik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxTdHJpbmdJbXBsPiBj
b252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRl
bnRpZmllcik7CiAKLSAgICBSZWY8U3RyaW5nSW1wbD4gZm9sZENhc2UoKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgUmVmPFN0cmluZ0ltcGw+IGZvbGRDYXNlKCk7CiAKLSAgICBSZWY8U3RyaW5n
SW1wbD4gc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxT
dHJpbmdJbXBsPiBzaW1wbGlmeVdoaXRlU3BhY2UoKTsKLSAgICBSZWY8U3RyaW5nSW1wbD4gc2lt
cGxpZnlXaGl0ZVNwYWNlKENvZGVVbml0TWF0Y2hGdW5jdGlvbik7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFJlZjxTdHJpbmdJbXBsPiBzdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgUmVmPFN0cmluZ0ltcGw+IHNpbXBsaWZ5V2hpdGVTcGFjZSgpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBSZWY8U3RyaW5nSW1wbD4gc2ltcGxpZnlXaGl0ZVNwYWNlKENvZGVVbml0
TWF0Y2hGdW5jdGlvbik7CiAKLSAgICBSZWY8U3RyaW5nSW1wbD4gc3RyaXBMZWFkaW5nQW5kVHJh
aWxpbmdDaGFyYWN0ZXJzKENvZGVVbml0TWF0Y2hGdW5jdGlvbik7Ci0gICAgUmVmPFN0cmluZ0lt
cGw+IHJlbW92ZUNoYXJhY3RlcnMoQ29kZVVuaXRNYXRjaEZ1bmN0aW9uKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgUmVmPFN0cmluZ0ltcGw+IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQ2hhcmFj
dGVycyhDb2RlVW5pdE1hdGNoRnVuY3Rpb24pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWY8
U3RyaW5nSW1wbD4gcmVtb3ZlQ2hhcmFjdGVycyhDb2RlVW5pdE1hdGNoRnVuY3Rpb24pOwogCiAg
ICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3Q7CiAgICAgYm9vbCBpc0FsbExhdGluMSgpIGNvbnN0
OwogICAgIHRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4gYm9vbCBpc0Fs
bFNwZWNpYWxDaGFyYWN0ZXJzKCkgY29uc3Q7CiAKLSAgICBzaXplX3QgZmluZChMQ2hhciBjaGFy
YWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCk7Ci0gICAgc2l6ZV90IGZpbmQoY2hhciBjaGFyYWN0
ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCk7Ci0gICAgc2l6ZV90IGZpbmQoVUNoYXIgY2hhcmFjdGVy
LCB1bnNpZ25lZCBzdGFydCA9IDApOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3Qg
ZmluZChDb2RlVW5pdE1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIGluZGV4ID0gMCk7Ci0gICAgc2l6
ZV90IGZpbmQoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBpbmRleCA9IDApOwotICAgIEFMV0FZU19J
TkxJTkUgc2l6ZV90IGZpbmQoY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBpbmRleCA9IDAp
IHsgcmV0dXJuIGZpbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHN0cmluZyksIGlu
ZGV4KTsgfQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgZmluZChTdHJpbmdJbXBs
Kik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBmaW5kKFN0cmluZ0ltcGwqLCB1
bnNpZ25lZCBpbmRleCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBmaW5kSWdu
b3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYpIGNvbnN0OwotICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwm
LCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IHNpemVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCopIGNvbnN0Owot
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNv
bnN0IFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Q7Ci0KLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFyLCB1bnNpZ25lZCBpbmRl
eCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIHNpemVfdCByZXZlcnNlRmluZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5k
ZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotCi0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmdJbXBsKikgY29uc3Q7
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmdJ
bXBsJikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgc3RhcnRzV2l0aEln
bm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwqKSBjb25zdDsKLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgYm9vbCBzdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5n
SW1wbCYpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIHN0YXJ0c1dpdGgo
VUNoYXIpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIHN0YXJ0c1dpdGgo
Y29uc3QgY2hhciosIHVuc2lnbmVkIG1hdGNoTGVuZ3RoKSBjb25zdDsKKyAgICBzaXplX3QgZmlu
ZChMQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3Q7CisgICAgc2l6ZV90
IGZpbmQoY2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3Q7CisgICAgc2l6
ZV90IGZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0OworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZmluZChDb2RlVW5pdE1hdGNoRnVuY3Rpb24sIHVu
c2lnbmVkIGluZGV4ID0gMCkgY29uc3Q7CisgICAgc2l6ZV90IGZpbmQoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBpbmRleCA9IDApIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IGZpbmQo
Y29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBpbmRleCA9IDApIGNvbnN0IHsgcmV0dXJuIGZp
bmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHN0cmluZyksIGluZGV4KTsgfQorICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZmluZChjb25zdCBTdHJpbmdJbXBsKikgY29uc3Q7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZ0ltcGwqLCB1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmaW5k
SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYpIGNvbnN0OworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwm
LCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNp
emVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCopIGNvbnN0OworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0
cmluZ0ltcGwqLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Q7CisKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFyLCB1bnNpZ25lZCBpbmRleCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHNpemVfdCByZXZlcnNlRmluZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIGNvbnN0OworCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmdJbXBsKikgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmdJbXBsJikg
Y29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc3RhcnRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwqKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBzdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYpIGNvbnN0
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHN0YXJ0c1dpdGgoVUNoYXIpIGNvbnN0Owor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHN0YXJ0c1dpdGgoY29uc3QgY2hhciosIHVuc2ln
bmVkIG1hdGNoTGVuZ3RoKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBtYXRjaExlbmd0
aD4gYm9vbCBzdGFydHNXaXRoKGNvbnN0IGNoYXIgKCZwcmVmaXgpW21hdGNoTGVuZ3RoXSkgY29u
c3QgeyByZXR1cm4gc3RhcnRzV2l0aChwcmVmaXgsIG1hdGNoTGVuZ3RoIC0gMSk7IH0KLSAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBoYXNJbmZpeFN0YXJ0aW5nQXQoY29uc3QgU3RyaW5n
SW1wbCYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25zdDsKLQotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBib29sIGVuZHNXaXRoKFN0cmluZ0ltcGwqKTsKLSAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgYm9vbCBlbmRzV2l0aChTdHJpbmdJbXBsJik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIGJvb2wgZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsKikgY29u
c3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgZW5kc1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZShjb25zdCBTdHJpbmdJbXBsJikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IGJvb2wgZW5kc1dpdGgoVUNoYXIpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBi
b29sIGVuZHNXaXRoKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBtYXRjaExlbmd0aCkgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzSW5maXhTdGFydGluZ0F0KGNvbnN0IFN0cmlu
Z0ltcGwmLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Q7CisKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBlbmRzV2l0aChTdHJpbmdJbXBsKik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgZW5kc1dpdGgoU3RyaW5nSW1wbCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29s
IGVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCopIGNvbnN0OworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3Qg
U3RyaW5nSW1wbCYpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVuZHNXaXRo
KFVDaGFyKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBlbmRzV2l0aChjb25z
dCBjaGFyKiwgdW5zaWduZWQgbWF0Y2hMZW5ndGgpIGNvbnN0OwogICAgIHRlbXBsYXRlPHVuc2ln
bmVkIG1hdGNoTGVuZ3RoPiBib29sIGVuZHNXaXRoKGNvbnN0IGNoYXIgKCZwcmVmaXgpW21hdGNo
TGVuZ3RoXSkgY29uc3QgeyByZXR1cm4gZW5kc1dpdGgocHJlZml4LCBtYXRjaExlbmd0aCAtIDEp
OyB9Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgaGFzSW5maXhFbmRpbmdBdChjb25z
dCBTdHJpbmdJbXBsJiwgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25zdDsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgYm9vbCBoYXNJbmZpeEVuZGluZ0F0KGNvbnN0IFN0cmluZ0ltcGwmLCB1bnNpZ25l
ZCBlbmRPZmZzZXQpIGNvbnN0OwogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJp
bmdJbXBsPiByZXBsYWNlKFVDaGFyLCBVQ2hhcik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBTdHJpbmdJbXBsKik7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBVQ2hhcik7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBTdHJpbmdJ
bXBsKik7CiAgICAgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciBw
YXR0ZXJuLCBjb25zdCBjaGFyKiByZXBsYWNlbWVudCwgdW5zaWduZWQgcmVwbGFjZW1lbnRMZW5n
dGgpIHsgcmV0dXJuIHJlcGxhY2UocGF0dGVybiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KHJlcGxhY2VtZW50KSwgcmVwbGFjZW1lbnRMZW5ndGgpOyB9Ci0gICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBjb25zdCBMQ2hhciosIHVu
c2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmPFN0
cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIGNvbnN0IExDaGFyKiwgdW5zaWduZWQgcmVwbGFjZW1l
bnRMZW5ndGgpOwogICAgIFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgUmVmPFN0cmluZ0ltcGw+IHJlcGxhY2UoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsKLSAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IHJlcGxhY2UodW5zaWduZWQg
aW5kZXgsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nSW1wbCopOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBSZWY8U3RyaW5nSW1wbD4gcmVwbGFjZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWY8U3RyaW5nSW1wbD4gcmVwbGFjZSh1bnNpZ25lZCBp
bmRleCwgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdJbXBsKik7CiAKLSAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgVUNoYXJEaXJlY3Rpb24gZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oYm9vbCogaGFz
U3Ryb25nRGlyZWN0aW9uYWxpdHkgPSBudWxscHRyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
VUNoYXJEaXJlY3Rpb24gZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGly
ZWN0aW9uYWxpdHkgPSBudWxscHRyKTsKIAogI2lmIFVTRShDRikKICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGNyZWF0ZUNGU3RyaW5nKCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fT0JKQ19fCi0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIG9wZXJhdG9yIE5TU3RyaW5nICooKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgb3BlcmF0b3IgTlNTdHJpbmcgKigpOwogI2VuZGlmCiAKICNpZiBTVFJJ
TkdfU1RBVFMKQEAgLTUzNywyNSArNTM4LDI1IEBAIHRlbXBsYXRlPD4gc3RydWN0IFZhbHVlQ2hl
Y2s8U3RyaW5nSW1wbCo+IHsKIAogI2VuZGlmCiAKLVdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBTdHJpbmdJbXBsKik7Ci1XVEZfRVhQT1JU
X1NUUklOR19BUEkgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqKTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBT
dHJpbmdJbXBsKik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJ
bXBsKiwgY29uc3QgTENoYXIqKTsKIGlubGluZSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwq
IGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihiKSk7IH0KLVdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsKGNvbnN0
IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsKLVdURl9FWFBPUlRfU1RSSU5H
X0FQSSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hhciosIHVuc2lnbmVk
KTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25z
dCBMQ2hhciosIHVuc2lnbmVkKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsKGNvbnN0
IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hhciosIHVuc2lnbmVkKTsKIGlubGluZSBib29sIGVxdWFs
KGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyBy
ZXR1cm4gZXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpLCBsZW5ndGgp
OyB9CiBpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBMQ2hhciogYSwgU3RyaW5nSW1wbCogYikgeyBy
ZXR1cm4gZXF1YWwoYiwgYSk7IH0KIGlubGluZSBib29sIGVxdWFsKGNvbnN0IGNoYXIqIGEsIFN0
cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFsKGIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihhKSk7IH0KLVdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsKGNvbnN0IFN0cmlu
Z0ltcGwmIGEsIGNvbnN0IFN0cmluZ0ltcGwmIGIpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCYgYSwgY29uc3QgU3RyaW5nSW1wbCYgYik7CiAKLVdURl9F
WFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KFN0cmluZ0ltcGwqLCBT
dHJpbmdJbXBsKik7Ci1XVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbElnbm9yaW5nTnVs
bGl0eShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFN0cmluZ0ltcGwqKTsKK1dURl9FWFBP
UlRfUFJJVkFURSBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KFN0cmluZ0ltcGwqLCBTdHJpbmdJ
bXBsKik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBlcXVhbElnbm9yaW5nTnVsbGl0eShjb25z
dCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFN0cmluZ0ltcGwqKTsKIAogYm9vbCBlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmLCBjb25zdCBTdHJpbmdJbXBsJik7Ci1XVEZf
RVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmlu
Z0ltcGwqLCBjb25zdCBTdHJpbmdJbXBsKik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBTdHJpbmdJbXBsKik7
CiBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYsIGNvbnN0IGNo
YXIqKTsKIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsKiwgY29u
c3QgY2hhciopOwogCi1XVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbElnbm9yaW5nQVND
SUlDYXNlTm9uTnVsbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgU3RyaW5nSW1wbCopOworV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZU5vbk51bGwoY29uc3Qg
U3RyaW5nSW1wbCosIGNvbnN0IFN0cmluZ0ltcGwqKTsKIAogdGVtcGxhdGU8dW5zaWduZWQgbGVu
Z3RoPiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwm
LCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7CiB0ZW1wbGF0ZTx1bnNp
Z25lZCBsZW5ndGg+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3Ry
aW5nSW1wbCosIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKQEAgLTU4
OCw2ICs1ODksMTMgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8UmVmUHRyPFN0cmlu
Z0ltcGw+PiB7CiAgICAgdHlwZWRlZiBTdHJpbmdIYXNoIEhhc2g7CiB9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDsKK3RlbXBsYXRl
PD4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJpbmdJbXBsPiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxTdHJpbmdJbXBsPjsKKyAgICB1c2luZyBBZGRp
dGlvbmFsQXJndW1lbnRUeXBlID0gdm9pZDsKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBmbHVzaChM
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB2b2lkKikgeyByZXR1cm4gU3RyaW5n
SW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMsIGxlbmd0aCk7IH0KK307CisKICNkZWZpbmUgTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoY2hhcmFjdGVycykgKFtdIHsgXAogICAgICAgICBzdGF0aWMgU3Rh
dGljU3RyaW5nSW1wbCBpbXBsKGNoYXJhY3RlcnMpOyBcCiAgICAgICAgIHJldHVybiAmaW1wbDsg
XApAQCAtNjczLDE5ICs2ODEsMTkgQEAgaW5saW5lIHNpemVfdCByZXZlcnNlRmluZChjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciBtYXRjaEMKICAgICByZXR1
cm4gcmV2ZXJzZUZpbmQoY2hhcmFjdGVycywgbGVuZ3RoLCBzdGF0aWNfY2FzdDxMQ2hhcj4obWF0
Y2hDaGFyYWN0ZXIpLCBpbmRleCk7CiB9CiAKLWlubGluZSBzaXplX3QgU3RyaW5nSW1wbDo6Zmlu
ZChMQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0KQoraW5saW5lIHNpemVfdCBTdHJpbmdJ
bXBsOjpmaW5kKExDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQpIGNvbnN0CiB7CiAgICAg
aWYgKGlzOEJpdCgpKQogICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnM4KCksIG1f
bGVuZ3RoLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3Rl
cnMxNigpLCBtX2xlbmd0aCwgY2hhcmFjdGVyLCBzdGFydCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
c2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0KQor
QUxXQVlTX0lOTElORSBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChjaGFyIGNoYXJhY3RlciwgdW5z
aWduZWQgc3RhcnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZpbmQoc3RhdGljX2Nhc3Q8TENoYXI+
KGNoYXJhY3RlciksIHN0YXJ0KTsKIH0KIAotaW5saW5lIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5k
KFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQpCitpbmxpbmUgc2l6ZV90IFN0cmluZ0lt
cGw6OmZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCkgY29uc3QKIHsKICAgICBp
ZiAoaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczgoKSwgbV9s
ZW5ndGgsIGNoYXJhY3Rlciwgc3RhcnQpOwpAQCAtMTA3NSw2ICsxMDgzLDEzIEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhVQ2hhciogZGVzdGluYXRpb24s
IGNvbnN0IExDaGFyKiBzCiAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc291cmNlW2ldOwogfQog
CitpbmxpbmUgVUNoYXIgU3RyaW5nSW1wbDo6Y2hhcmFjdGVyQXQodW5zaWduZWQgaSkgY29uc3QK
K3sKKyAgICBpZiAoaSA+PSBtX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGF0KGkpOworfQorCiBpbmxpbmUgVUNoYXIgU3RyaW5nSW1wbDo6YXQodW5zaWduZWQgaSkgY29u
c3QKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCBkMzgyY2UzLi43YmExOTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
ICAgIFN0cmluZ1ZpZXcoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgU3RyaW5nVmlldyhjb25z
dCBTdHJpbmcmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmdWaWV3KGNvbnN0IFBv
aXNvbmFibGVTdHJpbmc8VD4mKTsKICAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwmKTsK
ICAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwqKTsKICAgICBTdHJpbmdWaWV3KGNvbnN0
IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKQEAgLTk3LDE2ICs5NywxNiBAQCBwdWJsaWM6CiAK
ICNpZiBVU0UoQ0YpCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBudWxsIHN0cmluZ3Mg
dG8gZW1wdHkgc3RyaW5ncy4KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBjcmVhdGVDRlN0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY3JlYXRlQ0ZTdHJpbmdXaXRo
b3V0Q29weWluZygpIGNvbnN0OwogI2VuZGlmCiAKICNpZmRlZiBfX09CSkNfXwogICAgIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IG51bGwgc3RyaW5ncyB0byBlbXB0eSBzdHJpbmdzLgotICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZXRhaW5QdHI8TlNTdHJpbmc+IGNyZWF0ZU5TU3RyaW5n
KCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFpblB0cjxOU1N0cmluZz4g
Y3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBSZXRhaW5QdHI8TlNTdHJpbmc+IGNyZWF0ZU5TU3RyaW5nKCkgY29uc3Q7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIFJldGFpblB0cjxOU1N0cmluZz4gY3JlYXRlTlNTdHJpbmdXaXRob3V0
Q29weWluZygpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQ1N0
cmluZyB1dGY4KENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZlcnNpb24pIGNvbnN0OworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHV0ZjgoQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50
Q29udmVyc2lvbikgY29uc3Q7CiAKICAgICBjbGFzcyBVcGNvbnZlcnRlZENoYXJhY3RlcnM7CiAg
ICAgVXBjb252ZXJ0ZWRDaGFyYWN0ZXJzIHVwY29udmVydGVkQ2hhcmFjdGVycygpIGNvbnN0OwpA
QCAtMTI3LDIyICsxMjcsMjIgQEAgcHVibGljOgogICAgIHNpemVfdCBmaW5kKFVDaGFyLCB1bnNp
Z25lZCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBmaW5kKENvZGVVbml0TWF0Y2hGdW5j
dGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdDsKIAotICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBzaXplX3QgZmluZChTdHJpbmdWaWV3LCB1bnNpZ25lZCBzdGFydCkgY29uc3Q7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmaW5kKFN0cmluZ1ZpZXcsIHVuc2lnbmVkIHN0YXJ0
KSBjb25zdDsKIAogICAgIHNpemVfdCByZXZlcnNlRmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXgg
PSBVSU5UX01BWCkgY29uc3Q7CiAKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IGZp
bmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHNpemVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5n
VmlldyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29u
c3QgU3RyaW5nVmlldyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25zdDsKIAogICAgIGJvb2wg
Y29udGFpbnMoVUNoYXIpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGNv
bnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OwotICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29uc3Qg
U3RyaW5nVmlldyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25zdDsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgYm9vbCBjb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ1ZpZXcm
KSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc0lnbm9yaW5nQVND
SUlDYXNlKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Q7CiAK
LSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0cmluZ1Zp
ZXcmKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBzdGFydHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIHN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBT
dHJpbmdWaWV3JikgY29uc3Q7CiAKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlbmRz
V2l0aChjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IGJvb2wgZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZW5kc1dpdGgoY29uc3QgU3RyaW5nVmlldyYp
IGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVuZHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UoY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OwogCiAgICAgaW50IHRvSW50KCkgY29uc3Q7
CiAgICAgaW50IHRvSW50KGJvb2wmIGlzVmFsaWQpIGNvbnN0OwpAQCAtMTY2LDkgKzE2Niw5IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nVmlldyBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRD
aGFyYWN0ZXJzKGNvbnN0IENoYXJhY3RlclR5cGUqLCBjb25zdCBNYXRjaGVkQ2hhcmFjdGVyUHJl
ZGljYXRlJik7CiAKICNpZiBDSEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FCi0gICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIGJvb2wgdW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSBjb25zdDsKLSAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmlu
Z0ltcGwqKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBzZXRVbmRlcmx5aW5nU3Ry
aW5nKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bmRl
cmx5aW5nU3RyaW5nSXNWYWxpZCgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHNldFVuZGVybHlpbmdTdHJpbmcoY29uc3QgU3RyaW5nSW1wbCopOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIHNldFVuZGVybHlpbmdTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOwogI2Vs
c2UKICAgICBib29sIHVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZvaWQgc2V0VW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJpbmdJbXBsKikgeyB9
CkBAIC0zNDcsNyArMzQ3LDcgQEAgaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3Qg
U3RyaW5nSW1wbCogc3RyaW5nKQogICAgICAgICBpbml0aWFsaXplKHN0cmluZy0+Y2hhcmFjdGVy
czE2KCksIHN0cmluZy0+bGVuZ3RoKCksIHN0cmluZy0+bWFzaygpKTsKIH0KIAotaW5saW5lIFN0
cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBQb2lzb25hYmxlU3Ry
aW5nPFQ+JiBzdHJpbmcpCiB7CiAgICAgc2V0VW5kZXJseWluZ1N0cmluZyhzdHJpbmcuaW1wbCgp
KTsKICAgICBpZiAoIXN0cmluZy5pbXBsKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3ltYm9sSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKaW5k
ZXggZDRjM2Y2Ni4uMjU0NTVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TeW1i
b2xJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKQEAgLTUwLDgg
KzUwLDggQEAgcHVibGljOgogCiAgICAgUmVnaXN0ZXJlZFN5bWJvbEltcGwqIGFzUmVnaXN0ZXJl
ZFN5bWJvbEltcGwoKTsKIAotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN5
bWJvbEltcGw+IGNyZWF0ZU51bGxTeW1ib2woKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFJlZjxTeW1ib2xJbXBsPiBjcmVhdGUoU3RyaW5nSW1wbCYgcmVwKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTeW1ib2xJbXBsPiBjcmVhdGVOdWxsU3ltYm9sKCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8U3ltYm9sSW1wbD4gY3JlYXRlKFN0
cmluZ0ltcGwmIHJlcCk7CiAKICAgICBjbGFzcyBTdGF0aWNTeW1ib2xJbXBsIDogcHJpdmF0ZSBT
dHJpbmdJbXBsU2hhcGUgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGF0aWNTeW1i
b2xJbXBsKTsKQEAgLTEyNiw4ICsxMjYsOCBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihTeW1ib2xJ
bXBsKSA9PSBzaXplb2YoU3ltYm9sSW1wbDo6U3RhdGljU3ltYm9sSW1wbCksICIiKTsKIAogY2xh
c3MgUHJpdmF0ZVN5bWJvbEltcGwgOiBwdWJsaWMgU3ltYm9sSW1wbCB7CiBwdWJsaWM6Ci0gICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8UHJpdmF0ZVN5bWJvbEltcGw+IGNyZWF0
ZU51bGxTeW1ib2woKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxQcml2
YXRlU3ltYm9sSW1wbD4gY3JlYXRlKFN0cmluZ0ltcGwmIHJlcCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWY8UHJpdmF0ZVN5bWJvbEltcGw+IGNyZWF0ZU51bGxTeW1ib2woKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxQcml2YXRlU3ltYm9sSW1wbD4gY3Jl
YXRlKFN0cmluZ0ltcGwmIHJlcCk7CiAKIHByaXZhdGU6CiAgICAgUHJpdmF0ZVN5bWJvbEltcGwo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+
JiYgYmFzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCA3MjczM2ZlLi5lZGRkNmMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC00MCw0MDYgKzQwLDM0MCBAQCBuYW1l
c3BhY2UgV1RGIHsKIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiAvLyBDb25zdHJ1Y3QgYSBz
dHJpbmcgd2l0aCBVVEYtMTYgZGF0YS4KLVN0cmluZzo6U3RyaW5nKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6
OmNyZWF0ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAg
IGlmIChjaGFyYWN0ZXJzKQotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hh
cmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShjaGFy
YWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAvLyBDb25zdHJ1Y3Qg
YSBzdHJpbmcgd2l0aCBVVEYtMTYgZGF0YSwgZnJvbSBhIG51bGwtdGVybWluYXRlZCBzb3VyY2Uu
Ci1TdHJpbmc6OlN0cmluZyhjb25zdCBVQ2hhciogbnVsbFRlcm1pbmF0ZWRTdHJpbmcpCitSZWZQ
dHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6OmNyZWF0ZShjb25zdCBVQ2hhciogbnVsbFRlcm1p
bmF0ZWRTdHJpbmcpCiB7CiAgICAgaWYgKG51bGxUZXJtaW5hdGVkU3RyaW5nKQotICAgICAgICBt
X2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUobnVsbFRlcm1pbmF0ZWRTdHJpbmcsIGxlbmd0aE9m
TnVsbFRlcm1pbmF0ZWRTdHJpbmcobnVsbFRlcm1pbmF0ZWRTdHJpbmcpKTsKKyAgICAgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShudWxsVGVybWluYXRlZFN0cmluZywgbGVuZ3RoT2ZOdWxs
VGVybWluYXRlZFN0cmluZyhudWxsVGVybWluYXRlZFN0cmluZykpOworICAgIHJldHVybiBudWxs
cHRyOwogfQogCiAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4KLVN0cmlu
Zzo6U3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitSZWZQ
dHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6OmNyZWF0ZShjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmIChjaGFyYWN0ZXJzKQotICAgICAgICBtX2lt
cGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1TdHJpbmc6OlN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6OmNyZWF0ZShjb25z
dCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGNoYXJhY3Rl
cnMpCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBTdHJp
bmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMp
LCBsZW5ndGgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAvLyBDb25zdHJ1Y3QgYSBzdHJp
bmcgd2l0aCBMYXRpbi0xIGRhdGEsIGZyb20gYSBudWxsLXRlcm1pbmF0ZWQgc291cmNlLgotU3Ry
aW5nOjpTdHJpbmcoY29uc3QgTENoYXIqIG51bGxUZXJtaW5hdGVkU3RyaW5nKQorUmVmUHRyPFN0
cmluZ0ltcGw+IEJhc2ljU3RyaW5nOjpjcmVhdGUoY29uc3QgTENoYXIqIG51bGxUZXJtaW5hdGVk
U3RyaW5nKQogewogICAgIGlmIChudWxsVGVybWluYXRlZFN0cmluZykKLSAgICAgICAgbV9pbXBs
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKG51bGxUZXJtaW5hdGVkU3RyaW5nKTsKKyAgICAgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShudWxsVGVybWluYXRlZFN0cmluZyk7CisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLVN0cmluZzo6U3RyaW5nKGNvbnN0IGNoYXIqIG51bGxUZXJtaW5hdGVk
U3RyaW5nKQorUmVmUHRyPFN0cmluZ0ltcGw+IEJhc2ljU3RyaW5nOjpjcmVhdGUoY29uc3QgY2hh
ciogbnVsbFRlcm1pbmF0ZWRTdHJpbmcpCiB7CiAgICAgaWYgKG51bGxUZXJtaW5hdGVkU3RyaW5n
KQotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KG51bGxUZXJtaW5hdGVkU3RyaW5nKSk7CisgICAgICAgIHJldHVybiBTdHJp
bmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG51bGxUZXJtaW5h
dGVkU3RyaW5nKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVN0cmluZzo6U3RyaW5nKEFT
Q0lJTGl0ZXJhbCBjaGFyYWN0ZXJzKQotICAgIDogbV9pbXBsKFN0cmluZ0ltcGw6OmNyZWF0ZUZy
b21MaXRlcmFsKGNoYXJhY3RlcnMpKQorUmVmUHRyPFN0cmluZ0ltcGw+IEJhc2ljU3RyaW5nOjpj
cmVhdGUoQVNDSUlMaXRlcmFsIGNoYXJhY3RlcnMpCiB7CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmNyZWF0ZUZyb21MaXRlcmFsKGNoYXJhY3RlcnMpOwogfQogCi12b2lkIFN0cmluZzo6YXBwZW5k
KGNvbnN0IFN0cmluZyYgb3RoZXJTdHJpbmcpCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJp
bmc6OmFwcGVuZChTdHJpbmdJbXBsKiB0aGlzU3RyaW5nLCBTdHJpbmdJbXBsKiBvdGhlclN0cmlu
ZykKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQuIFNvIG11
Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3RyaW5nJ3MgQVBJ
LgogCi0gICAgaWYgKCFtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsID0gb3RoZXJTdHJpbmcubV9p
bXBsOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGhpc1N0cmluZykKKyAgICAg
ICAgcmV0dXJuIG90aGVyU3RyaW5nOwogCi0gICAgaWYgKG90aGVyU3RyaW5nLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmICghb3RoZXJTdHJpbmcgfHwgb3RoZXJTdHJpbmctPmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRoaXNTdHJpbmc7CiAKLSAgICBhdXRvIGxlbmd0aCA9
IG1faW1wbC0+bGVuZ3RoKCk7Ci0gICAgYXV0byBvdGhlckxlbmd0aCA9IG90aGVyU3RyaW5nLm1f
aW1wbC0+bGVuZ3RoKCk7CisgICAgYXV0byBsZW5ndGggPSB0aGlzU3RyaW5nLT5sZW5ndGgoKTsK
KyAgICBhdXRvIG90aGVyTGVuZ3RoID0gb3RoZXJTdHJpbmctPmxlbmd0aCgpOwogICAgIGlmIChv
dGhlckxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIGxlbmd0
aCkKICAgICAgICAgQ1JBU0goKTsKIAotICAgIGlmIChtX2ltcGwtPmlzOEJpdCgpICYmIG90aGVy
U3RyaW5nLm1faW1wbC0+aXM4Qml0KCkpIHsKKyAgICBpZiAodGhpc1N0cmluZy0+aXM4Qml0KCkg
JiYgb3RoZXJTdHJpbmctPmlzOEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBkYXRhOwogICAgICAg
ICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCAr
IG90aGVyTGVuZ3RoLCBkYXRhKTsKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMo
ZGF0YSwgbV9pbXBsLT5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwotICAgICAgICBTdHJpbmdJbXBs
Ojpjb3B5Q2hhcmFjdGVycyhkYXRhICsgbGVuZ3RoLCBvdGhlclN0cmluZy5tX2ltcGwtPmNoYXJh
Y3RlcnM4KCksIG90aGVyTGVuZ3RoKTsKLSAgICAgICAgbV9pbXBsID0gV1RGTW92ZShuZXdJbXBs
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhk
YXRhLCB0aGlzU3RyaW5nLT5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOworICAgICAgICBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhICsgbGVuZ3RoLCBvdGhlclN0cmluZy0+Y2hhcmFjdGVy
czgoKSwgb3RoZXJMZW5ndGgpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKICAgICB9CiAgICAg
VUNoYXIqIGRhdGE7CiAgICAgYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0
aWFsaXplZChsZW5ndGggKyBvdGhlckxlbmd0aCwgZGF0YSk7Ci0gICAgU3RyaW5nVmlldygqbV9p
bXBsKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhKTsKLSAgICBTdHJpbmdWaWV3KCpv
dGhlclN0cmluZy5tX2ltcGwpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBsZW5n
dGgpOwotICAgIG1faW1wbCA9IFdURk1vdmUobmV3SW1wbCk7CisgICAgU3RyaW5nVmlldygqdGhp
c1N0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSk7CisgICAgU3RyaW5nVmll
dygqb3RoZXJTdHJpbmcpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBsZW5ndGgp
OworICAgIHJldHVybiBuZXdJbXBsOwogfQogCi12b2lkIFN0cmluZzo6YXBwZW5kKExDaGFyIGNo
YXJhY3RlcikKK1JlZlB0cjxTdHJpbmdJbXBsPiBCYXNpY1N0cmluZzo6YXBwZW5kKFN0cmluZ0lt
cGwqIHRoaXNTdHJpbmcsIExDaGFyIGNoYXJhY3RlcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBleHRyZW1lbHkgaW5lZmZpY2llbnQuIFNvIG11Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRv
IHRha2UgdGhpcyBvdXQgb2YgU3RyaW5nJ3MgQVBJLgogCi0gICAgaWYgKCFtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKCZjaGFyYWN0ZXIsIDEpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXM4Qml0KCkpIHsKLSAgICAgICAgYXBwZW5kKHN0
YXRpY19jYXN0PFVDaGFyPihjaGFyYWN0ZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAobV9pbXBsLT5sZW5ndGgoKSA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpCisgICAgaWYgKCF0aGlzU3RyaW5nKQorICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6
Y3JlYXRlKCZjaGFyYWN0ZXIsIDEpOworCisgICAgaWYgKCF0aGlzU3RyaW5nLT5pczhCaXQoKSkK
KyAgICAgICAgcmV0dXJuIEJhc2ljU3RyaW5nOjphcHBlbmQodGhpc1N0cmluZywgc3RhdGljX2Nh
c3Q8VUNoYXI+KGNoYXJhY3RlcikpOworCisgICAgaWYgKHRoaXNTdHJpbmctPmxlbmd0aCgpID49
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsK
ICAgICBMQ2hhciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVV
bmluaXRpYWxpemVkKG1faW1wbC0+bGVuZ3RoKCkgKyAxLCBkYXRhKTsKLSAgICBTdHJpbmdJbXBs
Ojpjb3B5Q2hhcmFjdGVycyhkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnM4KCksIG1faW1wbC0+bGVu
Z3RoKCkpOwotICAgIGRhdGFbbV9pbXBsLT5sZW5ndGgoKV0gPSBjaGFyYWN0ZXI7Ci0gICAgbV9p
bXBsID0gV1RGTW92ZShuZXdJbXBsKTsKKyAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpj
cmVhdGVVbmluaXRpYWxpemVkKHRoaXNTdHJpbmctPmxlbmd0aCgpICsgMSwgZGF0YSk7CisgICAg
U3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSwgdGhpc1N0cmluZy0+Y2hhcmFjdGVyczgo
KSwgdGhpc1N0cmluZy0+bGVuZ3RoKCkpOworICAgIGRhdGFbdGhpc1N0cmluZy0+bGVuZ3RoKCld
ID0gY2hhcmFjdGVyOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCi12b2lkIFN0cmluZzo6YXBw
ZW5kKFVDaGFyIGNoYXJhY3RlcikKK1JlZlB0cjxTdHJpbmdJbXBsPiBCYXNpY1N0cmluZzo6YXBw
ZW5kKFN0cmluZ0ltcGwqIHRoaXNTdHJpbmcsIFVDaGFyIGNoYXJhY3RlcikKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQuIFNvIG11Y2ggc28gdGhhdCB3ZSBt
aWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3RyaW5nJ3MgQVBJLgogCi0gICAgaWYgKCFt
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKCZjaGFyYWN0ZXIs
IDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjaGFyYWN0ZXIgPD0gMHhGRiAm
JiBpczhCaXQoKSkgewotICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3Rl
cikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX2ltcGwtPmxlbmd0aCgpID49
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICBpZiAoIXRoaXNTdHJp
bmcpCisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUoJmNoYXJhY3RlciwgMSk7CisK
KyAgICBpZiAoY2hhcmFjdGVyIDw9IDB4RkYgJiYgdGhpc1N0cmluZy0+aXM4Qml0KCkpCisgICAg
ICAgIHJldHVybiBCYXNpY1N0cmluZzo6YXBwZW5kKHRoaXNTdHJpbmcsIHN0YXRpY19jYXN0PExD
aGFyPihjaGFyYWN0ZXIpKTsKKworICAgIGlmICh0aGlzU3RyaW5nLT5sZW5ndGgoKSA+PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNIKCk7CiAgICAg
VUNoYXIqIGRhdGE7Ci0gICAgYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0
aWFsaXplZChtX2ltcGwtPmxlbmd0aCgpICsgMSwgZGF0YSk7Ci0gICAgU3RyaW5nVmlldygqbV9p
bXBsKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhKTsKLSAgICBkYXRhW21faW1wbC0+
bGVuZ3RoKCldID0gY2hhcmFjdGVyOwotICAgIG1faW1wbCA9IFdURk1vdmUobmV3SW1wbCk7Cisg
ICAgYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh0aGlzU3Ry
aW5nLT5sZW5ndGgoKSArIDEsIGRhdGEpOworICAgIFN0cmluZ1ZpZXcoKnRoaXNTdHJpbmcpLmdl
dENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEpOworICAgIGRhdGFbdGhpc1N0cmluZy0+bGVu
Z3RoKCldID0gY2hhcmFjdGVyOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCi1pbnQgY29kZVBv
aW50Q29tcGFyZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikKK1JlZlB0cjxTdHJp
bmdJbXBsPiBCYXNpY1N0cmluZzo6YXBwZW5kKFN0cmluZ0ltcGwqIHRoaXNTdHJpbmcsIGNvbnN0
IGNoYXIqIG90aGVyU3RyaW5nKQogewotICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEuaW1w
bCgpLCBiLmltcGwoKSk7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNp
ZW50LiBTbyBtdWNoIHNvIHRoYXQgd2UgbWlnaHQgd2FudCB0byB0YWtlIHRoaXMgb3V0IG9mIFN0
cmluZydzIEFQSS4KKworICAgIGlmICghb3RoZXJTdHJpbmcpCisgICAgICAgIHJldHVybiB0aGlz
U3RyaW5nOworCisgICAgYXV0byBvdGhlckxlbmd0aCA9IHN0cmxlbihvdGhlclN0cmluZyk7Cisg
ICAgaWYgKCFvdGhlckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHRoaXNTdHJpbmc7CisgICAgaWYg
KCF0aGlzU3RyaW5nKQorICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVy
YWwob3RoZXJTdHJpbmcpOworCisgICAgYXV0byBsZW5ndGggPSB0aGlzU3RyaW5nLT5sZW5ndGgo
KTsKKyAgICBpZiAob3RoZXJMZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgLSBsZW5ndGgpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpZiAodGhpc1N0cmluZy0+
aXM4Qml0KCkpIHsKKyAgICAgICAgTENoYXIqIGRhdGE7CisgICAgICAgIGF1dG8gbmV3SW1wbCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoICsgb3RoZXJMZW5ndGgsIGRh
dGEpOworICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhLCB0aGlzU3RyaW5n
LT5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOworICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFj
dGVycyhkYXRhICsgbGVuZ3RoLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ob3RoZXJT
dHJpbmcpLCBvdGhlckxlbmd0aCk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOworICAgIH0KKyAg
ICBVQ2hhciogZGF0YTsKKyAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCArIG90aGVyTGVuZ3RoLCBkYXRhKTsKKyAgICBTdHJpbmdWaWV3KCp0
aGlzU3RyaW5nKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhKTsKKyAgICBTdHJpbmdW
aWV3KG90aGVyU3RyaW5nKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsgbGVuZ3Ro
KTsKKyAgICByZXR1cm4gbmV3SW1wbDsKIH0KIAotdm9pZCBTdHJpbmc6Omluc2VydChjb25zdCBT
dHJpbmcmIHN0cmluZywgdW5zaWduZWQgcG9zaXRpb24pCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFz
aWNTdHJpbmc6Omluc2VydChTdHJpbmdJbXBsKiB0aGlzU3RyaW5nLCBTdHJpbmdJbXBsKiBvdGhl
clN0cmluZywgdW5zaWduZWQgcG9zaXRpb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgZXh0
cmVtZWx5IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2UgbWlnaHQgd2FudCB0byB0YWtl
IHRoaXMgb3V0IG9mIFN0cmluZydzIEFQSS4KIAotICAgIHVuc2lnbmVkIGxlbmd0aFRvSW5zZXJ0
ID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGlmICghb3RoZXJTdHJpbmcpCisgICAgICAgIHJldHVy
biB0aGlzU3RyaW5nOwogCisgICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQgPSBvdGhlclN0cmlu
Zy0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGhUb0luc2VydCkgewotICAgICAgICBpZiAoc3Ry
aW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoaXNOdWxsKCkp
Ci0gICAgICAgICAgICBtX2ltcGwgPSBzdHJpbmcuaW1wbCgpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICghdGhpc1N0cmluZykKKyAgICAgICAgICAgIHJldHVybiBvdGhlclN0cmluZzsK
KyAgICAgICAgcmV0dXJuIHRoaXNTdHJpbmc7CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uID49
IGxlbmd0aCgpKSB7Ci0gICAgICAgIGFwcGVuZChzdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogCi0gICAgaWYgKGxlbmd0aFRvSW5zZXJ0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpIC0gbGVuZ3RoKCkpCisgICAgaWYgKCF0aGlzU3RyaW5nIHx8IHBvc2l0aW9u
ID49IHRoaXNTdHJpbmctPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gQmFzaWNTdHJpbmc6OmFw
cGVuZCh0aGlzU3RyaW5nLCBvdGhlclN0cmluZyk7CisKKyAgICBpZiAobGVuZ3RoVG9JbnNlcnQg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSB0aGlzU3RyaW5nLT5sZW5n
dGgoKSkKICAgICAgICAgQ1JBU0goKTsKIAotICAgIGlmIChpczhCaXQoKSAmJiBzdHJpbmcuaXM4
Qml0KCkpIHsKKyAgICBpZiAodGhpc1N0cmluZy0+aXM4Qml0KCkgJiYgb3RoZXJTdHJpbmctPmlz
OEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld1N0cmluZyA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0luc2Vy
dCwgZGF0YSk7Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkuc3Vic3RyaW5nKDAsIHBvc2l0
aW9uKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhKTsKLSAgICAgICAgU3RyaW5nVmll
dyhzdHJpbmcpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBwb3NpdGlvbik7Ci0g
ICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkuc3Vic3RyaW5nKHBvc2l0aW9uKS5nZXRDaGFyYWN0
ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCk7Ci0gICAg
ICAgIG1faW1wbCA9IFdURk1vdmUobmV3U3RyaW5nKTsKLSAgICB9IGVsc2UgewotICAgICAgICBV
Q2hhciogZGF0YTsKLSAgICAgICAgYXV0byBuZXdTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCgpICsgbGVuZ3RoVG9JbnNlcnQsIGRhdGEpOwotICAgICAgICBT
dHJpbmdWaWV3KCptX2ltcGwpLnN1YnN0cmluZygwLCBwb3NpdGlvbikuZ2V0Q2hhcmFjdGVyc1dp
dGhVcGNvbnZlcnQoZGF0YSk7Ci0gICAgICAgIFN0cmluZ1ZpZXcoc3RyaW5nKS5nZXRDaGFyYWN0
ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24pOwotICAgICAgICBTdHJpbmdWaWV3KCpt
X2ltcGwpLnN1YnN0cmluZyhwb3NpdGlvbikuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0
YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQpOwotICAgICAgICBtX2ltcGwgPSBXVEZNb3Zl
KG5ld1N0cmluZyk7CisgICAgICAgIGF1dG8gbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRl
VW5pbml0aWFsaXplZCh0aGlzU3RyaW5nLT5sZW5ndGgoKSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRh
KTsKKyAgICAgICAgU3RyaW5nVmlldygqdGhpc1N0cmluZykuc3Vic3RyaW5nKDAsIHBvc2l0aW9u
KS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhKTsKKyAgICAgICAgU3RyaW5nVmlldygq
b3RoZXJTdHJpbmcpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBwb3NpdGlvbik7
CisgICAgICAgIFN0cmluZ1ZpZXcoKnRoaXNTdHJpbmcpLnN1YnN0cmluZyhwb3NpdGlvbikuZ2V0
Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQp
OworICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgIH0KKworICAgIFVDaGFyKiBkYXRhOwor
ICAgIGF1dG8gbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh0aGlz
U3RyaW5nLT5sZW5ndGgoKSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKKyAgICBTdHJpbmdWaWV3
KCp0aGlzU3RyaW5nKS5zdWJzdHJpbmcoMCwgcG9zaXRpb24pLmdldENoYXJhY3RlcnNXaXRoVXBj
b252ZXJ0KGRhdGEpOworICAgIFN0cmluZ1ZpZXcoKm90aGVyU3RyaW5nKS5nZXRDaGFyYWN0ZXJz
V2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24pOworICAgIFN0cmluZ1ZpZXcoKnRoaXNTdHJp
bmcpLnN1YnN0cmluZyhwb3NpdGlvbikuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSAr
IHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQpOworICAgIHJldHVybiBuZXdTdHJpbmc7CiB9CiAK
LXZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3QgTENoYXIqIGNoYXJhY3RlcnNUb0FwcGVuZCwgdW5z
aWduZWQgbGVuZ3RoVG9BcHBlbmQpCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6OmFw
cGVuZChTdHJpbmdJbXBsKiB0aGlzU3RyaW5nLCBjb25zdCBMQ2hhciogY2hhcmFjdGVyc1RvQXBw
ZW5kLCB1bnNpZ25lZCBsZW5ndGhUb0FwcGVuZCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBl
eHRyZW1lbHkgaW5lZmZpY2llbnQuIFNvIG11Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRh
a2UgdGhpcyBvdXQgb2YgU3RyaW5nJ3MgQVBJLgogCi0gICAgaWYgKCFtX2ltcGwpIHsKKyAgICBp
ZiAoIXRoaXNTdHJpbmcpIHsKICAgICAgICAgaWYgKCFjaGFyYWN0ZXJzVG9BcHBlbmQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShjaGFy
YWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5kKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXNTdHJpbmc7CisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVh
dGUoY2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7CiAgICAgfQogCiAgICAgaWYg
KCFsZW5ndGhUb0FwcGVuZCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdGhpc1N0
cmluZzsKIAogICAgIEFTU0VSVChjaGFyYWN0ZXJzVG9BcHBlbmQpOwogCi0gICAgdW5zaWduZWQg
c3RyTGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBzdHJMZW5ndGggPSB0
aGlzU3RyaW5nLT5sZW5ndGgoKTsKIAotICAgIGlmIChtX2ltcGwtPmlzOEJpdCgpKSB7CisgICAg
aWYgKHRoaXNTdHJpbmctPmlzOEJpdCgpKSB7CiAgICAgICAgIGlmIChsZW5ndGhUb0FwcGVuZCA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHN0ckxlbmd0aCkKICAgICAg
ICAgICAgIENSQVNIKCk7CiAgICAgICAgIExDaGFyKiBkYXRhOwogICAgICAgICBhdXRvIG5ld0lt
cGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHN0ckxlbmd0aCArIGxlbmd0aFRv
QXBwZW5kLCBkYXRhKTsKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSwg
bV9pbXBsLT5jaGFyYWN0ZXJzOCgpLCBzdHJMZW5ndGgpOworICAgICAgICBTdHJpbmdJbXBsOjpj
b3B5Q2hhcmFjdGVycyhkYXRhLCB0aGlzU3RyaW5nLT5jaGFyYWN0ZXJzOCgpLCBzdHJMZW5ndGgp
OwogICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhICsgc3RyTGVuZ3RoLCBj
aGFyYWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5kKTsKLSAgICAgICAgbV9pbXBsID0gV1RG
TW92ZShuZXdJbXBsKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbmV3SW1wbDsK
ICAgICB9CiAKICAgICBpZiAobGVuZ3RoVG9BcHBlbmQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkgLSBzdHJMZW5ndGgpCiAgICAgICAgIENSQVNIKCk7CiAgICAgVUNoYXIq
IGRhdGE7Ci0gICAgYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgoKSArIGxlbmd0aFRvQXBwZW5kLCBkYXRhKTsKLSAgICBTdHJpbmdJbXBsOjpjb3B5
Q2hhcmFjdGVycyhkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnMxNigpLCBzdHJMZW5ndGgpOworICAg
IGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc3RyTGVuZ3Ro
ICsgbGVuZ3RoVG9BcHBlbmQsIGRhdGEpOworICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJz
KGRhdGEsIHRoaXNTdHJpbmctPmNoYXJhY3RlcnMxNigpLCBzdHJMZW5ndGgpOwogICAgIFN0cmlu
Z0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEgKyBzdHJMZW5ndGgsIGNoYXJhY3RlcnNUb0FwcGVu
ZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgIG1faW1wbCA9IFdURk1vdmUobmV3SW1wbCk7CisgICAg
cmV0dXJuIG5ld0ltcGw7CiB9CiAKLXZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnNUb0FwcGVuZCwgdW5zaWduZWQgbGVuZ3RoVG9BcHBlbmQpCitSZWZQdHI8U3RyaW5n
SW1wbD4gQmFzaWNTdHJpbmc6OmFwcGVuZChTdHJpbmdJbXBsKiB0aGlzU3RyaW5nLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVyc1RvQXBwZW5kLCB1bnNpZ25lZCBsZW5ndGhUb0FwcGVuZCkKIHsKICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQuIFNvIG11Y2ggc28gdGhh
dCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3RyaW5nJ3MgQVBJLgogCi0gICAg
aWYgKCFtX2ltcGwpIHsKKyAgICBpZiAoIXRoaXNTdHJpbmcpIHsKICAgICAgICAgaWYgKCFjaGFy
YWN0ZXJzVG9BcHBlbmQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faW1wbCA9IFN0
cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5kKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHRoaXNTdHJpbmc7CisgICAgICAgIHJl
dHVybiBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVu
ZCk7CiAgICAgfQogCiAgICAgaWYgKCFsZW5ndGhUb0FwcGVuZCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdGhpc1N0cmluZzsKIAotICAgIHVuc2lnbmVkIHN0ckxlbmd0aCA9IG1f
aW1wbC0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgc3RyTGVuZ3RoID0gdGhpc1N0cmluZy0+bGVu
Z3RoKCk7CiAgICAgCiAgICAgQVNTRVJUKGNoYXJhY3RlcnNUb0FwcGVuZCk7CiAgICAgaWYgKGxl
bmd0aFRvQXBwZW5kID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gc3Ry
TGVuZ3RoKQogICAgICAgICBDUkFTSCgpOwogICAgIFVDaGFyKiBkYXRhOwogICAgIGF1dG8gbmV3
SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc3RyTGVuZ3RoICsgbGVuZ3Ro
VG9BcHBlbmQsIGRhdGEpOwotICAgIGlmIChtX2ltcGwtPmlzOEJpdCgpKQotICAgICAgICBTdHJp
bmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhLCBjaGFyYWN0ZXJzOCgpLCBzdHJMZW5ndGgpOwor
ICAgIGlmICh0aGlzU3RyaW5nLT5pczhCaXQoKSkKKyAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNo
YXJhY3RlcnMoZGF0YSwgdGhpc1N0cmluZy0+Y2hhcmFjdGVyczgoKSwgc3RyTGVuZ3RoKTsKICAg
ICBlbHNlCi0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEsIGNoYXJhY3Rl
cnMxNigpLCBzdHJMZW5ndGgpOworICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhk
YXRhLCB0aGlzU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwgc3RyTGVuZ3RoKTsKICAgICBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhICsgc3RyTGVuZ3RoLCBjaGFyYWN0ZXJzVG9BcHBlbmQs
IGxlbmd0aFRvQXBwZW5kKTsKLSAgICBtX2ltcGwgPSBXVEZNb3ZlKG5ld0ltcGwpOworICAgIHJl
dHVybiBuZXdJbXBsOwogfQogCiAKLVVDaGFyMzIgU3RyaW5nOjpjaGFyYWN0ZXJTdGFydGluZ0F0
KHVuc2lnbmVkIGkpIGNvbnN0CitVQ2hhcjMyIEJhc2ljU3RyaW5nOjpjaGFyYWN0ZXJTdGFydGlu
Z0F0KFN0cmluZ0ltcGwqIHRoaXNTdHJpbmcsIHVuc2lnbmVkIGkpCiB7Ci0gICAgaWYgKCFtX2lt
cGwgfHwgaSA+PSBtX2ltcGwtPmxlbmd0aCgpKQorICAgIGlmICghdGhpc1N0cmluZyB8fCBpID49
IHRoaXNTdHJpbmctPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9p
bXBsLT5jaGFyYWN0ZXJTdGFydGluZ0F0KGkpOworICAgIHJldHVybiB0aGlzU3RyaW5nLT5jaGFy
YWN0ZXJTdGFydGluZ0F0KGkpOwogfQogCi12b2lkIFN0cmluZzo6dHJ1bmNhdGUodW5zaWduZWQg
cG9zaXRpb24pCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6OnRydW5jYXRlKFN0cmlu
Z0ltcGwqIHRoaXNTdHJpbmcsIHVuc2lnbmVkIHBvc2l0aW9uKQogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbCA9IG1faW1wbC0+c3Vic3RyaW5nKDAsIHBvc2l0aW9uKTsKKyAgICBp
ZiAodGhpc1N0cmluZykKKyAgICAgICAgcmV0dXJuIHRoaXNTdHJpbmctPnN1YnN0cmluZygwLCBw
b3NpdGlvbik7CisgICAgcmV0dXJuIHRoaXNTdHJpbmc7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGlubGluZSB2b2lkIFN0cmluZzo6cmVtb3ZlSW50ZXJuYWwoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxl
bmd0aFRvUmVtb3ZlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBp
bmxpbmUgUmVmUHRyPFN0cmluZ0ltcGw+IHN0cmluZ1JlbW92ZUludGVybmFsKFN0cmluZ0ltcGwq
IHRoaXNTdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHBv
c2l0aW9uLCB1bnNpZ25lZCBsZW5ndGhUb1JlbW92ZSkKIHsKICAgICBDaGFyYWN0ZXJUeXBlKiBk
YXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSwgZGF0YSk7CisgICAgYXV0byBuZXdJbXBsID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh0aGlzU3RyaW5nLT5sZW5ndGgoKSAtIGxlbmd0
aFRvUmVtb3ZlLCBkYXRhKTsKICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhLCBj
aGFyYWN0ZXJzLCBwb3NpdGlvbik7Ci0gICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0
YSArIHBvc2l0aW9uLCBjaGFyYWN0ZXJzICsgcG9zaXRpb24gKyBsZW5ndGhUb1JlbW92ZSwgbGVu
Z3RoKCkgLSBsZW5ndGhUb1JlbW92ZSAtIHBvc2l0aW9uKTsKLSAgICBtX2ltcGwgPSBXVEZNb3Zl
KG5ld0ltcGwpOworICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEgKyBwb3NpdGlv
biwgY2hhcmFjdGVycyArIHBvc2l0aW9uICsgbGVuZ3RoVG9SZW1vdmUsIHRoaXNTdHJpbmctPmxl
bmd0aCgpIC0gbGVuZ3RoVG9SZW1vdmUgLSBwb3NpdGlvbik7CisgICAgcmV0dXJuIG5ld0ltcGw7
CiB9CiAKLXZvaWQgU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxl
bmd0aFRvUmVtb3ZlKQorUmVmUHRyPFN0cmluZ0ltcGw+IEJhc2ljU3RyaW5nOjpyZW1vdmUoU3Ry
aW5nSW1wbCogdGhpc1N0cmluZywgdW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aFRv
UmVtb3ZlKQogewotICAgIGlmICghbGVuZ3RoVG9SZW1vdmUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBhdXRvIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoVG9SZW1vdmUg
fHwgIXRoaXNTdHJpbmcpCisgICAgICAgIHJldHVybiB0aGlzU3RyaW5nOworICAgIGF1dG8gbGVu
Z3RoID0gdGhpc1N0cmluZy0+bGVuZ3RoKCk7CiAgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdGhpc1N0cmluZzsKICAgICBsZW5ndGhU
b1JlbW92ZSA9IHN0ZDo6bWluKGxlbmd0aFRvUmVtb3ZlLCBsZW5ndGggLSBwb3NpdGlvbik7Ci0g
ICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZW1vdmVJbnRlcm5hbChjaGFyYWN0ZXJzOCgpLCBw
b3NpdGlvbiwgbGVuZ3RoVG9SZW1vdmUpOwotICAgIGVsc2UKLSAgICAgICAgcmVtb3ZlSW50ZXJu
YWwoY2hhcmFjdGVyczE2KCksIHBvc2l0aW9uLCBsZW5ndGhUb1JlbW92ZSk7CisgICAgaWYgKHRo
aXNTdHJpbmctPmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gc3RyaW5nUmVtb3ZlSW50ZXJuYWwo
dGhpc1N0cmluZywgdGhpc1N0cmluZy0+Y2hhcmFjdGVyczgoKSwgcG9zaXRpb24sIGxlbmd0aFRv
UmVtb3ZlKTsKKyAgICByZXR1cm4gc3RyaW5nUmVtb3ZlSW50ZXJuYWwodGhpc1N0cmluZywgdGhp
c1N0cmluZy0+Y2hhcmFjdGVyczE2KCksIHBvc2l0aW9uLCBsZW5ndGhUb1JlbW92ZSk7CiB9CiAK
LVN0cmluZyBTdHJpbmc6OnN1YnN0cmluZyh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVu
Z3RoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBmdW5jdGlvbiwgYW5kIHRo
ZSBtYW55IG90aGVycyBsaWtlIGl0LCBiZSBpbmxpbmVkPwotICAgIHJldHVybiBtX2ltcGwgPyBt
X2ltcGwtPnN1YnN0cmluZyhwb3NpdGlvbiwgbGVuZ3RoKSA6IFN0cmluZyB7IH07Ci19Ci0KLVN0
cmluZyBTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAorUmVmUHRyPFN0cmluZ0ltcGw+IEJhc2ljU3RyaW5nOjpzdWJzdHJp
bmdTaGFyaW5nSW1wbChjb25zdCBTdHJpbmdJbXBsKiB0aGlzU3RyaW5nLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICAvLyBGSVhNRTogV2UgdXNlZCB0byBjaGVjayBh
Z2FpbnN0IGEgbGltaXQgb2YgSGVhcDo6bWluRXh0cmFDb3N0IC8gc2l6ZW9mKFVDaGFyKS4KIAot
ICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGlmICghdGhp
c1N0cmluZykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBzdHJpbmdM
ZW5ndGggPSB0aGlzU3RyaW5nLT5sZW5ndGgoKTsKICAgICBvZmZzZXQgPSBzdGQ6Om1pbihvZmZz
ZXQsIHN0cmluZ0xlbmd0aCk7CiAgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBzdHJpbmdM
ZW5ndGggLSBvZmZzZXQpOwogCiAgICAgaWYgKCFvZmZzZXQgJiYgbGVuZ3RoID09IHN0cmluZ0xl
bmd0aCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVh
dGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9pbXBsLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAg
IHJldHVybiBjb25zdF9jYXN0PFN0cmluZ0ltcGwqPih0aGlzU3RyaW5nKTsKKyAgICByZXR1cm4g
U3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoY29uc3RfY2FzdDxTdHJpbmdJ
bXBsJj4oKnRoaXNTdHJpbmcpLCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmc6
OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3QKK2Jvb2wgQmFzaWNTdHJpbmc6OnBlcmNl
bnRhZ2UoY29uc3QgU3RyaW5nSW1wbCogdGhpc1N0cmluZywgaW50JiByZXN1bHQpCiB7Ci0gICAg
Ly8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkgb3RoZXJzIGxpa2Ug
aXQsIGJlIGlubGluZWQ/Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Y29udmVydFRvQVND
SUlMb3dlcmNhc2UoKSA6IFN0cmluZyB7IH07Ci19Ci0KLVN0cmluZyBTdHJpbmc6OmNvbnZlcnRU
b0FTQ0lJVXBwZXJjYXNlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVu
Y3Rpb24sIGFuZCB0aGUgbWFueSBvdGhlcnMgbGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1
cm4gbV9pbXBsID8gbV9pbXBsLT5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIDogU3RyaW5nIHsg
fTsKLX0KLQotU3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgp
IGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1h
bnkgb3RoZXJzIGxpa2UgaXQsIGJlIGlubGluZWQ/Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1w
bC0+Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIDogU3RyaW5nIHsgfTsKLX0KLQot
U3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRG
YWlsaW5nSW5kZXg4Qml0KHVuc2lnbmVkIGZhaWxpbmdJbmRleCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgbWFueSBvdGhlcnMgbGlrZSBpdCwg
YmUgaW5saW5lZD8KLSAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5jb252ZXJ0VG9Mb3dlcmNh
c2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQoZmFpbGluZ0luZGV4KSA6
IFN0cmluZyB7IH07Ci19Ci0KLVN0cmluZyBTdHJpbmc6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhv
dXRMb2NhbGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBmdW5jdGlvbiwg
YW5kIHRoZSBtYW55IG90aGVycyBsaWtlIGl0LCBiZSBpbmxpbmVkPwotICAgIHJldHVybiBtX2lt
cGwgPyBtX2ltcGwtPmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKSA6IFN0cmluZyB7
IH07Ci19Ci0KLVN0cmluZyBTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhMb2NhbGUoY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdAotewotICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBtYW55IG90aGVycyBsaWtlIGl0LCBiZSBp
bmxpbmVkPwotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmNvbnZlcnRUb0xvd2VyY2FzZVdp
dGhMb2NhbGUobG9jYWxlSWRlbnRpZmllcikgOiBTdHJpbmcgeyB9OwotfQotCi1TdHJpbmcgU3Ry
aW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxlSWRlbnRpZmllcikgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rp
b24sIGFuZCB0aGUgbWFueSBvdGhlcnMgbGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1cm4g
bV9pbXBsID8gbV9pbXBsLT5jb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGxvY2FsZUlkZW50
aWZpZXIpIDogU3RyaW5nIHsgfTsKLX0KLQotU3RyaW5nIFN0cmluZzo6c3RyaXBXaGl0ZVNwYWNl
KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUg
bWFueSBvdGhlcnMgbGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICAvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBuZWVkcyBhIG5ldyBuYW1lLiBGb3Igb25lIHRoaW5nLCAid2hpdGVzcGFjZSIgaXMgYSBz
aW5nbGUKLSAgICAvLyB3b3JkIHNvIHRoZSAicyIgc2hvdWxkIGJlIGxvd2VyY2FzZS4gRm9yIGFu
b3RoZXIsIGl0J3Mgbm90IGNsZWFyIGZyb20gdGhpcyBuYW1lCi0gICAgLy8gdGhhdCB0aGUgZnVu
Y3Rpb24gdXNlcyB0aGUgVW5pY29kZSBkZWZpbml0aW9uIG9mIHdoaXRlc3BhY2UuIE1vc3QgV2Vi
S2l0IGNhbGxlcnMKLSAgICAvLyBkb24ndCB3YW50IHRoYXQgYW5kIGV2ZW50dWFsbHkgd2Ugc2hv
dWxkIGNvbnNpZGVyIGRlbGV0aW5nIHRoaXMuCi0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+
c3RyaXBXaGl0ZVNwYWNlKCkgOiBTdHJpbmcgeyB9OwotfQotCi1TdHJpbmcgU3RyaW5nOjpzdHJp
cExlYWRpbmdBbmRUcmFpbGluZ0NoYXJhY3RlcnMoQ29kZVVuaXRNYXRjaEZ1bmN0aW9uIHByZWRp
Y2F0ZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0
aGUgbWFueSBvdGhlcnMgbGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1cm4gbV9pbXBsID8g
bV9pbXBsLT5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ0NoYXJhY3RlcnMocHJlZGljYXRlKSA6IFN0
cmluZyB7IH07Ci19Ci0KLVN0cmluZyBTdHJpbmc6OnNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkgb3Ro
ZXJzIGxpa2UgaXQsIGJlIGlubGluZWQ/Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gbmVl
ZHMgYSBuZXcgbmFtZS4gRm9yIG9uZSB0aGluZywgIndoaXRlc3BhY2UiIGlzIGEgc2luZ2xlCi0g
ICAgLy8gd29yZCBzbyB0aGUgInMiIHNob3VsZCBiZSBsb3dlcmNhc2UuIEZvciBhbm90aGVyLCBp
dCdzIG5vdCBjbGVhciBmcm9tIHRoaXMgbmFtZQotICAgIC8vIHRoYXQgdGhlIGZ1bmN0aW9uIHVz
ZXMgdGhlIFVuaWNvZGUgZGVmaW5pdGlvbiBvZiB3aGl0ZXNwYWNlLiBNb3N0IFdlYktpdCBjYWxs
ZXJzCi0gICAgLy8gZG9uJ3Qgd2FudCB0aGF0IGFuZCBldmVudHVhbGx5IHdlIHNob3VsZCBjb25z
aWRlciBkZWxldGluZyB0aGlzLgotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnNpbXBsaWZ5
V2hpdGVTcGFjZSgpIDogU3RyaW5nIHsgfTsKLX0KLQotU3RyaW5nIFN0cmluZzo6c2ltcGxpZnlX
aGl0ZVNwYWNlKENvZGVVbml0TWF0Y2hGdW5jdGlvbiBpc1doaXRlU3BhY2UpIGNvbnN0Ci17Ci0g
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkgb3RoZXJzIGxp
a2UgaXQsIGJlIGlubGluZWQ/Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+c2ltcGxpZnlX
aGl0ZVNwYWNlKGlzV2hpdGVTcGFjZSkgOiBTdHJpbmcgeyB9OwotfQotCi1TdHJpbmcgU3RyaW5n
OjpyZW1vdmVDaGFyYWN0ZXJzKENvZGVVbml0TWF0Y2hGdW5jdGlvbiBmaW5kTWF0Y2gpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkgb3Ro
ZXJzIGxpa2UgaXQsIGJlIGlubGluZWQ/Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmVt
b3ZlQ2hhcmFjdGVycyhmaW5kTWF0Y2gpIDogU3RyaW5nIHsgfTsKLX0KLQotU3RyaW5nIFN0cmlu
Zzo6Zm9sZENhc2UoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBmdW5jdGlv
biwgYW5kIHRoZSBtYW55IG90aGVycyBsaWtlIGl0LCBiZSBpbmxpbmVkPwotICAgIHJldHVybiBt
X2ltcGwgPyBtX2ltcGwtPmZvbGRDYXNlKCkgOiBTdHJpbmcgeyB9OwotfQotCi1ib29sIFN0cmlu
Zzo6cGVyY2VudGFnZShpbnQmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCB8fCAh
bV9pbXBsLT5sZW5ndGgoKSkKKyAgICBpZiAoIXRoaXNTdHJpbmcgfHwgIXRoaXNTdHJpbmctPmxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoKCptX2ltcGwpW21faW1w
bC0+bGVuZ3RoKCkgLSAxXSAhPSAnJScpCisgICAgaWYgKCgqdGhpc1N0cmluZylbdGhpc1N0cmlu
Zy0+bGVuZ3RoKCkgLSAxXSAhPSAnJScpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KG1faW1wbC0+aXM4Qml0KCkpCi0gICAgICAgIHJlc3VsdCA9IGNoYXJhY3RlcnNUb0ludFN0cmlj
dChtX2ltcGwtPmNoYXJhY3RlcnM4KCksIG1faW1wbC0+bGVuZ3RoKCkgLSAxKTsKKyAgICBpZiAo
dGhpc1N0cmluZy0+aXM4Qml0KCkpCisgICAgICAgIHJlc3VsdCA9IGNoYXJhY3RlcnNUb0ludFN0
cmljdCh0aGlzU3RyaW5nLT5jaGFyYWN0ZXJzOCgpLCB0aGlzU3RyaW5nLT5sZW5ndGgoKSAtIDEp
OwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KG1faW1w
bC0+Y2hhcmFjdGVyczE2KCksIG1faW1wbC0+bGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgcmVzdWx0
ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KHRoaXNTdHJpbmctPmNoYXJhY3RlcnMxNigpLCB0aGlz
U3RyaW5nLT5sZW5ndGgoKSAtIDEpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1WZWN0b3I8VUNo
YXI+IFN0cmluZzo6Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSBjb25zdAorVmVjdG9y
PFVDaGFyPiBCYXNpY1N0cmluZzo6Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oU3RyaW5n
SW1wbCogdGhpc1N0cmluZykKIHsKICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3Ro
KCkgKyAxKTsKKyAgICBpZiAodGhpc1N0cmluZykgeworICAgICAgICBhdXRvIGxlbmd0aCA9IHRo
aXNTdHJpbmctPmxlbmd0aCgpOworICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsZW5ndGggKyAxKTsKIAotICAgICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgICAgIGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzOCA9IG1faW1wbC0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkKKyAgICAgICAgaWYgKHRo
aXNTdHJpbmctPmlzOEJpdCgpKSB7CisgICAgICAgICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVy
czggPSB0aGlzU3RyaW5nLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNoYXJhY3RlcnM4W2ldKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYgPSBtX2ltcGwtPmNoYXJhY3RlcnMxNigpOwotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChjaGFyYWN0ZXJzMTYsIG1faW1wbC0+bGVuZ3RoKCkpOworICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNiA9IHRoaXNTdHJpbmctPmNoYXJhY3Rl
cnMxNigpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjaGFyYWN0ZXJzMTYsIGxlbmd0aCk7
CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQuYXBwZW5kKDApOwpAQCAtNDQ4LDcgKzM4Miw3
IEBAIFZlY3RvcjxVQ2hhcj4gU3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
IGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotV1RGX0FUVFJJQlVURV9QUklOVEYoMSwg
MCkgc3RhdGljIFN0cmluZyBjcmVhdGVXaXRoRm9ybWF0QW5kQXJndW1lbnRzKGNvbnN0IGNoYXIg
KmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMCkgc3RhdGlj
IFJlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRoRm9ybWF0QW5kQXJndW1lbnRzKGNvbnN0IGNo
YXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQogewogICAgIHZhX2xpc3QgYXJnc0NvcHk7CiAgICAg
dmFfY29weShhcmdzQ29weSwgYXJncyk7CkBAIC00NjMsNyArMzk3LDcgQEAgV1RGX0FUVFJJQlVU
RV9QUklOVEYoMSwgMCkgc3RhdGljIFN0cmluZyBjcmVhdGVXaXRoRm9ybWF0QW5kQXJndW1lbnRz
KGNvbnN0IGNoYXIKICAgICAgICAgYXV0byBjZkZvcm1hdCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVh
dGVXaXRoQ1N0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmb3JtYXQsIGtDRlN0cmluZ0VuY29k
aW5nVVRGOCkpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVX
aXRoRm9ybWF0QW5kQXJndW1lbnRzKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIGNmRm9y
bWF0LmdldCgpLCBhcmdzKSk7CiAgICAgICAgIHZhX2VuZChhcmdzKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIEJhc2ljU3RyaW5nOjpjcmVhdGUocmVzdWx0
LmdldCgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNDc3LDkgKzQxMSw5IEBAIFdURl9BVFRSSUJV
VEVfUFJJTlRGKDEsIDApIHN0YXRpYyBTdHJpbmcgY3JlYXRlV2l0aEZvcm1hdEFuZEFyZ3VtZW50
cyhjb25zdCBjaGFyCiAgICAgdmFfZW5kKGFyZ3MpOwogCiAgICAgaWYgKHJlc3VsdCA9PSAwKQot
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmVtcHR5KCk7CiAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBWZWN0b3I8Y2hhciwgMjU2PiBidWZmZXI7
CiAgICAgdW5zaWduZWQgbGVuID0gcmVzdWx0OwpAQCAtNDk2LDI3NSArNDMwLDEyNiBAQCBXVEZf
QVRUUklCVVRFX1BSSU5URigxLCAwKSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVdpdGhGb3JtYXRBbmRB
cmd1bWVudHMoY29uc3QgY2hhcgogICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGJ1ZmZlci5kYXRhKCkpLCBsZW4pOwogfQogCi1TdHJp
bmcgU3RyaW5nOjpmb3JtYXRXaXRoQXJndW1lbnRzKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlz
dCBhcmdzKQorUmVmUHRyPFN0cmluZ0ltcGw+IEJhc2ljU3RyaW5nOjpmb3JtYXRXaXRoQXJndW1l
bnRzKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQogewogICAgIHJldHVybiBjcmVh
dGVXaXRoRm9ybWF0QW5kQXJndW1lbnRzKGZvcm1hdCwgYXJncyk7CiB9CiAKLVN0cmluZyBTdHJp
bmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3M7
Ci0gICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSAgICBTdHJpbmcgcmVzdWx0ID0gY3JlYXRl
V2l0aEZvcm1hdEFuZEFyZ3VtZW50cyhmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgU3RyaW5nOjpudW1iZXIoaW50IG51bWJl
cikKK1JlZlB0cjxTdHJpbmdJbXBsPiBCYXNpY1N0cmluZzo6bnVtYmVyKGludCBudW1iZXIpCiB7
Ci0gICAgcmV0dXJuIG51bWJlclRvU3RyaW5nU2lnbmVkPFN0cmluZz4obnVtYmVyKTsKKyAgICBy
ZXR1cm4gbnVtYmVyVG9TdHJpbmdTaWduZWQ8U3RyaW5nSW1wbD4obnVtYmVyKTsKIH0KIAotU3Ry
aW5nIFN0cmluZzo6bnVtYmVyKHVuc2lnbmVkIGludCBudW1iZXIpCitSZWZQdHI8U3RyaW5nSW1w
bD4gQmFzaWNTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBpbnQgbnVtYmVyKQogewotICAgIHJldHVy
biBudW1iZXJUb1N0cmluZ1Vuc2lnbmVkPFN0cmluZz4obnVtYmVyKTsKKyAgICByZXR1cm4gbnVt
YmVyVG9TdHJpbmdVbnNpZ25lZDxTdHJpbmdJbXBsPihudW1iZXIpOwogfQogCi1TdHJpbmcgU3Ry
aW5nOjpudW1iZXIobG9uZyBudW1iZXIpCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6
Om51bWJlcihsb25nIG51bWJlcikKIHsKLSAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmdTaWduZWQ8
U3RyaW5nPihudW1iZXIpOworICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1NpZ25lZDxTdHJpbmdJ
bXBsPihudW1iZXIpOwogfQogCi1TdHJpbmcgU3RyaW5nOjpudW1iZXIodW5zaWduZWQgbG9uZyBu
dW1iZXIpCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBs
b25nIG51bWJlcikKIHsKLSAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmdVbnNpZ25lZDxTdHJpbmc+
KG51bWJlcik7CisgICAgcmV0dXJuIG51bWJlclRvU3RyaW5nVW5zaWduZWQ8U3RyaW5nSW1wbD4o
bnVtYmVyKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6bnVtYmVyKGxvbmcgbG9uZyBudW1iZXIpCitS
ZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6Om51bWJlcihsb25nIGxvbmcgbnVtYmVyKQog
ewotICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1NpZ25lZDxTdHJpbmc+KG51bWJlcik7CisgICAg
cmV0dXJuIG51bWJlclRvU3RyaW5nU2lnbmVkPFN0cmluZ0ltcGw+KG51bWJlcik7CiB9CiAKLVN0
cmluZyBTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBsb25nIGxvbmcgbnVtYmVyKQorUmVmUHRyPFN0
cmluZ0ltcGw+IEJhc2ljU3RyaW5nOjpudW1iZXIodW5zaWduZWQgbG9uZyBsb25nIG51bWJlcikK
IHsKLSAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmdVbnNpZ25lZDxTdHJpbmc+KG51bWJlcik7Cisg
ICAgcmV0dXJuIG51bWJlclRvU3RyaW5nVW5zaWduZWQ8U3RyaW5nSW1wbD4obnVtYmVyKTsKIH0K
IAotU3RyaW5nIFN0cmluZzo6bnVtYmVyKGRvdWJsZSBudW1iZXIsIHVuc2lnbmVkIHByZWNpc2lv
biwgVHJhaWxpbmdaZXJvc1RydW5jYXRpbmdQb2xpY3kgdHJhaWxpbmdaZXJvc1RydW5jYXRpbmdQ
b2xpY3kpCitSZWZQdHI8U3RyaW5nSW1wbD4gQmFzaWNTdHJpbmc6Om51bWJlcihkb3VibGUgbnVt
YmVyLCB1bnNpZ25lZCBwcmVjaXNpb24sIFRyYWlsaW5nWmVyb3NUcnVuY2F0aW5nUG9saWN5IHRy
YWlsaW5nWmVyb3NUcnVuY2F0aW5nUG9saWN5KQogewogICAgIE51bWJlclRvU3RyaW5nQnVmZmVy
IGJ1ZmZlcjsKLSAgICByZXR1cm4gU3RyaW5nKG51bWJlclRvRml4ZWRQcmVjaXNpb25TdHJpbmco
bnVtYmVyLCBwcmVjaXNpb24sIGJ1ZmZlciwgdHJhaWxpbmdaZXJvc1RydW5jYXRpbmdQb2xpY3kg
PT0gVHJ1bmNhdGVUcmFpbGluZ1plcm9zKSk7CisgICAgY29uc3QgY2hhciogcmVzdWx0ID0gbnVt
YmVyVG9GaXhlZFByZWNpc2lvblN0cmluZyhudW1iZXIsIHByZWNpc2lvbiwgYnVmZmVyLCB0cmFp
bGluZ1plcm9zVHJ1bmNhdGluZ1BvbGljeSA9PSBUcnVuY2F0ZVRyYWlsaW5nWmVyb3MpOworICAg
IHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUocmVzdWx0LCBzdHJsZW4ocmVzdWx0KSk7CiB9CiAK
LVN0cmluZyBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChkb3VibGUgbnVtYmVyKQor
UmVmUHRyPFN0cmluZ0ltcGw+IEJhc2ljU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQo
ZG91YmxlIG51bWJlcikKIHsKICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAg
cmV0dXJuIFN0cmluZyhudW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1ZmZlcikpOworICAgIGNvbnN0
IGNoYXIqIHJlc3VsdCA9IG51bWJlclRvU3RyaW5nKG51bWJlciwgYnVmZmVyKTsKKyAgICByZXR1
cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlc3VsdCwgc3RybGVuKHJlc3VsdCkpOwogfQogCi1TdHJp
bmcgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkV2lkdGgoZG91YmxlIG51bWJlciwgdW5zaWdu
ZWQgZGVjaW1hbFBsYWNlcykKK1JlZlB0cjxTdHJpbmdJbXBsPiBCYXNpY1N0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFdpZHRoKGRvdWJsZSBudW1iZXIsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMp
CiB7CiAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHJldHVybiBTdHJpbmco
bnVtYmVyVG9GaXhlZFdpZHRoU3RyaW5nKG51bWJlciwgZGVjaW1hbFBsYWNlcywgYnVmZmVyKSk7
CisgICAgY29uc3QgY2hhciogcmVzdWx0ID0gbnVtYmVyVG9GaXhlZFdpZHRoU3RyaW5nKG51bWJl
ciwgZGVjaW1hbFBsYWNlcywgYnVmZmVyKTsKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRl
KHJlc3VsdCwgc3RybGVuKHJlc3VsdCkpOwogfQogCi1pbnQgU3RyaW5nOjp0b0ludFN0cmljdChi
b29sKiBvaywgaW50IGJhc2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpIHsKLSAgICAgICAg
aWYgKG9rKQotICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0ludFN0cmljdChvaywgYmFzZSk7Ci19Ci0KLXVuc2ln
bmVkIFN0cmluZzo6dG9VSW50U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkgY29uc3QKLXsKLSAg
ICBpZiAoIW1faW1wbCkgewotICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvVUludFN0
cmljdChvaywgYmFzZSk7Ci19Ci0KLWludDY0X3QgU3RyaW5nOjp0b0ludDY0U3RyaWN0KGJvb2wq
IG9rLCBpbnQgYmFzZSkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBpZiAo
b2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHJldHVybiBtX2ltcGwtPnRvSW50NjRTdHJpY3Qob2ssIGJhc2UpOwotfQotCi11aW50NjRf
dCBTdHJpbmc6OnRvVUludDY0U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkgY29uc3QKLXsKLSAg
ICBpZiAoIW1faW1wbCkgewotICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvVUludDY0
U3RyaWN0KG9rLCBiYXNlKTsKLX0KLQotaW50cHRyX3QgU3RyaW5nOjp0b0ludFB0clN0cmljdChi
b29sKiBvaywgaW50IGJhc2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpIHsKLSAgICAgICAg
aWYgKG9rKQotICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0ludFB0clN0cmljdChvaywgYmFzZSk7Ci19Ci0KLWlu
dCBTdHJpbmc6OnRvSW50KGJvb2wqIG9rKSBjb25zdAotewotICAgIGlmICghbV9pbXBsKSB7Ci0g
ICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICpvayA9IGZhbHNlOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9JbnQob2spOwotfQotCi11bnNpZ25lZCBT
dHJpbmc6OnRvVUludChib29sKiBvaykgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkgewotICAg
ICAgICBpZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvVUludChvayk7Ci19Ci0KLWludDY0X3QgU3Ry
aW5nOjp0b0ludDY0KGJvb2wqIG9rKSBjb25zdAotewotICAgIGlmICghbV9pbXBsKSB7Ci0gICAg
ICAgIGlmIChvaykKLSAgICAgICAgICAgICpvayA9IGZhbHNlOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9JbnQ2NChvayk7Ci19Ci0KLXVpbnQ2NF90IFN0
cmluZzo6dG9VSW50NjQoYm9vbCogb2spIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpIHsKLSAg
ICAgICAgaWYgKG9rKQotICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b1VJbnQ2NChvayk7Ci19Ci0KLWludHB0cl90
IFN0cmluZzo6dG9JbnRQdHIoYm9vbCogb2spIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpIHsK
LSAgICAgICAgaWYgKG9rKQotICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0ludFB0cihvayk7Ci19Ci0KLWRvdWJs
ZSBTdHJpbmc6OnRvRG91YmxlKGJvb2wqIG9rKSBjb25zdAotewotICAgIGlmICghbV9pbXBsKSB7
Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICpvayA9IGZhbHNlOwotICAgICAgICByZXR1
cm4gMC4wOwotICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0RvdWJsZShvayk7Ci19Ci0KLWZs
b2F0IFN0cmluZzo6dG9GbG9hdChib29sKiBvaykgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkg
ewotICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIDAuMGY7Ci0gICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvRmxvYXQob2spOwotfQotCi0j
aWYgQ09NUElMRVJfU1VQUE9SVFMoQ1hYX1JFRkVSRU5DRV9RVUFMSUZJRURfRlVOQ1RJT05TKQot
Ci1TdHJpbmcgU3RyaW5nOjppc29sYXRlZENvcHkoKSBjb25zdCAmCi17Ci0gICAgLy8gRklYTUU6
IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkgb3RoZXJzIGxpa2UgaXQsIGJlIGlu
bGluZWQ/Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aXNvbGF0ZWRDb3B5KCkgOiBTdHJp
bmcgeyB9OwotfQotCi1TdHJpbmcgU3RyaW5nOjppc29sYXRlZENvcHkoKSAmJgotewotICAgIGlm
IChpc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSkgewotICAgICAgICAvLyBTaW5jZSB3ZSBr
bm93IHRoYXQgb3VyIHN0cmluZyBpcyBhIHRlbXBvcmFyeSB0aGF0IHdpbGwgYmUgZGVzdHJveWVk
Ci0gICAgICAgIC8vIHdlIGNhbiBqdXN0IHN0ZWFsIHRoZSBtX2ltcGwgZnJvbSBpdCwgdGh1cyBh
dm9pZGluZyBhIGNvcHkuCi0gICAgICAgIHJldHVybiB7IFdURk1vdmUoKnRoaXMpIH07Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aXNvbGF0ZWRDb3B5KCkgOiBTdHJpbmcg
eyB9OwotfQotCi0jZWxzZQotCi1TdHJpbmcgU3RyaW5nOjppc29sYXRlZENvcHkoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBtYW55IG90aGVy
cyBsaWtlIGl0LCBiZSBpbmxpbmVkPwotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmlzb2xh
dGVkQ29weSgpIDogU3RyaW5nIHsgfTsKLX0KLQotI2VuZGlmCi0KLWJvb2wgU3RyaW5nOjppc1Nh
ZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSBjb25zdAorYm9vbCBCYXNpY1N0cmluZzo6aXNTYWZl
VG9TZW5kVG9Bbm90aGVyVGhyZWFkKGNvbnN0IFN0cmluZ0ltcGwqIHRoaXNTdHJpbmcpCiB7CiAg
ICAgLy8gQXRvbWljU3RyaW5ncyBhcmUgbm90IHNhZmUgdG8gc2VuZCBiZXR3ZWVuIHRocmVhZHMg
YXMgflN0cmluZ0ltcGwoKQogICAgIC8vIHdpbGwgdHJ5IHRvIHJlbW92ZSB0aGVtIGZyb20gdGhl
IHdyb25nIEF0b21pY1N0cmluZ1RhYmxlLgotICAgIHJldHVybiBpc0VtcHR5KCkgfHwgKG1faW1w
bC0+aGFzT25lUmVmKCkgJiYgIW1faW1wbC0+aXNBdG9taWMoKSk7CisgICAgcmV0dXJuICF0aGlz
U3RyaW5nIHx8IHRoaXNTdHJpbmctPmlzRW1wdHkoKSB8fCAodGhpc1N0cmluZy0+aGFzT25lUmVm
KCkgJiYgIXRoaXNTdHJpbmctPmlzQXRvbWljKCkpOwogfQogCi12b2lkIFN0cmluZzo6c3BsaXQo
Y29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMsIFZlY3RvcjxT
dHJpbmc+JiByZXN1bHQpIGNvbnN0Cit2b2lkIEJhc2ljU3RyaW5nOjpzcGxpdChjb25zdCBTdHJp
bmdJbXBsKiB0aGlzU3RyaW5nLCBjb25zdCBTdHJpbmdJbXBsKiBzZXBhcmF0b3IsIGJvb2wgYWxs
b3dFbXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LmNs
ZWFyKCk7CiAKKyAgICBpZiAoIXRoaXNTdHJpbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIHVu
c2lnbmVkIHN0YXJ0UG9zID0gMDsKICAgICBzaXplX3QgZW5kUG9zOwotICAgIHdoaWxlICgoZW5k
UG9zID0gZmluZChzZXBhcmF0b3IsIHN0YXJ0UG9zKSkgIT0gbm90Rm91bmQpIHsKKyAgICB3aGls
ZSAoKGVuZFBvcyA9IHRoaXNTdHJpbmctPmZpbmQoc2VwYXJhdG9yLCBzdGFydFBvcykpICE9IG5v
dEZvdW5kKSB7CiAgICAgICAgIGlmIChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBvcyAhPSBl
bmRQb3MpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcywgZW5k
UG9zIC0gc3RhcnRQb3MpKTsKLSAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyBzZXBhcmF0b3Iu
bGVuZ3RoKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRoaXNTdHJpbmctPnN1YnN0cmlu
ZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpKTsKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQ
b3MgKyBzZXBhcmF0b3ItPmxlbmd0aCgpOwogICAgIH0KLSAgICBpZiAoYWxsb3dFbXB0eUVudHJp
ZXMgfHwgc3RhcnRQb3MgIT0gbGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoc3Vic3Ry
aW5nKHN0YXJ0UG9zKSk7CisgICAgaWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9
IHRoaXNTdHJpbmctPmxlbmd0aCgpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHRoaXNTdHJpbmct
PnN1YnN0cmluZyhzdGFydFBvcykpOwogfQogCi12b2lkIFN0cmluZzo6c3BsaXQoVUNoYXIgc2Vw
YXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRyaWVzLCBjb25zdCBTcGxpdEZ1bmN0b3ImIGZ1bmN0
b3IpIGNvbnN0Cit2b2lkIEJhc2ljU3RyaW5nOjpzcGxpdChjb25zdCBTdHJpbmdJbXBsKiB0aGlz
U3RyaW5nLCBVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMsIGNvbnN0IEJh
c2ljU3RyaW5nOjpTcGxpdEZ1bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgU3RyaW5nVmlldyB2aWV3
KCp0aGlzKTsKKyAgICBpZiAoIXRoaXNTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFN0
cmluZ1ZpZXcgdmlldyh0aGlzU3RyaW5nKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsK
ICAgICBzaXplX3QgZW5kUG9zOwotICAgIHdoaWxlICgoZW5kUG9zID0gZmluZChzZXBhcmF0b3Is
IHN0YXJ0UG9zKSkgIT0gbm90Rm91bmQpIHsKKyAgICB3aGlsZSAoKGVuZFBvcyA9IHRoaXNTdHJp
bmctPmZpbmQoc2VwYXJhdG9yLCBzdGFydFBvcykpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIGlm
IChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBvcyAhPSBlbmRQb3MpCiAgICAgICAgICAgICBm
dW5jdG9yKHZpZXcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykpOwogICAg
ICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7CiAgICAgfQotICAgIGlmIChhbGxvd0VtcHR5RW50
cmllcyB8fCBzdGFydFBvcyAhPSBsZW5ndGgoKSkKKyAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMg
fHwgc3RhcnRQb3MgIT0gdGhpc1N0cmluZy0+bGVuZ3RoKCkpCiAgICAgICAgIGZ1bmN0b3Iodmll
dy5zdWJzdHJpbmcoc3RhcnRQb3MpKTsKIH0KIAotdm9pZCBTdHJpbmc6OnNwbGl0KFVDaGFyIHNl
cGFyYXRvciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcywgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkg
Y29uc3QKK3ZvaWQgQmFzaWNTdHJpbmc6OnNwbGl0KGNvbnN0IFN0cmluZ0ltcGwqIHRoaXNTdHJp
bmcsIFVDaGFyIHNlcGFyYXRvciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcywgVmVjdG9yPFN0cmlu
Zz4mIHJlc3VsdCkKIHsKICAgICByZXN1bHQuY2xlYXIoKTsKLSAgICBzcGxpdChzZXBhcmF0b3Is
IGFsbG93RW1wdHlFbnRyaWVzLCBbJnJlc3VsdF0oU3RyaW5nVmlldyBpdGVtKSB7CisgICAgQmFz
aWNTdHJpbmc6OnNwbGl0KHRoaXNTdHJpbmcsIHNlcGFyYXRvciwgYWxsb3dFbXB0eUVudHJpZXMs
IFsmcmVzdWx0XShTdHJpbmdWaWV3IGl0ZW0pIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVt
LnRvU3RyaW5nKCkpOwogICAgIH0pOwogfQogCi1DU3RyaW5nIFN0cmluZzo6YXNjaWkoKSBjb25z
dAorQ1N0cmluZyBCYXNpY1N0cmluZzo6YXNjaWkoY29uc3QgU3RyaW5nSW1wbCogdGhpc1N0cmlu
ZykKIHsKICAgICAvLyBQcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyAzMi4uMTI3IGFuZCB0aGUg
bnVsbCBjaGFyYWN0ZXIgYXJlCiAgICAgLy8gcHJlc2VydmVkLCBjaGFyYWN0ZXJzIG91dHNpZGUg
b2YgdGhpcyByYW5nZSBhcmUgY29udmVydGVkIHRvICc/Jy4KIAotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNTdHJpbmcgPyB0
aGlzU3RyaW5nLT5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKCFsZW5ndGgpIHsgCiAgICAgICAgIGNo
YXIqIGNoYXJhY3RlckJ1ZmZlcjsKICAgICAgICAgcmV0dXJuIENTdHJpbmc6Om5ld1VuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJCdWZmZXIpOwogICAgIH0KIAotICAgIGlmICh0aGlzLT5p
czhCaXQoKSkgewotICAgICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVycyA9IHRoaXMtPmNoYXJh
Y3RlcnM4KCk7CisgICAgaWYgKHRoaXNTdHJpbmctPmlzOEJpdCgpKSB7CisgICAgICAgIGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzID0gdGhpc1N0cmluZy0+Y2hhcmFjdGVyczgoKTsKIAogICAgICAg
ICBjaGFyKiBjaGFyYWN0ZXJCdWZmZXI7CiAgICAgICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmlu
Zzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJhY3RlckJ1ZmZlcik7CkBAIC03NzcsNyAr
NTYyLDcgQEAgQ1N0cmluZyBTdHJpbmc6OmFzY2lpKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsgICAgICAgIAogICAgIH0KIAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGhp
cy0+Y2hhcmFjdGVyczE2KCk7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzU3Ry
aW5nLT5jaGFyYWN0ZXJzMTYoKTsKIAogICAgIGNoYXIqIGNoYXJhY3RlckJ1ZmZlcjsKICAgICBD
U3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBjaGFyYWN0
ZXJCdWZmZXIpOwpAQCAtNzkwLDIwICs1NzUsMjAgQEAgQ1N0cmluZyBTdHJpbmc6OmFzY2lpKCkg
Y29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1DU3RyaW5nIFN0cmluZzo6bGF0aW4xKCkg
Y29uc3QKK0NTdHJpbmcgQmFzaWNTdHJpbmc6OmxhdGluMShjb25zdCBTdHJpbmdJbXBsKiB0aGlz
U3RyaW5nKQogewogICAgIC8vIEJhc2ljIExhdGluMSAoSVNPKSBlbmNvZGluZyAtIFVuaWNvZGUg
Y2hhcmFjdGVycyAwLi4yNTUgYXJlCiAgICAgLy8gcHJlc2VydmVkLCBjaGFyYWN0ZXJzIG91dHNp
ZGUgb2YgdGhpcyByYW5nZSBhcmUgY29udmVydGVkIHRvICc/Jy4KIAotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNTdHJpbmcg
PyB0aGlzU3RyaW5nLT5sZW5ndGgoKSA6IDA7CiAKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAg
cmV0dXJuIENTdHJpbmcoIiIsIDApOwogCi0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1
cm4gQ1N0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0aGlzLT5jaGFyYWN0ZXJz
OCgpKSwgbGVuZ3RoKTsKKyAgICBpZiAodGhpc1N0cmluZy0+aXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBDU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHRoaXNTdHJpbmctPmNo
YXJhY3RlcnM4KCkpLCBsZW5ndGgpOwogCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0
aGlzLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRoaXNT
dHJpbmctPmNoYXJhY3RlcnMxNigpOwogCiAgICAgY2hhciogY2hhcmFjdGVyQnVmZmVyOwogICAg
IENTdHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJh
Y3RlckJ1ZmZlcik7CkBAIC04MTYsMTcgKzYwMSwxNyBAQCBDU3RyaW5nIFN0cmluZzo6bGF0aW4x
KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1DU3RyaW5nIFN0cmluZzo6dXRmOChD
b252ZXJzaW9uTW9kZSBtb2RlKSBjb25zdAorQ1N0cmluZyBCYXNpY1N0cmluZzo6dXRmOChjb25z
dCBTdHJpbmdJbXBsKiB0aGlzU3RyaW5nLCBDb252ZXJzaW9uTW9kZSBtb2RlKQogewotICAgIHJl
dHVybiBtX2ltcGwgPyBtX2ltcGwtPnV0ZjgobW9kZSkgOiBDU3RyaW5nIHsgIiIsIDAgfTsKKyAg
ICByZXR1cm4gdGhpc1N0cmluZyA/IHRoaXNTdHJpbmctPnV0ZjgobW9kZSkgOiBDU3RyaW5nIHsg
IiIsIDAgfTsKIH0KIAotQ1N0cmluZyBTdHJpbmc6OnV0ZjgoKSBjb25zdAorQ1N0cmluZyBCYXNp
Y1N0cmluZzo6dXRmOChjb25zdCBTdHJpbmdJbXBsKiB0aGlzU3RyaW5nKQogewotICAgIHJldHVy
biB1dGY4KExlbmllbnRDb252ZXJzaW9uKTsKKyAgICByZXR1cm4gQmFzaWNTdHJpbmc6OnV0Zjgo
dGhpc1N0cmluZywgTGVuaWVudENvbnZlcnNpb24pOwogfQogCi1TdHJpbmcgU3RyaW5nOjptYWtl
OEJpdEZyb20xNkJpdFNvdXJjZShjb25zdCBVQ2hhciogc291cmNlLCBzaXplX3QgbGVuZ3RoKQor
U3RyaW5nIFN0cmluZ01ha2VyOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShjb25zdCBVQ2hhciog
c291cmNlLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CkBAIC04MzksNyArNjI0LDcgQEAgU3RyaW5nIFN0cmluZzo6bWFrZThCaXRG
cm9tMTZCaXRTb3VyY2UoY29uc3QgVUNoYXIqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1TdHJpbmcgU3RyaW5nOjptYWtlMTZCaXRGcm9tOEJpdFNvdXJj
ZShjb25zdCBMQ2hhciogc291cmNlLCBzaXplX3QgbGVuZ3RoKQorU3RyaW5nIFN0cmluZ01ha2Vy
OjptYWtlMTZCaXRGcm9tOEJpdFNvdXJjZShjb25zdCBMQ2hhciogc291cmNlLCBzaXplX3QgbGVu
Z3RoKQogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC04
NTIsNyArNjM3LDcgQEAgU3RyaW5nIFN0cmluZzo6bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UoY29u
c3QgTENoYXIqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCkKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1TdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBMQ2hhciogc3RyaW5nU3RhcnQsIHNpemVf
dCBsZW5ndGgpCitTdHJpbmcgU3RyaW5nTWFrZXI6OmZyb21VVEY4KGNvbnN0IExDaGFyKiBzdHJp
bmdTdGFydCwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICBDUkFTSCgpOwpAQCAtODc5LDIxICs2
NjQsMjEgQEAgU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgTENoYXIqIHN0cmluZ1N0YXJ0
LCBzaXplX3QgbGVuZ3RoKQogICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUoYnVmZmVyU3Rh
cnQsIHV0ZjE2TGVuZ3RoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgTENo
YXIqIHN0cmluZykKK1N0cmluZyBTdHJpbmdNYWtlcjo6ZnJvbVVURjgoY29uc3QgTENoYXIqIHN0
cmluZykKIHsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IHJldHVybiBmcm9tVVRGOChzdHJpbmcsIHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihzdHJpbmcpKSk7CisgICAgcmV0dXJuIFN0cmluZ01ha2VyOjpmcm9tVVRGOChzdHJpbmcs
IHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpKSk7CiB9CiAKLVN0
cmluZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IENTdHJpbmcmIHMpCitTdHJpbmcgU3RyaW5nTWFr
ZXI6OmZyb21VVEY4KGNvbnN0IENTdHJpbmcmIHMpCiB7Ci0gICAgcmV0dXJuIGZyb21VVEY4KHMu
ZGF0YSgpKTsKKyAgICByZXR1cm4gU3RyaW5nTWFrZXI6OmZyb21VVEY4KHMuZGF0YSgpKTsKIH0K
IAotU3RyaW5nIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soY29uc3QgTENoYXIq
IHN0cmluZywgc2l6ZV90IHNpemUpCitTdHJpbmcgU3RyaW5nTWFrZXI6OmZyb21VVEY4V2l0aExh
dGluMUZhbGxiYWNrKGNvbnN0IExDaGFyKiBzdHJpbmcsIHNpemVfdCBzaXplKQogewotICAgIFN0
cmluZyB1dGY4ID0gZnJvbVVURjgoc3RyaW5nLCBzaXplKTsKKyAgICBTdHJpbmcgdXRmOCA9IFN0
cmluZ01ha2VyOjpmcm9tVVRGOChzdHJpbmcsIHNpemUpOwogICAgIGlmICghdXRmOCkKICAgICAg
ICAgcmV0dXJuIFN0cmluZyhzdHJpbmcsIHNpemUpOwogICAgIHJldHVybiB1dGY4OwpAQCAtMTE4
OCwxMiArOTczLDEyIEBAIGNvbnN0IFN0cmluZyYgZW1wdHlTdHJpbmcoKQogCiAvLyBGb3IgdXNl
IGluIHRoZSBkZWJ1Z2dlci4KIFN0cmluZyogc3RyaW5nKGNvbnN0IGNoYXIqKTsKLVZlY3Rvcjxj
aGFyPiBhc2NpaURlYnVnKFN0cmluZ0ltcGwqIGltcGwpOwotVmVjdG9yPGNoYXI+IGFzY2lpRGVi
dWcoU3RyaW5nJiBzdHJpbmcpOworVmVjdG9yPGNoYXI+IGFzY2lpRGVidWcoY29uc3QgU3RyaW5n
SW1wbCogaW1wbCk7CitWZWN0b3I8Y2hhcj4gYXNjaWlEZWJ1Zyhjb25zdCBTdHJpbmcmIHN0cmlu
Zyk7CiAKLXZvaWQgU3RyaW5nOjpzaG93KCkgY29uc3QKK3ZvaWQgV1RGOjpCYXNpY1N0cmluZzo6
c2hvdyhjb25zdCBTdHJpbmdJbXBsKiB0aGlzU3RyaW5nKQogewotICAgIGRhdGFMb2dGKCIlc1xu
IiwgYXNjaWlEZWJ1ZyhpbXBsKCkpLmRhdGEoKSk7CisgICAgZGF0YUxvZ0YoIiVzXG4iLCBhc2Np
aURlYnVnKHRoaXNTdHJpbmcpLmRhdGEoKSk7CiB9CiAKIFN0cmluZyogc3RyaW5nKGNvbnN0IGNo
YXIqIHMpCkBAIC0xMjAyLDcgKzk4Nyw3IEBAIFN0cmluZyogc3RyaW5nKGNvbnN0IGNoYXIqIHMp
CiAgICAgcmV0dXJuIG5ldyBTdHJpbmcocyk7CiB9CiAKLVZlY3RvcjxjaGFyPiBhc2NpaURlYnVn
KFN0cmluZ0ltcGwqIGltcGwpCitWZWN0b3I8Y2hhcj4gYXNjaWlEZWJ1Zyhjb25zdCBTdHJpbmdJ
bXBsKiBpbXBsKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIGFzY2lpRGVidWco
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiW251bGxdIikpLmltcGwoKSk7CkBAIC0xMjI0LDcgKzEwMDks
NyBAQCBWZWN0b3I8Y2hhcj4gYXNjaWlEZWJ1ZyhTdHJpbmdJbXBsKiBpbXBsKQogICAgIHJldHVy
biBidWZmZXI7CiB9CiAKLVZlY3RvcjxjaGFyPiBhc2NpaURlYnVnKFN0cmluZyYgc3RyaW5nKQor
VmVjdG9yPGNoYXI+IGFzY2lpRGVidWcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0
dXJuIGFzY2lpRGVidWcoc3RyaW5nLmltcGwoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApp
bmRleCBhNWFmMGFhLi5kZWIzNTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTI2LDgg
KzI2LDkgQEAKIC8vIG9uIHN5c3RlbXMgd2l0aG91dCBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3Rl
bXMuCiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdJbXBsLmg+CiAKICNpZmRlZiBfX09CSkNfXwpAQCAtMzYsNTMgKzM3LDE0MyBAQAog
CiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3MgQVNDSUlMaXRlcmFsOworY2xhc3MgQVNDSUlMaXRl
cmFsIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBBU0NJSUxpdGVyYWwoY29uc3QgY2hhciogY2hh
cmFjdGVycykgOiBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykgeyB9CisgICAgb3BlcmF0b3IgY29u
c3QgY2hhciooKSB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KKworcHJpdmF0ZToKKyAgICBjb25z
dCBjaGFyKiBtX2NoYXJhY3RlcnM7Cit9OwogCiAvLyBEZWNsYXJhdGlvbnMgb2Ygc3RyaW5nIG9w
ZXJhdGlvbnMKIAotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGludCBjaGFyYWN0ZXJzVG9JbnRTdHJp
Y3QoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAx
MCk7Ci1XVEZfRVhQT1JUX1NUUklOR19BUEkgaW50IGNoYXJhY3RlcnNUb0ludFN0cmljdChjb25z
dCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKLVdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSB1bnNpZ25lZCBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNvbnN0
IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApOwotV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIHVuc2lnbmVkIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoY29uc3Qg
VUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7CitXVEZf
RVhQT1JUX1BSSVZBVEUgaW50IGNoYXJhY3RlcnNUb0ludFN0cmljdChjb25zdCBMQ2hhciosIHNp
emVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKK1dURl9FWFBPUlRfUFJJ
VkFURSBpbnQgY2hhcmFjdGVyc1RvSW50U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29s
KiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApOworV1RGX0VYUE9SVF9QUklWQVRFIHVuc2ln
bmVkIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9r
ID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQg
Y2hhcmFjdGVyc1RvVUludFN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBu
dWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKIGludDY0X3QgY2hhcmFjdGVyc1RvSW50NjRTdHJpY3Qo
Y29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7
CiBpbnQ2NF90IGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApOwotV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IHVpbnQ2NF90IGNoYXJhY3RlcnNUb1VJbnQ2NFN0cmljdChjb25zdCBMQ2hhciosIHNpemVfdCwg
Ym9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKLVdURl9FWFBPUlRfU1RSSU5HX0FQ
SSB1aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3Qs
IGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
dWludDY0X3QgY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApOworV1RGX0VYUE9SVF9QUklWQVRFIHVp
bnQ2NF90IGNoYXJhY3RlcnNUb1VJbnQ2NFN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9v
bCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKIGludHB0cl90IGNoYXJhY3RlcnNUb0lu
dFB0clN0cmljdChjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQg
YmFzZSA9IDEwKTsKIGludHB0cl90IGNoYXJhY3RlcnNUb0ludFB0clN0cmljdChjb25zdCBVQ2hh
ciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKIAotV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGludCBjaGFyYWN0ZXJzVG9JbnQoY29uc3QgTENoYXIqLCBzaXplX3Qs
IGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQotV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGludCBjaGFyYWN0ZXJzVG9JbnQoY29uc3QgVUNoYXIqLCBzaXplX3Qs
IGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQorV1RGX0VY
UE9SVF9QUklWQVRFIGludCBjaGFyYWN0ZXJzVG9JbnQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJv
b2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQorV1RGX0VYUE9S
VF9QUklWQVRFIGludCBjaGFyYWN0ZXJzVG9JbnQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wq
IG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogdW5zaWduZWQgY2hh
cmFjdGVyc1RvVUludChjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsg
Ly8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCiB1bnNpZ25lZCBjaGFyYWN0ZXJzVG9VSW50KGNv
bnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOyAvLyBpZ25vcmVzIHRyYWls
aW5nIGdhcmJhZ2UKIGludDY0X3QgY2hhcmFjdGVyc1RvSW50NjQoY29uc3QgTENoYXIqLCBzaXpl
X3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogaW50
NjRfdCBjaGFyYWN0ZXJzVG9JbnQ2NChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBu
dWxscHRyKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCiB1aW50NjRfdCBjaGFyYWN0ZXJz
VG9VSW50NjQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGln
bm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHVpbnQ2NF90IGNo
YXJhY3RlcnNUb1VJbnQ2NChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRy
KTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCitXVEZfRVhQT1JUX1BSSVZBVEUgdWludDY0
X3QgY2hhcmFjdGVyc1RvVUludDY0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51
bGxwdHIpOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKIGludHB0cl90IGNoYXJhY3RlcnNU
b0ludFB0cihjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsgLy8gaWdu
b3JlcyB0cmFpbGluZyBnYXJiYWdlCiBpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3Qg
VUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcg
Z2FyYmFnZQogCiAvLyBGSVhNRTogTGlrZSB0aGUgc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhl
c2UgZ2l2ZSBmYWxzZSBmb3IgIm9rIiB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCiAv
LyBMaWtlIHRoZSBub24tc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgcmV0dXJuIHRoZSB2
YWx1ZSB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCiAvLyBJdCB3b3VsZCBiZSBiZXR0
ZXIgaWYgdGhlc2Ugd2VyZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgYWJvdmUgZnVuY3Rpb25z
IGluc3RlYWQuCi1XVEZfRVhQT1JUX1NUUklOR19BUEkgZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJs
ZShjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsKLVdURl9FWFBPUlRf
U1RSSU5HX0FQSSBkb3VibGUgY2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IFVDaGFyKiwgc2l6ZV90
LCBib29sKiBvayA9IG51bGxwdHIpOwotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGZsb2F0IGNoYXJh
Y3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOwot
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFy
Kiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOwotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGZs
b2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBzaXplX3QmIHBhcnNl
ZExlbmd0aCk7Ci1XVEZfRVhQT1JUX1NUUklOR19BUEkgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQo
Y29uc3QgVUNoYXIqLCBzaXplX3QsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKK1dURl9FWFBPUlRf
UFJJVkFURSBkb3VibGUgY2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IExDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IG51bGxwdHIpOworV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBjaGFyYWN0ZXJz
VG9Eb3VibGUoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7CitXVEZf
RVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqLCBzaXpl
X3QsIGJvb2wqIG9rID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFj
dGVyc1RvRmxvYXQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7CitX
VEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqLCBz
aXplX3QsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKK1dURl9FWFBPUlRfUFJJVkFURSBmbG9hdCBj
aGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciosIHNpemVfdCwgc2l6ZV90JiBwYXJzZWRMZW5n
dGgpOwogCiB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhciksIHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGJvb2wgaXNBbGxTcGVjaWFsQ2hhcmFjdGVycyhjb25zdCBDaGFyYWN0
ZXJUeXBlKiwgc2l6ZV90KTsKIAogZW51bSBUcmFpbGluZ1plcm9zVHJ1bmNhdGluZ1BvbGljeSB7
IEtlZXBUcmFpbGluZ1plcm9zLCBUcnVuY2F0ZVRyYWlsaW5nWmVyb3MgfTsKIAotY2xhc3MgU3Ry
aW5nIHsKKy8vIE5vbi10ZW1wbGF0ZWQgYmFzZSBmb3IgU3RyaW5nLiBDb250YWlucyBubyBkYXRh
IG1lbWJlcnMsIGFsbCBpdHMgc3RhdGljCisvLyBtZXRob2RzIGtub3cgaXMgaG93IHRvIGRlYWwg
d2l0aCBTdHJpbmdJbXBsLgorLy8KKy8vIEZJWE1FOiBNdWNoIG9mIHRoaXMgc2hvdWxkIGJlIG1v
dmVkIHRvIFN0cmluZ0ltcGwgaW5zdGVhZC4gSXQgd2FzIGxlZnQgaGVyZQorLy8gdG8gcmVkdWNl
IGNvZGUgbW92ZW1lbnQgd2hpbGUgYWRkaW5nIHBvaXNvbmluZyB0byBTdHJpbmcuCitzdHJ1Y3Qg
QmFzaWNTdHJpbmcgeworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFN0cmlu
Z0ltcGw+IGNyZWF0ZShjb25zdCBVQ2hhciosIHVuc2lnbmVkKTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgVUNoYXIqKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29u
c3QgTENoYXIqLCB1bnNpZ25lZCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQ
dHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IExDaGFy
Kik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8U3RyaW5nSW1wbD4gY3Jl
YXRlKGNvbnN0IGNoYXIqKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxT
dHJpbmdJbXBsPiBjcmVhdGUoQVNDSUlMaXRlcmFsKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiBhcHBlbmQoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwq
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiBhcHBl
bmQoU3RyaW5nSW1wbCosIExDaGFyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJl
ZlB0cjxTdHJpbmdJbXBsPiBhcHBlbmQoU3RyaW5nSW1wbCosIFVDaGFyKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiBhcHBlbmQoU3RyaW5nSW1wbCos
IGNvbnN0IGNoYXIqKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxTdHJp
bmdJbXBsPiBpbnNlcnQoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqLCB1bnNpZ25lZCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8U3RyaW5nSW1wbD4gYXBwZW5kKFN0cmlu
Z0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiBhcHBlbmQoU3RyaW5nSW1wbCosIGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVUNoYXIzMiBjaGFy
YWN0ZXJTdGFydGluZ0F0KFN0cmluZ0ltcGwqLCB1bnNpZ25lZCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWZQdHI8U3RyaW5nSW1wbD4gdHJ1bmNhdGUoU3RyaW5nSW1wbCosIHVu
c2lnbmVkKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxTdHJpbmdJbXBs
PiByZW1vdmUoU3RyaW5nSW1wbCosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8U3RyaW5nSW1wbD4gc3Vic3RyaW5nU2hhcmluZ0ltcGwo
Y29uc3QgU3RyaW5nSW1wbCosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIHBlcmNlbnRhZ2UoY29uc3QgU3RyaW5nSW1wbCosIGludCYpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVmVjdG9yPFVDaGFyPiBjaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbihTdHJpbmdJbXBsKik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBSZWZQdHI8U3RyaW5nSW1wbD4gZm9ybWF0V2l0aEFyZ3VtZW50cyhjb25zdCBjaGFyICos
IHZhX2xpc3QpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDApOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgUmVmUHRyPFN0cmluZ0ltcGw+IG51bWJlcihpbnQpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFN0cmluZ0ltcGw+IG51bWJlcih1bnNpZ25lZCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8U3RyaW5nSW1wbD4gbnVtYmVyKGxv
bmcpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFN0cmluZ0ltcGw+IG51
bWJlcih1bnNpZ25lZCBsb25nKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0
cjxTdHJpbmdJbXBsPiBudW1iZXIobG9uZyBsb25nKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiBudW1iZXIodW5zaWduZWQgbG9uZyBsb25nKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxTdHJpbmdJbXBsPiBudW1iZXIoZG91
YmxlLCB1bnNpZ25lZCwgVHJhaWxpbmdaZXJvc1RydW5jYXRpbmdQb2xpY3kpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFN0cmluZ0ltcGw+IG51bWJlclRvU3RyaW5nRUNN
QVNjcmlwdChkb3VibGUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFN0
cmluZ0ltcGw+IG51bWJlclRvU3RyaW5nRml4ZWRXaWR0aChkb3VibGUsIHVuc2lnbmVkKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhy
ZWFkKGNvbnN0IFN0cmluZ0ltcGwqKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgc3BsaXQoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFN0cmluZ0ltcGwqLCBib29sLCBWZWN0
b3I8U3RyaW5nPiYpOworICAgIHVzaW5nIFNwbGl0RnVuY3RvciA9IFdURjo6RnVuY3Rpb248dm9p
ZChjb25zdCBTdHJpbmdWaWV3Jik+OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBzcGxpdChjb25zdCBTdHJpbmdJbXBsKiwgVUNoYXIsIGJvb2wsIGNvbnN0IFNwbGl0RnVuY3Rv
ciYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzcGxpdChjb25zdCBTdHJp
bmdJbXBsKiwgVUNoYXIsIGJvb2wsIFZlY3RvcjxTdHJpbmc+Jik7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBDU3RyaW5nIGFzY2lpKGNvbnN0IFN0cmluZ0ltcGwqKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIENTdHJpbmcgbGF0aW4xKGNvbnN0IFN0cmluZ0ltcGwqKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENTdHJpbmcgdXRmOChjb25zdCBTdHJpbmdJ
bXBsKiwgQ29udmVyc2lvbk1vZGUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgQ1N0
cmluZyB1dGY4KGNvbnN0IFN0cmluZ0ltcGwqKTsKKyNpZiBVU0UoQ0YpCisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKENGU3RyaW5nUmVmKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY3Jl
YXRlQ0ZTdHJpbmcoY29uc3QgU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyNpZmRlZiBfX09CSkNf
XworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0
ZShOU1N0cmluZyAqc3RyKTsKKyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzaG93KGNvbnN0IFN0cmluZ0ltcGwqKTsKKyNlbmRpZgor
fTsKKworLy8gTm9uLXRlbXBsYXRlZCBzdHJpbmcgY29uc3RydWN0aW9uLCBwdWJsaWNseSBhY2Nl
c3NibGUgZnJvbSBTdHJpbmcuCitzdHJ1Y3QgU3RyaW5nTWFrZXIgeworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RyaW5nIG1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGNvbnN0IFVDaGFy
Kiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHN0YXRpYyBT
dHJpbmcgbWFrZThCaXRGcm9tMTZCaXRTb3VyY2UoY29uc3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVD
YXBhY2l0eT4mKTsKKworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIG1ha2Ux
NkJpdEZyb204Qml0U291cmNlKGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKKworICAgIC8vIFN0cmlu
Zzo6ZnJvbVVURjggd2lsbCByZXR1cm4gYSBudWxsIHN0cmluZyBpZgorICAgIC8vIHRoZSBpbnB1
dCBkYXRhIGNvbnRhaW5zIGludmFsaWQgVVRGLTggc2VxdWVuY2VzLgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RyaW5nIGZyb21VVEY4KGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBMQ2hhciop
OworICAgIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAg
c3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKik7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgQ1N0cmluZyYpOworICAgIHN0YXRpYyBT
dHJpbmcgZnJvbVVURjgoY29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFjdGVycyk7CisKKyAgICAv
LyBUcmllcyB0byBjb252ZXJ0IHRoZSBwYXNzZWQgaW4gc3RyaW5nIHRvIFVURi04LCBidXQgd2ls
bCBmYWxsIGJhY2sgdG8gTGF0aW4tMSBpZiB0aGUgc3RyaW5nIGlzIG5vdCB2YWxpZCBVVEYtOC4K
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOFdpdGhMYXRpbjFG
YWxsYmFjayhjb25zdCBMQ2hhciosIHNpemVfdCk7CisgICAgc3RhdGljIFN0cmluZyBmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
KTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clRyYWl0c1QgLyogPSBEdW1iUHRyVHJhaXRz
PFN0cmluZ0ltcGw+IGZyb20gRm9yd2FyZC5oICovPgorY2xhc3MgUG9pc29uYWJsZVN0cmluZyA6
IHB1YmxpYyBTdHJpbmdNYWtlciwgcHJpdmF0ZSBCYXNpY1N0cmluZyB7CiBwdWJsaWM6CisgICAg
dXNpbmcgUHRyVHJhaXRzID0gUHRyVHJhaXRzVDsKKwogICAgIC8vIENvbnN0cnVjdCBhIG51bGwg
c3RyaW5nLCBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgU3RyaW5n
KCkgPSBkZWZhdWx0OworICAgIFBvaXNvbmFibGVTdHJpbmcoKSA9IGRlZmF1bHQ7CiAKICAgICAv
LyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBVVEYtMTYgZGF0YS4KLSAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgU3RyaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIFBvaXNvbmFibGVTdHJpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkgOiBtX2ltcGwoQmFzaWNTdHJpbmc6OmNyZWF0ZShjaGFyYWN0ZXJzLCBsZW5ndGgp
KSB7IH0KIAogICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyBieSBjb3B5aW5nIHRoZSBjb250ZW50
cyBvZiBhIHZlY3Rvci4gIFRvIGF2b2lkCiAgICAgLy8gY29weWluZywgY29uc2lkZXIgdXNpbmcg
U3RyaW5nOjphZG9wdCBpbnN0ZWFkLgpAQCAtOTMsMjM1ICsxODQsMjc3IEBAIHB1YmxpYzoKICAg
ICAvLyB3aGljaCBjYW4gb25seSBvY2N1ciBmb3IgdmVjdG9ycyB3aXRob3V0IGlubGluZSBjYXBh
Y2l0eS4KICAgICAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDk3OTIKICAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KLSAgICBleHBsaWNpdCBTdHJpbmcoY29uc3QgVmVjdG9yPFVDaGFyLCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYpOworICAgIGV4cGxpY2l0IFBvaXNvbmFi
bGVTdHJpbmcoY29uc3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyPiYpOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggVVRGLTE2IGRhdGEsIGZy
b20gYSBudWxsLXRlcm1pbmF0ZWQgc291cmNlLgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBT
dHJpbmcoY29uc3QgVUNoYXIqKTsKKyAgICBQb2lzb25hYmxlU3RyaW5nKGNvbnN0IFVDaGFyKiBu
dWxsVGVybWluYXRlZFN0cmluZykgOiBtX2ltcGwoQmFzaWNTdHJpbmc6OmNyZWF0ZShudWxsVGVy
bWluYXRlZFN0cmluZykpIHsgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0
aW4xIGRhdGEuCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhjb25zdCBMQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
U3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgUG9p
c29uYWJsZVN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKSA6
IG1faW1wbChCYXNpY1N0cmluZzo6Y3JlYXRlKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsgfQorICAg
IFBvaXNvbmFibGVTdHJpbmcoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KSA6IG1faW1wbChCYXNpY1N0cmluZzo6Y3JlYXRlKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsgfQog
CiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0aW4xIGRhdGEsIGZyb20gYSBudWxs
LXRlcm1pbmF0ZWQgc291cmNlLgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcoY29u
c3QgTENoYXIqIGNoYXJhY3RlcnMpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmco
Y29uc3QgY2hhciogY2hhcmFjdGVycyk7CisgICAgUG9pc29uYWJsZVN0cmluZyhjb25zdCBMQ2hh
ciogY2hhcmFjdGVycykgOiBtX2ltcGwoQmFzaWNTdHJpbmc6OmNyZWF0ZShjaGFyYWN0ZXJzKSkg
eyB9CisgICAgUG9pc29uYWJsZVN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKSA6IG1faW1w
bChCYXNpY1N0cmluZzo6Y3JlYXRlKGNoYXJhY3RlcnMpKSB7IH0KKyAgICB0ZW1wbGF0ZTxzaXpl
X3QgTGVuZ3RoPiBQb2lzb25hYmxlU3RyaW5nKGNvbnN0IGNoYXIgY2hhcmFjdGVyc1tMZW5ndGhd
KSA6IG1faW1wbChCYXNpY1N0cmluZzo6Y3JlYXRlKGNoYXJhY3RlcnMsIExlbmd0aCkpIHsgfQog
CiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHJlZmVyZW5jaW5nIGFuIGV4aXN0aW5nIFN0cmlu
Z0ltcGwuCi0gICAgU3RyaW5nKFN0cmluZ0ltcGwmKTsKLSAgICBTdHJpbmcoU3RyaW5nSW1wbCop
OwotICAgIFN0cmluZyhSZWY8U3RyaW5nSW1wbD4mJik7Ci0gICAgU3RyaW5nKFJlZlB0cjxTdHJp
bmdJbXBsPiYmKTsKKyAgICBQb2lzb25hYmxlU3RyaW5nKFN0cmluZ0ltcGwmKTsKKyAgICBQb2lz
b25hYmxlU3RyaW5nKFN0cmluZ0ltcGwqKTsKKyAgICBQb2lzb25hYmxlU3RyaW5nKFJlZjxTdHJp
bmdJbXBsPiYmKTsKKyAgICBQb2lzb25hYmxlU3RyaW5nKFJlZlB0cjxTdHJpbmdJbXBsPiYmKTsK
IAotICAgIFN0cmluZyhSZWY8QXRvbWljU3RyaW5nSW1wbD4mJik7Ci0gICAgU3RyaW5nKFJlZlB0
cjxBdG9taWNTdHJpbmdJbXBsPiYmKTsKKyAgICBQb2lzb25hYmxlU3RyaW5nKFJlZjxBdG9taWNT
dHJpbmdJbXBsPiYmKTsKKyAgICBQb2lzb25hYmxlU3RyaW5nKFJlZlB0cjxBdG9taWNTdHJpbmdJ
bXBsPiYmKTsKIAotICAgIFN0cmluZyhTdGF0aWNTdHJpbmdJbXBsJik7Ci0gICAgU3RyaW5nKFN0
YXRpY1N0cmluZ0ltcGwqKTsKKyAgICBQb2lzb25hYmxlU3RyaW5nKFN0YXRpY1N0cmluZ0ltcGwm
KTsKKyAgICBQb2lzb25hYmxlU3RyaW5nKFN0YXRpY1N0cmluZ0ltcGwqKTsKIAogICAgIC8vIENv
bnN0cnVjdCBhIHN0cmluZyBmcm9tIGEgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWwuCi0gICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhBU0NJSUxpdGVyYWwpOworICAgIFBvaXNvbmFibGVT
dHJpbmcoQVNDSUlMaXRlcmFsIGNoYXJhY3RlcnMpIDogbV9pbXBsKEJhc2ljU3RyaW5nOjpjcmVh
dGUoY2hhcmFjdGVycykpIHsgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIGZyb20gYSBj
b25zdGFudCBzdHJpbmcgbGl0ZXJhbC4KICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHRoZSAi
YmlnIiB2ZXJzaW9uLCBhcyBpdCBwdXQgdGhlIGxlbmd0aCBpbiB0aGUgZnVuY3Rpb24gY2FsbCBh
bmQgZ2VuZXJhdGUgYmlnZ2VyIGNvZGUuCiAgICAgZW51bSBDb25zdHJ1Y3RGcm9tTGl0ZXJhbFRh
ZyB7IENvbnN0cnVjdEZyb21MaXRlcmFsIH07Ci0gICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFj
dGVyQ291bnQ+IFN0cmluZyhjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRd
LCBDb25zdHJ1Y3RGcm9tTGl0ZXJhbFRhZykgOiBtX2ltcGwoU3RyaW5nSW1wbDo6Y3JlYXRlRnJv
bUxpdGVyYWw8Y2hhcmFjdGVyQ291bnQ+KGNoYXJhY3RlcnMpKSB7IH0KKyAgICB0ZW1wbGF0ZTx1
bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4gUG9pc29uYWJsZVN0cmluZyhjb25zdCBjaGFyICgmY2hh
cmFjdGVycylbY2hhcmFjdGVyQ291bnRdLCBDb25zdHJ1Y3RGcm9tTGl0ZXJhbFRhZykgOiBtX2lt
cGwoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWw8Y2hhcmFjdGVyQ291bnQ+KGNoYXJhY3Rl
cnMpKSB7IH0KIAogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgaGF2ZSB0byBkZWZpbmUgdGhlc2Ug
ZXhwbGljaXRseSBnaXZlbiB0aGF0IHdlIGp1c3Qgd2FudCB0aGUgZGVmYXVsdCB2ZXJzaW9ucz8K
ICAgICAvLyBXZSBoYXZlIHZlcmlmaWVkIGVtcGlyaWNhbGx5IHRoYXQgd2UgZG8uCi0gICAgU3Ry
aW5nKGNvbnN0IFN0cmluZyYpID0gZGVmYXVsdDsKLSAgICBTdHJpbmcoU3RyaW5nJiYpID0gZGVm
YXVsdDsKLSAgICBTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBTdHJpbmcmKSA9IGRlZmF1bHQ7Ci0g
ICAgU3RyaW5nJiBvcGVyYXRvcj0oU3RyaW5nJiYpID0gZGVmYXVsdDsKKyAgICBQb2lzb25hYmxl
U3RyaW5nKGNvbnN0IFBvaXNvbmFibGVTdHJpbmcmKSA9IGRlZmF1bHQ7CisgICAgUG9pc29uYWJs
ZVN0cmluZyhQb2lzb25hYmxlU3RyaW5nJiYpID0gZGVmYXVsdDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBQdHJUcmFpdHM+IFBvaXNvbmFibGVTdHJpbmcoY29uc3QgUG9pc29uYWJsZVN0cmluZzxQ
dHJUcmFpdHM+JiBvKSA6IG1faW1wbChvLmltcGwoKSkgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgUHRyVHJhaXRzPiBQb2lzb25hYmxlU3RyaW5nKFBvaXNvbmFibGVTdHJpbmc8UHRyVHJhaXRz
PiYmIG8pIDogbV9pbXBsKFdURk1vdmUoby5pbXBsKCkpKSB7IH0KKyAgICBQb2lzb25hYmxlU3Ry
aW5nJiBvcGVyYXRvcj0oY29uc3QgUG9pc29uYWJsZVN0cmluZyYpID0gZGVmYXVsdDsKKyAgICBQ
b2lzb25hYmxlU3RyaW5nJiBvcGVyYXRvcj0oUG9pc29uYWJsZVN0cmluZyYmKSA9IGRlZmF1bHQ7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHJhaXRzPiBQb2lzb25hYmxlU3RyaW5nJiBvcGVy
YXRvcj0oY29uc3QgUG9pc29uYWJsZVN0cmluZzxQdHJUcmFpdHM+JiBvKSB7IFBvaXNvbmFibGVT
dHJpbmcgdG1wID0gbzsgc3dhcCh0bXApOyByZXR1cm4gKnRoaXM7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQdHJUcmFpdHM+IFBvaXNvbmFibGVTdHJpbmcmIG9wZXJhdG9yPShQb2lzb25hYmxl
U3RyaW5nPFB0clRyYWl0cz4mJiBvKSB7IFBvaXNvbmFibGVTdHJpbmcgdG1wID0gV1RGTW92ZShv
KTsgc3dhcCh0bXApOyByZXR1cm4gKnRoaXM7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgflN0cmlu
ZygpID0gZGVmYXVsdDsKKyAgICBBTFdBWVNfSU5MSU5FIH5Qb2lzb25hYmxlU3RyaW5nKCkgPSBk
ZWZhdWx0OwogCi0gICAgdm9pZCBzd2FwKFN0cmluZyYgbykgeyBtX2ltcGwuc3dhcChvLm1faW1w
bCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHN3YXAoUG9pc29uYWJsZVN0cmlu
ZzxUPiYgbykgeyBtX2ltcGwuc3dhcChvLm1faW1wbCk7IH0KIAotICAgIHN0YXRpYyBTdHJpbmcg
YWRvcHQoU3RyaW5nQnVmZmVyPExDaGFyPiYmIGJ1ZmZlcikgeyByZXR1cm4gU3RyaW5nSW1wbDo6
YWRvcHQoV1RGTW92ZShidWZmZXIpKTsgfQotICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoU3RyaW5n
QnVmZmVyPFVDaGFyPiYmIGJ1ZmZlcikgeyByZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQoV1RGTW92
ZShidWZmZXIpKTsgfQorICAgIHN0YXRpYyBQb2lzb25hYmxlU3RyaW5nIGFkb3B0KFN0cmluZ0J1
ZmZlcjxMQ2hhcj4mJiBidWZmZXIpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUo
YnVmZmVyKSk7IH0KKyAgICBzdGF0aWMgUG9pc29uYWJsZVN0cmluZyBhZG9wdChTdHJpbmdCdWZm
ZXI8VUNoYXI+JiYgYnVmZmVyKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKGJ1
ZmZlcikpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eT4KLSAgICBzdGF0aWMgU3RyaW5nIGFkb3B0KFN0cmluZ1ZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2ZWN0b3IpIHsg
cmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUodmVjdG9yKSk7IH0KKyAgICBzdGF0aWMg
UG9pc29uYWJsZVN0cmluZyBhZG9wdChTdHJpbmdWZWN0b3I8Q2hhcmFjdGVyVHlwZSwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYgdmVjdG9yKSB7IHJldHVy
biBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHZlY3RvcikpOyB9CiAKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGw7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+aXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCBpbXBsKCktPmlzRW1wdHkoKTsgfQogCiAgICAg
U3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiByZWxlYXNlSW1wbCgpIHsgcmV0dXJuIFdURk1vdmUobV9pbXBsKTsg
fQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBs
LT5sZW5ndGgoKSA6IDA7IH0KLSAgICB1bnNpZ25lZCBtYXNrKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsID8gbV9pbXBsLT5tYXNrKCkgOiAwOyB9Ci0gICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4
KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5jaGFyYWN0ZXJzOCgpIDogbnVsbHB0
cjsgfQotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwgPyBtX2ltcGwtPmNoYXJhY3RlcnMxNigpIDogbnVsbHB0cjsgfQotCi0gICAgLy8gUmV0dXJu
IGNoYXJhY3RlcnM4KCkgb3IgY2hhcmFjdGVyczE2KCkgZGVwZW5kaW5nIG9uIENoYXJhY3RlclR5
cGUuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3QgQ2hhcmFjdGVy
VHlwZSogY2hhcmFjdGVycygpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1faW1wbCA/IGltcGwoKS0+bGVuZ3RoKCkgOiAwOyB9CisgICAgdW5zaWduZWQgbWFz
aygpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IGltcGwoKS0+bWFzaygpIDogMDsgfQorICAgIGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IGltcGwoKS0+
Y2hhcmFjdGVyczgoKSA6IG51bGxwdHI7IH0KKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2
KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgpLT5jaGFyYWN0ZXJzMTYoKSA6IG51bGxw
dHI7IH0KIAotICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5pczhCaXQo
KTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gaW1wbCgpLT5pczhCaXQoKTsg
fQogCi0gICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBt
X2ltcGwtPmxlbmd0aCgpICogKGlzOEJpdCgpID8gc2l6ZW9mKExDaGFyKSA6IHNpemVvZihVQ2hh
cikpIDogMDsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsID8gaW1wbCgpLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hhcikgOiBzaXpl
b2YoVUNoYXIpKSA6IDA7IH0KIAotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3RyaW5nIGFz
Y2lpKCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJpbmcgbGF0aW4xKCkg
Y29uc3Q7CisgICAgV1RGX0xBWllfSU5TVEFOVElBVEUoQ1N0cmluZz1DU3RyaW5nKSBDU3RyaW5n
IGFzY2lpKCkgY29uc3QgeyByZXR1cm4gQmFzaWNTdHJpbmc6OmFzY2lpKGltcGwoKSk7IH0KKyAg
ICBXVEZfTEFaWV9JTlNUQU5USUFURShDU3RyaW5nPUNTdHJpbmcpIENTdHJpbmcgbGF0aW4xKCkg
Y29uc3QgeyByZXR1cm4gQmFzaWNTdHJpbmc6OmxhdGluMShpbXBsKCkpOyB9CiAKLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgQ1N0cmluZyB1dGY4KENvbnZlcnNpb25Nb2RlKSBjb25zdDsKLSAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQ1N0cmluZyB1dGY4KCkgY29uc3Q7CisgICAgV1RGX0xB
WllfSU5TVEFOVElBVEUoQ1N0cmluZz1DU3RyaW5nKSBDU3RyaW5nIHV0ZjgoQ29udmVyc2lvbk1v
ZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gQmFzaWNTdHJpbmc6OnV0ZjgoaW1wbCgpLCBtb2RlKTsg
fQorICAgIFdURl9MQVpZX0lOU1RBTlRJQVRFKENTdHJpbmc9Q1N0cmluZykgQ1N0cmluZyB1dGY4
KCkgY29uc3QgeyByZXR1cm4gQmFzaWNTdHJpbmc6OnV0ZjgoaW1wbCgpKTsgfQogCiAgICAgVUNo
YXIgY2hhcmFjdGVyQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIFVDaGFyIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlckF0KGluZGV4KTsgfQog
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgbnVtYmVyKGludCk7Ci0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVuc2lnbmVkKTsK
LSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBudW1iZXIobG9uZyk7Ci0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVuc2lnbmVkIGxv
bmcpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIG51bWJlcihsb25n
IGxvbmcpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIG51bWJlcih1
bnNpZ25lZCBsb25nIGxvbmcpOworICAgIHN0YXRpYyBQb2lzb25hYmxlU3RyaW5nIG51bWJlcihp
bnQgbnVtYmVyKSB7IHJldHVybiBCYXNpY1N0cmluZzo6bnVtYmVyKG51bWJlcik7IH0KKyAgICBz
dGF0aWMgUG9pc29uYWJsZVN0cmluZyBudW1iZXIodW5zaWduZWQgbnVtYmVyKSB7IHJldHVybiBC
YXNpY1N0cmluZzo6bnVtYmVyKG51bWJlcik7IH0KKyAgICBzdGF0aWMgUG9pc29uYWJsZVN0cmlu
ZyBudW1iZXIobG9uZyBudW1iZXIpIHsgcmV0dXJuIEJhc2ljU3RyaW5nOjpudW1iZXIobnVtYmVy
KTsgfQorICAgIHN0YXRpYyBQb2lzb25hYmxlU3RyaW5nIG51bWJlcih1bnNpZ25lZCBsb25nIG51
bWJlcikgeyByZXR1cm4gQmFzaWNTdHJpbmc6Om51bWJlcihudW1iZXIpOyB9CisgICAgc3RhdGlj
IFBvaXNvbmFibGVTdHJpbmcgbnVtYmVyKGxvbmcgbG9uZyBudW1iZXIpIHsgcmV0dXJuIEJhc2lj
U3RyaW5nOjpudW1iZXIobnVtYmVyKTsgfQorICAgIHN0YXRpYyBQb2lzb25hYmxlU3RyaW5nIG51
bWJlcih1bnNpZ25lZCBsb25nIGxvbmcgbnVtYmVyKSB7IHJldHVybiBCYXNpY1N0cmluZzo6bnVt
YmVyKG51bWJlcik7IH0KIAotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5n
IG51bWJlcihkb3VibGUsIHVuc2lnbmVkIHByZWNpc2lvbiA9IDYsIFRyYWlsaW5nWmVyb3NUcnVu
Y2F0aW5nUG9saWN5ID0gVHJ1bmNhdGVUcmFpbGluZ1plcm9zKTsKKyAgICBzdGF0aWMgUG9pc29u
YWJsZVN0cmluZyBudW1iZXIoZG91YmxlIG51bWJlciwgdW5zaWduZWQgcHJlY2lzaW9uID0gNiwg
VHJhaWxpbmdaZXJvc1RydW5jYXRpbmdQb2xpY3kgdHJhaWxpbmdaZXJvc1RydW5jYXRpbmdQb2xp
Y3kgPSBUcnVuY2F0ZVRyYWlsaW5nWmVyb3MpIHsgcmV0dXJuIEJhc2ljU3RyaW5nOjpudW1iZXIo
bnVtYmVyLCBwcmVjaXNpb24sIHRyYWlsaW5nWmVyb3NUcnVuY2F0aW5nUG9saWN5KTsgfQogCiAg
ICAgLy8gTnVtYmVyIHRvIFN0cmluZyBjb252ZXJzaW9uIGZvbGxvd2luZyB0aGUgRUNNQVNjcmlw
dCBkZWZpbml0aW9uLgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIG51
bWJlclRvU3RyaW5nRUNNQVNjcmlwdChkb3VibGUpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBzdGF0aWMgU3RyaW5nIG51bWJlclRvU3RyaW5nRml4ZWRXaWR0aChkb3VibGUsIHVuc2lnbmVk
IGRlY2ltYWxQbGFjZXMpOworICAgIHN0YXRpYyBQb2lzb25hYmxlU3RyaW5nIG51bWJlclRvU3Ry
aW5nRUNNQVNjcmlwdChkb3VibGUgbnVtYmVyKSB7IHJldHVybiBCYXNpY1N0cmluZzo6bnVtYmVy
VG9TdHJpbmdFQ01BU2NyaXB0KG51bWJlcik7IH0KKyAgICBzdGF0aWMgUG9pc29uYWJsZVN0cmlu
ZyBudW1iZXJUb1N0cmluZ0ZpeGVkV2lkdGgoZG91YmxlIG51bWJlciwgdW5zaWduZWQgZGVjaW1h
bFBsYWNlcykgeyByZXR1cm4gQmFzaWNTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRXaWR0aChu
dW1iZXIsIGRlY2ltYWxQbGFjZXMpOyB9CiAKICAgICAvLyBGaW5kIGEgc2luZ2xlIGNoYXJhY3Rl
ciBvciBzdHJpbmcsIGFsc28gd2l0aCBtYXRjaCBmdW5jdGlvbiAmIGxhdGluMSBmb3Jtcy4KLSAg
ICBzaXplX3QgZmluZChVQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKGNoYXJhY3Rlciwgc3RhcnQpIDogbm90Rm91
bmQ7IH0KKyAgICBzaXplX3QgZmluZChVQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0g
MCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgpLT5maW5kKGNoYXJhY3Rlciwgc3RhcnQp
IDogbm90Rm91bmQ7IH0KIAotICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBj
b25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3RyaW5nLmltcGwoKSkgOiBub3RG
b3VuZDsgfQotICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBz
dGFydCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0cmluZy5pbXBsKCks
IHN0YXJ0KSA6IG5vdEZvdW5kOyB9Ci0gICAgc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShj
b25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5k
SWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSkgOiBub3RGb3VuZDsgfQotICAgIHNpemVf
dCBmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0KSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmcuaW1wbCgpLCBzdGFydE9mZnNldCkgOiBub3RGb3VuZDsgfQorICAgIHNp
emVfdCBmaW5kKGNvbnN0IFBvaXNvbmFibGVTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4g
bV9pbXBsID8gaW1wbCgpLT5maW5kKHN0cmluZy5pbXBsKCkpIDogbm90Rm91bmQ7IH0KKyAgICBz
aXplX3QgZmluZChjb25zdCBQb2lzb25hYmxlU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0
KSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBpbXBsKCktPmZpbmQoc3RyaW5nLmltcGwoKSwgc3Rh
cnQpIDogbm90Rm91bmQ7IH0KKyAgICBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IFBvaXNvbmFibGVTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgp
LT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSkgOiBub3RGb3VuZDsgfQorICAg
IHNpemVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgUG9pc29uYWJsZVN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgp
LT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSwgc3RhcnRPZmZzZXQpIDogbm90
Rm91bmQ7IH0KKyAgICBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0lt
cGwmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgpLT5maW5kSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaW5nKSA6IG5vdEZvdW5kOyB9CisgICAgc2l6ZV90IGZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBj
b25zdCB7IHJldHVybiBtX2ltcGwgPyBpbXBsKCktPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmcsIHN0YXJ0T2Zmc2V0KSA6IG5vdEZvdW5kOyB9CisgICAgdGVtcGxhdGU8c2l6ZV90IExlbmd0
aD4gc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyIHN0cmluZ1tMZW5ndGhd
KSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBpbXBsKCktPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShT
dHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChzdHJpbmcpKSA6IG5vdEZvdW5kOyB9CisgICAg
dGVtcGxhdGU8c2l6ZV90IExlbmd0aD4gc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25z
dCBjaGFyIHN0cmluZ1tMZW5ndGhdLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsID8gaW1wbCgpLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3Jl
YXRlRnJvbUxpdGVyYWwoc3RyaW5nKSwgc3RhcnRPZmZzZXQpIDogbm90Rm91bmQ7IH0KIAotICAg
IHNpemVfdCBmaW5kKENvZGVVbml0TWF0Y2hGdW5jdGlvbiBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25l
ZCBzdGFydCA9IDApIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChtYXRjaEZ1
bmN0aW9uLCBzdGFydCkgOiBub3RGb3VuZDsgfQotICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFy
KiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gbV9p
bXBsLT5maW5kKHN0cmluZywgc3RhcnQpIDogbm90Rm91bmQ7IH0KKyAgICBzaXplX3QgZmluZChD
b2RlVW5pdE1hdGNoRnVuY3Rpb24gbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBj
b25zdCB7IHJldHVybiBtX2ltcGwgPyBpbXBsKCktPmZpbmQobWF0Y2hGdW5jdGlvbiwgc3RhcnQp
IDogbm90Rm91bmQ7IH0KKyAgICBzaXplX3QgZmluZChjb25zdCBMQ2hhciogc3RyaW5nLCB1bnNp
Z25lZCBzdGFydCA9IDApIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IGltcGwoKS0+ZmluZChzdHJp
bmcsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAKICAgICAvLyBGaW5kIHRoZSBsYXN0IGluc3RhbmNl
IG9mIGEgc2luZ2xlIGNoYXJhY3RlciBvciBzdHJpbmcuCi0gICAgc2l6ZV90IHJldmVyc2VGaW5k
KFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZp
bmQoY2hhcmFjdGVyLCBzdGFydCkgOiBub3RGb3VuZDsgfQotICAgIHNpemVfdCByZXZlcnNlRmlu
ZChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2
ZXJzZUZpbmQoc3RyaW5nLmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KKyAgICBzaXplX3Qg
cmV2ZXJzZUZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgp
LT5yZXZlcnNlRmluZChjaGFyYWN0ZXIsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CisgICAgc2l6ZV90
IHJldmVyc2VGaW5kKGNvbnN0IFBvaXNvbmFibGVTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3Rh
cnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbCA/IGltcGwoKS0+cmV2ZXJzZUZpbmQoc3RyaW5nLmltcGwoKSwgc3RhcnQpIDogbm90
Rm91bmQ7IH0KIAotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBWZWN0b3I8VUNoYXI+IGNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkgY29uc3Q7CisgICAgVmVjdG9yPFVDaGFyPiBjaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIEJhc2ljU3RyaW5nOjpj
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbihpbXBsKCkpOyB9CiAKLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgVUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkKSBjb25zdDsK
KyAgICBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gQmFzaWNTdHJpbmc6OmNoYXJhY3RlclN0YXJ0aW5nQXQoaW1wbCgpLCBpKTsgfQogCiAgICAg
Ym9vbCBjb250YWlucyhVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0IHsgcmV0dXJuIGZpbmQoY2hhcmFj
dGVyKSAhPSBub3RGb3VuZDsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgTENoYXIqIHN0cmlu
ZykgY29uc3QgeyByZXR1cm4gZmluZChzdHJpbmcpICE9IG5vdEZvdW5kOyB9Ci0gICAgYm9vbCBj
b250YWlucyhjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gZmluZChzdHJpbmcp
ICE9IG5vdEZvdW5kOyB9Ci0gICAgYm9vbCBjb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBmaW5kSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nKSAhPSBub3RGb3VuZDsgfQotICAgIGJvb2wgY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZShj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnRPZmZzZXQpIGNvbnN0IHsgcmV0dXJu
IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsIHN0YXJ0T2Zmc2V0KSAhPSBub3RGb3VuZDsg
fQotCi0gICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJl
dHVybiBtX2ltcGwgPyBtX2ltcGwtPnN0YXJ0c1dpdGgoc3RyaW5nLmltcGwoKSkgOiBzdHJpbmcu
aXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBzdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+c3RhcnRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZy5pbXBsKCkpIDogc3RyaW5nLmlzRW1wdHkoKTsgfQot
ICAgIGJvb2wgc3RhcnRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bCAmJiBtX2ltcGwtPnN0YXJ0c1dpdGgoY2hhcmFjdGVyKTsgfQotICAgIHRlbXBsYXRlPHVuc2ln
bmVkIG1hdGNoTGVuZ3RoPiBib29sIHN0YXJ0c1dpdGgoY29uc3QgY2hhciAoJnByZWZpeClbbWF0
Y2hMZW5ndGhdKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnN0YXJ0c1dpdGg8bWF0
Y2hMZW5ndGg+KHByZWZpeCkgOiAhbWF0Y2hMZW5ndGg7IH0KLSAgICBib29sIGhhc0luZml4U3Rh
cnRpbmdBdChjb25zdCBTdHJpbmcmIHByZWZpeCwgdW5zaWduZWQgc3RhcnRPZmZzZXQpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbCAmJiBwcmVmaXguaW1wbCgpICYmIG1faW1wbC0+aGFzSW5maXhTdGFy
dGluZ0F0KCpwcmVmaXguaW1wbCgpLCBzdGFydE9mZnNldCk7IH0KLQotICAgIGJvb2wgZW5kc1dp
dGgoY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+
ZW5kc1dpdGgoc3RyaW5nLmltcGwoKSkgOiBzdHJpbmcuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBl
bmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJl
dHVybiBtX2ltcGwgPyBtX2ltcGwtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmlt
cGwoKSkgOiBzdHJpbmcuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBlbmRzV2l0aChVQ2hhciBjaGFy
YWN0ZXIpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCAmJiBtX2ltcGwtPmVuZHNXaXRoKGNoYXJhY3Rl
cik7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFBvaXNvbmFibGVTdHJpbmcmIHN0cmluZykg
Y29uc3QgeyByZXR1cm4gZmluZChzdHJpbmcpICE9IG5vdEZvdW5kOyB9CisgICAgYm9vbCBjb250
YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFBvaXNvbmFibGVTdHJpbmcmIHN0cmluZykgY29u
c3QgeyByZXR1cm4gZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZykgIT0gbm90Rm91bmQ7IH0K
KyAgICBib29sIGNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgUG9pc29uYWJsZVN0cmlu
ZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QgeyByZXR1cm4gZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZywgc3RhcnRPZmZzZXQpICE9IG5vdEZvdW5kOyB9CisgICAgYm9v
bCBjb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykgY29u
c3QgeyByZXR1cm4gZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZykgIT0gbm90Rm91bmQ7IH0K
KyAgICBib29sIGNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYgc3Ry
aW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QgeyByZXR1cm4gZmluZElnbm9yaW5nQVND
SUlDYXNlKHN0cmluZywgc3RhcnRPZmZzZXQpICE9IG5vdEZvdW5kOyB9CisgICAgdGVtcGxhdGU8
c2l6ZV90IExlbmd0aD4gYm9vbCBjb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IGNoYXIg
c3RyaW5nW0xlbmd0aF0pIGNvbnN0IHsgcmV0dXJuIGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmcpICE9IG5vdEZvdW5kOyB9CisgICAgdGVtcGxhdGU8c2l6ZV90IExlbmd0aD4gYm9vbCBjb250
YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IGNoYXIgc3RyaW5nW0xlbmd0aF0sIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KSBjb25zdCB7IHJldHVybiBmaW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
LCBzdGFydE9mZnNldCkgIT0gbm90Rm91bmQ7IH0KKworICAgIGJvb2wgc3RhcnRzV2l0aChjb25z
dCBQb2lzb25hYmxlU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IGltcGwo
KS0+c3RhcnRzV2l0aChzdHJpbmcuaW1wbCgpKSA6IHN0cmluZy5pc0VtcHR5KCk7IH0KKyAgICBi
b29sIHN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBQb2lzb25hYmxlU3RyaW5nJiBz
dHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IGltcGwoKS0+c3RhcnRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKHN0cmluZy5pbXBsKCkpIDogc3RyaW5nLmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
c3RhcnRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCAmJiBpbXBs
KCktPnN0YXJ0c1dpdGgoY2hhcmFjdGVyKTsgfQorICAgIHRlbXBsYXRlPHVuc2lnbmVkIG1hdGNo
TGVuZ3RoPiBib29sIHN0YXJ0c1dpdGgoY29uc3QgY2hhciAoJnByZWZpeClbbWF0Y2hMZW5ndGhd
KSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBpbXBsKCktPnRlbXBsYXRlIHN0YXJ0c1dpdGg8bWF0
Y2hMZW5ndGg+KHByZWZpeCkgOiAhbWF0Y2hMZW5ndGg7IH0KKyAgICBib29sIGhhc0luZml4U3Rh
cnRpbmdBdChjb25zdCBQb2lzb25hYmxlU3RyaW5nJiBwcmVmaXgsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0KSBjb25zdCB7IHJldHVybiBtX2ltcGwgJiYgcHJlZml4LmltcGwoKSAmJiBpbXBsKCktPmhh
c0luZml4U3RhcnRpbmdBdCgqcHJlZml4LmltcGwoKSwgc3RhcnRPZmZzZXQpOyB9CisKKyAgICBi
b29sIGVuZHNXaXRoKGNvbnN0IFBvaXNvbmFibGVTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1
cm4gbV9pbXBsID8gaW1wbCgpLT5lbmRzV2l0aChzdHJpbmcuaW1wbCgpKSA6IHN0cmluZy5pc0Vt
cHR5KCk7IH0KKyAgICBib29sIGVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgUG9pc29u
YWJsZVN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBpbXBsKCktPmVuZHNX
aXRoSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSkgOiBzdHJpbmcuaXNFbXB0eSgpOyB9
CisgICAgYm9vbCBlbmRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bCAmJiBpbXBsKCktPmVuZHNXaXRoKGNoYXJhY3Rlcik7IH0KICAgICBib29sIGVuZHNXaXRoKGNo
YXIgY2hhcmFjdGVyKSBjb25zdCB7IHJldHVybiBlbmRzV2l0aChzdGF0aWNfY2FzdDxVQ2hhcj4o
Y2hhcmFjdGVyKSk7IH0KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBtYXRjaExlbmd0aD4gYm9vbCBl
bmRzV2l0aChjb25zdCBjaGFyICgmcHJlZml4KVttYXRjaExlbmd0aF0pIGNvbnN0IHsgcmV0dXJu
IG1faW1wbCA/IG1faW1wbC0+ZW5kc1dpdGg8bWF0Y2hMZW5ndGg+KHByZWZpeCkgOiAhbWF0Y2hM
ZW5ndGg7IH0KLSAgICBib29sIGhhc0luZml4RW5kaW5nQXQoY29uc3QgU3RyaW5nJiBzdWZmaXgs
IHVuc2lnbmVkIGVuZE9mZnNldCkgY29uc3QgeyByZXR1cm4gbV9pbXBsICYmIHN1ZmZpeC5pbXBs
KCkgJiYgbV9pbXBsLT5oYXNJbmZpeEVuZGluZ0F0KCpzdWZmaXguaW1wbCgpLCBlbmRPZmZzZXQp
OyB9CisgICAgdGVtcGxhdGU8dW5zaWduZWQgbWF0Y2hMZW5ndGg+IGJvb2wgZW5kc1dpdGgoY29u
c3QgY2hhciAoJnByZWZpeClbbWF0Y2hMZW5ndGhdKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBp
bXBsKCktPnRlbXBsYXRlIGVuZHNXaXRoPG1hdGNoTGVuZ3RoPihwcmVmaXgpIDogIW1hdGNoTGVu
Z3RoOyB9CisgICAgYm9vbCBoYXNJbmZpeEVuZGluZ0F0KGNvbnN0IFBvaXNvbmFibGVTdHJpbmcm
IHN1ZmZpeCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25zdCB7IHJldHVybiBtX2ltcGwgJiYgc3Vm
Zml4LmltcGwoKSAmJiBpbXBsKCktPmhhc0luZml4RW5kaW5nQXQoKnN1ZmZpeC5pbXBsKCksIGVu
ZE9mZnNldCk7IH0KIAotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB2b2lkIGFwcGVuZChjb25z
dCBTdHJpbmcmKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBhcHBlbmQoTENoYXIp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kKGNvbnN0IFBvaXNvbmFibGVT
dHJpbmc8VD4mIG90aGVyU3RyaW5nKSB7IG1faW1wbCA9IEJhc2ljU3RyaW5nOjphcHBlbmQoaW1w
bCgpLCBvdGhlclN0cmluZy5pbXBsKCkpOyB9CisgICAgdm9pZCBhcHBlbmQoTENoYXIgY2hhcmFj
dGVyKSB7IG1faW1wbCA9IEJhc2ljU3RyaW5nOjphcHBlbmQoaW1wbCgpLCBjaGFyYWN0ZXIpOyB9
CiAgICAgdm9pZCBhcHBlbmQoY2hhciBjaGFyYWN0ZXIpIHsgYXBwZW5kKHN0YXRpY19jYXN0PExD
aGFyPihjaGFyYWN0ZXIpKTsgfTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBhcHBl
bmQoVUNoYXIpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB2b2lkIGFwcGVuZChjb25zdCBM
Q2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQg
YXBwZW5kKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgdm9pZCBpbnNlcnQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgcG9zaXRpb24pOwot
Ci0gICAgU3RyaW5nJiByZXBsYWNlKFVDaGFyIHRhcmdldCwgVUNoYXIgcmVwbGFjZW1lbnQpOwot
ICAgIFN0cmluZyYgcmVwbGFjZShVQ2hhciB0YXJnZXQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnQpOwotICAgIFN0cmluZyYgcmVwbGFjZShjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudCk7Ci0gICAgU3RyaW5nJiByZXBsYWNlKHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpOwotICAgIHRlbXBsYXRl
PHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBTdHJpbmcmIHJlcGxhY2VXaXRoTGl0ZXJhbChVQ2hh
ciB0YXJnZXQsIGNvbnN0IGNoYXIgKCZyZXBsYWNlbWVudClbY2hhcmFjdGVyQ291bnRdKTsKLQot
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB2b2lkIHRydW5jYXRlKHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9u
LCB1bnNpZ25lZCBsZW5ndGggPSAxKTsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJp
bmcgc3Vic3RyaW5nKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBTdHJpbmcgc3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWduZWQgcG9zaXRpb24sIHVu
c2lnbmVkIGxlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgY29u
c3Q7Ci0gICAgU3RyaW5nIGxlZnQodW5zaWduZWQgbGVuZ3RoKSBjb25zdCB7IHJldHVybiBzdWJz
dHJpbmcoMCwgbGVuZ3RoKTsgfQotICAgIFN0cmluZyByaWdodCh1bnNpZ25lZCBsZW5ndGgpIGNv
bnN0IHsgcmV0dXJuIHN1YnN0cmluZyh0aGlzLT5sZW5ndGgoKSAtIGxlbmd0aCwgbGVuZ3RoKTsg
fQotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRv
QVNDSUlVcHBlcmNhc2UoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5n
IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGlu
Z0F0RmFpbGluZ0luZGV4OEJpdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3Q7Ci0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9j
YWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7Ci0gICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7Ci0KLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgU3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0OwotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc2ltcGxpZnlXaGl0ZVNwYWNlKCkgY29uc3Q7Ci0gICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBzaW1wbGlmeVdoaXRlU3BhY2UoQ29kZVVuaXRN
YXRjaEZ1bmN0aW9uKSBjb25zdDsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcg
c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdDaGFyYWN0ZXJzKENvZGVVbml0TWF0Y2hGdW5jdGlvbikg
Y29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyByZW1vdmVDaGFyYWN0ZXJz
KENvZGVVbml0TWF0Y2hGdW5jdGlvbikgY29uc3Q7CisgICAgdm9pZCBhcHBlbmQoVUNoYXIgY2hh
cmFjdGVyKSB7IG1faW1wbCA9IEJhc2ljU3RyaW5nOjphcHBlbmQoaW1wbCgpLCBjaGFyYWN0ZXIp
OyB9CisgICAgdm9pZCBhcHBlbmQoQVNDSUlMaXRlcmFsIGxpdGVyYWwpIHsgbV9pbXBsID0gQmFz
aWNTdHJpbmc6OmFwcGVuZChpbXBsKCksIChjb25zdCBjaGFyKilsaXRlcmFsKTsgfQorICAgIHZv
aWQgYXBwZW5kKGNvbnN0IGNoYXIqIHN0cmluZykgeyBtX2ltcGwgPSBCYXNpY1N0cmluZzo6YXBw
ZW5kKGltcGwoKSwgc3RyaW5nKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IExDaGFyKiBzdHJp
bmcsIHVuc2lnbmVkIGxlbmd0aCkgeyAgbV9pbXBsID0gQmFzaWNTdHJpbmc6OmFwcGVuZChpbXBs
KCksIHN0cmluZywgbGVuZ3RoKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFVDaGFyKiBzdHJp
bmcsIHVuc2lnbmVkIGxlbmd0aCkgeyAgbV9pbXBsID0gQmFzaWNTdHJpbmc6OmFwcGVuZChpbXBs
KCksIHN0cmluZywgbGVuZ3RoKTsgfQorICAgIHRlbXBsYXRlPHNpemVfdCBMZW5ndGg+IHZvaWQg
YXBwZW5kKGNvbnN0IFVDaGFyICgmc3RyaW5nKVtMZW5ndGhdKSB7IGFwcGVuZChzdHJpbmcsIExl
bmd0aCk7IH0KKyAgICB2b2lkIGluc2VydChjb25zdCBQb2lzb25hYmxlU3RyaW5nJiBzdHJpbmcs
IHVuc2lnbmVkIHBvc2l0aW9uKSB7IG1faW1wbCA9IEJhc2ljU3RyaW5nOjppbnNlcnQoaW1wbCgp
LCBzdHJpbmcuaW1wbCgpLCBwb3NpdGlvbik7IH0KKworICAgIFBvaXNvbmFibGVTdHJpbmcmIHJl
cGxhY2UoVUNoYXIgdGFyZ2V0LCBVQ2hhciByZXBsYWNlbWVudCk7CisgICAgUG9pc29uYWJsZVN0
cmluZyYgcmVwbGFjZShVQ2hhciB0YXJnZXQsIGNvbnN0IFBvaXNvbmFibGVTdHJpbmcmIHJlcGxh
Y2VtZW50KTsKKyAgICBQb2lzb25hYmxlU3RyaW5nJiByZXBsYWNlKGNvbnN0IFBvaXNvbmFibGVT
dHJpbmcmIHRhcmdldCwgY29uc3QgUG9pc29uYWJsZVN0cmluZyYgcmVwbGFjZW1lbnQpOworICAg
IFBvaXNvbmFibGVTdHJpbmcmIHJlcGxhY2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgUG9pc29uYWJsZVN0cmluZyYgcmVwbGFjZW1lbnQpOworICAgIHRlbXBsYXRlPHVu
c2lnbmVkIGNoYXJhY3RlckNvdW50PiBQb2lzb25hYmxlU3RyaW5nJiByZXBsYWNlV2l0aExpdGVy
YWwoVUNoYXIgdGFyZ2V0LCBjb25zdCBjaGFyICgmcmVwbGFjZW1lbnQpW2NoYXJhY3RlckNvdW50
XSk7CisKKyAgICB2b2lkIHRydW5jYXRlKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2ltcGwgPSBCYXNp
Y1N0cmluZzo6dHJ1bmNhdGUoaW1wbCgpLCBsZW5ndGgpOyB9CisgICAgdm9pZCByZW1vdmUodW5z
aWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCA9IDEpIHsgbV9pbXBsID0gQmFzaWNTdHJp
bmc6OnJlbW92ZShpbXBsKCksIHBvc2l0aW9uLCBsZW5ndGgpOyB9CisKKyAgICBQb2lzb25hYmxl
U3RyaW5nIHN1YnN0cmluZyh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSBjb25zdCB7IHJldHVybiBtX2ltcGwg
PyBpbXBsKCktPnN1YnN0cmluZyhwb3NpdGlvbiwgbGVuZ3RoKSA6IFBvaXNvbmFibGVTdHJpbmcg
eyB9OyB9CisgICAgUG9pc29uYWJsZVN0cmluZyBzdWJzdHJpbmdTaGFyaW5nSW1wbCh1bnNpZ25l
ZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKSBjb25zdCB7IHJldHVybiBCYXNpY1N0cmluZzo6c3Vic3RyaW5nU2hhcmluZ0lt
cGwoaW1wbCgpLCBwb3NpdGlvbiwgbGVuZ3RoKTsgfQorICAgIFBvaXNvbmFibGVTdHJpbmcgbGVm
dCh1bnNpZ25lZCBsZW5ndGgpIGNvbnN0IHsgcmV0dXJuIHN1YnN0cmluZygwLCBsZW5ndGgpOyB9
CisgICAgUG9pc29uYWJsZVN0cmluZyByaWdodCh1bnNpZ25lZCBsZW5ndGgpIGNvbnN0IHsgcmV0
dXJuIHN1YnN0cmluZyh0aGlzLT5sZW5ndGgoKSAtIGxlbmd0aCwgbGVuZ3RoKTsgfQorCisgICAg
UG9pc29uYWJsZVN0cmluZyBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbCA/IGltcGwoKS0+Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IFBvaXNvbmFibGVT
dHJpbmcgeyB9OyB9CisgICAgUG9pc29uYWJsZVN0cmluZyBjb252ZXJ0VG9BU0NJSVVwcGVyY2Fz
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IGltcGwoKS0+Y29udmVydFRvQVNDSUlVcHBlcmNh
c2UoKSA6IFBvaXNvbmFibGVTdHJpbmcgeyB9OyB9CisgICAgUG9pc29uYWJsZVN0cmluZyBjb252
ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1w
bCgpLT5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgOiBQb2lzb25hYmxlU3RyaW5n
IHsgfTsgfQorICAgIFBvaXNvbmFibGVTdHJpbmcgY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExv
Y2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0KHVuc2lnbmVkIGZhaWxpbmdJbmRleCkgY29u
c3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgpLT5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9j
YWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQoZmFpbGluZ0luZGV4KSA6IFBvaXNvbmFibGVT
dHJpbmcgeyB9OyB9CisgICAgUG9pc29uYWJsZVN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRo
b3V0TG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgpLT5jb252ZXJ0VG9VcHBl
cmNhc2VXaXRob3V0TG9jYWxlKCkgOiBQb2lzb25hYmxlU3RyaW5nIHsgfTsgfQorICAgIFBvaXNv
bmFibGVTdHJpbmcgY29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IGltcGwoKS0+Y29u
dmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShsb2NhbGVJZGVudGlmaWVyKSA6IFBvaXNvbmFibGVT
dHJpbmcgeyB9OyB9CisgICAgUG9pc29uYWJsZVN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRo
TG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3QgeyByZXR1
cm4gbV9pbXBsID8gaW1wbCgpLT5jb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGxvY2FsZUlk
ZW50aWZpZXIpIDogUG9pc29uYWJsZVN0cmluZyB7IH07IH0KKworICAgIC8vIEZJWE1FOiBUaGUg
Zm9sbG93aW5nIGZ1bmN0aW9ucyBuZWVkIGEgbmV3IG5hbWUuIEZvciBvbmUgdGhpbmcsICJ3aGl0
ZXNwYWNlIiBpcyBhIHNpbmdsZQorICAgIC8vIHdvcmQgc28gdGhlICJzIiBzaG91bGQgYmUgbG93
ZXJjYXNlLiBGb3IgYW5vdGhlciwgaXQncyBub3QgY2xlYXIgZnJvbSB0aGlzIG5hbWUKKyAgICAv
LyB0aGF0IHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBVbmljb2RlIGRlZmluaXRpb24gb2Ygd2hpdGVz
cGFjZS4gTW9zdCBXZWJLaXQgY2FsbGVycworICAgIC8vIGRvbid0IHdhbnQgdGhhdCBhbmQgZXZl
bnR1YWxseSB3ZSBzaG91bGQgY29uc2lkZXIgZGVsZXRpbmcgdGhpcy4KKyAgICBQb2lzb25hYmxl
U3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IGltcGwoKS0+
c3RyaXBXaGl0ZVNwYWNlKCkgOiBQb2lzb25hYmxlU3RyaW5nIHsgfTsgfQorICAgIFBvaXNvbmFi
bGVTdHJpbmcgc2ltcGxpZnlXaGl0ZVNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1w
bCgpLT5zaW1wbGlmeVdoaXRlU3BhY2UoKSA6IFBvaXNvbmFibGVTdHJpbmcgeyB9OyB9CisgICAg
UG9pc29uYWJsZVN0cmluZyBzaW1wbGlmeVdoaXRlU3BhY2UoQ29kZVVuaXRNYXRjaEZ1bmN0aW9u
IGlzV2hpdGVTcGFjZSkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgpLT5zaW1wbGlmeVdo
aXRlU3BhY2UoaXNXaGl0ZVNwYWNlKSA6IFBvaXNvbmFibGVTdHJpbmcgeyB9OyB9CisKKyAgICBQ
b2lzb25hYmxlU3RyaW5nIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQ2hhcmFjdGVycyhDb2RlVW5p
dE1hdGNoRnVuY3Rpb24gcHJlZGljYXRlKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBpbXBsKCkt
PnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQ2hhcmFjdGVycyhwcmVkaWNhdGUpIDogUG9pc29uYWJs
ZVN0cmluZyB7IH07IH0KKyAgICBQb2lzb25hYmxlU3RyaW5nIHJlbW92ZUNoYXJhY3RlcnMoQ29k
ZVVuaXRNYXRjaEZ1bmN0aW9uIGZpbmRNYXRjaCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1w
bCgpLT5yZW1vdmVDaGFyYWN0ZXJzKGZpbmRNYXRjaCkgOiBQb2lzb25hYmxlU3RyaW5nIHsgfTsg
fQogCiAgICAgLy8gUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggY2FzZSBmb2xkZWQgZm9yIGNhc2Ug
aW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KICAgICAvLyBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNh
c2UgaW5zdGVhZCBpZiBBU0NJSSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gaXMgZGVzaXJl
ZC4KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGZvbGRDYXNlKCkgY29uc3Q7Ci0K
LSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBmb3JtYXQoY29uc3QgY2hh
ciAqLCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOwotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBzdGF0aWMgU3RyaW5nIGZvcm1hdFdpdGhBcmd1bWVudHMoY29uc3QgY2hhciAqLCB2
YV9saXN0KSBXVEZfQVRUUklCVVRFX1BSSU5URigxLCAwKTsKKyAgICBQb2lzb25hYmxlU3RyaW5n
IGZvbGRDYXNlKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gaW1wbCgpLT5mb2xkQ2FzZSgpIDog
UG9pc29uYWJsZVN0cmluZyB7IH07IH0KKworICAgIHN0YXRpYyBQb2lzb25hYmxlU3RyaW5nIGZv
cm1hdFdpdGhBcmd1bWVudHMoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpIFdURl9B
VFRSSUJVVEVfUFJJTlRGKDEsIDApIHsgcmV0dXJuIEJhc2ljU3RyaW5nOjpmb3JtYXRXaXRoQXJn
dW1lbnRzKGZvcm1hdCwgYXJncyk7IH0KKyAgICBzdGF0aWMgUG9pc29uYWJsZVN0cmluZyBmb3Jt
YXQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpCisg
ICAgeworICAgICAgICB2YV9saXN0IGFyZ3M7CisgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1h
dCk7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBCYXNpY1N0cmluZzo6Zm9ybWF0V2l0aEFyZ3Vt
ZW50cyhmb3JtYXQsIGFyZ3MpOworICAgICAgICB2YV9lbmQoYXJncyk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQogCiAgICAgLy8gUmV0dXJucyBhbiB1bmluaXRpYWxpemVkIHN0cmlu
Zy4gVGhlIGNoYXJhY3RlcnMgbmVlZHMgdG8gYmUgd3JpdHRlbgogICAgIC8vIGludG8gdGhlIGJ1
ZmZlciByZXR1cm5lZCBpbiBkYXRhIGJlZm9yZSB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIHVzZWQu
Ci0gICAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqJiBkYXRhKSB7IHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxl
bmd0aCwgZGF0YSk7IH0KLSAgICBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhKTsgfQorICAgIHN0YXRpYyBQb2lzb25hYmxlU3RyaW5n
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpIHsgcmV0
dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhKTsgfQorICAg
IHN0YXRpYyBQb2lzb25hYmxlU3RyaW5nIGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoLCBMQ2hhciomIGRhdGEpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQobGVuZ3RoLCBkYXRhKTsgfQogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc3Bs
aXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMsIFZlY3Rv
cjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0OworICAgIHZvaWQgc3BsaXQoY29uc3QgU3RyaW5nJiBz
ZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQp
IGNvbnN0IHsgQmFzaWNTdHJpbmc6OnNwbGl0KGltcGwoKSwgc2VwYXJhdG9yLmltcGwoKSwgYWxs
b3dFbXB0eUVudHJpZXMsIHJlc3VsdCk7IH0KICAgICB2b2lkIHNwbGl0KGNvbnN0IFN0cmluZyYg
c2VwYXJhdG9yLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdCB7IHNwbGl0KHNlcGFyYXRv
ciwgZmFsc2UsIHJlc3VsdCk7IH0KIAotICAgIHVzaW5nIFNwbGl0RnVuY3RvciA9IFdURjo6RnVu
Y3Rpb248dm9pZChjb25zdCBTdHJpbmdWaWV3Jik+OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSB2b2lkIHNwbGl0KFVDaGFyIHNlcGFyYXRvciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcywgY29u
c3QgU3BsaXRGdW5jdG9yJikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQg
c3BsaXQoVUNoYXIgc2VwYXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRyaWVzLCBWZWN0b3I8U3Ry
aW5nPiYgcmVzdWx0KSBjb25zdDsKKyAgICB2b2lkIHNwbGl0KFVDaGFyIHNlcGFyYXRvciwgYm9v
bCBhbGxvd0VtcHR5RW50cmllcywgY29uc3QgU3BsaXRGdW5jdG9yJiBmdW5jdG9yKSBjb25zdCB7
IEJhc2ljU3RyaW5nOjpzcGxpdChpbXBsKCksIHNlcGFyYXRvciwgYWxsb3dFbXB0eUVudHJpZXMs
IGZ1bmN0b3IpOyB9CisgICAgdm9pZCBzcGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dF
bXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0IHsgQmFzaWNTdHJpbmc6
OnNwbGl0KGltcGwoKSwgc2VwYXJhdG9yLCBhbGxvd0VtcHR5RW50cmllcywgcmVzdWx0KTsgfQog
ICAgIHZvaWQgc3BsaXQoVUNoYXIgc2VwYXJhdG9yLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBj
b25zdCB7IHNwbGl0KHNlcGFyYXRvciwgZmFsc2UsIHJlc3VsdCk7IH0KLSAgICBWZWN0b3I8U3Ry
aW5nPiBzcGxpdChVQ2hhciBzZXBhcmF0b3IpIGNvbnN0OwotICAgIFZlY3RvcjxTdHJpbmc+IHNw
bGl0KGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yKSBjb25zdDsKLQotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBpbnQgdG9JbnRTdHJpY3QoYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEw
KSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdW5zaWduZWQgdG9VSW50U3RyaWN0
KGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIGludDY0X3QgdG9JbnQ2NFN0cmljdChib29sKiBvayA9IG51bGxwdHIsIGlu
dCBiYXNlID0gMTApIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB1aW50NjRfdCB0
b1VJbnQ2NFN0cmljdChib29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApIGNvbnN0Owot
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBpbnRwdHJfdCB0b0ludFB0clN0cmljdChib29sKiBv
ayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIGludCB0b0ludChib29sKiBvayA9IG51bGxwdHIpIGNvbnN0OwotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSB1bnNpZ25lZCB0b1VJbnQoYm9vbCogb2sgPSBudWxscHRyKSBjb25zdDsK
LSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgaW50NjRfdCB0b0ludDY0KGJvb2wqIG9rID0gbnVs
bHB0cikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHVpbnQ2NF90IHRvVUludDY0
KGJvb2wqIG9rID0gbnVsbHB0cikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGlu
dHB0cl90IHRvSW50UHRyKGJvb2wqIG9rID0gbnVsbHB0cikgY29uc3Q7CisgICAgVmVjdG9yPFBv
aXNvbmFibGVTdHJpbmc+IHNwbGl0KFVDaGFyIHNlcGFyYXRvcikgY29uc3Q7CisgICAgVmVjdG9y
PFBvaXNvbmFibGVTdHJpbmc+IHNwbGl0KGNvbnN0IFBvaXNvbmFibGVTdHJpbmcmIHNlcGFyYXRv
cikgY29uc3Q7CisKKyAgICAvLyBGSVhNRSBUaGVzZSBmdW5jdGlvbnMgYWxsIGRvIHRoZSBzYW1l
IG1faW1wbCBkYW5jZSBhbmQgdGhlbiBmb3J3YXJkIHRvCisgICAgLy8gU3RyaW5nSW1wbC4gVXNl
IHN0ZDo6ZXhwZWN0ZWQgaW5zdGVhZC4KKyNkZWZpbmUgV1RGX1NUUklOR19UUllfSU5WT0tFKFdI
QVQsIC4uLikgZG8geyAgIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2ltcGwpKSB7ICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChvaykgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAqb2sgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0
dXJuIGltcGwoKS0+V0hBVChvaywgIyNfX1ZBX0FSR1NfXyk7IFwKKyAgICB9IHdoaWxlICgwKQor
ICAgIGludCB0b0ludFN0cmljdChib29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApIGNv
bnN0IHsgV1RGX1NUUklOR19UUllfSU5WT0tFKHRvSW50U3RyaWN0LCBiYXNlKTsgfQorICAgIHVu
c2lnbmVkIHRvVUludFN0cmljdChib29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApIGNv
bnN0IHsgV1RGX1NUUklOR19UUllfSU5WT0tFKHRvVUludFN0cmljdCwgYmFzZSk7IH0KKyAgICBp
bnQ2NF90IHRvSW50NjRTdHJpY3QoYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKSBj
b25zdCB7IFdURl9TVFJJTkdfVFJZX0lOVk9LRSh0b0ludDY0U3RyaWN0LCBiYXNlKTsgfQorICAg
IHVpbnQ2NF90IHRvVUludDY0U3RyaWN0KGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAx
MCkgY29uc3QgeyBXVEZfU1RSSU5HX1RSWV9JTlZPS0UodG9VSW50NjRTdHJpY3QsIGJhc2UpOyB9
CisgICAgaW50cHRyX3QgdG9JbnRQdHJTdHJpY3QoYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFz
ZSA9IDEwKSBjb25zdCB7IFdURl9TVFJJTkdfVFJZX0lOVk9LRSh0b0ludFB0clN0cmljdCwgYmFz
ZSk7IH0KKworICAgIGludCB0b0ludChib29sKiBvayA9IG51bGxwdHIpIGNvbnN0IHsgV1RGX1NU
UklOR19UUllfSU5WT0tFKHRvSW50KTsgfQorICAgIHVuc2lnbmVkIHRvVUludChib29sKiBvayA9
IG51bGxwdHIpIGNvbnN0IHsgV1RGX1NUUklOR19UUllfSU5WT0tFKHRvVUludCk7IH0KKyAgICBp
bnQ2NF90IHRvSW50NjQoYm9vbCogb2sgPSBudWxscHRyKSBjb25zdCB7IFdURl9TVFJJTkdfVFJZ
X0lOVk9LRSh0b0ludDY0KTsgfQorICAgIHVpbnQ2NF90IHRvVUludDY0KGJvb2wqIG9rID0gbnVs
bHB0cikgY29uc3QgeyBXVEZfU1RSSU5HX1RSWV9JTlZPS0UodG9VSW50NjQpOyB9CisgICAgaW50
cHRyX3QgdG9JbnRQdHIoYm9vbCogb2sgPSBudWxscHRyKSBjb25zdCB7IFdURl9TVFJJTkdfVFJZ
X0lOVk9LRSh0b0ludFB0cik7IH0KIAogICAgIC8vIEZJWE1FOiBMaWtlIHRoZSBzdHJpY3QgZnVu
Y3Rpb25zIGFib3ZlLCB0aGVzZSBnaXZlIGZhbHNlIGZvciAib2siIHdoZW4gdGhlcmUgaXMgdHJh
aWxpbmcgZ2FyYmFnZS4KICAgICAvLyBMaWtlIHRoZSBub24tc3RyaWN0IGZ1bmN0aW9ucyBhYm92
ZSwgdGhlc2UgcmV0dXJuIHRoZSB2YWx1ZSB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2Uu
CiAgICAgLy8gSXQgd291bGQgYmUgYmV0dGVyIGlmIHRoZXNlIHdlcmUgbW9yZSBjb25zaXN0ZW50
IHdpdGggdGhlIGFib3ZlIGZ1bmN0aW9ucyBpbnN0ZWFkLgotICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSBudWxscHRyKSBjb25zdDsKLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgZmxvYXQgdG9GbG9hdChib29sKiBvayA9IG51bGxwdHIpIGNvbnN0
OwotCi0gICAgYm9vbCBwZXJjZW50YWdlKGludCYgcGVyY2VudGFnZSkgY29uc3Q7Ci0KLSNpZiBD
T01QSUxFUl9TVVBQT1JUUyhDWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMpCi0gICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBpc29sYXRlZENvcHkoKSBjb25zdCAmOwotICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgaXNvbGF0ZWRDb3B5KCkgJiY7Ci0jZWxzZQot
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7Ci0j
ZW5kaWYKKyAgICBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSBudWxscHRyKSBjb25zdCB7IFdU
Rl9TVFJJTkdfVFJZX0lOVk9LRSh0b0RvdWJsZSk7IH0KKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wq
IG9rID0gbnVsbHB0cikgY29uc3QgeyBXVEZfU1RSSU5HX1RSWV9JTlZPS0UodG9GbG9hdCk7IH0K
KyN1bmRlZiBXVEZfU1RSSU5HX1RSWV9JTlZPS0UKKworICAgIGJvb2wgcGVyY2VudGFnZShpbnQm
IHBlcmNlbnRhZ2UpIGNvbnN0IHsgcmV0dXJuIEJhc2ljU3RyaW5nOjpwZXJjZW50YWdlKGltcGwo
KSwgcGVyY2VudGFnZSk7IH0KKworICAgIFBvaXNvbmFibGVTdHJpbmcgaXNvbGF0ZWRDb3B5KCkg
Y29uc3QgJiB7IHJldHVybiBtX2ltcGwgPyBpbXBsKCktPmlzb2xhdGVkQ29weSgpIDogUG9pc29u
YWJsZVN0cmluZyB7IH07IH0KKyAgICBQb2lzb25hYmxlU3RyaW5nIGlzb2xhdGVkQ29weSgpICYm
CisgICAgeworICAgICAgICBpZiAoaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpIHsKKyAg
ICAgICAgICAgIC8vIFNpbmNlIHdlIGtub3cgdGhhdCBvdXIgc3RyaW5nIGlzIGEgdGVtcG9yYXJ5
IHRoYXQgd2lsbCBiZSBkZXN0cm95ZWQKKyAgICAgICAgICAgIC8vIHdlIGNhbiBqdXN0IHN0ZWFs
IHRoZSBtX2ltcGwgZnJvbSBpdCwgdGh1cyBhdm9pZGluZyBhIGNvcHkuCisgICAgICAgICAgICBy
ZXR1cm4geyBXVEZNb3ZlKCp0aGlzKSB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1f
aW1wbCA/IGltcGwoKS0+aXNvbGF0ZWRDb3B5KCkgOiBQb2lzb25hYmxlU3RyaW5nIHsgfTsKKyAg
ICB9CiAKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBpc1NhZmVUb1NlbmRUb0Fub3Ro
ZXJUaHJlYWQoKSBjb25zdDsKKyAgICBib29sIGlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgp
IGNvbnN0IHsgcmV0dXJuIEJhc2ljU3RyaW5nOjppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQo
aW1wbCgpKTsgfQogCiAgICAgLy8gUHJldmVudCBTdHJpbmdzIGZyb20gYmVpbmcgaW1wbGljaXRs
eSBjb252ZXJ0YWJsZSB0byBib29sIGFzIGl0IHdpbGwgYmUgYW1iaWd1b3VzIG9uIGFueSBwbGF0
Zm9ybSB0aGF0CiAgICAgLy8gYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYW5vdGhlciBw
b2ludGVyIHR5cGUgKGUuZy4sIE1hYyBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBOU1N0
cmluZyAqKS4KLSAgICB0eXBlZGVmIHN0cnVjdCBJbXBsaWNpdENvbnZlcnNpb25Gcm9tV1RGU3Ry
aW5nVG9Cb29sRGlzYWxsb3dlZEEqIChTdHJpbmc6OipVbnNwZWNpZmllZEJvb2xUeXBlQSk7Ci0g
ICAgdHlwZWRlZiBzdHJ1Y3QgSW1wbGljaXRDb252ZXJzaW9uRnJvbVdURlN0cmluZ1RvQm9vbERp
c2FsbG93ZWRCKiAoU3RyaW5nOjoqVW5zcGVjaWZpZWRCb29sVHlwZUIpOworICAgIHR5cGVkZWYg
c3RydWN0IEltcGxpY2l0Q29udmVyc2lvbkZyb21XVEZTdHJpbmdUb0Jvb2xEaXNhbGxvd2VkQSog
KFBvaXNvbmFibGVTdHJpbmc6OipVbnNwZWNpZmllZEJvb2xUeXBlQSk7CisgICAgdHlwZWRlZiBz
dHJ1Y3QgSW1wbGljaXRDb252ZXJzaW9uRnJvbVdURlN0cmluZ1RvQm9vbERpc2FsbG93ZWRCKiAo
UG9pc29uYWJsZVN0cmluZzo6KlVuc3BlY2lmaWVkQm9vbFR5cGVCKTsKICAgICBvcGVyYXRvciBV
bnNwZWNpZmllZEJvb2xUeXBlQSgpIGNvbnN0OwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9v
bFR5cGVCKCkgY29uc3Q7CiAKICNpZiBVU0UoQ0YpCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IFN0cmluZyhDRlN0cmluZ1JlZik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gY3JlYXRlQ0ZTdHJpbmcoKSBjb25zdDsKKyAgICBQb2lzb25hYmxlU3Ry
aW5nKENGU3RyaW5nUmVmIHJlZikgOiBtX2ltcGwoQmFzaWNTdHJpbmc6OmNyZWF0ZShyZWYpKSB7
IH0KKyAgICBXVEZfTEFaWV9JTlNUQU5USUFURShSZWY9UmV0YWluUHRyPENGU3RyaW5nUmVmPikg
UmVmIGNyZWF0ZUNGU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNpY1N0
cmluZzo6Y3JlYXRlQ0ZTdHJpbmcoaW1wbCgpKTsKKyAgICB9CiAjZW5kaWYKIAogI2lmZGVmIF9f
T0JKQ19fCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhOU1N0cmluZyAqKTsKKyAg
ICBQb2lzb25hYmxlU3RyaW5nKE5TU3RyaW5nICpzdHIpIDogbV9pbXBsKEJhc2ljU3RyaW5nOjpj
cmVhdGUoc3RyKSkgeyB9CiAKICAgICAvLyBUaGlzIGNvbnZlcnNpb24gY29udmVydHMgdGhlIG51
bGwgc3RyaW5nIHRvIGFuIGVtcHR5IE5TU3RyaW5nIHJhdGhlciB0aGFuIHRvIG5pbC4KICAgICAv
LyBHaXZlbiBDb2NvYSBpZGlvbXMsIHRoaXMgaXMgYSBtb3JlIHVzZWZ1bCBkZWZhdWx0LiBDbGll
bnRzIHRoYXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUKQEAgLTMyOSw0MCArNDYyLDIyIEBAIHB1Ymxp
YzoKICAgICBvcGVyYXRvciBOU1N0cmluZyAqKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIG1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGNv
bnN0IFVDaGFyKiwgc2l6ZV90KTsKLSAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+
IHN0YXRpYyBTdHJpbmcgbWFrZThCaXRGcm9tMTZCaXRTb3VyY2UoY29uc3QgVmVjdG9yPFVDaGFy
LCBpbmxpbmVDYXBhY2l0eT4mKTsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMg
U3RyaW5nIG1ha2UxNkJpdEZyb204Qml0U291cmNlKGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKLQot
ICAgIC8vIFN0cmluZzo6ZnJvbVVURjggd2lsbCByZXR1cm4gYSBudWxsIHN0cmluZyBpZgotICAg
IC8vIHRoZSBpbnB1dCBkYXRhIGNvbnRhaW5zIGludmFsaWQgVVRGLTggc2VxdWVuY2VzLgotICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIGZyb21VVEY4KGNvbnN0IExDaGFy
Kiwgc2l6ZV90KTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBmcm9t
VVRGOChjb25zdCBMQ2hhciopOwotICAgIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgY2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gZnJvbVVURjgocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOyB9OwotICAgIHN0YXRp
YyBTdHJpbmcgZnJvbVVURjgoY29uc3QgY2hhciogc3RyaW5nKSB7IHJldHVybiBmcm9tVVRGOChy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oc3RyaW5nKSk7IH07Ci0gICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgQ1N0cmluZyYpOwotICAg
IHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFjdGVycyk7
Ci0KLSAgICAvLyBUcmllcyB0byBjb252ZXJ0IHRoZSBwYXNzZWQgaW4gc3RyaW5nIHRvIFVURi04
LCBidXQgd2lsbCBmYWxsIGJhY2sgdG8gTGF0aW4tMSBpZiB0aGUgc3RyaW5nIGlzIG5vdCB2YWxp
ZCBVVEYtOC4KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBMQ2hhciosIHNpemVfdCk7Ci0gICAgc3RhdGljIFN0
cmluZyBmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoKSB7IHJldHVybiBmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCk7IH07Ci0KICAgICAv
LyBEZXRlcm1pbmVzIHRoZSB3cml0aW5nIGRpcmVjdGlvbiB1c2luZyB0aGUgVW5pY29kZSBCaWRp
IEFsZ29yaXRobSBydWxlcyBQMiBhbmQgUDMuCiAgICAgVUNoYXJEaXJlY3Rpb24gZGVmYXVsdFdy
aXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPSBudWxscHRyKSBj
b25zdDsKIAotICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwgfHwg
bV9pbXBsLT5pc0FsbEFTQ0lJKCk7IH0KLSAgICBib29sIGlzQWxsTGF0aW4xKCkgY29uc3QgeyBy
ZXR1cm4gIW1faW1wbCB8fCBtX2ltcGwtPmlzQWxsTGF0aW4xKCk7IH0KLSAgICB0ZW1wbGF0ZTxi
b29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGJvb2wgaXNBbGxTcGVjaWFsQ2hhcmFjdGVy
cygpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5pc0FsbFNwZWNpYWxDaGFyYWN0
ZXJzPGlzU3BlY2lhbENoYXJhY3Rlcj4oKTsgfQorICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0
IHsgcmV0dXJuICFtX2ltcGwgfHwgaW1wbCgpLT5pc0FsbEFTQ0lJKCk7IH0KKyAgICBib29sIGlz
QWxsTGF0aW4xKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCBpbXBsKCktPmlzQWxsTGF0aW4x
KCk7IH0KKyAgICB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGJvb2wg
aXNBbGxTcGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwgfHwgaW1wbCgp
LT50ZW1wbGF0ZSBpc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzU3BlY2lhbENoYXJhY3Rlcj4oKTsg
fQogCiAgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29u
c3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCi0gICAgU3RyaW5nKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ltcGwoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWUpIHsgfQorICAgIFBvaXNvbmFibGVTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKSA6IG1faW1wbChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9CiAgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gaXNOdWxsKCkgPyAwIDogaW1wbCgpLT5oYXNoKCk7IH0KICAgICB1bnNpZ25lZCBleGlzdGlu
Z0hhc2goKSBjb25zdCB7IHJldHVybiBpc051bGwoKSA/IDAgOiBpbXBsKCktPmV4aXN0aW5nSGFz
aCgpOyB9CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQg
c2hvdygpIGNvbnN0OworICAgIHZvaWQgc2hvdygpIGNvbnN0IHsgQmFzaWNTdHJpbmc6OnNob3co
aW1wbCgpKTsgfQogI2VuZGlmCiAKICAgICAvLyBUdXJucyB0aGlzIFN0cmluZyBlbXB0eSBpZiB0
aGUgU3RyaW5nSW1wbCBpcyBub3QgcmVmZXJlbmNlZCBieSBhbnlvbmUgZWxzZS4KQEAgLTM3Mywy
MzIgKzQ4OCwyNDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVsZWFzZUFzc2VydENhZ2VkKCkgY29u
c3Q7CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9p
ZCByZW1vdmVJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQsIHVuc2lnbmVk
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIGFwcGVuZEludGVy
bmFsKENoYXJhY3RlclR5cGUpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsKKyAg
ICB1c2luZyBJbXBsUmVmUHRyID0gUmVmUHRyPFN0cmluZ0ltcGwsIFB0clRyYWl0c1Q+OworICAg
IEltcGxSZWZQdHIgbV9pbXBsOwogfTsKIAogc3RhdGljX2Fzc2VydChzaXplb2YoU3RyaW5nKSA9
PSBzaXplb2Yodm9pZCopLCAiU3RyaW5nIHNob3VsZCBlZmZlY3RpdmVseSBiZSBhIHBvaW50ZXIg
dG8gYSBTdHJpbmdJbXBsLCBhbmQgZWZmaWNpZW50IHRvIHBhc3MgYnkgdmFsdWUiKTsKIAotaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyBy
ZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwo
KSwgYik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBj
aGFyKiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KGIpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMQ2hhciogYSwgY29u
c3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLCBiLmltcGwoKSk7IH0KLWlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVh
bChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsgfQotdGVtcGxh
dGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZl
Y3RvcjxjaGFyLCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4g
ZXF1YWwoYi5pbXBsKCksIGEuZGF0YSgpLCBhLnNpemUoKSk7IH0KLXRlbXBsYXRlPHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNv
bnN0IFZlY3RvcjxjaGFyLCBpbmxpbmVDYXBhY2l0eT4mIGIpIHsgcmV0dXJuIGIgPT0gYTsgfQot
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBi
KSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiAhZXF1YWwo
YS5pbXBsKCksIGIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwg
Y29uc3QgY2hhciogYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oYikpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExDaGFy
KiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuICFlcXVhbChhLCBiLmltcGwoKSk7IH0KLWlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJl
dHVybiAhZXF1YWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpLCBiLmltcGwoKSk7
IH0KLXRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBWZWN0b3I8Y2hhciwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBTdHJpbmcmIGIp
IHsgcmV0dXJuICEoYSA9PSBiKTsgfQotdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgVmVjdG9yPGNoYXIs
IGlubGluZUNhcGFjaXR5PiYgYikgeyByZXR1cm4gYiAhPSBhOyB9Ci0KLWJvb2wgZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLWJvb2wgZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmLCBjb25zdCBjaGFyKik7Ci0KLXRlbXBsYXRl
PHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25z
dCBTdHJpbmcmLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7Ci10ZW1w
bGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGJvb2wgc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShjb25zdCBTdHJpbmcmLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3Ro
XSk7Ci0KLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KGNvbnN0IFN0cmluZyYgYSwg
Y29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nTnVsbGl0eShhLmltcGwoKSwg
Yi5pbXBsKCkpOyB9Ci10ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSBib29s
IGVxdWFsSWdub3JpbmdOdWxsaXR5KGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+
JiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdOdWxsaXR5KGEsIGIu
aW1wbCgpKTsgfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciEoY29uc3QgU3RyaW5nJiBzdHJpbmcp
IHsgcmV0dXJuIHN0cmluZy5pc051bGwoKTsgfQotCi1pbmxpbmUgdm9pZCBzd2FwKFN0cmluZyYg
YSwgU3RyaW5nJiBiKSB7IGEuc3dhcChiKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVu
YW1lIFQxPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VDA+
JiBhLCBjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQxPiYgYikgeyByZXR1cm4gZXF1YWwoYS5pbXBs
KCksIGIuaW1wbCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBhLCBjb25zdCBMQ2hhciogYikgeyByZXR1
cm4gZXF1YWwoYS5pbXBsKCksIGIpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIGEsIGNvbnN0IGNoYXIqIGIp
IHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
YikpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IExDaGFyKiBhLCBjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBiKSB7IHJldHVybiBlcXVhbChh
LCBiLmltcGwoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgY2hhciogYSwgY29uc3QgUG9pc29uYWJsZVN0cmluZzxUPiYgYikgeyByZXR1cm4g
ZXF1YWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpLCBiLmltcGwoKSk7IH0KK3Rl
bXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBWZWN0b3I8Y2hhciwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBQb2lz
b25hYmxlU3RyaW5nPFQ+JiBiKSB7IHJldHVybiBlcXVhbChiLmltcGwoKSwgYS5kYXRhKCksIGEu
c2l6ZSgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIGEsIGNvbnN0
IFZlY3RvcjxjaGFyLCBpbmxpbmVDYXBhY2l0eT4mIGIpIHsgcmV0dXJuIGIgPT0gYTsgfQordGVt
cGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFBvaXNvbmFibGVTdHJpbmc8VDA+JiBhLCBjb25zdCBOZXZlckRlc3Ryb3llZDxQb2lzb25h
YmxlU3RyaW5nPFQxPj4mIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiLmdldCgpLmltcGwo
KSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4gaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBOZXZlckRlc3Ryb3llZDxQb2lzb25hYmxlU3RyaW5nPFQwPj4mIGEsIGNv
bnN0IFBvaXNvbmFibGVTdHJpbmc8VDE+JiBiKSB7IHJldHVybiBlcXVhbChhLmdldCgpLmltcGwo
KSwgYi5pbXBsKCkpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDE+IGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUG9pc29uYWJsZVN0cmluZzxUMD4mIGEsIGNvbnN0IE5l
dmVyRGVzdHJveWVkPGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VDE+PiYgYikgeyByZXR1cm4gZXF1
YWwoYS5pbXBsKCksIGIuZ2V0KCkuaW1wbCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5
cGVuYW1lIFQxPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5ldmVyRGVzdHJveWVkPGNv
bnN0IFBvaXNvbmFibGVTdHJpbmc8VDA+PiYgYSwgY29uc3QgUG9pc29uYWJsZVN0cmluZzxUMT4m
IGIpIHsgcmV0dXJuIGVxdWFsKGEuZ2V0KCkuaW1wbCgpLCBiLmltcGwoKSk7IH0KKwordGVtcGxh
dGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFBvaXNvbmFibGVTdHJpbmc8VDA+JiBhLCBjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQxPiYgYikg
eyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUG9pc29uYWJsZVN0cmluZzxUPiYgYSwg
Y29uc3QgTENoYXIqIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgYik7IH0KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUG9pc29uYWJsZVN0cmlu
ZzxUPiYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExDaGFyKiBhLCBjb25zdCBQb2lzb25hYmxlU3RyaW5n
PFQ+JiBiKSB7IHJldHVybiAhZXF1YWwoYSwgYi5pbXBsKCkpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNoYXIqIGEsIGNvbnN0IFBvaXNvbmFi
bGVTdHJpbmc8VD4mIGIpIHsgcmV0dXJuICFlcXVhbChyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oYSksIGIuaW1wbCgpKTsgfQordGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlY3RvcjxjaGFyLCBpbmxp
bmVDYXBhY2l0eT4mIGEsIGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIGIpIHsgcmV0dXJuICEo
YSA9PSBiKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIGEsIGNvbnN0
IFZlY3RvcjxjaGFyLCBpbmxpbmVDYXBhY2l0eT4mIGIpIHsgcmV0dXJuIGIgIT0gYTsgfQordGVt
cGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFBvaXNvbmFibGVTdHJpbmc8VDA+JiBhLCBjb25zdCBOZXZlckRlc3Ryb3llZDxQb2lzb25h
YmxlU3RyaW5nPFQxPj4mIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgYi5nZXQoKS5pbXBs
KCkpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDE+IGlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgTmV2ZXJEZXN0cm95ZWQ8UG9pc29uYWJsZVN0cmluZzxUMD4+JiBhLCBj
b25zdCBQb2lzb25hYmxlU3RyaW5nPFQxPiYgYikgeyByZXR1cm4gIWVxdWFsKGEuZ2V0KCkuaW1w
bCgpLCBiLmltcGwoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4gaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQwPiYgYSwgY29uc3Qg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgUG9pc29uYWJsZVN0cmluZzxUMT4+JiBiKSB7IHJldHVybiAh
ZXF1YWwoYS5pbXBsKCksIGIuZ2V0KCkuaW1wbCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVDAs
IHR5cGVuYW1lIFQxPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE5ldmVyRGVzdHJveWVk
PGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VDA+PiYgYSwgY29uc3QgUG9pc29uYWJsZVN0cmluZzxU
MT4mIGIpIHsgcmV0dXJuICFlcXVhbChhLmdldCgpLmltcGwoKSwgYi5pbXBsKCkpOyB9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4gYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VDA+JiwgY29uc3QgUG9pc29uYWJsZVN0cmluZzxU
MT4mKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShj
b25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiwgY29uc3QgY2hhciopOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBsZW5ndGg+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoY29uc3QgUG9pc29uYWJsZVN0cmluZzxUPiYsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0
ZXJzKVtsZW5ndGhdKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGxlbmd0aD4gYm9v
bCBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFBvaXNvbmFibGVTdHJp
bmc8VD4mLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4gaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ051
bGxpdHkoY29uc3QgUG9pc29uYWJsZVN0cmluZzxUMD4mIGEsIGNvbnN0IFBvaXNvbmFibGVTdHJp
bmc8VDE+JiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nTnVsbGl0eShhLmltcGwoKSwgYi5pbXBs
KCkpOyB9Cit0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIFQ+IGlubGlu
ZSBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2Fw
YWNpdHk+JiBhLCBjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBiKSB7IHJldHVybiBlcXVhbEln
bm9yaW5nTnVsbGl0eShhLCBiLmltcGwoKSk7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIGJvb2wgb3BlcmF0b3IhKGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIHN0cmluZykgeyBy
ZXR1cm4gc3RyaW5nLmlzTnVsbCgpOyB9CiAKICNpZmRlZiBfX09CSkNfXwogCiAvLyBVc2VkIGlu
IGEgc21hbGwgbnVtYmVyIG9mIHBsYWNlcyB3aGVyZSB0aGUgbG9uZyBzdGFuZGluZyBiZWhhdmlv
ciBoYXMgYmVlbiAibmlsIGlmIGVtcHR5Ii4KLU5TU3RyaW5nICogbnNTdHJpbmdOaWxJZkVtcHR5
KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gTlNTdHJpbmcqIG5zU3RyaW5n
TmlsSWZFbXB0eShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+Jik7CiAKICNlbmRpZgogCi1XVEZf
RVhQT1JUX1NUUklOR19BUEkgaW50IGNvZGVQb2ludENvbXBhcmUoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJik7Ci1ib29sIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4gaW5s
aW5lIGJvb2wgY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGNvbnN0IFQwJiBsaHMsIGNvbnN0IFQx
JiByaHMpCit7CisgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUobGhzLmltcGwoKSwgcmhzLmlt
cGwoKSkgPCAwOworfQorCisgdGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPEJhc2ljU3Ry
aW5nLCBUMD46OnZhbHVlPj4gaW5saW5lIGludCBjb2RlUG9pbnRDb21wYXJlKGNvbnN0IFQwJiBs
aHMsIGNvbnN0IFQxJiByaHMpCit7CisgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUobGhzLmlt
cGwoKSwgcmhzLmltcGwoKSk7Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHZvaWQgYXBwZW5kTnVtYmVyKFZlY3RvcjxDaGFyYWN0ZXJUeXBlPiYsIHVuc2lnbmVkIGNoYXIg
bnVtYmVyKTsKIAogLy8gU2hhcmVkIGdsb2JhbCBlbXB0eSBzdHJpbmcuCi1XVEZfRVhQT1JUX1NU
UklOR19BUEkgY29uc3QgU3RyaW5nJiBlbXB0eVN0cmluZygpOworV1RGX0VYUE9SVF9QUklWQVRF
IGNvbnN0IFN0cmluZyYgZW1wdHlTdHJpbmcoKTsKIAogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBEZWZhdWx0SGFzaDsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0cmluZz4geyB1
c2luZyBIYXNoID0gU3RyaW5nSGFzaDsgfTsKIHRlbXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0
czxTdHJpbmc+IDogU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgeyB9OwogCi1jbGFzcyBBU0NJSUxp
dGVyYWwgewotcHVibGljOgotICAgIGV4cGxpY2l0IEFTQ0lJTGl0ZXJhbChjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzKSA6IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKSB7IH0KLSAgICBvcGVyYXRvciBj
b25zdCBjaGFyKigpIHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQotCi1wcml2YXRlOgotICAgIGNv
bnN0IGNoYXIqIG1fY2hhcmFjdGVyczsKLX07Ci0KK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3Qg
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0OwogdGVtcGxhdGU8PiBzdHJ1Y3QgSW50ZWdl
clRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0cmluZz4gewogICAgIHVzaW5nIFJldHVyblR5cGUg
PSBTdHJpbmc7CiAgICAgdXNpbmcgQWRkaXRpb25hbEFyZ3VtZW50VHlwZSA9IHZvaWQ7Ci0gICAg
c3RhdGljIFN0cmluZyBmbHVzaChMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB2
b2lkKikgeyByZXR1cm4geyBjaGFyYWN0ZXJzLCBsZW5ndGggfTsgfQorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGZsdXNoKExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqKSB7
IHJldHVybiB7IGNoYXJhY3RlcnMsIGxlbmd0aCB9OyB9CiB9OwogCiAvLyBEZWZpbml0aW9ucyBv
ZiBzdHJpbmcgb3BlcmF0aW9ucwogCi1pbmxpbmUgU3RyaW5nOjpTdHJpbmcoU3RyaW5nSW1wbCYg
c3RyaW5nKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBvaXNvbmFibGVTdHJpbmc8VD46
OlBvaXNvbmFibGVTdHJpbmcoU3RyaW5nSW1wbCYgc3RyaW5nKQogICAgIDogbV9pbXBsKCZzdHJp
bmcpCiB7CiB9CiAKLWlubGluZSBTdHJpbmc6OlN0cmluZyhTdHJpbmdJbXBsKiBzdHJpbmcpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUG9pc29uYWJsZVN0cmluZzxUPjo6UG9pc29uYWJs
ZVN0cmluZyhTdHJpbmdJbXBsKiBzdHJpbmcpCiAgICAgOiBtX2ltcGwoc3RyaW5nKQogewogfQog
Ci1pbmxpbmUgU3RyaW5nOjpTdHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYgc3RyaW5nKQordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFBvaXNvbmFibGVTdHJpbmc8VD46OlBvaXNvbmFibGVTdHJp
bmcoUmVmPFN0cmluZ0ltcGw+JiYgc3RyaW5nKQogICAgIDogbV9pbXBsKFdURk1vdmUoc3RyaW5n
KSkKIHsKIH0KIAotaW5saW5lIFN0cmluZzo6U3RyaW5nKFJlZlB0cjxTdHJpbmdJbXBsPiYmIHN0
cmluZykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQb2lzb25hYmxlU3RyaW5nPFQ+OjpQ
b2lzb25hYmxlU3RyaW5nKFJlZlB0cjxTdHJpbmdJbXBsPiYmIHN0cmluZykKICAgICA6IG1faW1w
bChXVEZNb3ZlKHN0cmluZykpCiB7CiB9CiAKLWlubGluZSBTdHJpbmc6OlN0cmluZyhSZWY8QXRv
bWljU3RyaW5nSW1wbD4mJiBzdHJpbmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUG9p
c29uYWJsZVN0cmluZzxUPjo6UG9pc29uYWJsZVN0cmluZyhSZWY8QXRvbWljU3RyaW5nSW1wbD4m
JiBzdHJpbmcpCiAgICAgOiBtX2ltcGwoV1RGTW92ZShzdHJpbmcpKQogewogfQogCi1pbmxpbmUg
U3RyaW5nOjpTdHJpbmcoUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+JiYgc3RyaW5nKQordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFBvaXNvbmFibGVTdHJpbmc8VD46OlBvaXNvbmFibGVTdHJp
bmcoUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+JiYgc3RyaW5nKQogICAgIDogbV9pbXBsKFdURk1v
dmUoc3RyaW5nKSkKIHsKIH0KIAotaW5saW5lIFN0cmluZzo6U3RyaW5nKFN0YXRpY1N0cmluZ0lt
cGwmIHN0cmluZykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQb2lzb25hYmxlU3RyaW5n
PFQ+OjpQb2lzb25hYmxlU3RyaW5nKFN0YXRpY1N0cmluZ0ltcGwmIHN0cmluZykKICAgICA6IG1f
aW1wbChyZWludGVycHJldF9jYXN0PFN0cmluZ0ltcGwqPigmc3RyaW5nKSkKIHsKIH0KIAotaW5s
aW5lIFN0cmluZzo6U3RyaW5nKFN0YXRpY1N0cmluZ0ltcGwqIHN0cmluZykKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBQb2lzb25hYmxlU3RyaW5nPFQ+OjpQb2lzb25hYmxlU3RyaW5nKFN0
YXRpY1N0cmluZ0ltcGwqIHN0cmluZykKICAgICA6IG1faW1wbChyZWludGVycHJldF9jYXN0PFN0
cmluZ0ltcGwqPihzdHJpbmcpKQogewogfQogCi10ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gU3RyaW5nOjpTdHJpbmcoY29uc3QgVmVjdG9y
PFVDaGFyLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgdmVjdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+IGlubGluZSBQb2lzb25hYmxlU3RyaW5nPFQ+OjpQb2lzb25hYmxlU3Ry
aW5nKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4m
IHZlY3RvcikKICAgICA6IG1faW1wbCh2ZWN0b3Iuc2l6ZSgpID8gU3RyaW5nSW1wbDo6Y3JlYXRl
KHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpIDogUmVmPFN0cmluZ0ltcGw+IHsgKlN0cmlu
Z0ltcGw6OmVtcHR5KCkgfSkKIHsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgTENoYXIq
IFN0cmluZzo6Y2hhcmFjdGVyczxMQ2hhcj4oKSBjb25zdAorLy8gUmV0dXJuIGNoYXJhY3RlcnM4
KCkgb3IgY2hhcmFjdGVyczE2KCkgZGVwZW5kaW5nIG9uIENoYXJhY3RlclR5cGUuCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBUPgoraW5saW5lIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPENoYXJhY3RlclR5cGUsIExDaGFyPjo6dmFsdWUs
IGNvbnN0IExDaGFyKj4KK2NoYXJhY3RlcnMoY29uc3QgUG9pc29uYWJsZVN0cmluZzxUPiYgc3Ry
aW5nKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzOCgpOworICAgIHJldHVybiBzdHJpbmcuY2hh
cmFjdGVyczgoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgVUNoYXIqIFN0cmluZzo6
Y2hhcmFjdGVyczxVQ2hhcj4oKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZSwgdHlwZW5hbWUgVD4KK2lubGluZSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxDaGFyYWN0ZXJUeXBlLCBVQ2hhcj46OnZhbHVlLCBjb25zdCBVQ2hhcio+CitjaGFyYWN0
ZXJzKGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIHN0cmluZykKIHsKLSAgICByZXR1cm4gY2hh
cmFjdGVyczE2KCk7CisgICAgcmV0dXJuIHN0cmluZy5jaGFyYWN0ZXJzMTYoKTsKIH0KIAotaW5s
aW5lIFVDaGFyIFN0cmluZzo6Y2hhcmFjdGVyQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGF1dG8gY2hhcmFjdGVycyhTdHJp
bmdJbXBsKiBzdHJpbmcpCiB7Ci0gICAgaWYgKCFtX2ltcGwgfHwgaW5kZXggPj0gbV9pbXBsLT5s
ZW5ndGgoKSkKKyAgICByZXR1cm4gY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPihTdHJpbmcoc3Ry
aW5nKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgYXV0
byBjaGFyYWN0ZXJzKFN0cmluZ0ltcGwmIHN0cmluZykKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVy
czxDaGFyYWN0ZXJUeXBlPihTdHJpbmcoc3RyaW5nKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBVQ2hhciBQb2lzb25hYmxlU3RyaW5nPFQ+OjpjaGFyYWN0ZXJBdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW1wbCB8fCBpbmRleCA+PSBpbXBsKCktPmxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gKCptX2ltcGwpW2luZGV4XTsK
IH0KIAotaW5saW5lIFN0cmluZyYgU3RyaW5nOjpyZXBsYWNlKFVDaGFyIHRhcmdldCwgVUNoYXIg
cmVwbGFjZW1lbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUG9pc29uYWJsZVN0cmlu
ZzxUPiYgUG9pc29uYWJsZVN0cmluZzxUPjo6cmVwbGFjZShVQ2hhciB0YXJnZXQsIFVDaGFyIHJl
cGxhY2VtZW50KQogewogICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbCA9IG1faW1wbC0+
cmVwbGFjZSh0YXJnZXQsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgbV9pbXBsID0gaW1wbCgpLT5y
ZXBsYWNlKHRhcmdldCwgcmVwbGFjZW1lbnQpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAotaW5s
aW5lIFN0cmluZyYgU3RyaW5nOjpyZXBsYWNlKFVDaGFyIHRhcmdldCwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQb2lzb25hYmxlU3RyaW5n
PFQ+JiBQb2lzb25hYmxlU3RyaW5nPFQ+OjpyZXBsYWNlKFVDaGFyIHRhcmdldCwgY29uc3QgUG9p
c29uYWJsZVN0cmluZzxUPiYgcmVwbGFjZW1lbnQpCiB7CiAgICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKHRhcmdldCwgcmVwbGFjZW1lbnQuaW1wbCgpKTsK
KyAgICAgICAgbV9pbXBsID0gaW1wbCgpLT5yZXBsYWNlKHRhcmdldCwgcmVwbGFjZW1lbnQuaW1w
bCgpKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWlubGluZSBTdHJpbmcmIFN0cmluZzo6cmVw
bGFjZShjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQb2lzb25hYmxlU3RyaW5nPFQ+JiBQb2lzb25hYmxl
U3RyaW5nPFQ+OjpyZXBsYWNlKGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIHRhcmdldCwgY29u
c3QgUG9pc29uYWJsZVN0cmluZzxUPiYgcmVwbGFjZW1lbnQpCiB7CiAgICAgaWYgKG1faW1wbCkK
LSAgICAgICAgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKHRhcmdldC5pbXBsKCksIHJlcGxhY2Vt
ZW50LmltcGwoKSk7CisgICAgICAgIG1faW1wbCA9IGltcGwoKS0+cmVwbGFjZSh0YXJnZXQuaW1w
bCgpLCByZXBsYWNlbWVudC5pbXBsKCkpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAotaW5saW5l
IFN0cmluZyYgU3RyaW5nOjpyZXBsYWNlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UG9pc29uYWJsZVN0cmluZzxUPiYgUG9pc29uYWJsZVN0cmluZzxUPjo6cmVwbGFjZSh1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiByZXBs
YWNlbWVudCkKIHsKICAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwgPSBtX2ltcGwtPnJl
cGxhY2Uoc3RhcnQsIGxlbmd0aCwgcmVwbGFjZW1lbnQuaW1wbCgpKTsKKyAgICAgICAgbV9pbXBs
ID0gaW1wbCgpLT5yZXBsYWNlKHN0YXJ0LCBsZW5ndGgsIHJlcGxhY2VtZW50LmltcGwoKSk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi10ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4g
QUxXQVlTX0lOTElORSBTdHJpbmcmIFN0cmluZzo6cmVwbGFjZVdpdGhMaXRlcmFsKFVDaGFyIHRh
cmdldCwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBBTFdBWVNfSU5M
SU5FIFBvaXNvbmFibGVTdHJpbmc8VD4mIFBvaXNvbmFibGVTdHJpbmc8VD46OnJlcGxhY2VXaXRo
TGl0ZXJhbChVQ2hhciB0YXJnZXQsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJD
b3VudF0pCiB7CiAgICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsID0gbV9pbXBsLT5yZXBs
YWNlKHRhcmdldCwgY2hhcmFjdGVycywgY2hhcmFjdGVyQ291bnQgLSAxKTsKKyAgICAgICAgbV9p
bXBsID0gaW1wbCgpLT5yZXBsYWNlKHRhcmdldCwgY2hhcmFjdGVycywgY2hhcmFjdGVyQ291bnQg
LSAxKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWlubGluZSBWZWN0b3I8U3RyaW5nPiBTdHJp
bmc6OnNwbGl0KFVDaGFyIHNlcGFyYXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBWZWN0b3I8UG9pc29uYWJsZVN0cmluZzxUPj4gUG9pc29uYWJsZVN0cmluZzxUPjo6c3Bs
aXQoVUNoYXIgc2VwYXJhdG9yKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsK
KyAgICBWZWN0b3I8UG9pc29uYWJsZVN0cmluZzxUPj4gcmVzdWx0OwogICAgIHNwbGl0KHNlcGFy
YXRvciwgZmFsc2UsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIFZl
Y3RvcjxTdHJpbmc+IFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IpIGNvbnN0
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVmVjdG9yPFBvaXNvbmFibGVTdHJpbmc8VD4+
IFBvaXNvbmFibGVTdHJpbmc8VD46OnNwbGl0KGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VD4mIHNl
cGFyYXRvcikgY29uc3QKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisgICAgVmVjdG9y
PFBvaXNvbmFibGVTdHJpbmc8VD4+IHJlc3VsdDsKICAgICBzcGxpdChzZXBhcmF0b3IsIGZhbHNl
LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4gaW5saW5lIFN0cmluZyBTdHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291cmNl
KGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBidWZmZXIpCi17Ci0gICAgcmV0
dXJuIG1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkp
OwotfQotCi1pbmxpbmUgVUNoYXJEaXJlY3Rpb24gU3RyaW5nOjpkZWZhdWx0V3JpdGluZ0RpcmVj
dGlvbihib29sKiBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkgY29uc3QKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBVQ2hhckRpcmVjdGlvbiBQb2lzb25hYmxlU3RyaW5nPFQ+OjpkZWZhdWx0
V3JpdGluZ0RpcmVjdGlvbihib29sKiBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkgY29uc3QKIHsK
ICAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5kZWZhdWx0V3JpdGluZ0Rp
cmVjdGlvbihoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7CisgICAgICAgIHJldHVybiBpbXBsKCkt
PmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KTsKICAgICBp
ZiAoaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkpCiAgICAgICAgICpoYXNTdHJvbmdEaXJlY3Rpb25h
bGl0eSA9IGZhbHNlOwogICAgIHJldHVybiBVX0xFRlRfVE9fUklHSFQ7CiB9CiAKLWlubGluZSB2
b2lkIFN0cmluZzo6Y2xlYXJJbXBsSWZOb3RTaGFyZWQoKQordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHZvaWQgUG9pc29uYWJsZVN0cmluZzxUPjo6Y2xlYXJJbXBsSWZOb3RTaGFyZWQoKQog
ewotICAgIGlmIChtX2ltcGwgJiYgbV9pbXBsLT5oYXNPbmVSZWYoKSkKKyAgICBpZiAobV9pbXBs
ICYmIGltcGwoKS0+aGFzT25lUmVmKCkpCiAgICAgICAgIG1faW1wbCA9IG51bGxwdHI7CiB9CiAK
LWlubGluZSB2b2lkIFN0cmluZzo6YXNzZXJ0Q2FnZWQoKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgUG9pc29uYWJsZVN0cmluZzxUPjo6YXNzZXJ0Q2FnZWQoKSBjb25z
dAogewogICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+YXNzZXJ0Q2FnZWQoKTsKKyAg
ICAgICAgaW1wbCgpLT5hc3NlcnRDYWdlZCgpOwogfQogCi1pbmxpbmUgdm9pZCBTdHJpbmc6OnJl
bGVhc2VBc3NlcnRDYWdlZCgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9p
ZCBQb2lzb25hYmxlU3RyaW5nPFQ+OjpyZWxlYXNlQXNzZXJ0Q2FnZWQoKSBjb25zdAogewogICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+cmVsZWFzZUFzc2VydENhZ2VkKCk7CisgICAg
ICAgIGltcGwoKS0+cmVsZWFzZUFzc2VydENhZ2VkKCk7CiB9CiAKICNpZmRlZiBfX09CSkNfXwog
Ci1pbmxpbmUgU3RyaW5nOjpvcGVyYXRvciBOU1N0cmluZyAqKCkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBQb2lzb25hYmxlU3RyaW5nPFQ+OjpvcGVyYXRvciBOU1N0cmluZyoo
KSBjb25zdAogewogICAgIGlmICghbV9pbXBsKQogICAgICAgICByZXR1cm4gQCIiOwogICAgIHJl
dHVybiAqbV9pbXBsOwogfQogCi1pbmxpbmUgTlNTdHJpbmcgKiBuc1N0cmluZ05pbElmRW1wdHko
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgTlNTdHJp
bmcqIG5zU3RyaW5nTmlsSWZFbXB0eShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBzdHJpbmcp
CiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC02
MDcsMTEgKzczNyw2IEBAIGlubGluZSBOU1N0cmluZyAqIG5zU3RyaW5nTmlsSWZFbXB0eShjb25z
dCBTdHJpbmcmIHN0cmluZykKIAogI2VuZGlmCiAKLWlubGluZSBib29sIGNvZGVQb2ludENvbXBh
cmVMZXNzVGhhbihjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikKLXsKLSAgICByZXR1
cm4gY29kZVBvaW50Q29tcGFyZShhLmltcGwoKSwgYi5pbXBsKCkpIDwgMDsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIGlubGluZSB2b2lkIGFwcGVuZE51bWJlcihWZWN0
b3I8Q2hhcmFjdGVyVHlwZT4mIHZlY3RvciwgdW5zaWduZWQgY2hhciBudW1iZXIpCiB7CkBAIC02
MzUsMjkgKzc2MCw0OSBAQCBpbmxpbmUgdm9pZCBhcHBlbmROdW1iZXIoVmVjdG9yPENoYXJhY3Rl
clR5cGU+JiB2ZWN0b3IsIHVuc2lnbmVkIGNoYXIgbnVtYmVyKQogICAgIH0KIH0KIAotaW5saW5l
IFN0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IFZlY3RvcjxMQ2hhcj4mIGNoYXJhY3RlcnMp
Cit0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSBTdHJpbmcgU3RyaW5nTWFr
ZXI6Om1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2Fw
YWNpdHk+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIG1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGJ1
ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOworfQorCitpbmxpbmUgU3RyaW5nIFN0cmluZ01h
a2VyOjpmcm9tVVRGOChjb25zdCBWZWN0b3I8TENoYXI+JiBjaGFyYWN0ZXJzKQogewogICAgIGlm
IChjaGFyYWN0ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAg
ICAgcmV0dXJuIGZyb21VVEY4KGNoYXJhY3RlcnMuZGF0YSgpLCBjaGFyYWN0ZXJzLnNpemUoKSk7
CiB9CiAKLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dl
cmNhc2VMZXR0ZXJzKVtsZW5ndGhdKQoraW5saW5lIFN0cmluZyBTdHJpbmdNYWtlcjo6ZnJvbVVU
RjgoY29uc3QgY2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nTWFrZXI6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFy
YWN0ZXJzKSwgbGVuZ3RoKTsKK30KKworaW5saW5lIFN0cmluZyBTdHJpbmdNYWtlcjo6ZnJvbVVU
RjgoY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIHJldHVybiBTdHJpbmdNYWtlcjo6ZnJvbVVU
RjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHN0cmluZykpOworfQorCitpbmxpbmUg
U3RyaW5nIFN0cmluZ01ha2VyOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBjaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBmcm9tVVRGOFdpdGhM
YXRpbjFGYWxsYmFjayhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyks
IGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGxlbmd0aD4gaW5s
aW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgUG9pc29uYWJsZVN0
cmluZzxUPiYgc3RyaW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkK
IHsKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwo
KSwgbG93ZXJjYXNlTGV0dGVycyk7CiB9CiAKLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUMCwgdHlwZW5hbWUgVDE+IGlubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29u
c3QgUG9pc29uYWJsZVN0cmluZzxUMD4mIGEsIGNvbnN0IFBvaXNvbmFibGVTdHJpbmc8VDE+JiBi
KQogewogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuaW1wbCgpLCBiLmltcGwo
KSk7CiB9CiAKLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5n
JiBhLCBjb25zdCBjaGFyKiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBhLCBjb25zdCBj
aGFyKiBiKQogewogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuaW1wbCgpLCBi
KTsKIH0KIAotdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBzdGFydHNXaXRo
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFy
ICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2ln
bmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShjb25zdCBQb2lzb25hYmxlU3RyaW5nPFQ+JiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNh
c2VMZXR0ZXJzKVtsZW5ndGhdKQogewogICAgIHJldHVybiBzdGFydHNXaXRoTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZy5pbXBsKCksIGxvd2VyY2FzZUxldHRlcnMpOwogfQpAQCAtNjY2
LDcgKzgxMSw2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgc3RhcnRz
V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTCiAKIHVzaW5nIFdURjo6QVNDSUlM
aXRlcmFsOwogdXNpbmcgV1RGOjpLZWVwVHJhaWxpbmdaZXJvczsKLXVzaW5nIFdURjo6U3RyaW5n
OwogdXNpbmcgV1RGOjphcHBlbmROdW1iZXI7CiB1c2luZyBXVEY6OmNoYXJhY3RlcnNUb0RvdWJs
ZTsKIHVzaW5nIFdURjo6Y2hhcmFjdGVyc1RvRmxvYXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L2NmL1N0cmluZ0NGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5n
Q0YuY3BwCmluZGV4IDEwZWJjMGMuLjlmMjM0MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvY2YvU3RyaW5nQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5n
Q0YuY3BwCkBAIC0yOCwzNSArMjgsMzEgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLVN0cmluZzo6
U3RyaW5nKENGU3RyaW5nUmVmIHN0cikKK1JlZlB0cjxTdHJpbmdJbXBsPiBCYXNpY1N0cmluZzo6
Y3JlYXRlKENGU3RyaW5nUmVmIHN0cikKIHsKICAgICBpZiAoIXN0cikKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIENGSW5kZXggc2l6ZSA9IENGU3RyaW5n
R2V0TGVuZ3RoKHN0cik7CiAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgbV9pbXBsID0gU3Ry
aW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVmVjdG9yPExDaGFyLCAxMDI0
PiBsY2hhckJ1ZmZlcihzaXplKTsKLSAgICAgICAgQ0ZJbmRleCB1c2VkQnVmTGVuOwotICAgICAg
ICBDRkluZGV4IGNvbnZlcnRlZHNpemUgPSBDRlN0cmluZ0dldEJ5dGVzKHN0ciwgQ0ZSYW5nZU1h
a2UoMCwgc2l6ZSksIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xLCAwLCBmYWxzZSwgbGNoYXJC
dWZmZXIuZGF0YSgpLCBzaXplLCAmdXNlZEJ1Zkxlbik7Ci0gICAgICAgIGlmICgoY29udmVydGVk
c2l6ZSA9PSBzaXplKSAmJiAodXNlZEJ1ZkxlbiA9PSBzaXplKSkgewotICAgICAgICAgICAgbV9p
bXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGxjaGFyQnVmZmVyLmRhdGEoKSwgc2l6ZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+
IGJ1ZmZlcihzaXplKTsKLSAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0ciwgQ0ZSYW5n
ZU1ha2UoMCwgc2l6ZSksIChVbmlDaGFyKilidWZmZXIuZGF0YSgpKTsKLSAgICAgICAgbV9pbXBs
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIHNpemUpOwotICAgIH0KKyAgICAg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgVmVjdG9yPExDaGFyLCAxMDI0PiBs
Y2hhckJ1ZmZlcihzaXplKTsKKyAgICBDRkluZGV4IHVzZWRCdWZMZW47CisgICAgQ0ZJbmRleCBj
b252ZXJ0ZWRzaXplID0gQ0ZTdHJpbmdHZXRCeXRlcyhzdHIsIENGUmFuZ2VNYWtlKDAsIHNpemUp
LCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgMCwgZmFsc2UsIGxjaGFyQnVmZmVyLmRhdGEo
KSwgc2l6ZSwgJnVzZWRCdWZMZW4pOworICAgIGlmICgoY29udmVydGVkc2l6ZSA9PSBzaXplKSAm
JiAodXNlZEJ1ZkxlbiA9PSBzaXplKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0
ZShsY2hhckJ1ZmZlci5kYXRhKCksIHNpemUpOworCisgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBi
dWZmZXIoc2l6ZSk7CisgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0ciwgQ0ZSYW5nZU1ha2Uo
MCwgc2l6ZSksIChVbmlDaGFyKilidWZmZXIuZGF0YSgpKTsKKyAgICByZXR1cm4gU3RyaW5nSW1w
bDo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIHNpemUpOwogfQogCi1SZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IFN0cmluZzo6Y3JlYXRlQ0ZTdHJpbmcoKSBjb25zdAorUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBCYXNpY1N0cmluZzo6Y3JlYXRlQ0ZTdHJpbmcoY29uc3QgU3RyaW5nSW1wbCogaW1wbCkKIHsK
LSAgICBpZiAoIW1faW1wbCkKKyAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiBDRlNUUigi
Iik7CiAKLSAgICByZXR1cm4gbV9pbXBsLT5jcmVhdGVDRlN0cmluZygpOworICAgIHJldHVybiBj
b25zdF9jYXN0PFN0cmluZ0ltcGwqPihpbXBsKS0+Y3JlYXRlQ0ZTdHJpbmcoKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwIGIvU291
cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCmluZGV4IDUzZjQ5ODMuLmQ3ZGFj
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKQEAgLTUyLDExICs1
MiwxMSBAQCBuYW1lc3BhY2UgU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yIHsKIAogICAgIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZShDRkluZGV4IHNpemUsIENGT3B0aW9uRmxhZ3MsIHZvaWQqKQogICAg
IHsKLSAgICAgICAgU3RyaW5nSW1wbCogdW5kZXJseWluZ1N0cmluZyA9IDA7CisgICAgICAgIFN0
cmluZ0ltcGwqIHVuZGVybHlpbmdTdHJpbmcgPSBudWxscHRyOwogICAgICAgICBpZiAoaXNNYWlu
VGhyZWFkKCkpIHsKICAgICAgICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSBjdXJyZW50U3RyaW5n
OwogICAgICAgICAgICAgaWYgKHVuZGVybHlpbmdTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBj
dXJyZW50U3RyaW5nID0gMDsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RyaW5nID0gbnVsbHB0
cjsKICAgICAgICAgICAgICAgICB1bmRlcmx5aW5nU3RyaW5nLT5yZWYoKTsgLy8gQmFsYW5jZWQg
YnkgY2FsbCB0byBkZXJlZiBpbiBkZWFsbG9jYXRlIGJlbG93LgogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0xMzksNyArMTM5LDcgQEAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBTdHJpbmdJ
bXBsOjpjcmVhdGVDRlN0cmluZygpCiAgICAgZWxzZQogICAgICAgICBzdHJpbmcgPSBDRlN0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5KGFsbG9jYXRvciwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVbmlDaGFyKj4oY2hhcmFjdGVyczE2KCkpLCBtX2xlbmd0aCwga0NGQWxsb2NhdG9yTnVs
bCk7CiAgICAgLy8gQ29yZUZvdW5kYXRpb24gbWlnaHQgbm90IGhhdmUgdG8gYWxsb2NhdGUgYW55
dGhpbmcsIHdlIGNsZWFyIGN1cnJlbnRTdHJpbmcgaW4gY2FzZSB3ZSBkaWQgbm90IGV4ZWN1dGUg
YWxsb2NhdGUoKS4KLSAgICBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJpbmcg
PSAwOworICAgIFN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVudFN0cmluZyA9IG51bGxw
dHI7CiAKICAgICByZXR1cm4gYWRvcHRDRihzdHJpbmcpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9tYWMvU3RyaW5nTWFjLm1tIGIvU291cmNlL1dURi93dGYvdGV4dC9tYWMv
U3RyaW5nTWFjLm1tCmluZGV4IDM0ZTVjMWEuLjMzODI0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvbWFjL1N0cmluZ01hYy5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L21h
Yy9TdHJpbmdNYWMubW0KQEAgLTI1LDI3ICsyNSwyMyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAot
U3RyaW5nOjpTdHJpbmcoTlNTdHJpbmcgKnN0cikKK1JlZlB0cjxTdHJpbmdJbXBsPiBCYXNpY1N0
cmluZzo6Y3JlYXRlKE5TU3RyaW5nICpzdHIpCiB7CiAgICAgaWYgKCFzdHIpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBDRkluZGV4IHNpemUgPSBDRlN0
cmluZ0dldExlbmd0aChyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihzdHIpKTsKICAgICBp
ZiAoc2l6ZSA9PSAwKQotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAg
IGVsc2UgewotICAgICAgICBWZWN0b3I8TENoYXIsIDEwMjQ+IGxjaGFyQnVmZmVyKHNpemUpOwot
ICAgICAgICBDRkluZGV4IHVzZWRCdWZMZW47Ci0gICAgICAgIENGSW5kZXggY29udmVydGVkc2l6
ZSA9IENGU3RyaW5nR2V0Qnl0ZXMocmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oc3RyKSwg
Q0ZSYW5nZU1ha2UoMCwgc2l6ZSksIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xLCAwLCBmYWxz
ZSwgbGNoYXJCdWZmZXIuZGF0YSgpLCBzaXplLCAmdXNlZEJ1Zkxlbik7Ci0gICAgICAgIGlmICgo
Y29udmVydGVkc2l6ZSA9PSBzaXplKSAmJiAodXNlZEJ1ZkxlbiA9PSBzaXplKSkgewotICAgICAg
ICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGxjaGFyQnVmZmVyLmRhdGEoKSwgc2l6
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmVtcHR5KCk7CisgICAgVmVjdG9yPExDaGFyLCAxMDI0PiBsY2hhckJ1ZmZlcihzaXpl
KTsKKyAgICBDRkluZGV4IHVzZWRCdWZMZW47CisgICAgQ0ZJbmRleCBjb252ZXJ0ZWRzaXplID0g
Q0ZTdHJpbmdHZXRCeXRlcyhyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihzdHIpLCBDRlJh
bmdlTWFrZSgwLCBzaXplKSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIDAsIGZhbHNlLCBs
Y2hhckJ1ZmZlci5kYXRhKCksIHNpemUsICZ1c2VkQnVmTGVuKTsKKyAgICBpZiAoKGNvbnZlcnRl
ZHNpemUgPT0gc2l6ZSkgJiYgKHVzZWRCdWZMZW4gPT0gc2l6ZSkpCisgICAgICAgIHJldHVybiBT
dHJpbmdJbXBsOjpjcmVhdGUobGNoYXJCdWZmZXIuZGF0YSgpLCBzaXplKTsKIAotICAgICAgICBW
ZWN0b3I8VUNoYXIsIDEwMjQ+IHVjaGFyQnVmZmVyKHNpemUpOwotICAgICAgICBDRlN0cmluZ0dl
dENoYXJhY3RlcnMocmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oc3RyKSwgQ0ZSYW5nZU1h
a2UoMCwgc2l6ZSksIHVjaGFyQnVmZmVyLmRhdGEoKSk7Ci0gICAgICAgIG1faW1wbCA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZSh1Y2hhckJ1ZmZlci5kYXRhKCksIHNpemUpOwotICAgIH0KKyAgICBWZWN0
b3I8VUNoYXIsIDEwMjQ+IHVjaGFyQnVmZmVyKHNpemUpOworICAgIENGU3RyaW5nR2V0Q2hhcmFj
dGVycyhyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihzdHIpLCBDRlJhbmdlTWFrZSgwLCBz
aXplKSwgdWNoYXJCdWZmZXIuZGF0YSgpKTsKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRl
KHVjaGFyQnVmZmVyLmRhdGEoKSwgc2l6ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwMDQxYjUz
Li40NmE3NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDE4LTAzLTI5ICBKRiBC
YXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFdURjo6U3RyaW5n
IHBvaXNvbmFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NDE2NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzkwMjA2Nzc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBXVEY6OlN0cmluZyBw
b2lzb25hYmxlCisKKyAgICAgICAgV2Ugd2FudCB0byBiZSBhYmxlIHRvIHBvaXNvbiBXVEY6OlN0
cmluZyB0aGUgc2FtZSB3YXkgd2UgY2FuIHBvaXNvbiBSZWY8PiwKKyAgICAgICAgUmVmUHRyPD4s
IFdyaXRlQmFycmllcjw+IGFuZCBmcmllbmRzIHVzaW5nIHd0Zi9Qb2lzb25lZC5oLiBJbiB0aGVv
cnkgdGhpcyBpcworICAgICAgICB2ZXJ5IHNpbXBsZTogU3RyaW5nIG9ubHkgaG9sZHMgYSBSZWZQ
dHI8U3RyaW5nSW1wbD4sIGFuZCBhbGwgd2UgaGF2ZSB0byBkbyBpcworICAgICAgICBwYXNzIGEg
cG9pc29uZWQgcG9pbnRlciB0cmFpdCB0byB0aGUgY29udGFpbmVkIFJlZlB0ciBhbmQgY2FsbCBp
dCBhIGRheS4gSW4KKyAgICAgICAgcHJhY3RpY2Ugd2UgaGF2ZSB0aGlzIHBhdGNoLgorCisgICAg
ICAgIE1ha2UgV1RGIFN0cmluZyB0ZW1wbGF0ZWQsIHdpdGggRHVtcFB0clRyYWl0czxTdHJpbmdJ
bXBsPiBhcyB0aGUgZGVmYXVsdC4gVGhpcworICAgICAgICBmdW5jdGlvbmFsbHkgY2hhbmdlcyBu
b3RoaW5nLCBidXQgYWxsb3dzIHBvaXNvbmluZyB0byB0cmlja2xlIHRvIFN0cmluZydzCisgICAg
ICAgIFJlZlB0ci4gSW4gdHVybiB0aGlzIHJlcXVpcmVzIHVwZGF0aW5nIGFsbCBmb3J3YXJkIGRl
Y2xhcmF0aW9ucyBvZiBTdHJpbmcuIFRoaXMKKyAgICAgICAgaXMgZWFzaWVyIHRvIGRvIGluIEZv
cndhcmQuaCAod2hpY2ggY29udGFpbnMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQorICAgICAg
ICB0ZW1wbGF0ZSksIGFuZCB0byB1cGRhdGUgYWxsIGNvZGUgd2hpY2ggZm93YXJkLWRlY2xhcmVz
IFN0cmluZyB0byBpbnN0ZWFkCisgICAgICAgIGluY2x1ZGUgRm9yd2FyZC5oLgorCisgICAgICAg
IEFkZCBhIHByaXZhdGUgbm9uLXRlbXBsYXRlZCBiYXNlIGNsYXNzIHRvIFN0cmluZywgQmFzaWNT
dHJpbmcsIHNvIHRoYXQgaXRzCisgICAgICAgIHRlbXBsYXRlZCBtZXRob2RzIGNhbiBzaW1wbHkg
Zm9yd2FyZCB0byB0aGUgYmFzZSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gYSAuY3BwCisgICAg
ICAgIGZpbGUuIE90aGVyd2lzZSB3ZSdkIG5lZWQgdG8gZXhwb3NlIHRoZSBTdHJpbmcgaW1wbGVt
ZW50YXRpb24gaW4gdGhlIGhlYWRlcgorICAgICAgICBiZWNhdXNlIFN0cmluZyBpcyBub3cgdGVt
cGxhdGVkLiBUaGlzIGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gd2hhdCBzdGQ6OnN0cmluZworICAg
ICAgICBkb2VzIHdpdGggc3RkOjpiYXNpY19zdHJpbmcgKGluIGEgd2F5IHRoZSBwb2ludGVyIHRy
YWl0cyBhcmUga2luZCBvZiBsaWtlCisgICAgICAgIHN0ZDo6Y2hhcl90cmFpdHMpLgorCisgICAg
ICAgIEFkZCBhIHB1YmxpYyBub24tdGVtcGxhdGVkIGJhc2UgY2xhc3MgdG8gU3RyaW5nLCBTdHJp
bmdNYWtlciwgd2hpY2ggaG9sZHMgYWxsCisgICAgICAgIHRoZSBzdGF0aWMgbWV0aG9kcyB3aGlj
aCBjYW4gY3JlYXRlIGEgU3RyaW5nLiBUaGlzIGFsc28gYWxsb3dzIGltcGxlbWVudGluZworICAg
ICAgICB0aGluZ3MgaW4gYSAuY3BwIGZpbGUuCisKKyAgICAgICAgTmVpdGhlciBiYXNlIGhhcyBh
bnkgZGF0YSBtZW1iZXJzLgorCisgICAgICAgIFRoZSBjaGFyYWN0ZXJzKCkgdGVtcGxhdGUgbWVt
YmVyIGZ1bmN0aW9uIGlzIG5vdyBhIGZyZWUtZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlCisgICAg
ICAgIFN0cmluZyBieSBjb25zdCByZWZlcmVuY2UuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBt
ZW1iZXIgdGVtcGxhdGVzIGNhbid0IGJlCisgICAgICAgIHNwZWNpYWxpemVkIHdpdGhvdXQgZnVs
bHkgc3BlY2lhbGl6aW5nIHRoZSBjbGFzcyBhcyB3ZWxsLiBUaGlzIGFsc28gcmVxdWlyZXMKKyAg
ICAgICAgc29tZSBpc19zYW1lIG1hZ2ljIHRvIG1hdGNoIExDaGFyIC8gVUNoYXIgY29ycmVjdGx5
LgorCisgICAgICAgIEkgbWFkZSBzb21lIGZ1bmN0aW9ucyBKdXN0IFdvcmsgd2l0aCBwb2lzb25l
ZCBzdHJpbmdzLCBhbmQgb3RoZXJzIG5vdCAoZS5nLiBieQorICAgICAgICB1c2luZyBTdHJpbmcg
aW4gc29tZSBwbGFjZXMsIG9yIGJ5IG5vdCBoYXZpbmcgYW4gZXh0cmEgdGVtcGxhdGUgcGFyYW1l
dGVyIGZvcgorICAgICAgICB0aGUgVmVjdG9yPFN0cmluZz4gdHlwZSByZXR1cm5lZCkuIElmIHRo
aXMgaXMgZXZlciBhbiBpc3N1ZSBiZWNhdXNlIHdlIHdhbnQgdG8KKyAgICAgICAgbWlncmF0ZSBz
dHJpbmdzIGZyb20gb25lIHBvaXNvbiB0byBhbm90aGVyIHRoZW4gd2UgY2FuIGFkZCBzaW1wbGUg
aGVscGVycyBvciBhZGQKKyAgICAgICAgYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gdGhlIHJlbGV2
YW50IGNvZGUuIEknbSB3YXJ5IG9mIG1ha2luZyB0aGUgY29kZSBtb3JlCisgICAgICAgIGNvbXBs
ZXggaWYgd2UgZG9uJ3QgdHJ5IHRvIG1peCBwb2lzb25zLiBUaGUgcmVhc29uIEkgdGhpbmsgdGhp
cyBpcyBjb3JyZWN0IGlzCisgICAgICAgIGJlY2F1c2Ugd2Ugb25seSBldmVyIHdhbnQgdG8gcG9p
c29uIFN0cmluZyB3aGVuIHN0b3JpbmcgdGhlIHN0cmluZyBpbiBhIGNsYXNzCisgICAgICAgIHdo
aWNoIGlzIGF0dGFja2VyLWNvbnRyb2xsYWJsZS4gV2hlbiBmdW5jdGlvbnMgcGFzcyBzdHJpbmdz
IGFyb3VuZCBhbmQgc3RvcmUKKyAgICAgICAgdGhlbSBvbiB0aGUgc3RhY2sgd2UgbW9zdGx5IGp1
c3Qgd2FudCBTdHJpbmcsIG5vIHBvaXNvbiBuZWVkZWQuCisKKyAgICAgICAgSW5saW5lIGEgYnVu
Y2ggb2YgZnVuY3Rpb25zIG1hcmtlZCBhcyBuZWVkaW5nIGlubGluaW5nIGZyb20gYSBGSVhNRSBp
bgorICAgICAgICBXVEZTdHJpbmcuY3BwIHRvIHRoZSBoZWFkZXIuIFRoZXkgd2VyZSBhbGwgb25l
LWxpbmVycyB3aGljaCBjaGVjayBmb3IgbnVsbAorICAgICAgICBtX2ltcGwsIGFuZCB0aGVuIGZv
cndhcmQgdG8gU3RyaW5nSW1wbC4KKworICAgICAgICBSZW1vdmUgQ09NUElMRVJfU1VQUE9SVFMo
Q1hYX1JFRkVSRU5DRV9RVUFMSUZJRURfRlVOQ1RJT05TKSwgaXQncyBzdXBwb3J0ZWQgYnkKKyAg
ICAgICAgYWxsIGNvbXBpbGVycyBXZWJLaXQgc3VwcG9ydHMgKGl0J3MgYSBDKysxMSBmZWF0dXJl
LCAqZGV0ZWN0aW9uKiBvZiBpdCB3aXRoCisgICAgICAgIF9faGFzX2V4dGVuc2lvbiB3YXMgYWRk
ZWQgdG8gY2xhbmcgb24gTWF5IDEzdGggMjAxMSwgYW5kIFZTMjAxNSAvIEdDQyBzdXBwb3J0Cisg
ICAgICAgIGl0KS4KKworICAgICAgICBNYXJrIGEgYnVuY2ggb2YgU3RyaW5nSW1wbCBhcyBjb25z
dCwgYW5kIG90aGVycyBub3QuIFRoaXMgY29uc3QgYnVzaW5lc3Mgd2l0aAorICAgICAgICBTdHJp
bmdJbXBsIGlzIHJlYWxseSBhIG1lc3MgKGFzIHRoZSBGSVhNRSBpbiB0aGVyZSBhdHRlc3RzKSEK
KworICAgICAgICBSZW1vdmUgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGFzIHJlcXVlc3RlZCBieSBh
IEZJWE1FLCBhbmQgdXNlIFdURl9FWFBPUlRfUFJJVkFURQorICAgICAgICBpbnN0ZWFkLiBOb3Rl
IHRoYXQgbWFueSBvZiB0aGUgZnVuY3Rpb25zIHdoaWNoIHVzZWQgdG8gYmUgZXhwb3J0ZWQgYXJl
IG5vdworICAgICAgICBzaW1wbGUgaW5saW5lIGZ1bmN0aW9ucyB3aGljaCB1bnBvaXNvbiBhbmQg
Zm9yd2FyZCB0byBhbiBpbXBsZW1lbnRhdGlvbi4gVGhleQorICAgICAgICBkb24ndCBuZWVkIHRv
IGJlIGV4cG9ydGVkIGFueW1vcmUsIGJ1dCB3aGF0IHRoZXkgZm9yd2FyZCB0byBkb2VzLgorCisg
ICAgICAgIEludHJvZHVjZSBXVEZfTEFaWV9JTlNUQU5USUFURSB0byBmb3J3YXJkLWRlY2xhcmUg
ZnVuY3Rpb25zIHdoaWNoIGp1c3QgcGFzcworICAgICAgICBwYXJhbWV0ZXJzIHRvIGFub3RoZXIg
ZnVuY3Rpb24sIGFuZCByZXR1cm4gd2hhdGV2ZXIgdGhhdCBvdGhlciBmdW5jdGlvbgorICAgICAg
ICByZXR1cm5lZCwgd2l0aG91dCBoYXZpbmcgdG8gaW5jbHVkZSB0aGUgcmV0dXJuJ3MgLyBwYXJh
bWV0ZXJzJyB0eXBlIGhlYWRlci4gVGhpcworICAgICAgICBtZWFucyB0aGF0IFdURlN0cmluZy5o
IGRvZXNuJ3QgbmVlZCB0byBpbmNsdWRlIFJldGFpblB0ci5oIGFuZCBDU3RyaW5nLmguCisKKyAg
ICAgICAgbWVzc2FnZXMucHk6IENoYW5nZSBXZWJLaXQgZ2VuZXJhdGVkIGhlYWRlcnMgc28gdGhh
dCB0aGV5IHByb3Blcmx5IGluY2x1ZGUKKyAgICAgICAgRm9yd2FyZC5oIGluc3RlYWQgb2YgZm9y
d2FyZC1kZWNsYXJpbmcgU3RyaW5nLgorCisgICAgICAgIEFkZCBhIGBjaGFyYWN0ZXJBdGAgbWV0
aG9kIHRvIFN0cmluZ0ltcGwgdG8gbWF0Y2ggdGhlIG9uZSBpbiBTdHJpbmcgYW5kIG1ha2UgaXQK
KyAgICAgICAgZWFzaWVyIHRvIG1pZ3JhdGUuIEl0IGFscmVhZHkgaGFzIGBhdGAsIHdoaWNoIGFz
c2VydHMgb24gb3ZlcmFzc2VydHMgb24gb3ZlcmZsb3cKKyAgICAgICAgaW5zdGVhZCBvZiByZXR1
cm5pbmcgMCAoYXMgU3RyaW5nJ3MgYGNoYXJhY3RlckF0YCBkb2VzKS4KKworICAgICAgICBBbGxv
dyBidWlsZGluZyBhbmQgY29uY2F0ZW5hdGluZyBzdHJpbmdzIHdpdGggU3RyaW5nSW1wbCosIHdo
aWNoIGNvbWVzIGluIGhhbmR5CisgICAgICAgIHdoZW4gd2UgcGFzcyB0aGVtIGFyb3VuZCBhIGJp
dCBtb3JlIHRvIGF2b2lkIHRoZSBwb2lzb25lZCBtZW1iZXJzLgorCisgICAgICAgIE92ZXJhbGwg
dGhpcyBwYXRjaCBzaG91bGQgZG8gZXhhY3RseSBub3RoaW5nLiBBbGwgY29kZSBzdGlsbCB1c2Vz
IHVucG9pc29uZWQKKyAgICAgICAgc3RyaW5ncywgYW5kIEkgaGF2ZSBhIGZvbGxvdy11cCBwYXRj
aCB3aGljaCBwb2lzb25zIHNlbGVjdCBzdHJpbmdzIGluIEpTQy4gSSdsbAorICAgICAgICBwb3N0
IHRoYXQgcGF0Y2ggc2VwYXJhdGVseSBhcyBpdCdzIHF1aXRlIGJpZyBhbmQgSSB3YW50IHRvIGlz
b2xhdGUgYW55CisgICAgICAgIHJlZ3Jlc3Npb25zIEkgbWF5IGludHJvZHVjZS4KKworICAgICAg
ICBJJ3ZlIHJ1biBhIGJ1bmNoIG9mIHRlc3RzIGFuZCB0aGlzIGxvb2tzIHBlcmYgbmV1dHJhbCwg
YW5kIHNvIGRvZXMgbXkgSlNDIHN0cmluZworICAgICAgICBwb2lzb25pbmcgcGF0Y2ggc28gZmFy
LiBGcm9tLXNjcmF0Y2ggYnVpbGQgdGltZSBmb3IgYWxsIG9mIFNhZmFyaSBzZWVtcyB0bworICAg
ICAgICAqZGVjcmVhc2UqIGJ5IDE1JSBvbiBteSBNQlAsIHdoaWNoIHdhcyBzdXJwcmlzaW5nLCBz
byBJJ20gZ3Vlc3Npbmcgd2UgbWlnaHQgaGF2ZQorICAgICAgICBsYXJnZSB2YXJpYW5jZS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvZmV0Y2gv
RmV0Y2hIZWFkZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoSGVhZGVyczo6SXRlcmF0
b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uOjpzdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzIGNvbnN0KToKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6dXBkYXRlVG9rZW5zKToKKyAgICAgICAgKiBjc3Mv
bWFrZXByb3AucGw6CisgICAgICAgICogZG9tL0RPTVN0cmluZ0xpc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NU3RyaW5nTGlzdDo6c29ydCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbGl6ZWRUaXRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpzaG91bGRJbmhlcml0U2VjdXJpdHlPcmlnaW5Gcm9tT3duZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6bWVzc2FnZVNvdXJjZUZvcldURkxvZ0NoYW5uZWwpOgorICAgICAgICAqIGVkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ2hhcmFjdGVy
c1JlcGxhY2luZ0VudGl0aWVzSW50ZXJuYWwpOgorICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdp
bkFjY2Vzc0NvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZXNzQ29udHJv
bFByZWZsaWdodFJlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9IaXN0b3J5Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6Y3VycmVudEl0ZW1TaG91
bGRCZVJlcGxhY2VkIGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2UuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGF0aFdhbGtlci5oOgorICAgICAgICAqIHRlc3Rpbmcv
anMvV2ViQ29yZVRlc3RTdXBwb3J0Lmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRl
cnMgY29uc3QpOgorCiAyMDE4LTAzLTI4ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5j
b20+CiAKICAgICAgICAgW1dlYiBBbmltYXRpb25zXSBDb21wYXJpbmcgdHdvIG1hdGNoaW5nIEZy
YW1lc1RpbWluZ0Z1bmN0aW9uIG9iamVjdHMgZmFpbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAppbmRleCBjNDBjZGQwLi5hMDQwYmVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCkBAIC0yMDEsNyAr
MjAxLDcgQEAgRmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6SXRlcmF0b3IoRmV0Y2hIZWFkZXJzJiBo
ZWFkZXJzKQogICAgIG1fa2V5cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGhlYWRlcnMubV9oZWFk
ZXJzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBoZWFkZXIgOiBoZWFkZXJzLm1faGVhZGVycykK
ICAgICAgICAgbV9rZXlzLnVuY2hlY2tlZEFwcGVuZChoZWFkZXIua2V5LmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCkpOwotICAgIHN0ZDo6c29ydChtX2tleXMuYmVnaW4oKSwgbV9rZXlzLmVuZCgp
LCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7CisgICAgc3RkOjpzb3J0KG1fa2V5cy5i
ZWdpbigpLCBtX2tleXMuZW5kKCksIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuPFN0cmlu
ZywgU3RyaW5nPik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCBiNTEzNzA1Li42YTM4NTNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0zMTIsNyArMzEy
LDcgQEAgVmVjdG9yPEF0b21pY1N0cmluZz4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpIGNvbnN0CiAgICAgICAgIFN0cmluZyBuYW1lc1tudW1DU1NQcm9wZXJ0
aWVzXTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kp
CiAgICAgICAgICAgICBuYW1lc1tpXSA9IGdldEpTUHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENT
U1Byb3BlcnR5SUQ+KGZpcnN0Q1NTUHJvcGVydHkgKyBpKSk7Ci0gICAgICAgIHN0ZDo6c29ydCgm
bmFtZXNbMF0sICZuYW1lc1tudW1DU1NQcm9wZXJ0aWVzXSwgV1RGOjpjb2RlUG9pbnRDb21wYXJl
TGVzc1RoYW4pOworICAgICAgICBzdGQ6OnNvcnQoJm5hbWVzWzBdLCAmbmFtZXNbbnVtQ1NTUHJv
cGVydGllc10sIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuPFN0cmluZywgU3RyaW5nPik7
CiAgICAgICAgIGF1dG8qIGlkZW50aWZpZXJzID0gbmV3IEF0b21pY1N0cmluZ1tudW1DU1NQcm9w
ZXJ0aWVzXTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyAr
K2kpCiAgICAgICAgICAgICBpZGVudGlmaWVyc1tpXSA9IG5hbWVzW2ldOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFyaWFibGVEYXRhLmNwcAppbmRleCA5OGM5ZDA5Li44ZjQ3NTJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFyaWFibGVEYXRhLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgQ1NTVmFy
aWFibGVEYXRhOjp1cGRhdGVUb2tlbnMoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogY3VycmVudE9mZnNldCA9IG1fYmFja2luZ1N0
cmluZy5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogY3VycmVudE9mZnNldCA9IFdURjo6Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPihtX2JhY2tp
bmdTdHJpbmcpOwogICAgIGZvciAoY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuIDogcmFuZ2Up
IHsKICAgICAgICAgaWYgKHRva2VuLmhhc1N0cmluZ0JhY2tpbmcoKSkgewogICAgICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gdG9rZW4udmFsdWUoKS5sZW5ndGgoKTsKQEAgLTUwLDcgKzUwLDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCBDU1NWYXJpYWJsZURhdGE6
OnVwZGF0ZVRva2Vucyhjb25zdCBDU1NQYXIKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBt
X3Rva2Vucy5hcHBlbmQodG9rZW4pOwogICAgIH0KLSAgICBBU1NFUlQoY3VycmVudE9mZnNldCA9
PSBtX2JhY2tpbmdTdHJpbmcuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgbV9iYWNraW5n
U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoY3VycmVudE9mZnNldCA9PSBXVEY6OmNoYXJh
Y3RlcnM8Q2hhcmFjdGVyVHlwZT4obV9iYWNraW5nU3RyaW5nKSArIG1fYmFja2luZ1N0cmluZy5s
ZW5ndGgoKSk7CiB9CiAKIGJvb2wgQ1NTVmFyaWFibGVEYXRhOjpvcGVyYXRvcj09KGNvbnN0IENT
U1ZhcmlhYmxlRGF0YSYgb3RoZXIpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvbWFrZXByb3AucGwgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKaW5kZXggMTM4
Mzg1My4uZDA4Yjc2NSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbApAQCAtNDE1LDE0ICs0MTUsMTAg
QEAgcHJpbnQgSEVBREVSIDw8ICJFT0YiOwogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KIAotbmFtZXNwYWNlIFdURiB7Ci1j
bGFzcyBBdG9taWNTdHJpbmc7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogZW51bSBDU1NQcm9wZXJ0eUlEIDogdWludDE2X3QgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0
cmluZ0xpc3QuY3BwCmluZGV4IDg4MjZiOTMuLjAzZjNlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9N
U3RyaW5nTGlzdC5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBET01TdHJpbmdMaXN0Ojpjb250
YWlucyhjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QKIAogdm9pZCBET01TdHJpbmdMaXN0Ojpz
b3J0KCkKIHsKLSAgICBzdGQ6OnNvcnQobV9zdHJpbmdzLmJlZ2luKCksIG1fc3RyaW5ncy5lbmQo
KSwgV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4pOworICAgIHN0ZDo6c29ydChtX3N0cmlu
Z3MuYmVnaW4oKSwgbV9zdHJpbmdzLmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhh
bjxTdHJpbmcsIFN0cmluZz4pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCA3ZmRlOWMxLi5mN2NhYjUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVuCiAgICAg
Ly8gYW5kIGtlZXBzIGFyb3VuZCBhIG5ldyBjb3B5LCBhbmQgaXQncyBldmVuIHRoZSBsZXNzIG9w
dGltYWwgdHlwZSBvZiBTdHJpbmdJbXBsIHdpdGggYSBzZXBhcmF0ZSBidWZmZXIuCiAgICAgLy8g
Q291bGQgcHJvYmFibHkganVzdCB1c2UgU3RyaW5nQnVpbGRlciBpbnN0ZWFkLgogCi0gICAgYXV0
byogY2hhcmFjdGVycyA9IHRpdGxlLmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKKyAgICBh
dXRvKiBjaGFyYWN0ZXJzID0gV1RGOjpjaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KHRpdGxlKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aXRsZS5sZW5ndGgoKTsKIAogICAgIFN0cmluZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIgeyBsZW5ndGggfTsKQEAgLTU0OTEsNyArNTQ5MSw3IEBA
IHN0YXRpYyBib29sIHNob3VsZEluaGVyaXRTZWN1cml0eU9yaWdpbkZyb21Pd25lcihjb25zdCBV
UkwmIHVybCkKICAgICAvLwogICAgIC8vIE5vdGU6IFdlIGdlbmVyYWxpemUgdGhpcyB0byBpbnZh
bGlkIFVSTHMgYmVjYXVzZSB3ZSB0cmVhdCBzdWNoIFVSTHMgYXMgYWJvdXQ6YmxhbmsuCiAgICAg
Ly8KLSAgICByZXR1cm4gdXJsLmlzRW1wdHkoKSB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVy
bC5zdHJpbmcoKSwgYmxhbmtVUkwoKSkgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
dXJsLnN0cmluZygpLCAiYWJvdXQ6c3JjZG9jIik7CisgICAgcmV0dXJuIHVybC5pc0VtcHR5KCkg
fHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwuc3RyaW5nKCksIGJsYW5rVVJMKCkuc3RyaW5n
KCkpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHVybC5zdHJpbmcoKSwgImFib3V0
OnNyY2RvYyIpOwogfQogCiB2b2lkIERvY3VtZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KCkKQEAg
LTc3MTYsMTAgKzc3MTYsMTAgQEAgc3RhdGljIE1lc3NhZ2VTb3VyY2UgbWVzc2FnZVNvdXJjZUZv
cldURkxvZ0NoYW5uZWwoY29uc3QgV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCkKICAgICBzdGF0aWMg
Y29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtZWRpYUNoYW5uZWwgPSBNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgibWVkaWEiKTsKICAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiB3ZWJydGNDaGFubmVsID0gTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIndlYnJ0YyIpOwog
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobWVkaWFDaGFubmVsLCBjaGFubmVsLm5h
bWUpKQorICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG1lZGlhQ2hhbm5lbC5nZXQoKSwg
Y2hhbm5lbC5uYW1lKSkKICAgICAgICAgcmV0dXJuIE1lc3NhZ2VTb3VyY2U6Ok1lZGlhOwogCi0g
ICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uod2VicnRjQ2hhbm5lbCwgY2hhbm5lbC5uYW1l
KSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh3ZWJydGNDaGFubmVsLmdldCgpLCBj
aGFubmVsLm5hbWUpKQogICAgICAgICByZXR1cm4gTWVzc2FnZVNvdXJjZTo6V2ViUlRDOwogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3Vw
QWNjdW11bGF0b3IuY3BwCmluZGV4IDkwNjk2N2YuLjE4OGMxY2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRp
YyBjb25zdCB1aW50OF90IGVudGl0eU1hcFttYXhpbXVtRXNjYXBlZGVudGl0eUNoYXJhY3RlciAr
IDFdID0gewogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRpYyBpbmxpbmUg
dm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXNJbnRlcm5hbChTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgc291cmNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewotICAgIGNvbnN0IENoYXJhY3Rl
clR5cGUqIHRleHQgPSBzb3VyY2UuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgb2Zmc2V0
OworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQgPSBXVEY6OmNoYXJhY3RlcnM8Q2hhcmFj
dGVyVHlwZT4oc291cmNlKSArIG9mZnNldDsKIAogICAgIHNpemVfdCBwb3NpdGlvbkFmdGVyTGFz
dEVudGl0eSA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJv
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNw
cAppbmRleCBmMTg1OTg3Li5kZGFmY2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcApAQCAtODksNyArODksNyBAQCBSZXNvdXJj
ZVJlcXVlc3QgY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsaWdodFJlcXVlc3QoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZQogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlckZpZWxkIDog
cmVxdWVzdEhlYWRlckZpZWxkcy51bmNvbW1vbkhlYWRlcnMoKSkKICAgICAgICAgICAgIHVuc2Fm
ZUhlYWRlcnMuYXBwZW5kKGhlYWRlckZpZWxkLmtleS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
KTsKIAotICAgICAgICBzdGQ6OnNvcnQodW5zYWZlSGVhZGVycy5iZWdpbigpLCB1bnNhZmVIZWFk
ZXJzLmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7CisgICAgICAgIHN0ZDo6
c29ydCh1bnNhZmVIZWFkZXJzLmJlZ2luKCksIHVuc2FmZUhlYWRlcnMuZW5kKCksIFdURjo6Y29k
ZVBvaW50Q29tcGFyZUxlc3NUaGFuPFN0cmluZywgU3RyaW5nPik7CiAKICAgICAgICAgU3RyaW5n
QnVpbGRlciBoZWFkZXJCdWZmZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9IaXN0b3J5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNv
bnRyb2xsZXIuY3BwCmluZGV4IGVhMjU2N2IuLmExY2Q5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcApAQCAtNjE1LDcgKzYxNSw3IEBAIGJvb2wgSGlz
dG9yeUNvbnRyb2xsZXI6OmN1cnJlbnRJdGVtU2hvdWxkQmVSZXBsYWNlZCgpIGNvbnN0CiAgICAg
Ly8gICJJZiB0aGUgYnJvd3NpbmcgY29udGV4dCdzIHNlc3Npb24gaGlzdG9yeSBjb250YWlucyBv
bmx5IG9uZSBEb2N1bWVudCwKICAgICAvLyAgIGFuZCB0aGF0IHdhcyB0aGUgYWJvdXQ6Ymxhbmsg
RG9jdW1lbnQgY3JlYXRlZCB3aGVuIHRoZSBicm93c2luZyBjb250ZXh0CiAgICAgLy8gICB3YXMg
Y3JlYXRlZCwgdGhlbiB0aGUgbmF2aWdhdGlvbiBtdXN0IGJlIGRvbmUgd2l0aCByZXBsYWNlbWVu
dCBlbmFibGVkLiIKLSAgICByZXR1cm4gbV9jdXJyZW50SXRlbSAmJiAhbV9wcmV2aW91c0l0ZW0g
JiYgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShtX2N1cnJlbnRJdGVtLT51cmxTdHJpbmcoKSwgYmxh
bmtVUkwoKSk7CisgICAgcmV0dXJuIG1fY3VycmVudEl0ZW0gJiYgIW1fcHJldmlvdXNJdGVtICYm
IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobV9jdXJyZW50SXRlbS0+dXJsU3RyaW5nKCksIGJsYW5r
VVJMKCkuc3RyaW5nKCkpOwogfQogCiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpjbGVhclByZXZp
b3VzSXRlbSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcAppbmRleCAzYzhmYjUzLi5mMTIwOWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKGNvbnN0IFN0
cmluZyYgZG9tYWluSQogICAgIGF1dG8gb3BlbmVyUHJpbWFyeURvbWFpbiA9IHByaW1hcnlEb21h
aW4ob3BlbmVyVXJsKTsKICAgICBpZiAoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9w
ZW5lclByaW1hcnlEb21haW4KICAgICAgICAgJiYgIW9wZW5lckRvY3VtZW50Lmhhc1JlcXVlc3Rl
ZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcykKLSAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2Uob3Bl
bmVyVXJsLnN0cmluZygpLCBibGFua1VSTCgpKSkgeworICAgICAgICAmJiAhZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShvcGVuZXJVcmwuc3RyaW5nKCksIGJsYW5rVVJMKCkuc3RyaW5nKCkpKSB7CiAg
ICAgICAgIG1fcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrKGRvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2Vzcywgb3BlbmVyUGFnZUlELCBvcGVuZXJQcmltYXJ5RG9tYWluLCBp
c1RyaWdnZXJlZEJ5VXNlckdlc3R1cmUpOwogICAgICAgICAvLyBSZW1lbWJlciB1c2VyIGludGVy
YWN0aW9uLWJhc2VkIHJlcXVlc3RzIHNpbmNlIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSByZXBlYXRl
ZC4KICAgICAgICAgaWYgKGlzVHJpZ2dlcmVkQnlVc2VyR2VzdHVyZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgK
aW5kZXggNDEwNWVmNi4uYzExOGU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLmgKQEAgLTI3LDEyICsyNyw5
IEBACiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURF
T19QUkVTRU5UQVRJT05fTU9ERSkpCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGltZVJhbmdlczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9EZXZpY2UuaAppbmRleCAzNDgwOTE5Li4wODBjZTJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL0RldmljZS5oCkBAIC0yOSwxMCArMjksNyBAQAogI2lmIFBMQVRGT1JNKElPUykK
IAogI2luY2x1ZGUgPHBhbC9zcGkvaW9zL01vYmlsZUdlc3RhbHRTUEkuaD4KLQotbmFtZXNwYWNl
IFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCmluZGV4IDlmY2Q3YjQuLjVl
Nzk2ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Q
bGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPG9iamMvb2JqYy5o
PgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAt
NDUsMTAgKzQ2LDYgQEAgT0JKQ19DTEFTUyBVSVZpZXdDb250cm9sbGVyOwogT0JKQ19DTEFTUyBV
SVdpbmRvdzsKIE9CSkNfQ0xBU1MgVUlWaWV3OwogCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFN0
cmluZzsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFBs
YXliYWNrU2Vzc2lvbk1vZGVsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAppbmRleCBlMTFmYzI1Li5h
YzE2Y2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmgiCiAjaW5jbHVkZSAiVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaCIKICNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTEsMTAgKzUyLDYgQEAgT0JKQ19D
TEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyOwogT0JKQ19DTEFTUyBXZWJBVlBsYXllclZp
ZXdDb250cm9sbGVyRGVsZWdhdGU7CiBPQkpDX0NMQVNTIE5TRXJyb3I7CiAKLW5hbWVzcGFjZSBX
VEYgewotY2xhc3MgU3RyaW5nOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRS
ZWN0OwogY2xhc3MgRmxvYXRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BhdGhXYWxrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXRoV2Fs
a2VyLmgKaW5kZXggMjE5YzgzNy4uZmI4YTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BhdGhXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUGF0aFdhbGtlci5oCkBAIC0yNCwxMiArMjQsOSBAQAogICovCiAKICNpbmNsdWRlIDxXaW5k
b3dzLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KIAotbmFtZXNwYWNlIFdURiB7Ci0gICAgY2xhc3MgU3RyaW5nOwotfQotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhdGhXYWxrZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgKaW5kZXggYTI2YjJmNy4uOTBmZmY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oCkBAIC0y
Niw2ICsyNiw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7CiB0
eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1N0cmluZyogSlNTdHJpbmdSZWY7CiB0eXBlZGVmIHN0cnVj
dCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsKQEAgLTM2LDEwICszOCw2IEBAIHR5cGVkZWYg
c3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwogI2RlZmluZSBURVNUX1NVUFBPUlRf
RVhQT1JUCiAjZW5kaWYKIAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZyYW1lOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAKaW5kZXggOTFmYmI3Mi4uODdlMzhmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCkBAIC04MzQsNyArODM0LDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0
OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdAogICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJcclxuIik7CiAgICAgICAgICAgICBoZWFkZXJzLnVuY2hlY2tlZEFw
cGVuZChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgICAgICB9Ci0gICAgICAgIHN0ZDo6
c29ydChoZWFkZXJzLmJlZ2luKCksIGhlYWRlcnMuZW5kKCksIFdURjo6Y29kZVBvaW50Q29tcGFy
ZUxlc3NUaGFuKTsKKyAgICAgICAgc3RkOjpzb3J0KGhlYWRlcnMuYmVnaW4oKSwgaGVhZGVycy5l
bmQoKSwgV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW48U3RyaW5nLCBTdHJpbmc+KTsKIAog
ICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIGZvciAoYXV0byYg
aGVhZGVyIDogaGVhZGVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGYyMGJmMi4uY2JkOTA3NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMDEgQEAKKzIwMTgtMDMtMjkgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBw
bGUuY29tPgorCisgICAgICAgIE1ha2UgV1RGOjpTdHJpbmcgcG9pc29uYWJsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MTY0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8zOTAyMDY3Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNYWtlIFdURjo6U3RyaW5nIHBvaXNvbmFibGUKKworICAgICAgICBX
ZSB3YW50IHRvIGJlIGFibGUgdG8gcG9pc29uIFdURjo6U3RyaW5nIHRoZSBzYW1lIHdheSB3ZSBj
YW4gcG9pc29uIFJlZjw+LAorICAgICAgICBSZWZQdHI8PiwgV3JpdGVCYXJyaWVyPD4gYW5kIGZy
aWVuZHMgdXNpbmcgd3RmL1BvaXNvbmVkLmguIEluIHRoZW9yeSB0aGlzIGlzCisgICAgICAgIHZl
cnkgc2ltcGxlOiBTdHJpbmcgb25seSBob2xkcyBhIFJlZlB0cjxTdHJpbmdJbXBsPiwgYW5kIGFs
bCB3ZSBoYXZlIHRvIGRvIGlzCisgICAgICAgIHBhc3MgYSBwb2lzb25lZCBwb2ludGVyIHRyYWl0
IHRvIHRoZSBjb250YWluZWQgUmVmUHRyIGFuZCBjYWxsIGl0IGEgZGF5LiBJbgorICAgICAgICBw
cmFjdGljZSB3ZSBoYXZlIHRoaXMgcGF0Y2guCisKKyAgICAgICAgTWFrZSBXVEYgU3RyaW5nIHRl
bXBsYXRlZCwgd2l0aCBEdW1wUHRyVHJhaXRzPFN0cmluZ0ltcGw+IGFzIHRoZSBkZWZhdWx0LiBU
aGlzCisgICAgICAgIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIG5vdGhpbmcsIGJ1dCBhbGxvd3MgcG9p
c29uaW5nIHRvIHRyaWNrbGUgdG8gU3RyaW5nJ3MKKyAgICAgICAgUmVmUHRyLiBJbiB0dXJuIHRo
aXMgcmVxdWlyZXMgdXBkYXRpbmcgYWxsIGZvcndhcmQgZGVjbGFyYXRpb25zIG9mIFN0cmluZy4g
VGhpcworICAgICAgICBpcyBlYXNpZXIgdG8gZG8gaW4gRm9yd2FyZC5oICh3aGljaCBjb250YWlu
cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlCisgICAgICAgIHRlbXBsYXRlKSwgYW5kIHRvIHVw
ZGF0ZSBhbGwgY29kZSB3aGljaCBmb3dhcmQtZGVjbGFyZXMgU3RyaW5nIHRvIGluc3RlYWQKKyAg
ICAgICAgaW5jbHVkZSBGb3J3YXJkLmguCisKKyAgICAgICAgQWRkIGEgcHJpdmF0ZSBub24tdGVt
cGxhdGVkIGJhc2UgY2xhc3MgdG8gU3RyaW5nLCBCYXNpY1N0cmluZywgc28gdGhhdCBpdHMKKyAg
ICAgICAgdGVtcGxhdGVkIG1ldGhvZHMgY2FuIHNpbXBseSBmb3J3YXJkIHRvIHRoZSBiYXNlLCB3
aGljaCBpcyBpbXBsZW1lbnRlZCBpbiBhIC5jcHAKKyAgICAgICAgZmlsZS4gT3RoZXJ3aXNlIHdl
J2QgbmVlZCB0byBleHBvc2UgdGhlIFN0cmluZyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgaGVhZGVy
CisgICAgICAgIGJlY2F1c2UgU3RyaW5nIGlzIG5vdyB0ZW1wbGF0ZWQuIFRoaXMgaXMgc29tZXdo
YXQgc2ltaWxhciB0byB3aGF0IHN0ZDo6c3RyaW5nCisgICAgICAgIGRvZXMgd2l0aCBzdGQ6OmJh
c2ljX3N0cmluZyAoaW4gYSB3YXkgdGhlIHBvaW50ZXIgdHJhaXRzIGFyZSBraW5kIG9mIGxpa2UK
KyAgICAgICAgc3RkOjpjaGFyX3RyYWl0cykuCisKKyAgICAgICAgQWRkIGEgcHVibGljIG5vbi10
ZW1wbGF0ZWQgYmFzZSBjbGFzcyB0byBTdHJpbmcsIFN0cmluZ01ha2VyLCB3aGljaCBob2xkcyBh
bGwKKyAgICAgICAgdGhlIHN0YXRpYyBtZXRob2RzIHdoaWNoIGNhbiBjcmVhdGUgYSBTdHJpbmcu
IFRoaXMgYWxzbyBhbGxvd3MgaW1wbGVtZW50aW5nCisgICAgICAgIHRoaW5ncyBpbiBhIC5jcHAg
ZmlsZS4KKworICAgICAgICBOZWl0aGVyIGJhc2UgaGFzIGFueSBkYXRhIG1lbWJlcnMuCisKKyAg
ICAgICAgVGhlIGNoYXJhY3RlcnMoKSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gaXMgbm93IGEg
ZnJlZS1mdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUKKyAgICAgICAgU3RyaW5nIGJ5IGNvbnN0IHJl
ZmVyZW5jZS4gVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIG1lbWJlciB0ZW1wbGF0ZXMgY2FuJ3Qg
YmUKKyAgICAgICAgc3BlY2lhbGl6ZWQgd2l0aG91dCBmdWxseSBzcGVjaWFsaXppbmcgdGhlIGNs
YXNzIGFzIHdlbGwuIFRoaXMgYWxzbyByZXF1aXJlcworICAgICAgICBzb21lIGlzX3NhbWUgbWFn
aWMgdG8gbWF0Y2ggTENoYXIgLyBVQ2hhciBjb3JyZWN0bHkuCisKKyAgICAgICAgSSBtYWRlIHNv
bWUgZnVuY3Rpb25zIEp1c3QgV29yayB3aXRoIHBvaXNvbmVkIHN0cmluZ3MsIGFuZCBvdGhlcnMg
bm90IChlLmcuIGJ5CisgICAgICAgIHVzaW5nIFN0cmluZyBpbiBzb21lIHBsYWNlcywgb3IgYnkg
bm90IGhhdmluZyBhbiBleHRyYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZm9yCisgICAgICAgIHRoZSBW
ZWN0b3I8U3RyaW5nPiB0eXBlIHJldHVybmVkKS4gSWYgdGhpcyBpcyBldmVyIGFuIGlzc3VlIGJl
Y2F1c2Ugd2Ugd2FudCB0bworICAgICAgICBtaWdyYXRlIHN0cmluZ3MgZnJvbSBvbmUgcG9pc29u
IHRvIGFub3RoZXIgdGhlbiB3ZSBjYW4gYWRkIHNpbXBsZSBoZWxwZXJzIG9yIGFkZAorICAgICAg
ICBhIHRlbXBsYXRlIHBhcmFtZXRlciB0byB0aGUgcmVsZXZhbnQgY29kZS4gSSdtIHdhcnkgb2Yg
bWFraW5nIHRoZSBjb2RlIG1vcmUKKyAgICAgICAgY29tcGxleCBpZiB3ZSBkb24ndCB0cnkgdG8g
bWl4IHBvaXNvbnMuIFRoZSByZWFzb24gSSB0aGluayB0aGlzIGlzIGNvcnJlY3QgaXMKKyAgICAg
ICAgYmVjYXVzZSB3ZSBvbmx5IGV2ZXIgd2FudCB0byBwb2lzb24gU3RyaW5nIHdoZW4gc3Rvcmlu
ZyB0aGUgc3RyaW5nIGluIGEgY2xhc3MKKyAgICAgICAgd2hpY2ggaXMgYXR0YWNrZXItY29udHJv
bGxhYmxlLiBXaGVuIGZ1bmN0aW9ucyBwYXNzIHN0cmluZ3MgYXJvdW5kIGFuZCBzdG9yZQorICAg
ICAgICB0aGVtIG9uIHRoZSBzdGFjayB3ZSBtb3N0bHkganVzdCB3YW50IFN0cmluZywgbm8gcG9p
c29uIG5lZWRlZC4KKworICAgICAgICBJbmxpbmUgYSBidW5jaCBvZiBmdW5jdGlvbnMgbWFya2Vk
IGFzIG5lZWRpbmcgaW5saW5pbmcgZnJvbSBhIEZJWE1FIGluCisgICAgICAgIFdURlN0cmluZy5j
cHAgdG8gdGhlIGhlYWRlci4gVGhleSB3ZXJlIGFsbCBvbmUtbGluZXJzIHdoaWNoIGNoZWNrIGZv
ciBudWxsCisgICAgICAgIG1faW1wbCwgYW5kIHRoZW4gZm9yd2FyZCB0byBTdHJpbmdJbXBsLgor
CisgICAgICAgIFJlbW92ZSBDT01QSUxFUl9TVVBQT1JUUyhDWFhfUkVGRVJFTkNFX1FVQUxJRklF
RF9GVU5DVElPTlMpLCBpdCdzIHN1cHBvcnRlZCBieQorICAgICAgICBhbGwgY29tcGlsZXJzIFdl
YktpdCBzdXBwb3J0cyAoaXQncyBhIEMrKzExIGZlYXR1cmUsICpkZXRlY3Rpb24qIG9mIGl0IHdp
dGgKKyAgICAgICAgX19oYXNfZXh0ZW5zaW9uIHdhcyBhZGRlZCB0byBjbGFuZyBvbiBNYXkgMTN0
aCAyMDExLCBhbmQgVlMyMDE1IC8gR0NDIHN1cHBvcnQKKyAgICAgICAgaXQpLgorCisgICAgICAg
IE1hcmsgYSBidW5jaCBvZiBTdHJpbmdJbXBsIGFzIGNvbnN0LCBhbmQgb3RoZXJzIG5vdC4gVGhp
cyBjb25zdCBidXNpbmVzcyB3aXRoCisgICAgICAgIFN0cmluZ0ltcGwgaXMgcmVhbGx5IGEgbWVz
cyAoYXMgdGhlIEZJWE1FIGluIHRoZXJlIGF0dGVzdHMpIQorCisgICAgICAgIFJlbW92ZSBXVEZf
RVhQT1JUX1NUUklOR19BUEkgYXMgcmVxdWVzdGVkIGJ5IGEgRklYTUUsIGFuZCB1c2UgV1RGX0VY
UE9SVF9QUklWQVRFCisgICAgICAgIGluc3RlYWQuIE5vdGUgdGhhdCBtYW55IG9mIHRoZSBmdW5j
dGlvbnMgd2hpY2ggdXNlZCB0byBiZSBleHBvcnRlZCBhcmUgbm93CisgICAgICAgIHNpbXBsZSBp
bmxpbmUgZnVuY3Rpb25zIHdoaWNoIHVucG9pc29uIGFuZCBmb3J3YXJkIHRvIGFuIGltcGxlbWVu
dGF0aW9uLiBUaGV5CisgICAgICAgIGRvbid0IG5lZWQgdG8gYmUgZXhwb3J0ZWQgYW55bW9yZSwg
YnV0IHdoYXQgdGhleSBmb3J3YXJkIHRvIGRvZXMuCisKKyAgICAgICAgSW50cm9kdWNlIFdURl9M
QVpZX0lOU1RBTlRJQVRFIHRvIGZvcndhcmQtZGVjbGFyZSBmdW5jdGlvbnMgd2hpY2gganVzdCBw
YXNzCisgICAgICAgIHBhcmFtZXRlcnMgdG8gYW5vdGhlciBmdW5jdGlvbiwgYW5kIHJldHVybiB3
aGF0ZXZlciB0aGF0IG90aGVyIGZ1bmN0aW9uCisgICAgICAgIHJldHVybmVkLCB3aXRob3V0IGhh
dmluZyB0byBpbmNsdWRlIHRoZSByZXR1cm4ncyAvIHBhcmFtZXRlcnMnIHR5cGUgaGVhZGVyLiBU
aGlzCisgICAgICAgIG1lYW5zIHRoYXQgV1RGU3RyaW5nLmggZG9lc24ndCBuZWVkIHRvIGluY2x1
ZGUgUmV0YWluUHRyLmggYW5kIENTdHJpbmcuaC4KKworICAgICAgICBtZXNzYWdlcy5weTogQ2hh
bmdlIFdlYktpdCBnZW5lcmF0ZWQgaGVhZGVycyBzbyB0aGF0IHRoZXkgcHJvcGVybHkgaW5jbHVk
ZQorICAgICAgICBGb3J3YXJkLmggaW5zdGVhZCBvZiBmb3J3YXJkLWRlY2xhcmluZyBTdHJpbmcu
CisKKyAgICAgICAgQWRkIGEgYGNoYXJhY3RlckF0YCBtZXRob2QgdG8gU3RyaW5nSW1wbCB0byBt
YXRjaCB0aGUgb25lIGluIFN0cmluZyBhbmQgbWFrZSBpdAorICAgICAgICBlYXNpZXIgdG8gbWln
cmF0ZS4gSXQgYWxyZWFkeSBoYXMgYGF0YCwgd2hpY2ggYXNzZXJ0cyBvbiBvdmVyYXNzZXJ0cyBv
biBvdmVyZmxvdworICAgICAgICBpbnN0ZWFkIG9mIHJldHVybmluZyAwIChhcyBTdHJpbmcncyBg
Y2hhcmFjdGVyQXRgIGRvZXMpLgorCisgICAgICAgIEFsbG93IGJ1aWxkaW5nIGFuZCBjb25jYXRl
bmF0aW5nIHN0cmluZ3Mgd2l0aCBTdHJpbmdJbXBsKiwgd2hpY2ggY29tZXMgaW4gaGFuZHkKKyAg
ICAgICAgd2hlbiB3ZSBwYXNzIHRoZW0gYXJvdW5kIGEgYml0IG1vcmUgdG8gYXZvaWQgdGhlIHBv
aXNvbmVkIG1lbWJlcnMuCisKKyAgICAgICAgT3ZlcmFsbCB0aGlzIHBhdGNoIHNob3VsZCBkbyBl
eGFjdGx5IG5vdGhpbmcuIEFsbCBjb2RlIHN0aWxsIHVzZXMgdW5wb2lzb25lZAorICAgICAgICBz
dHJpbmdzLCBhbmQgSSBoYXZlIGEgZm9sbG93LXVwIHBhdGNoIHdoaWNoIHBvaXNvbnMgc2VsZWN0
IHN0cmluZ3MgaW4gSlNDLiBJJ2xsCisgICAgICAgIHBvc3QgdGhhdCBwYXRjaCBzZXBhcmF0ZWx5
IGFzIGl0J3MgcXVpdGUgYmlnIGFuZCBJIHdhbnQgdG8gaXNvbGF0ZSBhbnkKKyAgICAgICAgcmVn
cmVzc2lvbnMgSSBtYXkgaW50cm9kdWNlLgorCisgICAgICAgIEkndmUgcnVuIGEgYnVuY2ggb2Yg
dGVzdHMgYW5kIHRoaXMgbG9va3MgcGVyZiBuZXV0cmFsLCBhbmQgc28gZG9lcyBteSBKU0Mgc3Ry
aW5nCisgICAgICAgIHBvaXNvbmluZyBwYXRjaCBzbyBmYXIuIEZyb20tc2NyYXRjaCBidWlsZCB0
aW1lIGZvciBhbGwgb2YgU2FmYXJpIHNlZW1zIHRvCisgICAgICAgICpkZWNyZWFzZSogYnkgMTUl
IG9uIG15IE1CUCwgd2hpY2ggd2FzIHN1cnByaXNpbmcsIHNvIEknbSBndWVzc2luZyB3ZSBtaWdo
dCBoYXZlCisgICAgICAgIGxhcmdlIHZhcmlhbmNlLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXQvTGVnYWN5TWVzc2FnZXMtZXhwZWN0ZWQuaDoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9N
ZXNzYWdlcy1leHBlY3RlZC5oOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L01lc3NhZ2VzU3Vw
ZXJjbGFzcy1leHBlY3RlZC5oOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
OgorCiAyMDE4LTAzLTI4ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNv
bT4KIAogICAgICAgICBGYWlscyB0byBidWlsZCB3ZWJraXRndGsrIGFmdGVyIGdpdC1zdm4taWQ6
IGh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVua0AyMjk4NzcgMjY4
ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L0xlZ2FjeU1lc3NhZ2VzLWV4cGVjdGVkLmggYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L0xlZ2FjeU1lc3NhZ2VzLWV4cGVjdGVkLmgKaW5kZXggMmEwOTk0
Yy4uZjA1N2FjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9MZWdh
Y3lNZXNzYWdlcy1leHBlY3RlZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
TGVnYWN5TWVzc2FnZXMtZXhwZWN0ZWQuaApAQCAtNDQsMTAgKzQ0LDYgQEAgbmFtZXNwYWNlIElQ
QyB7CiAgICAgY2xhc3MgRHVtbXlUeXBlOwogfQogCi1uYW1lc3BhY2UgV1RGIHsKLSAgICBjbGFz
cyBTdHJpbmc7Ci19Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIGNsYXNzIFdlYlRvdWNoRXZl
bnQ7CiAgICAgY2xhc3MgV2ViUHJlZmVyZW5jZXNTdG9yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvTWVzc2FnZXMtZXhwZWN0ZWQuaCBiL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvTWVzc2FnZXMtZXhwZWN0ZWQuaAppbmRleCAyYTA5OTRjLi5mMDU3YWNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L01lc3NhZ2VzLWV4cGVj
dGVkLmgKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9NZXNzYWdlcy1leHBlY3Rl
ZC5oCkBAIC00NCwxMCArNDQsNiBAQCBuYW1lc3BhY2UgSVBDIHsKICAgICBjbGFzcyBEdW1teVR5
cGU7CiB9CiAKLW5hbWVzcGFjZSBXVEYgewotICAgIGNsYXNzIFN0cmluZzsKLX0KLQogbmFtZXNw
YWNlIFdlYktpdCB7CiAgICAgY2xhc3MgV2ViVG91Y2hFdmVudDsKICAgICBjbGFzcyBXZWJQcmVm
ZXJlbmNlc1N0b3JlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9N
ZXNzYWdlc1N1cGVyY2xhc3MtZXhwZWN0ZWQuaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJr
aXQvTWVzc2FnZXNTdXBlcmNsYXNzLWV4cGVjdGVkLmgKaW5kZXggZjY1ODczYS4uYWVmZDAwOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9NZXNzYWdlc1N1cGVyY2xh
c3MtZXhwZWN0ZWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L01lc3NhZ2Vz
U3VwZXJjbGFzcy1leHBlY3RlZC5oCkBAIC0yNSwxMCArMjUsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICBjbGFz
cyBTdHJpbmc7Ci19CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIE1lc3Nh
Z2VzIHsKIG5hbWVzcGFjZSBXZWJQYWdlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CmluZGV4IDgyMDc4MGIuLmRlYWZkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMTcyLDYgKzE3Miw3IEBAIGRlZiBmb3J3YXJkX2RlY2xh
cmF0aW9uc19hbmRfaGVhZGVycyhyZWNlaXZlcik6CiAKICAgICBoZWFkZXJzID0gc2V0KFsKICAg
ICAgICAgJyJBcmd1bWVudENvZGVycy5oIicsCisgICAgICAgICc8d3RmL0ZvcndhcmQuaD4nLAog
ICAgIF0pCiAKICAgICBub25fdGVtcGxhdGVfd3RmX3R5cGVzID0gZnJvemVuc2V0KFsKQEAgLTE5
MSw2ICsxOTIsNyBAQCBkZWYgZm9yd2FyZF9kZWNsYXJhdGlvbnNfYW5kX2hlYWRlcnMocmVjZWl2
ZXIpOgogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50SWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpTV1NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyJywKKyAgICAg
ICAgJ1N0cmluZycsCiAgICAgXSkKIAogICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVjZWl2ZXIuaXRl
cnBhcmFtZXRlcnMoKToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBhNDFkZGQ2Li43
MTE2ZjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTggQEAKKzIw
MTgtMDMtMjkgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIE1h
a2UgV1RGOjpTdHJpbmcgcG9pc29uYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MTY0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTAyMDY3
Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IFdURjo6U3RyaW5nIHBvaXNvbmFibGUKKworICAgICAgICBXZSB3YW50IHRvIGJlIGFibGUgdG8g
cG9pc29uIFdURjo6U3RyaW5nIHRoZSBzYW1lIHdheSB3ZSBjYW4gcG9pc29uIFJlZjw+LAorICAg
ICAgICBSZWZQdHI8PiwgV3JpdGVCYXJyaWVyPD4gYW5kIGZyaWVuZHMgdXNpbmcgd3RmL1BvaXNv
bmVkLmguIEluIHRoZW9yeSB0aGlzIGlzCisgICAgICAgIHZlcnkgc2ltcGxlOiBTdHJpbmcgb25s
eSBob2xkcyBhIFJlZlB0cjxTdHJpbmdJbXBsPiwgYW5kIGFsbCB3ZSBoYXZlIHRvIGRvIGlzCisg
ICAgICAgIHBhc3MgYSBwb2lzb25lZCBwb2ludGVyIHRyYWl0IHRvIHRoZSBjb250YWluZWQgUmVm
UHRyIGFuZCBjYWxsIGl0IGEgZGF5LiBJbgorICAgICAgICBwcmFjdGljZSB3ZSBoYXZlIHRoaXMg
cGF0Y2guCisKKyAgICAgICAgTWFrZSBXVEYgU3RyaW5nIHRlbXBsYXRlZCwgd2l0aCBEdW1wUHRy
VHJhaXRzPFN0cmluZ0ltcGw+IGFzIHRoZSBkZWZhdWx0LiBUaGlzCisgICAgICAgIGZ1bmN0aW9u
YWxseSBjaGFuZ2VzIG5vdGhpbmcsIGJ1dCBhbGxvd3MgcG9pc29uaW5nIHRvIHRyaWNrbGUgdG8g
U3RyaW5nJ3MKKyAgICAgICAgUmVmUHRyLiBJbiB0dXJuIHRoaXMgcmVxdWlyZXMgdXBkYXRpbmcg
YWxsIGZvcndhcmQgZGVjbGFyYXRpb25zIG9mIFN0cmluZy4gVGhpcworICAgICAgICBpcyBlYXNp
ZXIgdG8gZG8gaW4gRm9yd2FyZC5oICh3aGljaCBjb250YWlucyB0aGUgZGVmYXVsdCB2YWx1ZSBm
b3IgdGhlCisgICAgICAgIHRlbXBsYXRlKSwgYW5kIHRvIHVwZGF0ZSBhbGwgY29kZSB3aGljaCBm
b3dhcmQtZGVjbGFyZXMgU3RyaW5nIHRvIGluc3RlYWQKKyAgICAgICAgaW5jbHVkZSBGb3J3YXJk
LmguCisKKyAgICAgICAgQWRkIGEgcHJpdmF0ZSBub24tdGVtcGxhdGVkIGJhc2UgY2xhc3MgdG8g
U3RyaW5nLCBCYXNpY1N0cmluZywgc28gdGhhdCBpdHMKKyAgICAgICAgdGVtcGxhdGVkIG1ldGhv
ZHMgY2FuIHNpbXBseSBmb3J3YXJkIHRvIHRoZSBiYXNlLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBp
biBhIC5jcHAKKyAgICAgICAgZmlsZS4gT3RoZXJ3aXNlIHdlJ2QgbmVlZCB0byBleHBvc2UgdGhl
IFN0cmluZyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgaGVhZGVyCisgICAgICAgIGJlY2F1c2UgU3Ry
aW5nIGlzIG5vdyB0ZW1wbGF0ZWQuIFRoaXMgaXMgc29tZXdoYXQgc2ltaWxhciB0byB3aGF0IHN0
ZDo6c3RyaW5nCisgICAgICAgIGRvZXMgd2l0aCBzdGQ6OmJhc2ljX3N0cmluZyAoaW4gYSB3YXkg
dGhlIHBvaW50ZXIgdHJhaXRzIGFyZSBraW5kIG9mIGxpa2UKKyAgICAgICAgc3RkOjpjaGFyX3Ry
YWl0cykuCisKKyAgICAgICAgQWRkIGEgcHVibGljIG5vbi10ZW1wbGF0ZWQgYmFzZSBjbGFzcyB0
byBTdHJpbmcsIFN0cmluZ01ha2VyLCB3aGljaCBob2xkcyBhbGwKKyAgICAgICAgdGhlIHN0YXRp
YyBtZXRob2RzIHdoaWNoIGNhbiBjcmVhdGUgYSBTdHJpbmcuIFRoaXMgYWxzbyBhbGxvd3MgaW1w
bGVtZW50aW5nCisgICAgICAgIHRoaW5ncyBpbiBhIC5jcHAgZmlsZS4KKworICAgICAgICBOZWl0
aGVyIGJhc2UgaGFzIGFueSBkYXRhIG1lbWJlcnMuCisKKyAgICAgICAgVGhlIGNoYXJhY3RlcnMo
KSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gaXMgbm93IGEgZnJlZS1mdW5jdGlvbiB3aGljaCB0
YWtlcyB0aGUKKyAgICAgICAgU3RyaW5nIGJ5IGNvbnN0IHJlZmVyZW5jZS4gVGhpcyBpcyByZXF1
aXJlZCBiZWNhdXNlIG1lbWJlciB0ZW1wbGF0ZXMgY2FuJ3QgYmUKKyAgICAgICAgc3BlY2lhbGl6
ZWQgd2l0aG91dCBmdWxseSBzcGVjaWFsaXppbmcgdGhlIGNsYXNzIGFzIHdlbGwuIFRoaXMgYWxz
byByZXF1aXJlcworICAgICAgICBzb21lIGlzX3NhbWUgbWFnaWMgdG8gbWF0Y2ggTENoYXIgLyBV
Q2hhciBjb3JyZWN0bHkuCisKKyAgICAgICAgSSBtYWRlIHNvbWUgZnVuY3Rpb25zIEp1c3QgV29y
ayB3aXRoIHBvaXNvbmVkIHN0cmluZ3MsIGFuZCBvdGhlcnMgbm90IChlLmcuIGJ5CisgICAgICAg
IHVzaW5nIFN0cmluZyBpbiBzb21lIHBsYWNlcywgb3IgYnkgbm90IGhhdmluZyBhbiBleHRyYSB0
ZW1wbGF0ZSBwYXJhbWV0ZXIgZm9yCisgICAgICAgIHRoZSBWZWN0b3I8U3RyaW5nPiB0eXBlIHJl
dHVybmVkKS4gSWYgdGhpcyBpcyBldmVyIGFuIGlzc3VlIGJlY2F1c2Ugd2Ugd2FudCB0bworICAg
ICAgICBtaWdyYXRlIHN0cmluZ3MgZnJvbSBvbmUgcG9pc29uIHRvIGFub3RoZXIgdGhlbiB3ZSBj
YW4gYWRkIHNpbXBsZSBoZWxwZXJzIG9yIGFkZAorICAgICAgICBhIHRlbXBsYXRlIHBhcmFtZXRl
ciB0byB0aGUgcmVsZXZhbnQgY29kZS4gSSdtIHdhcnkgb2YgbWFraW5nIHRoZSBjb2RlIG1vcmUK
KyAgICAgICAgY29tcGxleCBpZiB3ZSBkb24ndCB0cnkgdG8gbWl4IHBvaXNvbnMuIFRoZSByZWFz
b24gSSB0aGluayB0aGlzIGlzIGNvcnJlY3QgaXMKKyAgICAgICAgYmVjYXVzZSB3ZSBvbmx5IGV2
ZXIgd2FudCB0byBwb2lzb24gU3RyaW5nIHdoZW4gc3RvcmluZyB0aGUgc3RyaW5nIGluIGEgY2xh
c3MKKyAgICAgICAgd2hpY2ggaXMgYXR0YWNrZXItY29udHJvbGxhYmxlLiBXaGVuIGZ1bmN0aW9u
cyBwYXNzIHN0cmluZ3MgYXJvdW5kIGFuZCBzdG9yZQorICAgICAgICB0aGVtIG9uIHRoZSBzdGFj
ayB3ZSBtb3N0bHkganVzdCB3YW50IFN0cmluZywgbm8gcG9pc29uIG5lZWRlZC4KKworICAgICAg
ICBJbmxpbmUgYSBidW5jaCBvZiBmdW5jdGlvbnMgbWFya2VkIGFzIG5lZWRpbmcgaW5saW5pbmcg
ZnJvbSBhIEZJWE1FIGluCisgICAgICAgIFdURlN0cmluZy5jcHAgdG8gdGhlIGhlYWRlci4gVGhl
eSB3ZXJlIGFsbCBvbmUtbGluZXJzIHdoaWNoIGNoZWNrIGZvciBudWxsCisgICAgICAgIG1faW1w
bCwgYW5kIHRoZW4gZm9yd2FyZCB0byBTdHJpbmdJbXBsLgorCisgICAgICAgIFJlbW92ZSBDT01Q
SUxFUl9TVVBQT1JUUyhDWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMpLCBpdCdzIHN1
cHBvcnRlZCBieQorICAgICAgICBhbGwgY29tcGlsZXJzIFdlYktpdCBzdXBwb3J0cyAoaXQncyBh
IEMrKzExIGZlYXR1cmUsICpkZXRlY3Rpb24qIG9mIGl0IHdpdGgKKyAgICAgICAgX19oYXNfZXh0
ZW5zaW9uIHdhcyBhZGRlZCB0byBjbGFuZyBvbiBNYXkgMTN0aCAyMDExLCBhbmQgVlMyMDE1IC8g
R0NDIHN1cHBvcnQKKyAgICAgICAgaXQpLgorCisgICAgICAgIE1hcmsgYSBidW5jaCBvZiBTdHJp
bmdJbXBsIGFzIGNvbnN0LCBhbmQgb3RoZXJzIG5vdC4gVGhpcyBjb25zdCBidXNpbmVzcyB3aXRo
CisgICAgICAgIFN0cmluZ0ltcGwgaXMgcmVhbGx5IGEgbWVzcyAoYXMgdGhlIEZJWE1FIGluIHRo
ZXJlIGF0dGVzdHMpIQorCisgICAgICAgIFJlbW92ZSBXVEZfRVhQT1JUX1NUUklOR19BUEkgYXMg
cmVxdWVzdGVkIGJ5IGEgRklYTUUsIGFuZCB1c2UgV1RGX0VYUE9SVF9QUklWQVRFCisgICAgICAg
IGluc3RlYWQuIE5vdGUgdGhhdCBtYW55IG9mIHRoZSBmdW5jdGlvbnMgd2hpY2ggdXNlZCB0byBi
ZSBleHBvcnRlZCBhcmUgbm93CisgICAgICAgIHNpbXBsZSBpbmxpbmUgZnVuY3Rpb25zIHdoaWNo
IHVucG9pc29uIGFuZCBmb3J3YXJkIHRvIGFuIGltcGxlbWVudGF0aW9uLiBUaGV5CisgICAgICAg
IGRvbid0IG5lZWQgdG8gYmUgZXhwb3J0ZWQgYW55bW9yZSwgYnV0IHdoYXQgdGhleSBmb3J3YXJk
IHRvIGRvZXMuCisKKyAgICAgICAgSW50cm9kdWNlIFdURl9MQVpZX0lOU1RBTlRJQVRFIHRvIGZv
cndhcmQtZGVjbGFyZSBmdW5jdGlvbnMgd2hpY2gganVzdCBwYXNzCisgICAgICAgIHBhcmFtZXRl
cnMgdG8gYW5vdGhlciBmdW5jdGlvbiwgYW5kIHJldHVybiB3aGF0ZXZlciB0aGF0IG90aGVyIGZ1
bmN0aW9uCisgICAgICAgIHJldHVybmVkLCB3aXRob3V0IGhhdmluZyB0byBpbmNsdWRlIHRoZSBy
ZXR1cm4ncyAvIHBhcmFtZXRlcnMnIHR5cGUgaGVhZGVyLiBUaGlzCisgICAgICAgIG1lYW5zIHRo
YXQgV1RGU3RyaW5nLmggZG9lc24ndCBuZWVkIHRvIGluY2x1ZGUgUmV0YWluUHRyLmggYW5kIENT
dHJpbmcuaC4KKworICAgICAgICBtZXNzYWdlcy5weTogQ2hhbmdlIFdlYktpdCBnZW5lcmF0ZWQg
aGVhZGVycyBzbyB0aGF0IHRoZXkgcHJvcGVybHkgaW5jbHVkZQorICAgICAgICBGb3J3YXJkLmgg
aW5zdGVhZCBvZiBmb3J3YXJkLWRlY2xhcmluZyBTdHJpbmcuCisKKyAgICAgICAgQWRkIGEgYGNo
YXJhY3RlckF0YCBtZXRob2QgdG8gU3RyaW5nSW1wbCB0byBtYXRjaCB0aGUgb25lIGluIFN0cmlu
ZyBhbmQgbWFrZSBpdAorICAgICAgICBlYXNpZXIgdG8gbWlncmF0ZS4gSXQgYWxyZWFkeSBoYXMg
YGF0YCwgd2hpY2ggYXNzZXJ0cyBvbiBvdmVyYXNzZXJ0cyBvbiBvdmVyZmxvdworICAgICAgICBp
bnN0ZWFkIG9mIHJldHVybmluZyAwIChhcyBTdHJpbmcncyBgY2hhcmFjdGVyQXRgIGRvZXMpLgor
CisgICAgICAgIEFsbG93IGJ1aWxkaW5nIGFuZCBjb25jYXRlbmF0aW5nIHN0cmluZ3Mgd2l0aCBT
dHJpbmdJbXBsKiwgd2hpY2ggY29tZXMgaW4gaGFuZHkKKyAgICAgICAgd2hlbiB3ZSBwYXNzIHRo
ZW0gYXJvdW5kIGEgYml0IG1vcmUgdG8gYXZvaWQgdGhlIHBvaXNvbmVkIG1lbWJlcnMuCisKKyAg
ICAgICAgT3ZlcmFsbCB0aGlzIHBhdGNoIHNob3VsZCBkbyBleGFjdGx5IG5vdGhpbmcuIEFsbCBj
b2RlIHN0aWxsIHVzZXMgdW5wb2lzb25lZAorICAgICAgICBzdHJpbmdzLCBhbmQgSSBoYXZlIGEg
Zm9sbG93LXVwIHBhdGNoIHdoaWNoIHBvaXNvbnMgc2VsZWN0IHN0cmluZ3MgaW4gSlNDLiBJJ2xs
CisgICAgICAgIHBvc3QgdGhhdCBwYXRjaCBzZXBhcmF0ZWx5IGFzIGl0J3MgcXVpdGUgYmlnIGFu
ZCBJIHdhbnQgdG8gaXNvbGF0ZSBhbnkKKyAgICAgICAgcmVncmVzc2lvbnMgSSBtYXkgaW50cm9k
dWNlLgorCisgICAgICAgIEkndmUgcnVuIGEgYnVuY2ggb2YgdGVzdHMgYW5kIHRoaXMgbG9va3Mg
cGVyZiBuZXV0cmFsLCBhbmQgc28gZG9lcyBteSBKU0Mgc3RyaW5nCisgICAgICAgIHBvaXNvbmlu
ZyBwYXRjaCBzbyBmYXIuIEZyb20tc2NyYXRjaCBidWlsZCB0aW1lIGZvciBhbGwgb2YgU2FmYXJp
IHNlZW1zIHRvCisgICAgICAgICpkZWNyZWFzZSogYnkgMTUlIG9uIG15IE1CUCwgd2hpY2ggd2Fz
IHN1cnByaXNpbmcsIHNvIEknbSBndWVzc2luZyB3ZSBtaWdodCBoYXZlCisgICAgICAgIGxhcmdl
IHZhcmlhbmNlLgorCisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oOgorCiAy
MDE4LTAzLTI2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkb3B0IFdLX0FMVEVSTkFURV9GUkFNRVdPUktTX0RJUiBpbiBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIuaCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIuaAppbmRl
eCA2OTcwODQ4Li43NGEyZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oCkBAIC0zMiwxMiArMzIsOSBAQAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0RlYnVnZ2VyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ry
b25nLmg+CiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KIAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmNzBj
YTAyLi41NWNmNjA4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsOTkgQEAKKzIwMTgtMDMtMjkgIEpGIEJhc3RpZW4gIDxqZmJhc3Rp
ZW5AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgV1RGOjpTdHJpbmcgcG9pc29uYWJsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MTY0CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zOTAyMDY3Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIFdURjo6U3RyaW5nIHBvaXNvbmFibGUKKworICAg
ICAgICBXZSB3YW50IHRvIGJlIGFibGUgdG8gcG9pc29uIFdURjo6U3RyaW5nIHRoZSBzYW1lIHdh
eSB3ZSBjYW4gcG9pc29uIFJlZjw+LAorICAgICAgICBSZWZQdHI8PiwgV3JpdGVCYXJyaWVyPD4g
YW5kIGZyaWVuZHMgdXNpbmcgd3RmL1BvaXNvbmVkLmguIEluIHRoZW9yeSB0aGlzIGlzCisgICAg
ICAgIHZlcnkgc2ltcGxlOiBTdHJpbmcgb25seSBob2xkcyBhIFJlZlB0cjxTdHJpbmdJbXBsPiwg
YW5kIGFsbCB3ZSBoYXZlIHRvIGRvIGlzCisgICAgICAgIHBhc3MgYSBwb2lzb25lZCBwb2ludGVy
IHRyYWl0IHRvIHRoZSBjb250YWluZWQgUmVmUHRyIGFuZCBjYWxsIGl0IGEgZGF5LiBJbgorICAg
ICAgICBwcmFjdGljZSB3ZSBoYXZlIHRoaXMgcGF0Y2guCisKKyAgICAgICAgTWFrZSBXVEYgU3Ry
aW5nIHRlbXBsYXRlZCwgd2l0aCBEdW1wUHRyVHJhaXRzPFN0cmluZ0ltcGw+IGFzIHRoZSBkZWZh
dWx0LiBUaGlzCisgICAgICAgIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIG5vdGhpbmcsIGJ1dCBhbGxv
d3MgcG9pc29uaW5nIHRvIHRyaWNrbGUgdG8gU3RyaW5nJ3MKKyAgICAgICAgUmVmUHRyLiBJbiB0
dXJuIHRoaXMgcmVxdWlyZXMgdXBkYXRpbmcgYWxsIGZvcndhcmQgZGVjbGFyYXRpb25zIG9mIFN0
cmluZy4gVGhpcworICAgICAgICBpcyBlYXNpZXIgdG8gZG8gaW4gRm9yd2FyZC5oICh3aGljaCBj
b250YWlucyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlCisgICAgICAgIHRlbXBsYXRlKSwgYW5k
IHRvIHVwZGF0ZSBhbGwgY29kZSB3aGljaCBmb3dhcmQtZGVjbGFyZXMgU3RyaW5nIHRvIGluc3Rl
YWQKKyAgICAgICAgaW5jbHVkZSBGb3J3YXJkLmguCisKKyAgICAgICAgQWRkIGEgcHJpdmF0ZSBu
b24tdGVtcGxhdGVkIGJhc2UgY2xhc3MgdG8gU3RyaW5nLCBCYXNpY1N0cmluZywgc28gdGhhdCBp
dHMKKyAgICAgICAgdGVtcGxhdGVkIG1ldGhvZHMgY2FuIHNpbXBseSBmb3J3YXJkIHRvIHRoZSBi
YXNlLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiBhIC5jcHAKKyAgICAgICAgZmlsZS4gT3RoZXJ3
aXNlIHdlJ2QgbmVlZCB0byBleHBvc2UgdGhlIFN0cmluZyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUg
aGVhZGVyCisgICAgICAgIGJlY2F1c2UgU3RyaW5nIGlzIG5vdyB0ZW1wbGF0ZWQuIFRoaXMgaXMg
c29tZXdoYXQgc2ltaWxhciB0byB3aGF0IHN0ZDo6c3RyaW5nCisgICAgICAgIGRvZXMgd2l0aCBz
dGQ6OmJhc2ljX3N0cmluZyAoaW4gYSB3YXkgdGhlIHBvaW50ZXIgdHJhaXRzIGFyZSBraW5kIG9m
IGxpa2UKKyAgICAgICAgc3RkOjpjaGFyX3RyYWl0cykuCisKKyAgICAgICAgQWRkIGEgcHVibGlj
IG5vbi10ZW1wbGF0ZWQgYmFzZSBjbGFzcyB0byBTdHJpbmcsIFN0cmluZ01ha2VyLCB3aGljaCBo
b2xkcyBhbGwKKyAgICAgICAgdGhlIHN0YXRpYyBtZXRob2RzIHdoaWNoIGNhbiBjcmVhdGUgYSBT
dHJpbmcuIFRoaXMgYWxzbyBhbGxvd3MgaW1wbGVtZW50aW5nCisgICAgICAgIHRoaW5ncyBpbiBh
IC5jcHAgZmlsZS4KKworICAgICAgICBOZWl0aGVyIGJhc2UgaGFzIGFueSBkYXRhIG1lbWJlcnMu
CisKKyAgICAgICAgVGhlIGNoYXJhY3RlcnMoKSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gaXMg
bm93IGEgZnJlZS1mdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUKKyAgICAgICAgU3RyaW5nIGJ5IGNv
bnN0IHJlZmVyZW5jZS4gVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIG1lbWJlciB0ZW1wbGF0ZXMg
Y2FuJ3QgYmUKKyAgICAgICAgc3BlY2lhbGl6ZWQgd2l0aG91dCBmdWxseSBzcGVjaWFsaXppbmcg
dGhlIGNsYXNzIGFzIHdlbGwuIFRoaXMgYWxzbyByZXF1aXJlcworICAgICAgICBzb21lIGlzX3Nh
bWUgbWFnaWMgdG8gbWF0Y2ggTENoYXIgLyBVQ2hhciBjb3JyZWN0bHkuCisKKyAgICAgICAgSSBt
YWRlIHNvbWUgZnVuY3Rpb25zIEp1c3QgV29yayB3aXRoIHBvaXNvbmVkIHN0cmluZ3MsIGFuZCBv
dGhlcnMgbm90IChlLmcuIGJ5CisgICAgICAgIHVzaW5nIFN0cmluZyBpbiBzb21lIHBsYWNlcywg
b3IgYnkgbm90IGhhdmluZyBhbiBleHRyYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZm9yCisgICAgICAg
IHRoZSBWZWN0b3I8U3RyaW5nPiB0eXBlIHJldHVybmVkKS4gSWYgdGhpcyBpcyBldmVyIGFuIGlz
c3VlIGJlY2F1c2Ugd2Ugd2FudCB0bworICAgICAgICBtaWdyYXRlIHN0cmluZ3MgZnJvbSBvbmUg
cG9pc29uIHRvIGFub3RoZXIgdGhlbiB3ZSBjYW4gYWRkIHNpbXBsZSBoZWxwZXJzIG9yIGFkZAor
ICAgICAgICBhIHRlbXBsYXRlIHBhcmFtZXRlciB0byB0aGUgcmVsZXZhbnQgY29kZS4gSSdtIHdh
cnkgb2YgbWFraW5nIHRoZSBjb2RlIG1vcmUKKyAgICAgICAgY29tcGxleCBpZiB3ZSBkb24ndCB0
cnkgdG8gbWl4IHBvaXNvbnMuIFRoZSByZWFzb24gSSB0aGluayB0aGlzIGlzIGNvcnJlY3QgaXMK
KyAgICAgICAgYmVjYXVzZSB3ZSBvbmx5IGV2ZXIgd2FudCB0byBwb2lzb24gU3RyaW5nIHdoZW4g
c3RvcmluZyB0aGUgc3RyaW5nIGluIGEgY2xhc3MKKyAgICAgICAgd2hpY2ggaXMgYXR0YWNrZXIt
Y29udHJvbGxhYmxlLiBXaGVuIGZ1bmN0aW9ucyBwYXNzIHN0cmluZ3MgYXJvdW5kIGFuZCBzdG9y
ZQorICAgICAgICB0aGVtIG9uIHRoZSBzdGFjayB3ZSBtb3N0bHkganVzdCB3YW50IFN0cmluZywg
bm8gcG9pc29uIG5lZWRlZC4KKworICAgICAgICBJbmxpbmUgYSBidW5jaCBvZiBmdW5jdGlvbnMg
bWFya2VkIGFzIG5lZWRpbmcgaW5saW5pbmcgZnJvbSBhIEZJWE1FIGluCisgICAgICAgIFdURlN0
cmluZy5jcHAgdG8gdGhlIGhlYWRlci4gVGhleSB3ZXJlIGFsbCBvbmUtbGluZXJzIHdoaWNoIGNo
ZWNrIGZvciBudWxsCisgICAgICAgIG1faW1wbCwgYW5kIHRoZW4gZm9yd2FyZCB0byBTdHJpbmdJ
bXBsLgorCisgICAgICAgIFJlbW92ZSBDT01QSUxFUl9TVVBQT1JUUyhDWFhfUkVGRVJFTkNFX1FV
QUxJRklFRF9GVU5DVElPTlMpLCBpdCdzIHN1cHBvcnRlZCBieQorICAgICAgICBhbGwgY29tcGls
ZXJzIFdlYktpdCBzdXBwb3J0cyAoaXQncyBhIEMrKzExIGZlYXR1cmUsICpkZXRlY3Rpb24qIG9m
IGl0IHdpdGgKKyAgICAgICAgX19oYXNfZXh0ZW5zaW9uIHdhcyBhZGRlZCB0byBjbGFuZyBvbiBN
YXkgMTN0aCAyMDExLCBhbmQgVlMyMDE1IC8gR0NDIHN1cHBvcnQKKyAgICAgICAgaXQpLgorCisg
ICAgICAgIE1hcmsgYSBidW5jaCBvZiBTdHJpbmdJbXBsIGFzIGNvbnN0LCBhbmQgb3RoZXJzIG5v
dC4gVGhpcyBjb25zdCBidXNpbmVzcyB3aXRoCisgICAgICAgIFN0cmluZ0ltcGwgaXMgcmVhbGx5
IGEgbWVzcyAoYXMgdGhlIEZJWE1FIGluIHRoZXJlIGF0dGVzdHMpIQorCisgICAgICAgIFJlbW92
ZSBXVEZfRVhQT1JUX1NUUklOR19BUEkgYXMgcmVxdWVzdGVkIGJ5IGEgRklYTUUsIGFuZCB1c2Ug
V1RGX0VYUE9SVF9QUklWQVRFCisgICAgICAgIGluc3RlYWQuIE5vdGUgdGhhdCBtYW55IG9mIHRo
ZSBmdW5jdGlvbnMgd2hpY2ggdXNlZCB0byBiZSBleHBvcnRlZCBhcmUgbm93CisgICAgICAgIHNp
bXBsZSBpbmxpbmUgZnVuY3Rpb25zIHdoaWNoIHVucG9pc29uIGFuZCBmb3J3YXJkIHRvIGFuIGlt
cGxlbWVudGF0aW9uLiBUaGV5CisgICAgICAgIGRvbid0IG5lZWQgdG8gYmUgZXhwb3J0ZWQgYW55
bW9yZSwgYnV0IHdoYXQgdGhleSBmb3J3YXJkIHRvIGRvZXMuCisKKyAgICAgICAgSW50cm9kdWNl
IFdURl9MQVpZX0lOU1RBTlRJQVRFIHRvIGZvcndhcmQtZGVjbGFyZSBmdW5jdGlvbnMgd2hpY2gg
anVzdCBwYXNzCisgICAgICAgIHBhcmFtZXRlcnMgdG8gYW5vdGhlciBmdW5jdGlvbiwgYW5kIHJl
dHVybiB3aGF0ZXZlciB0aGF0IG90aGVyIGZ1bmN0aW9uCisgICAgICAgIHJldHVybmVkLCB3aXRo
b3V0IGhhdmluZyB0byBpbmNsdWRlIHRoZSByZXR1cm4ncyAvIHBhcmFtZXRlcnMnIHR5cGUgaGVh
ZGVyLiBUaGlzCisgICAgICAgIG1lYW5zIHRoYXQgV1RGU3RyaW5nLmggZG9lc24ndCBuZWVkIHRv
IGluY2x1ZGUgUmV0YWluUHRyLmggYW5kIENTdHJpbmcuaC4KKworICAgICAgICBtZXNzYWdlcy5w
eTogQ2hhbmdlIFdlYktpdCBnZW5lcmF0ZWQgaGVhZGVycyBzbyB0aGF0IHRoZXkgcHJvcGVybHkg
aW5jbHVkZQorICAgICAgICBGb3J3YXJkLmggaW5zdGVhZCBvZiBmb3J3YXJkLWRlY2xhcmluZyBT
dHJpbmcuCisKKyAgICAgICAgQWRkIGEgYGNoYXJhY3RlckF0YCBtZXRob2QgdG8gU3RyaW5nSW1w
bCB0byBtYXRjaCB0aGUgb25lIGluIFN0cmluZyBhbmQgbWFrZSBpdAorICAgICAgICBlYXNpZXIg
dG8gbWlncmF0ZS4gSXQgYWxyZWFkeSBoYXMgYGF0YCwgd2hpY2ggYXNzZXJ0cyBvbiBvdmVyYXNz
ZXJ0cyBvbiBvdmVyZmxvdworICAgICAgICBpbnN0ZWFkIG9mIHJldHVybmluZyAwIChhcyBTdHJp
bmcncyBgY2hhcmFjdGVyQXRgIGRvZXMpLgorCisgICAgICAgIEFsbG93IGJ1aWxkaW5nIGFuZCBj
b25jYXRlbmF0aW5nIHN0cmluZ3Mgd2l0aCBTdHJpbmdJbXBsKiwgd2hpY2ggY29tZXMgaW4gaGFu
ZHkKKyAgICAgICAgd2hlbiB3ZSBwYXNzIHRoZW0gYXJvdW5kIGEgYml0IG1vcmUgdG8gYXZvaWQg
dGhlIHBvaXNvbmVkIG1lbWJlcnMuCisKKyAgICAgICAgT3ZlcmFsbCB0aGlzIHBhdGNoIHNob3Vs
ZCBkbyBleGFjdGx5IG5vdGhpbmcuIEFsbCBjb2RlIHN0aWxsIHVzZXMgdW5wb2lzb25lZAorICAg
ICAgICBzdHJpbmdzLCBhbmQgSSBoYXZlIGEgZm9sbG93LXVwIHBhdGNoIHdoaWNoIHBvaXNvbnMg
c2VsZWN0IHN0cmluZ3MgaW4gSlNDLiBJJ2xsCisgICAgICAgIHBvc3QgdGhhdCBwYXRjaCBzZXBh
cmF0ZWx5IGFzIGl0J3MgcXVpdGUgYmlnIGFuZCBJIHdhbnQgdG8gaXNvbGF0ZSBhbnkKKyAgICAg
ICAgcmVncmVzc2lvbnMgSSBtYXkgaW50cm9kdWNlLgorCisgICAgICAgIEkndmUgcnVuIGEgYnVu
Y2ggb2YgdGVzdHMgYW5kIHRoaXMgbG9va3MgcGVyZiBuZXV0cmFsLCBhbmQgc28gZG9lcyBteSBK
U0Mgc3RyaW5nCisgICAgICAgIHBvaXNvbmluZyBwYXRjaCBzbyBmYXIuIEZyb20tc2NyYXRjaCBi
dWlsZCB0aW1lIGZvciBhbGwgb2YgU2FmYXJpIHNlZW1zIHRvCisgICAgICAgICpkZWNyZWFzZSog
YnkgMTUlIG9uIG15IE1CUCwgd2hpY2ggd2FzIHN1cnByaXNpbmcsIHNvIEknbSBndWVzc2luZyB3
ZSBtaWdodCBoYXZlCisgICAgICAgIGxhcmdlIHZhcmlhbmNlLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorCiAyMDE4LTAzLTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR0xJQl0gQWRkIEpTQ1dlYWtWYWx1ZSB0byBKYXZhU2NyaXB0Q29y
ZSBHTGliIEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVj
dG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKaW5kZXgg
MTg1MmZhOS4uMzJlMzQ5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvVmVjdG9yLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3Iu
Y3BwCkBAIC03ODUsNyArNzg1LDcgQEAgVEVTVChXVEZfVmVjdG9yLCBNYXBGcm9tSGFzaE1hcCkK
ICAgICBhdXRvIG1hcHBlZCA9IFdURjo6bWFwKG1hcCwgWyZdIChLZXlWYWx1ZVBhaXI8U3RyaW5n
LCBTdHJpbmc+JiBwYWlyKSAtPiBTdHJpbmcgewogICAgICAgICByZXR1cm4gcGFpci52YWx1ZTsK
ICAgICB9KTsKLSAgICBzdGQ6OnNvcnQobWFwcGVkLmJlZ2luKCksIG1hcHBlZC5lbmQoKSwgV1RG
Ojpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4pOworICAgIHN0ZDo6c29ydChtYXBwZWQuYmVnaW4o
KSwgbWFwcGVkLmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbjxTdHJpbmcsIFN0
cmluZz4pOwogCiAgICAgRVhQRUNUX0VRKDNVLCBtYXBwZWQuc2l6ZSgpKTsKICAgICBFWFBFQ1Rf
VFJVRShtYXBwZWRbMF0gPT0gInYxIik7CkBAIC03OTUsNyArNzk1LDcgQEAgVEVTVChXVEZfVmVj
dG9yLCBNYXBGcm9tSGFzaE1hcCkKICAgICBtYXBwZWQgPSBXVEY6Om1hcChtYXAsIFsmXSAoY29u
c3QgYXV0byYgcGFpcikgLT4gU3RyaW5nIHsKICAgICAgICAgcmV0dXJuIHBhaXIua2V5OwogICAg
IH0pOwotICAgIHN0ZDo6c29ydChtYXBwZWQuYmVnaW4oKSwgbWFwcGVkLmVuZCgpLCBXVEY6OmNv
ZGVQb2ludENvbXBhcmVMZXNzVGhhbik7CisgICAgc3RkOjpzb3J0KG1hcHBlZC5iZWdpbigpLCBt
YXBwZWQuZW5kKCksIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuPFN0cmluZywgU3RyaW5n
Pik7CiAKICAgICBFWFBFQ1RfRVEoM1UsIG1hcHBlZC5zaXplKCkpOwogICAgIEVYUEVDVF9UUlVF
KG1hcHBlZFswXSA9PSAiazEiKTsKQEAgLTgwNSw3ICs4MDUsNyBAQCBURVNUKFdURl9WZWN0b3Is
IE1hcEZyb21IYXNoTWFwKQogICAgIG1hcHBlZCA9IFdURjo6bWFwKFdURk1vdmUobWFwKSwgWyZd
IChLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+JiYgcGFpcikgLT4gU3RyaW5nIHsKICAgICAg
ICAgcmV0dXJuIFdURk1vdmUocGFpci52YWx1ZSk7CiAgICAgfSk7Ci0gICAgc3RkOjpzb3J0KG1h
cHBlZC5iZWdpbigpLCBtYXBwZWQuZW5kKCksIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFu
KTsKKyAgICBzdGQ6OnNvcnQobWFwcGVkLmJlZ2luKCksIG1hcHBlZC5lbmQoKSwgV1RGOjpjb2Rl
UG9pbnRDb21wYXJlTGVzc1RoYW48U3RyaW5nLCBTdHJpbmc+KTsKIAogICAgIEVYUEVDVF9FUSgz
VSwgbWFwcGVkLnNpemUoKSk7CiAgICAgRVhQRUNUX1RSVUUobWFwcGVkWzBdID09ICJ2MSIpOwot
LSAKMi45LjMKCg==
</data>
<flag name="review"
          id="355304"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="355305"
          type_id="3"
          status="-"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>