<?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>191732</bug_id>
          
          <creation_ts>2018-11-15 18:37:39 -0800</creation_ts>
          <short_desc>Move Lookup Code for better cross platform usage</short_desc>
          <delta_ts>2018-12-06 15:59:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>192130</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Megan Gardner">megan_gardner</reporter>
          <assigned_to name="Megan Gardner">megan_gardner</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1479222</commentid>
    <comment_count>0</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-15 18:37:39 -0800</bug_when>
    <thetext>Move Lookup Code for better cross platform usage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479227</commentid>
    <comment_count>1</comment_count>
      <attachid>355012</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-15 19:03:44 -0800</bug_when>
    <thetext>Created attachment 355012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479228</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-15 19:04:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/46116194&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479231</commentid>
    <comment_count>3</comment_count>
      <attachid>355013</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-15 19:10:41 -0800</bug_when>
    <thetext>Created attachment 355013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479464</commentid>
    <comment_count>4</comment_count>
      <attachid>355070</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 10:01:49 -0800</bug_when>
    <thetext>Created attachment 355070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479498</commentid>
    <comment_count>5</comment_count>
      <attachid>355076</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 10:40:13 -0800</bug_when>
    <thetext>Created attachment 355076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479517</commentid>
    <comment_count>6</comment_count>
      <attachid>355076</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-16 11:28:00 -0800</bug_when>
    <thetext>Comment on attachment 355076
Patch

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

&gt; Source/WebCore/PAL/pal/spi/cocoa/RevealSPI.h:49
&gt; +#else

// USE(APPLE_INTERNAL_SDK)
Extra space above.

&gt; Source/WebCore/editing/cocoa/DictionaryLookup.mm:53
&gt; +
&gt; +

:(

&gt; Source/WebCore/editing/cocoa/DictionaryLookup.mm:369
&gt; +#endif //  PLATFORM(MAC)

extra space

&gt; Source/WebCore/editing/cocoa/DictionaryLookup.mm:379
&gt; +    return nil;

This is unreachable code on Mac.  I think it needs an #else above.

&gt; Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:161
&gt; +#endif // #if PLATFORM(MAC)

no #if

&gt; Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:176
&gt; +#endif // #if PLATFORM(MAC)

Comment probably not necessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479518</commentid>
    <comment_count>7</comment_count>
      <attachid>355084</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 11:28:11 -0800</bug_when>
    <thetext>Created attachment 355084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479526</commentid>
    <comment_count>8</comment_count>
      <attachid>355086</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 11:33:02 -0800</bug_when>
    <thetext>Created attachment 355086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479532</commentid>
    <comment_count>9</comment_count>
      <attachid>355088</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 11:45:45 -0800</bug_when>
    <thetext>Created attachment 355088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479585</commentid>
    <comment_count>10</comment_count>
      <attachid>355088</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-16 13:29:40 -0800</bug_when>
    <thetext>Comment on attachment 355088
Patch

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

&gt; Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:74
&gt; +void WebPage::performDictionaryLookupAtLocation(const FloatPoint&amp; floatPoint)

I bet if you surrounded this whole function by #if ENABLE(REVEAL) /#else UNUSED_PARAM(...).../#endif it would fix the EWS build failure.

&gt; Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:96
&gt; +void WebPage::performDictionaryLookupForSelection(Frame&amp; frame, const VisibleSelection&amp; selection, TextIndicatorPresentationTransition presentationTransition)

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479589</commentid>
    <comment_count>11</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-11-16 13:34:59 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #10)
&gt; Comment on attachment 355088 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=355088&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:74
&gt; &gt; +void WebPage::performDictionaryLookupAtLocation(const FloatPoint&amp; floatPoint)
&gt; 
&gt; I bet if you surrounded this whole function by #if ENABLE(REVEAL) /#else
&gt; UNUSED_PARAM(...).../#endif it would fix the EWS build failure.

I think you&apos;d want PLATFORM(MAC) || ENABLE(REVEAL), since shipping macOS still needs this chunk of code.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:96
&gt; &gt; +void WebPage::performDictionaryLookupForSelection(Frame&amp; frame, const VisibleSelection&amp; selection, TextIndicatorPresentationTransition presentationTransition)
&gt; 
&gt; ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479599</commentid>
    <comment_count>12</comment_count>
      <attachid>355112</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 13:53:52 -0800</bug_when>
    <thetext>Created attachment 355112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479609</commentid>
    <comment_count>13</comment_count>
      <attachid>355118</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 14:07:32 -0800</bug_when>
    <thetext>Created attachment 355118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479630</commentid>
    <comment_count>14</comment_count>
      <attachid>355125</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 14:36:10 -0800</bug_when>
    <thetext>Created attachment 355125
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479663</commentid>
    <comment_count>15</comment_count>
      <attachid>355134</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 14:56:38 -0800</bug_when>
    <thetext>Created attachment 355134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479672</commentid>
    <comment_count>16</comment_count>
      <attachid>355138</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-16 15:13:55 -0800</bug_when>
    <thetext>Created attachment 355138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479724</commentid>
    <comment_count>17</comment_count>
      <attachid>355156</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-16 16:20:20 -0800</bug_when>
    <thetext>Created attachment 355156
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481509</commentid>
    <comment_count>18</comment_count>
      <attachid>355156</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-26 06:13:26 -0800</bug_when>
    <thetext>Comment on attachment 355156
Patch

Rejecting attachment 355156 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 355156, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=355156&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=191732&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Processing patch 355156 from bug 191732.
Fetching: https://bugs.webkit.org/attachment.cgi?id=355156
Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Alex Christensen&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 23 diffs from patch file(s).
patching file Source/WebCore/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebCore/SourcesCocoa.txt
Hunk #1 succeeded at 77 (offset -5 lines).
Hunk #2 succeeded at 91 (offset -5 lines).
patching file Source/WebCore/PAL/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj
Hunk #1 succeeded at 406 (offset 4 lines).
Hunk #2 succeeded at 472 (offset 4 lines).
patching file Source/WebCore/PAL/pal/spi/cocoa/RevealSPI.h
patching file Source/WebCore/PAL/pal/spi/mac/LookupSPI.h
patching file Source/WebCore/PAL/pal/spi/mac/RevealSPI.h
rm &apos;Source/WebCore/PAL/pal/spi/mac/RevealSPI.h&apos;
patching file Source/WebCore/WebCore.xcodeproj/project.pbxproj
Hunk #1 succeeded at 20536 (offset 122 lines).
Hunk #2 succeeded at 26249 (offset 119 lines).
patching file Source/WebCore/editing/cocoa/DictionaryLookup.mm
patching file Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm
patching file Source/WebCore/editing/mac/DictionaryLookup.h
patching file Source/WebCore/editing/mac/DictionaryLookup.mm
rm &apos;Source/WebCore/editing/mac/DictionaryLookup.mm&apos;
patching file Source/WebKit/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit/Platform/spi/ios/UIKitSPI.h
Hunk #1 succeeded at 734 (offset 1 line).
patching file Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
patching file Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
Hunk #2 succeeded at 216 (offset 3 lines).
patching file Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
Hunk #3 succeeded at 765 (offset 6 lines).
Hunk #4 succeeded at 855 with fuzz 1 (offset 10 lines).
Hunk #5 succeeded at 871 with fuzz 1 (offset 11 lines).
Hunk #6 succeeded at 1472 (offset 11 lines).
Hunk #7 succeeded at 6067 (offset 24 lines).
patching file Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
patching file Source/WebKit/UIProcess/mac/WebPageProxyMac.mm
patching file Source/WebKit/WebProcess/WebPage/WebPage.messages.in
Hunk #1 FAILED at 188.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebKit/WebProcess/WebPage/WebPage.messages.in.rej
patching file Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm
patching file Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
Hunk #1 succeeded at 417 (offset 4 lines).
patching file Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Alex Christensen&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/10154097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482620</commentid>
    <comment_count>19</comment_count>
      <attachid>355911</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-28 13:20:50 -0800</bug_when>
    <thetext>Created attachment 355911
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482648</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-28 14:09:46 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 355911:

media/W3C/video/events/event_canplay.html bug 192103 (author: pilgrim@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482651</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-28 14:09:52 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 355911:

webgl/2.0.0/conformance/more/functions/texSubImage2DHTMLBadArgs.html bug 192104 (author: justin_fan@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482771</commentid>
    <comment_count>22</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-28 17:41:24 -0800</bug_when>
    <thetext>Committed r238653: &lt;https://trac.webkit.org/changeset/238653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482793</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-28 18:53:33 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 192130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482797</commentid>
    <comment_count>24</comment_count>
      <attachid>355911</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-28 18:56:20 -0800</bug_when>
    <thetext>Comment on attachment 355911
Patch for landing

Rejecting attachment 355911 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 355911, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 22 diffs from patch file(s).
patching file Source/WebCore/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebCore/PAL/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj
Hunk #1 FAILED at 406.
Hunk #2 FAILED at 472.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj.rej
patching file Source/WebCore/PAL/pal/spi/cocoa/RevealSPI.h
patching file Source/WebCore/PAL/pal/spi/mac/LookupSPI.h
Hunk #1 FAILED at 23.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebCore/PAL/pal/spi/mac/LookupSPI.h.rej
The next patch would delete the file Source/WebCore/PAL/pal/spi/mac/RevealSPI.h,
which does not exist!  Applying it anyway.
can&apos;t find file to patch at input line 6
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: Source/WebCore/PAL/pal/spi/mac/RevealSPI.h
|deleted file mode 100644
|index d6b8da42c85990ae32ea67a0af7753f3db9828a5..0000000000000000000000000000000000000000
|--- Source/WebCore/PAL/pal/spi/mac/RevealSPI.h	(revision 0)
|+++ Source/WebCore/PAL/pal/spi/mac/RevealSPI.h	(working copy)
--------------------------
No file to patch.  Skipping patch.
1 out of 1 hunk ignored
patching file Source/WebCore/SourcesCocoa.txt
Hunk #1 FAILED at 77.
Hunk #2 FAILED at 91.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/SourcesCocoa.txt.rej
patching file Source/WebCore/WebCore.xcodeproj/project.pbxproj
Hunk #1 FAILED at 20519.
Hunk #2 FAILED at 26226.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/WebCore.xcodeproj/project.pbxproj.rej
patching file Source/WebCore/editing/cocoa/DictionaryLookup.mm
patching file Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm
Hunk #1 FAILED at 34.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm.rej
patching file Source/WebCore/editing/mac/DictionaryLookup.h
Hunk #1 FAILED at 23.
Hunk #2 FAILED at 58.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/editing/mac/DictionaryLookup.h.rej
The next patch would delete the file Source/WebCore/editing/mac/DictionaryLookup.mm,
which does not exist!  Applying it anyway.
can&apos;t find file to patch at input line 6
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: Source/WebCore/editing/mac/DictionaryLookup.mm
|deleted file mode 100644
|index ce9e4474a49fcc9b095b2f4bda6c9ae3f38cfe47..0000000000000000000000000000000000000000
|--- Source/WebCore/editing/mac/DictionaryLookup.mm	(revision 0)
|+++ Source/WebCore/editing/mac/DictionaryLookup.mm	(working copy)
--------------------------
No file to patch.  Skipping patch.
1 out of 1 hunk ignored
patching file Source/WebKit/Platform/spi/ios/UIKitSPI.h
Hunk #1 succeeded at 736 with fuzz 2 (offset 3 lines).
patching file Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
Hunk #1 FAILED at 33.
Hunk #2 FAILED at 190.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm.rej
patching file Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
Hunk #1 FAILED at 87.
Hunk #2 FAILED at 216.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebKit/UIProcess/ios/WKContentViewInteraction.h.rej
patching file Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
Hunk #1 FAILED at 112.
Hunk #2 FAILED at 650.
Hunk #3 FAILED at 765.
Hunk #4 FAILED at 855.
Hunk #5 FAILED at 871.
Hunk #6 succeeded at 1461 with fuzz 2 (offset -11 lines).
Hunk #7 FAILED at 6055.
6 out of 7 hunks FAILED -- saving rejects to file Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm.rej
patching file Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
Hunk #1 FAILED at 121.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm.rej
patching file Source/WebKit/UIProcess/mac/WebPageProxyMac.mm
Hunk #1 FAILED at 323.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebKit/UIProcess/mac/WebPageProxyMac.mm.rej
patching file Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm
Hunk #1 FAILED at 26.
Hunk #2 succeeded at 61 with fuzz 2 (offset -9 lines).
1 out of 2 hunks FAILED -- saving rejects to file Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm.rej
patching file Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
Hunk #1 FAILED at 417.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm.rej
patching file Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm
Hunk #1 FAILED at 389.
Hunk #2 FAILED at 444.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm.rej

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/10191243</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483007</commentid>
    <comment_count>25</comment_count>
      <attachid>356017</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-29 10:16:35 -0800</bug_when>
    <thetext>Created attachment 356017
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483039</commentid>
    <comment_count>26</comment_count>
      <attachid>356017</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-29 10:54:28 -0800</bug_when>
    <thetext>Comment on attachment 356017
Patch for landing

Clearing flags on attachment: 356017

Committed r238678: &lt;https://trac.webkit.org/changeset/238678&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483040</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-29 10:54:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483071</commentid>
    <comment_count>28</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-11-29 12:09:14 -0800</bug_when>
    <thetext>Reverted r238678 for reason:

Breaks internal builds.

Committed r238682: &lt;https://trac.webkit.org/changeset/238682&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483117</commentid>
    <comment_count>29</comment_count>
      <attachid>356039</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-29 13:11:57 -0800</bug_when>
    <thetext>Created attachment 356039
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483152</commentid>
    <comment_count>30</comment_count>
      <attachid>356052</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-29 13:48:18 -0800</bug_when>
    <thetext>Created attachment 356052
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483153</commentid>
    <comment_count>31</comment_count>
      <attachid>356053</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-29 13:50:18 -0800</bug_when>
    <thetext>Created attachment 356053
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483159</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-29 13:57:19 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 356039:

webgl/1.0.2/conformance/more/functions/texSubImage2DBadArgs.html bug 192176 (author: roger_fong@apple.com)
http/tests/websocket/tests/hybi/inspector/resolveWebSocket.html bug 192177 (author: drousso@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483181</commentid>
    <comment_count>33</comment_count>
      <attachid>356053</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-29 14:18:03 -0800</bug_when>
    <thetext>Comment on attachment 356053
Patch for landing

Rejecting attachment 356053 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=release&apos;, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
LE_VIDEO_USES_ELEMENT_FULLSCREEN -DENABLE_WEB_AUDIO -DENABLE_WEB_AUTHN -DENABLE_WEB_RTC -DENABLE_WEBGL -DENABLE_WEBGL2 -DENABLE_WEBGPU -DENABLE_WEBMETAL -DENABLE_WIRELESS_PLAYBACK_TARGET -DENABLE_XSLT -DBUILDING_WEBKIT -DU_DISABLE_RENAMING=1 -DU_SHOW_CPLUSPLUS_API=0 -DGL_SILENCE_DEPRECATION=1 -DGLES_SILENCE_DEPRECATION=1 -DOBJC_OLD_DISPATCH_PROTOTYPES=0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.12 -g -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -Wno-sign-conversion -Winfinite-recursion -Wmove -iquote /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/WebCore-generated-files.hmap -I/Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/WebCore-own-target-headers.hmap -I/Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/WebCore-all-target-headers.hmap -iquote /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/WebCore-project-headers.hmap -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/include -IPAL -IForwardingHeaders -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/libxslt -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/libxml2 -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/DerivedSources/WebCore -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/usr/local/include -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/usr/local/include/WebKitAdditions -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/local/include/WebKitAdditions -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/usr/local/include/webrtc -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/local/include/webrtc -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/usr/local/include/webrtc/sdk/objc/Framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/local/include/webrtc/sdk/objc/Framework/Headers -I/Volumes/Data/EWS/WebKit/Source/WebCore -I/Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/DerivedSources/x86_64 -I/Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/DerivedSources -Wall -Wextra -Wcast-qual -Wchar-subscripts -Wextra-tokens -Wformat=2 -Winit-self -Wmissing-format-attribute -Wmissing-noreturn -Wpacked -Wpointer-arith -Wredundant-decls -Wundef -Wwrite-strings -Wexit-time-destructors -Wglobal-constructors -Wtautological-compare -Wimplicit-fallthrough -Wno-unknown-warning-option -F/Volumes/Data/EWS/WebKit/WebKitBuild/Release -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/PrivateFrameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/System.framework/PrivateHeaders -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Carbon.framework/Frameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Quartz.framework/Frameworks -include /Volumes/Data/EWS/WebKit/WebKitBuild/PrecompiledHeaders/WebCorePrefix-dnjuakfurgubmjbiggygtnisdjsu/WebCorePrefix.h -MMD -MT dependencies -MF /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/UnifiedSource17-mm.d --serialize-diagnostics /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/UnifiedSource17-mm.dia -c /Volumes/Data/EWS/WebKit/WebKitBuild/Release/DerivedSources/WebCore/unified-sources/UnifiedSource17-mm.mm -o /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/UnifiedSource17-mm.o

** BUILD FAILED **


The following build commands failed:
	CompileC /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/UnifiedSource6-mm.o /Volumes/Data/EWS/WebKit/WebKitBuild/Release/DerivedSources/WebCore/unified-sources/UnifiedSource6-mm.mm normal x86_64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Full output: https://webkit-queues.webkit.org/results/10202774</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483182</commentid>
    <comment_count>34</comment_count>
      <attachid>356060</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-11-29 14:19:40 -0800</bug_when>
    <thetext>Created attachment 356060
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483198</commentid>
    <comment_count>35</comment_count>
      <attachid>356060</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-29 14:59:16 -0800</bug_when>
    <thetext>Comment on attachment 356060
Patch for landing

Clearing flags on attachment: 356060

Committed r238697: &lt;https://trac.webkit.org/changeset/238697&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483199</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-29 14:59:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485852</commentid>
    <comment_count>37</comment_count>
      <attachid>356060</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-12-06 15:59:51 -0800</bug_when>
    <thetext>Comment on attachment 356060
Patch for landing

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

&gt; Source/WebCore/editing/cocoa/DictionaryLookup.mm:53
&gt; +#if !PLATFORM(WATCH)

These should all probably be #if !PLATFORM(WATCHOS) to match all the other instances of PLATFORM(WATCHOS) in WebKit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355012</attachid>
            <date>2018-11-15 19:03:44 -0800</date>
            <delta_ts>2018-11-15 19:10:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181115190343.patch</filename>
            <type>text/plain</type>
            <size>78468</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzcxMDI2OWY0OGYwNjRj
MzA5NDY5ZWQ4YTEwYmU2NzdhMjI0MjNkMS4uMDk2N2M3NzdiM2Y2NWMwYmQ4MDY3MDZmZWJhODdj
OTNjMzM0ZTIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTMg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFJFR1JFU1NJT04ocjIzODEyMik6IGZldGNoaW5nIHRoZSBDZXJ0aWZpY2F0ZUluZm8gdHJp
Z2dlcnMgYW4gQVNTRVJUIGluIHdvcmtlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IGE3OTRmMjEy
MTM1NmNhNDA3YTg2M2RhMWViOWEyZGQ4ZTljODNkZWIuLjY5MjNmZjQ2ZjFiYWJjOWUzM2M5YTgz
ZDdjNTUzMGMzNzZlNDFkMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDE4LTExLTE1ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAg
ICAgICAgTW92ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhbC9zcGkv
bWFjL0xvb2t1cFNQSS5oOgorICAgICAgICAqIHBhbC9zcGkvbWFjL1JldmVhbFNQSS5oOgorCiAy
MDE4LTExLTExICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBEcmF3IGNhcHMgbG9jayBpbmRpY2F0b3IgaW4gcGFzc3dvcmQgZmllbGRzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDA2Njk5MDQwMTBlM2EyYmRjM2JiNzc3YTk2MGU2MDZhMmFiOGI1YzIuLjlkZGYyNWM5NGM4
ZGNhYmZhYTk2OGVkMTA1Mjk5NjZiYzYwOTc1ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAK
KzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExvb2t1cCBp
cyBiZWluZyByZXBsYWNlZCBieSBSZXZlYWwuIFRoaXMgZnJhbWV3b3JrIHNob3VsZCB3b3JrIG9u
IGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBwYXRjaCBtb3ZlcyB0aGUgY29kZSB0aGF0IHdl
IGV4cGVjdCB3aWxsIGJlIG5lZWRlZCBmb3IgYWxsIHBsYXRmb3JtcyB0byB0aGUgbW9yZQorICAg
ICAgICBnZW5lcmFsIGNvY29hIGFyZWEuIFRoaXMgcGF0Y2ggY2hhbmdlcyBubyBmdW5jYXRpb25h
bGl0eSwgYW5kIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAgIGFueXRoaW5nIGN1cnJlbnRseS4g
VGhpcyB3b3JrIHdpbGwgYmUgYnVpbGQgb24gbGF0ZXIgd2hlbiBSZXZlYWwgaXMgcmVhZHkgdG8g
c3VwcG9ydAorICAgICAgICBtdWx0aXBsZSBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBQbGF0Zm9y
bS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQ
cm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgc2V0dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNsZWFu
dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9yZW1vdmVEZWZhdWx0
R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2FkZERlZmF1
bHRHZXN0dXJlUmVjb2duaXplcnNdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBnZXN0dXJl
UmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVjb2du
aXplcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfbG9va3VwR2VzdHVyZVJlY29nbml6
ZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZD
dXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JT
ZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UpOiBE
ZWxldGVkLgorCiAyMDE4LTExLTEzICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMzgxMzcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjE1NTJk
ZjdmNzVmYzUzOWJiODc1NmQwODQ5YjU0ZDY4Njk1NTQwOS4uMTgyNDdkNjRjOWQzMDI5OTYzMDVm
Y2M1NDcyMzVjNGNiNTQxYmUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAyLDYgKzQwMiw3IEBACiAJCQkJMEMyREExMzkx
RjNCRUI0OTAwREJDMzE3IC8qIFBhc3NLaXRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQTFGM0JFQjQ5
MDBEQkMzMTcgLyogcHRocmVhZFNQSS5oICovLAogCQkJCTBDMkRBMTNCMUYzQkVCNDkwMERCQzMx
NyAvKiBRdWFydHpDb3JlU1BJLmggKi8sCisJCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8q
IFJldmVhbFNQSS5oICovLAogCQkJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovLAogCQkJCTBDMkRBMTNDMUYzQkVCNDkwMERCQzMxNyAvKiBTZXJ2ZXJzU1BJ
LmggKi8sCiAJCQkJMEMyREExMkIxRjNCRUI0OTAwREJDMzE3IC8qIFVSTEZvcm1hdHRpbmdTUEku
aCAqLywKQEAgLTQ2Nyw3ICs0NjgsNiBAQAogCQkJCTBDNzc4NTg2MUY0NTEzMEYwMEY0RUJCNiAv
KiBRVEtpdFNQSS5oICovLAogCQkJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0NCAvKiBRdWlja0Ry
YXdTUEkuaCAqLywKIAkJCQkwQzc3ODU4NzFGNDUxMzBGMDBGNEVCQjYgLyogUXVpY2tMb29rTWFj
U1BJLmggKi8sCi0JCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8qIFJldmVhbFNQSS5oICov
LAogCQkJCUExMTc1QjQ4MUY2QUZGOEUwMEM0QjlGMCAvKiBTcGVlY2hTeW50aGVzaXNTUEkuaCAq
LywKIAkJCQkwQzc3ODU4ODFGNDUxMzBGMDBGNEVCQjYgLyogVFVDYWxsU1BJLmggKi8sCiAJCQkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zNDg2NGE2NzYyYWQ5YjYyNTI1ZmU4ZGFhZmJlODdkZDVkYmZlNTBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCitT
T0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQorU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLKFJldmVhbENvcmUpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlBy
ZXNlbnRlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0Nv
bnRleHQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQorCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVh
bC9SVlByZXNlbnRlci5oPgorI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KKyNpbXBvcnQg
PFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgorCisKKyNlbHNlCisKK0BpbnRlcmZhY2UgUlZJdGVt
IDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBO
U19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJWU2VsZWN0aW9u
IDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNs
aWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJh
bmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247
CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAorI2lmIFBMQVRGT1JN
KE1BQykKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0
aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRv
Y3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVz
ZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KW9wdGlvbnM7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorLSAoQk9PTClyZXZlYWxJdGVtOihS
Vkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVu
dENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50
aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworQGVuZAorCisjZW5k
aWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9tYWMvTG9va3VwU1BJLmgKaW5kZXggZWI3Zjk1MWY3MWM3NWM4MTIxN2IyMmU3OGFkYWQzMGU0
ZDZhNWMwNC4uZTBhMzM3NWQzMGNjODg5ZjEzNWVhMmExMWQ0N2QwZGE5NGY5OGE4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaApAQCAtMjMsMTIgKzIzLDEz
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisKKyNpZiBQTEFURk9STShNQUMpCisKICNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rp
b25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAK
LSNpZiBQTEFURk9STShNQUMpCi0KIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05B
TChMb29rdXApCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoTG9va3VwLCBMVUxvb2t1cERlZmlu
aXRpb25Nb2R1bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiOGRhNDJjODU5OTBhZTMyZWE2N2Ew
YWY3NzUzZjNkYjk4MjhhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFs
KQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUpCi1TT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKLVNPRlRfTElOS19DTEFTU19PUFRJT05B
TChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwo
UmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUs
IFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQotI2ltcG9ydCA8
UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+Ci0jaW1wb3J0
IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JldmVhbENv
cmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2JqZWN0IDxOU1NlY3Vy
ZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBz
ZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdOQVRFRF9JTklUSUFM
SVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2JqZWN0Ci0rIChOU1Jh
bmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4IHNlbGVjdGVkUmFu
Z2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2Vs
ZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOwotQGVuZAotCi1AaW50ZXJmYWNl
IFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9j
dW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50
aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChCT09MKXJldmVhbEl0ZW06KFJWSXRlbSAq
KWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4
dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250
ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci1AZW5kCi0KLSNlbmRpZiAvLyAh
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmOGI5MGRhYmMzMDEzMjU0ZGViNzdhOTFmYjUx
M2JmNDEyZjAzYTUyLi4xNTdhZjg1YjZiNzA4NWE3M2M1ZDhhNDE3NmVkMmUyZjg0Y2M1MDZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMjAzLDYgKzEyMDMsNyBAQAogCQk0NDM5MTgwMDFBOTFCMkY4MDA2RTA0RjIgLyogUXVp
Y2tMb29rU29mdExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0MzkxN0ZFMUE5MUIyRjgwMDZFMDRGMiAvKiBRdWlja0xvb2tTb2Z0TGluay5oICov
OyB9OwogCQk0NDU3NzVFNTIwNDcyRjczMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBw
ZWFyYW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQ1Nzc1RTQyMDQ3MkY3MzAwOERDRTVEIC8qIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDU3
NzVFQTIwNDczMDNDMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NTc3NUU5MjA0
NzMwM0IwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLm1tICovOyB9Owor
CQk0NDVGMTZBMDIxOUU2Njk5MDBEMzA5RkYgLyogRGljdGlvbmFyeUxvb2t1cC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzN0ZGM0Q2MUExMDEzMUIw
MDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovOyB9OwogCQk0NDcxNzEwRTIwNUFGOTQ1
MDAwQTExNkUgLyogTWVkaWFRdWVyeVBhcnNlckNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzE3MTBDMjA1QUY5NDUwMDBBMTE2RSAvKiBN
ZWRpYVF1ZXJ5UGFyc2VyQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQ0Nzk1ODA0MTY0M0I0OUEwMDFFMEE3RiAvKiBQYXJzZWRDb250
ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQ3OTU4MDMxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQ4QTI5QkYwQTQ2RDlD
QjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDhBMjlCRDBBNDZEOUNCMDAzMDc1OUYgLyog
SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTI0NCw3ICsxMjQ1LDYgQEAKIAkJNDZCOTUxOUEyMDdENjM1
NDAwQTdEMkREIC8qIFJlbW90ZUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NkI5NTE5MjIwN0Q2MzJFMDBBN0QyREQgLyogUmVtb3RlRnJhbWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NkJD
QkJDMjIwODUwMDhGMDA3MTA2MzggLyogSlNSZW1vdGVET01XaW5kb3dCYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkJDQkJDMDIwODUwMDdGMDA3
MTA2MzggLyogSlNSZW1vdGVET01XaW5kb3dCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDZDMzc2NjIyMDg1MTc3RDAwQzczODI5IC8qIEpT
UmVtb3RlRE9NV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NkMzNzY2MTIwODUxNzZEMDBDNzM4MjkgLyogSlNSZW1vdGVET01XaW5kb3cuaCAq
LzsgfTsKLQkJQ0Q1RjNFREQ5RDMzM0M0MEE5QTM4QTU0IC8qIEFib3J0YWJsZVRhc2tRdWV1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREZEQjkxMkNG
OEU4OEE2REExQUQyNjRGIC8qIEFib3J0YWJsZVRhc2tRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ2QzY5NkNCMUU3MjA1RjcwMDU5Nzkz
NyAvKiBDUFVNb25pdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NkM2OTZDOTFFNzIwNUU0MDA1OTc5MzcgLyogQ1BVTW9uaXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ2QzY5NkNDMUU3MjA1
RkMwMDU5NzkzNyAvKiBDUFVNb25pdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QzY5NkNBMUU3MjA1RTQwMDU5NzkzNyAvKiBDUFVNb25pdG9y
LmNwcCAqLzsgfTsKIAkJNDZDODNFRkUxQTlCQkUyOTAwQTc5QTQxIC8qIEdlb05vdGlmaWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkM4M0VGQzFB
OUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzcxMSw3ICs3NzExLDYgQEAKIAkJNDZCQ0JCQzMy
MDg1MDBBNzAwNzEwNjM4IC8qIFJlbW90ZURPTVdpbmRvdy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gUmVtb3RlRE9NV2luZG93LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDZDMzc2NUYyMDg1MTc2QzAwQzczODI5IC8qIEpTUmVtb3RlRE9NV2luZG93LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVtb3RlRE9NV2luZG93LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZDMzc2NjEyMDg1MTc2RDAwQzczODI5IC8qIEpT
UmVtb3RlRE9NV2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVt
b3RlRE9NV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURGREI5MTJDRjhF
ODhBNkRBMUFEMjY0RiAvKiBBYm9ydGFibGVUYXNrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWJvcnRhYmxlVGFza1F1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ2QzY5NkM5MUU3MjA1RTQwMDU5NzkzNyAvKiBDUFVNb25pdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENQVU1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDZDNjk2Q0ExRTcyMDVFNDAwNTk3OTM3IC8qIENQVU1vbml0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1BVTW9uaXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2QzgzRUZCMUE5QkJFMjkwMEE3OUE0MSAvKiBH
ZW9Ob3RpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW9O
b3RpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDQwMSw2ICsxNDQw
MCw3IEBACiAJCURGN0U5QTI5NEM3QUFDRTBBRDg5QjNERCAvKiBNYXRoTUxPcGVyYXRvckRpY3Rp
b25hcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0aE1MT3BlcmF0b3JE
aWN0aW9uYXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGOUFGRDcwMTNGQzMx
RDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREY5QUZENzExM0ZDMzFEODAw
MTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERkRCOTEyQ0Y4RTg4
QTZEQTFBRDI2NEYgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFib3J0YWJsZVRhc2tRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMEZFRjM3MUIwN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IEV2ZW50U291cmNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTBGRUYzNzFCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50U291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUwRkVGMzcxQjI3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFNvdXJjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQxNCw2ICsyMDQxNCw3IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlv
bi5oICovLAogCQkJCUM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1t
ICovLAorCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1t
ICovLAogCQkJCTlCNTVFRUU4MUIzRTg4OTgwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAqLywK
IAkJCQlGNDJDRUI1NDIxNDAzMUVFMDAyRENBNzIgLyogRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2Nv
YS5tbSAqLywKIAkJCQlGNDhEMkE3NTIxNTZGRTU3MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXND
b2NvYS5tbSAqLywKQEAgLTI2MTI5LDcgKzI2MTMwLDYgQEAKIAkJCQlDRTdCMkRBRjE1ODZBQkFE
MDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggKi8sCiAJCQkJQ0U3QjJE
QjAxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSAqLywK
IAkJCQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICovLAot
CQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAog
CQkJCTQ0Mjk1NkNBMjE4QTZEMzAwMDgwREI1NCAvKiBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1t
ICovLAogCQkJCUVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8sCiAJ
CQkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9uTWFjLm1tICovLApA
QCAtMzIyMjQsNiArMzIyMjQsNyBAQAogCQkJCTFBQkE3NkNBMTFEMjBFNTAwMDRDMjAxQyAvKiBD
U1NQcm9wZXJ0eU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFMjM0ODBDMThBOTg3MEIw
MEU0QjZFOCAvKiBEYXRhQ3VlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU1OEI0NUJCMjBBRDA3
REQwMDk5MTAyNSAvKiBEYXRhTGlzdEJ1dHRvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDQ1RjE2QTAyMTlFNjY5OTAwRDMwOUZGIC8qIERpY3Rpb25hcnlMb29rdXAubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MTVCRTE4RjFENTRGNUZCMDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzI0RUQzMkMxQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcyRjFBREEyMUEzOTA0REMw
MDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhi
NGVlNWNjYzc1Y2NmYTFlMDdjNmFmYTU2YTgxMzNjMTZkODQ0YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMCww
ICsxLDQwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJEaWN0aW9uYXJ5TG9va3VwLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFJF
VkVBTCkKKworI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkVkaXRpbmcuaCIKKyNpbXBv
cnQgIkZvY3VzQ29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1l
U2VsZWN0aW9uLmgiCisjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCisjaW1wb3J0ICJIaXRUZXN0
UmVzdWx0LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiUGFnZS5oIgor
I2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgorI2ltcG9ydCAiVGV4
dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbXBvcnQgIlZpc2li
bGVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlZpc2libGVVbml0cy5oIgorI2ltcG9ydCA8UERGS2l0
L1BERktpdC5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+CisjaW1wb3J0IDxw
YWwvc3BpL21hYy9SZXZlYWxTUEkuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25z
Lmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKKworCisjaWYgUExBVEZPUk0oTUFDKQorCitA
aW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0
ZT4gOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFyVGV4
dEluZGljYXRvcjsKKyAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7CisgICAgQk9PTCBfdXNlRGVm
YXVsdEhpZ2hsaWdodDsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3RyaW5n
OworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBoaWdobGlnaHRS
ZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURlZmF1bHRIaWdo
bGlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0
UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VE
ZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBh
dHRyaWJ1dGVkU3RyaW5nOworLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9u
PHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFdlYlJldmVhbEhpZ2hsaWdodAorCitAc3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdobGln
aHRSZWN0OworQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhpZ2hs
aWdodDsKK0BzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRS
ZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1
dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZworeworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKKyAgICBfdXNlRGVmYXVsdEhpZ2hs
aWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7CisgICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBhdHRy
aWJ1dGVkU3RyaW5nOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENs
ZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcgor
eworICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcik7
Cit9CisKKy0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGlu
Z0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVO
VVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJu
IEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsKK30KKworLSAo
dm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVj
dHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAg
IAorICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0c0luVmlldykg
eworICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOworCisgICAgICAgIC8v
IEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBh
Ym92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVyIHRvIGNlbnRl
ciB0ZXh0LgorICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRl
cyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25h
cnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKKyAgICAgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNNdXRh
YmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3BhcmFncmFwaCBzZXRB
bGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKKyAgICAgICAgW2F0dHJpYnV0ZXMgc2V0
T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5h
bWVdOworICAgIAorICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcg
PSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbc2Vs
Zi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVzLmdldCgpXSk7
CisgICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKKyAgICB9Cit9CisKKy0gKEJPT0wp
cmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hvdWxkVXNlRGVm
YXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBzZWxmLnVzZURl
ZmF1bHRIaWdobGlnaHQ7Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5n
Q29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0KK3sK
KyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAg
IGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOworICAgIGlmIChibG9j
aykKKyAgICAgICAgYmxvY2soKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNE
aWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQorICAgICAgICByZXR1cm4g
eyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZl
IHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0
aW9ucy4KKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
OworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKworICAg
IC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFn
cmFwaHMgb2YgdGV4dC4KKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFw
aChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFw
aChzZWxlY3Rpb25FbmQpOworCisgICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9u
U3RhcnQpLmdldCgpKTsKKyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5n
ZXQoKSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFy
dCk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAgU3RyaW5nIGl0ZW1TdHJpbmcg
PSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJ
dGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpp
dGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKKyAgICBOU1JhbmdlIGhpZ2hs
aWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKKyAgICAKKyAgICByZXR1cm4g
eyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJh
bmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKKyAgICAKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiB7IG51bGxwdHIsIG5p
bCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0
aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBo
aXRUZXN0UmVzdWx0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAK
KyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5p
bCB9OworICAgIAorICAgIGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVk
Tm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50
KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBu
aWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3Rl
ciBhdCB0aGUgcG9pbnQuCisgICAgYXV0byBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3Vu
ZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7CisgICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2lu
dChmcmFtZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBh
dXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQp
OworICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7CisKKyAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1l
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7CisgICAgaW50IGhp
dEluZGV4OworICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOworICAgIAorICAg
IGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdl
U2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2li
bGVFbmQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0
byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KKyAgICAgICAgYXV0byBw
YXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOworICAgICAg
ICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisgICAg
ICAgIAorICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShwYXJh
Z3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOworICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rp
b25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCk7CisgICAgICAg
IAorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHBhcmFncmFwaEVuZCk7CisgICAgICAgIAorICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFr
ZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlvblN0YXJ0Lmdl
dCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQs
IHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGhpdEluZGV4ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0aW9u
KS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsKKyAgICAgICAgc2VsZWN0aW9u
QWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxh
cml0eSk7CisgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxl
cy5zdGFydCgpOworICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1
MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCisgICAgICAg
IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFj
dGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAgCisgICAgICAgIGlmICghZnVsbENoYXJhY3Rl
clJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIAor
ICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAg
ICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxD
aGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOworICAgIH0K
KyAgICAKKyAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygp
IHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07
CisgICAgCisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJh
bmdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NS
Vkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2Vs
ZWN0ZWRSYW5nZV0pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhp
Z2hsaWdodFJhbmdlOworCisgICAgaWYgKGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uID09IE5TTm90
Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVs
bENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2Uu
bGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKK30KKworc3RhdGljIHZvaWQg
ZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBOU0lu
dGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0Fk
ZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgc2l6ZV90IG9yaWdpbmFsTGVu
Z3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7CisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxl
Y3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKKyAgICAKKyAgICBjaGFy
YWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2lu
YWxMZW5ndGg7CisgICAgCisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpudW1i
ZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07CisgICAgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSBz
ZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0FkZGVk
QmVmb3JlU3RhcnQ7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitzdGQ6
OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJp
bmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkK
KyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBEb24ndCBkbyBhbnl0
aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAgIGlmICghc2Vs
ZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgQCIi
LCBuaWwgfTsKKworICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxvb2t1
cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7CisKKyAgICAvLyBBcyBjb250ZXh0LCB3ZSBh
cmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0
aGUgcG9pbnQuCisgICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29rdXAg
c3RyaW5nXS5sZW5ndGg7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0
ID0gMDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAwOworICAgIGV4
cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1MCwg
Y2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsKKwor
ICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5n
XTsKKyAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVkQmVm
b3JlU3RhcnQsIDApOworCisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2Fs
bG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBzZWxl
Y3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IGl0
ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxv
Y2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcs
IG5pbCB9OworCisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bhc3Mu
bG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKKyAgICBOU0ludGVnZXIgbG9va3Vw
QWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3RlZFJhbmdlLmxl
bmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7CisKKyAgICBb
c2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZvcmVdOworICAg
IFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRlcl07CisKKyAg
ICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxsUGxhaW5UZXh0
U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKKyAgICByZXR1cm4g
eyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisKKyAgICByZXR1cm4geyBAIiIsIG5pbCB9OworfQorCitzdGF0aWMgV0tSZXZlYWxDb250
cm9sbGVyIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihib29sIGNyZWF0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQ
b3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRp
Y2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpG
dW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkgfHwgIWdldFJWUHJlc2VudGVyQ2xhc3Mo
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9u
YXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XSk7CisgICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IGRpY3Rpb25hcnlQb3B1
cEluZm8ub3B0aW9ucy5nZXQoKSkKKyAgICAgICAgW211dGFibGVPcHRpb25zIGFkZEVudHJpZXNG
cm9tRGljdGlvbmFyeTpvcHRpb25zXTsKKworICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJ
bmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IpOworICAg
IAorICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVyID0gYWRvcHROUyhbYWxsb2NS
VlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOworICAgIAorICAgIE5TUmVjdCBoaWdobGlnaHRS
ZWN0OworICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOworICAgIAorICAgIGlmICh0ZXh0SW5k
aWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7CisgICAgICAgIHRleHRJbmRpY2F0b3JJbnN0
YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsKKworICAgICAgICBGbG9hdFJl
Y3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07CisgICAgICAgIEZsb2F0UmVj
dCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgp
LnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgRmxvYXRS
ZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRv
ci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIAor
ICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2spIHsKKyAgICAgICAg
ICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAg
ICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3Jk
aW5hdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZmlyc3RUZXh0UmVjdEluVmll
d0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9j
YXRpb24oKSk7CisgICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJ
blZpZXdDb29yZGluYXRlczsKKyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gZmlyc3RUZXh0UmVj
dEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7CisgICAgICAgIAorICAgIH0gZWxzZSB7Cisg
ICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGljdGlvbmFyeVBvcHVwSW5mby5v
cmlnaW47CisgICAgICAgIAorICAgICAgICBoaWdobGlnaHRSZWN0ID0gdGV4dEluZGljYXRvci0+
c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBwb2ludGVyTG9j
YXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5lT3JpZ2luIHRvVmlldzpuaWxd
OworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8V2ViUmV2ZWFsSGlnaGxpZ2h0PiB3ZWJIaWdo
bGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhIaWdo
bGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6IXRleHRJbmRpY2F0
b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmluZzpkaWN0aW9uYXJ5UG9wdXBJ
bmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKKyAgICBSZXRhaW5QdHI8UlZQcmVzZW50aW5n
Q29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50aW5nQ29udGV4dEluc3Rh
bmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9pbnRlckxvY2F0aW9uIGluVmll
dzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRl
Pikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7CisgICAgCisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRl
bSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZGljdGlvbmFy
eVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmluZyBzZWxlY3RlZFJhbmdlOk5T
TWFrZVJhbmdlKDAsIDApXSk7CisgICAgCisgICAgW3dlYkhpZ2hsaWdodCBzZXRDbGVhclRleHRJ
bmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGlnaGxpZ2h0KSwgY2xlYXJUZXh0
SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpXSB7CisgICAgICAgIGlmIChj
bGVhclRleHRJbmRpY2F0b3IpCisgICAgICAgICAgICBjbGVhclRleHRJbmRpY2F0b3IoKTsKKyAg
ICB9XTsKKyAgICAKKyAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06aXRlbS5nZXQoKSBk
b2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9u
czpuaWxdOworICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29u
dGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07Cisg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyNlbmRpZiAvLyAgUExBVEZPUk0oTUFDKQorICAgIAorICAg
IFVOVVNFRF9QQVJBTShjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFS
QU0oZGljdGlvbmFyeVBvcHVwSW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHZpZXcpOworICAgIFVO
VVNFRF9QQVJBTSh0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2spOworICAgIFVOVVNF
RF9QQVJBTShyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BB
UkFNKGNsZWFyVGV4dEluZGljYXRvcik7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworICAgIHJldHVybiBuaWw7Cit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVw
KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAq
dmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3Qo
RmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgc2hvd1BvcHVwT3JDcmVh
dGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQorCit2b2lkIERpY3Rp
b25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
I2lmIFBMQVRGT1JNKE1BQykKKworV0tSZXZlYWxDb250cm9sbGVyIERpY3Rpb25hcnlMb29rdXA6
OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBk
aWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9p
ZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNv
bnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNh
dG9yKQoreworICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIo
dHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlv
bkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVh
clRleHRJbmRpY2F0b3IpKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKaW5kZXggY2I2ZDUzZWI4Zjhj
NGNmZDM4OTQ1N2Y1YmVhZTI4M2EzN2RhODE5Mi4uZjhmNzYxY2RjODFhZWJkM2RmMDg4MzdhMzIz
MWMwOGYzNWE0ZmViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGlj
dGlvbmFyeUxvb2t1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25h
cnlMb29rdXAuaApAQCAtMjMsMTUgKzIzLDI1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNwcmFnbWEgb25jZQorCisjaWYg
UExBVEZPUk0oQ09DT0EpCiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCi0jaW5j
bHVkZSA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5o
PgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAKIE9CSkNfQ0xBU1MgTlNWaWV3OwogT0JKQ19DTEFTUyBQ
REZTZWxlY3Rpb247CiAKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVmIGlkIDxOU0ltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbHNlCit0
eXBlZGVmIGlkIFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTQ4LDggKzU4
LDExIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNob3dQb3B1
cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rp
b248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJh
Y2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1Rv
Vmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
IGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIGhpZGVQb3B1cCgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGlkIDxOU0lt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQ
b3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVu
Y3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2Fs
bGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmll
d1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOworICAgIAorI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIGFuaW1hdGlv
bkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICos
IGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9y
SW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0
UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6
RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKyAgICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTllNDQ3NGE0OWZjYzliMDk1YjJmNGJkYTZjOWFlM2Yz
OGNmZTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIC9kZXYvbnVs
bApAQCAtMSwzODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShSRVZFQUwpCi0KLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJFZGl0aW5nLmgi
Ci0jaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0
ICJGcmFtZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgotI2ltcG9ydCAi
SGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKLSNp
bXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0
ICJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKLSNpbXBv
cnQgIlZpc2libGVVbml0cy5oIgotI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgotI2ltcG9ydCA8
cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0
ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9SZXZl
YWxTUEkuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3
dGYvUmVmUHRyLmg+Ci0KLUBpbnRlcmZhY2UgV2ViUmV2ZWFsSGlnaGxpZ2h0IDxSVlByZXNlbnRl
ckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKLUBwcml2YXRlCi0gICAgRnVuY3Rpb248
dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOwotICAgIE5TUmVjdCBfaGlnaGxpZ2h0UmVjdDsK
LSAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
X2F0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
TlNSZWN0IGhpZ2hsaWdodFJlY3Q7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJP
T0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGln
aGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRy
aWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Ci0tICh2b2lkKXNldENsZWFyVGV4dElu
ZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcjsKLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0Ci0KLUBzeW50aGVzaXplIGhpZ2hs
aWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7Ci1Ac3ludGhlc2l6ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0
PV91c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHN5bnRoZXNpemUgYXR0cmlidXRlZFN0cmluZz1fYXR0
cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDoo
TlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0
SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1
dGVkU3RyaW5nCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgCi0gICAgX2hpZ2hsaWdodFJlY3QgPSBoaWdobGlnaHRSZWN0OwotICAg
IF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBfYXR0cmli
dXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Ci0gICAgCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xl
YXJUZXh0SW5kaWNhdG9yCi17Ci0gICAgX2NsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xl
YXJUZXh0SW5kaWNhdG9yKTsKLX0KLQotLSAoTlNBcnJheTxOU1ZhbHVlICo+ICopcmV2ZWFsQ29u
dGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNGb3JJdGVtOihSVkl0ZW0g
KilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShp
dGVtKTsKLSAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnNlbGYuaGlnaGxpZ2h0
UmVjdF1dOwotfQotCi0tICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQg
Kiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURf
UEFSQU0oaXRlbSk7Ci0gICAgCi0gICAgZm9yIChOU1ZhbHVlICpyZWN0VmFsIGluIGNvbnRleHQu
aXRlbVJlY3RzSW5WaWV3KSB7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gcmVjdFZhbC5yZWN0VmFs
dWU7Ci0KLSAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBhdHRyaWJ1dGVzIGZyb20gdGhlIGF0
dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFncmFwaCBzdHlsZSBhdHRyaWJ1dGUg
aW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCi0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0
aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGZvbnRBdHRyaWJ1dGVz
SW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pXV0p
OwotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaCA9
IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10gaW5pdF0pOwotICAgICAg
ICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRDZW50ZXJdOwotICAgICAg
ICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdldCgpIGZvcktleTpOU1BhcmFncmFw
aFN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAgCi0gICAgICAgIFJldGFpblB0cjxOU0F0dHJpYnV0
ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBhdHRyaWJ1dGVzOmF0
dHJpYnV0ZXMuZ2V0KCldKTsKLSAgICAgICAgW3N0cmluZyBkcmF3SW5SZWN0OnJlY3RdOwotICAg
IH0KLX0KLQotLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29u
dGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRlbTooUlZJdGVtICopaXRlbQotewot
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAg
cmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKLX0KLQotLSAodm9pZClyZXZlYWxDb250
ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbToo
UlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURf
UEFSQU0oaXRlbSk7Ci0gICAgYXV0byBibG9jayA9IFdURk1vdmUoX2NsZWFyVGV4dEluZGljYXRv
cik7Ci0gICAgaWYgKGJsb2NrKQotICAgICAgICBibG9jaygpOwotfQotCi1AZW5kCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkg
Kj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdl
IHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgotICAg
IGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgYXV0
byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotCi0gICAgLy8gQXMgY29u
dGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0
ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
blN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlv
bkVuZCk7Ci0KLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0
KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAg
ICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFy
dCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKLSAgICAK
LSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4
dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0g
PSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcg
c2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2Ug
PSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAotICAgIHJldHVybiB7IFRleHRJdGVy
YXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRp
b24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAotICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci19Ci0K
LXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1
bHQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmICgh
Z2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAg
Ci0gICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0g
ICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4geyBudWxs
cHRyLCBuaWwgfTsKLQotICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgp
OwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0g
ICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBw
b2ludC4KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludElu
SW5uZXJOb2RlRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9p
bnQpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8gcG9zaXRp
b24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0gICAgaWYg
KHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShub2RlKTsKLQotICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7Ci0gICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKLSAgICBpbnQgaGl0SW5kZXg7Ci0g
ICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7Ci0gICAgCi0gICAgaWYgKHNlbGVj
dGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24p
IHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwot
ICAgICAgICAKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUg
c3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgICAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcGFy
YWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgCi0gICAg
ICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgCi0gICAgICAg
IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBo
RW5kKTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9u
RW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRp
bmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwotICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5n
Rm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKLSAg
ICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7
Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3Rl
cnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICAgICAgZnVsbENoYXJh
Y3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0
aW9uLCAyNTApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCi0g
ICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAgICAgCi0gICAgICAgIHNl
bGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgICAgIGhpdElu
ZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgfQotICAgIAotICAg
IE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFu
Z2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFu
Z2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKLSAgICAKLSAg
ICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkp
OwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3Rh
bmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdl
XSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFu
Z2U7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAh
aGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
LSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVy
UmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBu
aWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotfQotCi1zdGF0aWMgdm9pZCBleHBhbmRTZWxl
Y3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1i
ZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVT
dGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKLXsKLSAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxl
Y3Rpb24uc3RyaW5nLmxlbmd0aDsKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3Rh
cnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAgIAotICAgIGNoYXJhY3RlcnNBZGRl
ZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsK
LSAgICAKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFj
dGVyc1RvRXhwYW5kXTsKLSAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5z
dHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFy
dDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXN0ZDo6dHVwbGU8TlNT
dHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNl
bGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICBy
ZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRo
ZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0gICAgaWYgKCFzZWxlY3Rpb24gfHwg
IXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBAIiIsIG5pbCB9Owot
Ci0gICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHRO
Uyhbc2VsZWN0aW9uIGNvcHldKTsKLQotICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0
byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4K
LSAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxl
bmd0aDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAwOwotICAg
IE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7Ci0gICAgZXhwYW5kU2VsZWN0
aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJz
QWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOwotCi0gICAgYXV0byBm
dWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOwotICAgIGF1
dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwg
MCk7Ci0KLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1J
bnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6
cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5o
aWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0g
TlNOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07Ci0K
LSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAt
IGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOwotICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVy
ID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChy
YW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKLQotICAgIFtzZWxlY3Rpb24g
ZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07Ci0gICAgW3NlbGVjdGlv
biBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKLQotICAgIEFTU0VSVChb
c2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vi
c3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOwotICAgIHJldHVybiB7IHNlbGVjdGlv
bi5zdHJpbmcsIG5pbCB9OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAg
IHJldHVybiB7IEAiIiwgbmlsIH07Ci19Ci0KLXN0YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyPiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIo
Ym9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZv
JiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248
dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ss
IGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmll
d0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5k
aWNhdG9yKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBp
ZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIGlmIChOU0RpY3Rpb25hcnkgKm9wdGlv
bnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkpCi0gICAgICAgIFttdXRhYmxl
T3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9uc107Ci0KLSAgICBhdXRvIHRl
eHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlvbmFyeVBvcHVwSW5mby50
ZXh0SW5kaWNhdG9yKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UlZQcmVzZW50ZXI+IHByZXNlbnRl
ciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICAKLSAg
ICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKLSAgICBOU1BvaW50IHBvaW50ZXJMb2NhdGlvbjsKLSAg
ICAKLSAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSkgewotICAgICAg
ICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4dEluZGljYXRvci5nZXQoKSk7
Ci0KLSAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcyA9IHRl
eHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpWzBd
OwotICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0g
dGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
KCk7Ci0gICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGlu
YXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGlu
YXRlcygpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrKSB7Ci0gICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMg
PSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3
Q29vcmRpbmF0ZXMpOwotICAgICAgICAgICAgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29v
cmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayhzZWxlY3Rpb25Cb3Vu
ZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnkodGV4dEJvdW5kaW5nUmVjdElu
Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICBoaWdobGlnaHRSZWN0ID0gc2Vs
ZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIHBvaW50ZXJMb2Nh
dGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwotICAgICAg
ICAKLSAgICB9IGVsc2UgewotICAgICAgICBOU1BvaW50IHRleHRCYXNlbGluZU9yaWdpbiA9IGRp
Y3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOwotICAgICAgICAKLSAgICAgICAgaGlnaGxpZ2h0UmVj
dCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsK
LSAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBvaW50OnRleHRCYXNlbGlu
ZU9yaWdpbiB0b1ZpZXc6bmlsXTsKLSAgICB9Ci0gICAgCi0gICAgUmV0YWluUHRyPFdlYlJldmVh
bEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tXZWJSZXZlYWxIaWdobGlnaHQg
YWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGln
aGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpIGF0dHJpYnV0ZWRTdHJp
bmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpXSk7Ci0gICAgUmV0
YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdE5TKFthbGxvY1JWUHJl
c2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRlckxvY2F0aW9uSW5WaWV3OnBv
aW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50
ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQoKV0pOwotICAgIAotICAgIFJl
dGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKS5zdHJp
bmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOwotICAgIAotICAgIFt3ZWJIaWdo
bGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGlnaHQgPSBXVEZNb3ZlKHdlYkhp
Z2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9y
KV0gewotICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQotICAgICAgICAgICAgY2xlYXJU
ZXh0SW5kaWNhdG9yKCk7Ci0gICAgfV07Ci0gICAgCi0gICAgaWYgKGNyZWF0ZUFuaW1hdGlvbkNv
bnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJG
b3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpj
b250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAgICBbcHJlc2VudGVyIHJldmVhbEl0ZW06aXRl
bS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0
KCkgb3B0aW9uczpuaWxdOwotICAgIHJldHVybiBuaWw7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLXZvaWQgRGljdGlvbmFyeUxvb2t1cDo6
c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8s
IE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4m
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxG
bG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgc2hvd1Bv
cHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5UG9wdXBJbmZv
LCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3
Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQotCi12
b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotCi0gICAgaWYgKCFnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFz
cygpKQotICAgICAgICByZXR1cm47Ci0gICAgW2dldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNs
YXNzKCkgaGlkZURlZmluaXRpb25dOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LX0KLQotaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gRGljdGlvbmFy
eUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1
cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IpCi17Ci0gICAgcmV0dXJuIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5z
dGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZN
b3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oCmluZGV4IDI3NWZhNWY5OTZiMmM1MmUzODYzYzkxODk0ZDM2NGVjY2FlZjk0M2Qu
LmVjYjI4ZDMxMTQxOTcxMzZkNTBmNTEwMGU4NzA2NTlhZDRlYzVhN2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC03MzMsNiArNzMzLDkgQEAgc3RydWN0
IF9VSVdlYlRvdWNoRXZlbnQgewogICAgIGJvb2wgaXNQb3RlbnRpYWxUYXA7CiB9OwogCitAaW50
ZXJmYWNlIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2duaXplcgor
QGVuZAorCiBAY2xhc3MgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyOwogCiBAcHJv
dG9jb2wgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUgPE5TT2JqZWN0
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2Nv
YS5tbQppbmRleCAzOTUzZDBhNTkwZmVmZTE4NmRkMTNhNDM3NjkyMDllNGRmYTFiZDJhLi5mOWVl
ZjYyMjAyNzE4NmJjZGViNGJkZTEyZjk0ZGU1N2I0MGJiMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtMzMsNiArMzMs
NyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0
LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdTUEkuaCIKKyNpbXBvcnQgIldlYlBhZ2VNZXNzYWdl
cy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdJ
dGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0xODgsNSArMTg5
LDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUNsb25lQXR0YWNobWVudChSZWY8QVBJ
OjpBdHRhY2htZW50PiYmIGZyb21BdHRhY2htZW50CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQorICAgIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK3sK
KyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24ocG9pbnQpLCBtX3BhZ2VJRCk7Cit9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKSwgbV9wYWdl
SUQpOwogfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCA1YzQxNDI1
NmY5YjU2OGRkYTVhNjhlM2JhMjkyYWZmNjkzNzc0YjRmLi5iNDk5NTI3YTcwMjEyOGEwYWJiMjNk
YjUwZTQ3MmRhODZmN2MxODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC04Niw2ICs4Niw3IEBAIGNsYXNz
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9
CiAKK0BjbGFzcyBfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBfVUlIaWdobGln
aHRWaWV3OwogQGNsYXNzIF9VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
OwogQGNsYXNzIFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcjsKQEAgLTIwMyw2ICsyMDQsNyBAQCBz
dHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAg
IFJldGFpblB0cjxVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI+IF9ob3Zlckdlc3R1cmVSZWNvZ25p
emVyOworICAgIFJldGFpblB0cjxfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcj4gX2xvb2t1cEdl
c3R1cmVSZWNvZ25pemVyOwogI2VuZGlmCiAKICAgICBSZXRhaW5QdHI8VUlXS1RleHRJbnRlcmFj
dGlvbkFzc2lzdGFudD4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRl
eCA3MGM4ODM2Nzc0ODJmOTlhZjI2MzMyNzI2OTJjOWU2NGM2ODMwZDA0Li5iYzIzM2RhM2EwNjMz
MWI1YzQ3MGYzN2FjZDg1NjM1MmFkMGJmZjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTExMiw2ICsx
MTIsNyBAQAogI2lmIFBMQVRGT1JNKElPU01BQykKICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZl
bnQuaCIKICNpbXBvcnQgPFVJS2l0L1VJSG92ZXJHZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9y
dCA8VUlLaXQvX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgPHBhbC9zcGkv
aW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNlbmRpZgogCkBAIC02NDksNiArNjUwLDExIEBA
IC0gKHZvaWQpc2V0dXBJbnRlcmFjdGlvbgogICAgIF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyID0g
YWRvcHROUyhbW1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6
c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdlZDopXSk7
CiAgICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwogICAgIFtz
ZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsK
KyAgICAKKyAgICBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbX1VJTG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxl
Y3RvcihfbG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6KV0pOworICAgIFtfbG9va3VwR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6
ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKICNlbmRpZgogCiAgICAg
X3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1dLU3ludGhldGljQ2xpY2tU
YXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKF9zaW5nbGVUYXBDb21taXRlZDopXSk7CkBAIC03NTMsNiArNzU5LDkgQEAgLSAodm9p
ZCljbGVhbnVwSW50ZXJhY3Rpb24KICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW19ob3Zlckdl
c3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVy
ZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAorICAgIFtf
bG9va3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiByZW1v
dmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2Vu
ZGlmCiAKICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07
CkBAIC04MzUsNiArODQ0LDcgQEAgLSAodm9pZClfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNvZ25p
emVycwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl90d29GaW5nZXJTaW5nbGVU
YXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtz
ZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgp
XTsKKyAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29n
bml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTg0OSw2ICs4NTksNyBAQCAtICh2b2lkKV9h
ZGREZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6
ZXI6X3R3b0ZpbmdlclNpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFU
Rk9STShJT1NNQUMpCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVy
ZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb29r
dXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtMTQ0Nyw2ICsxNDU4
LDEwIEBAIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKiln
ZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pCiAKICAgICBpZiAoW2dlc3R1cmVSZWNvZ25p
emVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBjbGFzc11dIHx8IFtv
dGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2du
aXplciBjbGFzc11dKQogICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAgIGlmICgoW2dlc3R1
cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNs
YXNzXV0gJiYgW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlMb25nUHJl
c3NHZXN0dXJlUmVjb2duaXplciBjbGFzc11dKSB8fCAoW290aGVyR2VzdHVyZVJlY29nbml6ZXIg
aXNLaW5kT2ZDbGFzczpbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBjbGFzc11dICYmIFtn
ZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJlUmVjb2duaXpl
ciBjbGFzc11dKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKwogI2VuZGlmCiAgICAgaWYgKGlzU2Ft
ZVBhaXIoZ2VzdHVyZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6ZXIsIF9oaWdobGln
aHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSwgX3RleHRTZWxlY3Rpb25Bc3Npc3Rh
bnQuZ2V0KCkuZm9yY2VQcmVzc0dlc3R1cmUpKQogICAgICAgICByZXR1cm4gWUVTOwpAQCAtNTk5
MSw2ICs2MDA2LDEyIEBAIC0gKEJPT0wpYWxsb3dzRGljdGF0aW9uSW5wdXRGb3JMaXN0Vmlld0Nv
bnRyb2xsZXI6KFBVSUNRdWlja2JvYXJkVmlld0NvbnRyb2xsZXIKICNlbmRpZiAvLyBQTEFURk9S
TShXQVRDSE9TKQogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQorLSAodm9pZClfbG9va3VwR2VzdHVy
ZVJlY29nbml6ZWQ6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgorewor
ICAgIE5TUG9pbnQgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcyA9IFtnZXN0dXJlUmVjb2duaXpl
ciBsb2NhdGlvbkluVmlldzpzZWxmXTsKKyAgICBfcGFnZS0+cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQobG9jYXRpb25JblZpZXdDb29yZGluYXRl
cykpOworfQorCiAtICh2b2lkKV9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdlZDooVUlHZXN0
dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiB7CiAgICAgaWYgKCFfcGFnZS0+aXNW
YWxpZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQ
cm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0KaW5kZXggZGM4MDI4MzZkZDYwZTg0MmRhYTEzYWY0NDRiMmY3OTc5MjIyMDQ5MC4uZDk5OGJi
NTYyZWE2NzM0NmMzMWIzMzA4MzNmMmJjMmZiMGY5NmZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC0xMjEsMTEgKzEyMSw2IEBAIGJv
b2wgV2ViUGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5n
JikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6Omdlc3R1cmVDYWxs
YmFjayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBl
LCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzLCBDYWxsYmFja0lEIGNhbGxi
YWNrSUQpCiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2U8R2VzdHVyZUNh
bGxiYWNrPihjYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2Vi
UGFnZVByb3h5TWFjLm1tCmluZGV4IGI1NWNlOWU4ZjM5Y2Y1NmM5MTI1NDBjMzBiOGNjY2Y1NjYy
NzBkMTkuLjBjMmYzZGZjZjhlZTlhYzI4YjdiMTI1Zjc3MjU5N2E3ODExNDZhYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpAQCAtMzIzLDIy
ICszMjMsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UHJvbWlzZWREYXRhRm9ySW1hZ2UoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgUwogCiAjZW5kaWYKIAotdm9pZCBXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLXsK
LSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2Vs
ZWN0aW9uKCksIG1fcGFnZUlEKTsKLX0KLQogLy8gQ29tcGxleCB0ZXh0IGlucHV0IHN1cHBvcnQg
Zm9yIHBsdWctaW5zLgogdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRDb21wbGV4VGV4dElucHV0VG9Q
bHVnaW4odWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgdGV4dElucHV0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDNlNzk0MzFmOTM3MTE0YzQxZjlk
MmRmZDU4ZTBiNGY3MjE4MTU5YTYuLmU2NGUxYjI0YjI0MTFiYTRiZTk2N2JmMWUzZTUxZDcwNjky
Y2Y3NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29h
L1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTI2LDkgKzI2LDIwIEBACiAjaW1wb3J0ICJjb25maWcu
aCIKICNpbXBvcnQgIldlYlBhZ2UuaCIKIAorCiAjaW1wb3J0ICJMb2FkUGFyYW1ldGVycy5oIgor
I2ltcG9ydCAiUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIK
KyNpbXBvcnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9F
ZGl0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9k
ZVJlbmRlclN0eWxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFu
YWdlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlck9iamVjdC5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAKQEAgLTU5LDYgKzcw
LDExNCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm8o
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpOb3dQbGF5aW5nSW5mb0NhbGxiYWNrKGhhc0FjdGl2ZVNlc3Npb24sIHJlZ2lzdGVyZWRBc05v
d1BsYXlpbmdBcHBsaWNhdGlvbiwgdGl0bGUsIGR1cmF0aW9uLCBlbGFwc2VkVGltZSwgdW5pcXVl
SWRlbnRpZmllciwgY2FsbGJhY2tJRCkpOwogfQorICAgIAordm9pZCBXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkK
K3sKKyAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdl
LT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlzIG92ZXIuCisgICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigp
LmhpdFRlc3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dU
b0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOworICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0ZDo6dGllKHJhbmdl
LCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJlc3Vs
dCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8qIGZy
YW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVk
Tm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwg
b3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Cit9
CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJh
bWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsK
KyAgICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6
OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisg
ICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJh
bmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKK30KKwordm9pZCBXZWJQYWdl
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgYXV0
byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b246OkJvdW5jZUFuZENyb3NzZmFkZSk7Cit9CisgICAgCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJl
c2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShm
cmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Cit9CisKK0Rp
Y3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZy
YW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7Cisg
ICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKKyAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKKyAgICAKKyAgICBEaWN0aW9uYXJ5UG9wdXBJ
bmZvIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRl
U3BhY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25h
cnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsK
KyAgICB9CisgICAgCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgcmFuZ2UuYWJz
b2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAg
ICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgSW50UmVjdCBy
YW5nZVJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9z
aW5nQm91bmRpbmdCb3goKSk7CisgICAgCisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0g
cmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGZsb2F0IHNjYWxlZEFz
Y2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKiBwYWdlU2NhbGVG
YWN0b3IoKSA6IDA7CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50
KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQpOworICAgIGRpY3Rp
b25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7CisKKyNpZiBQTEFURk9STShNQUMpCisK
KyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3Ry
aW5nOjpObyk7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+
IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11d
KTsKKyAgICAKKyAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2Vy
IHNoYXJlZEZvbnRNYW5hZ2VyXTsKKyAgICAKKyAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1l
cmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcg
bGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMs
IE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFi
bGVDb3B5XSk7CisgICAgICAgIAorICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmli
dXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChmb250
KQorICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6
ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKKyAgICAgICAgaWYgKGZvbnQp
CisgICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNG
b250QXR0cmlidXRlTmFtZV07CisgICAgICAgIAorICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVk
U3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07
CisgICAgfV07CisKKyNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKQorICAgIAorICAgIFRleHRJ
bmRpY2F0b3JPcHRpb25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNl
Qm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlczsKKyAgICBpZiAo
cHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQorICAgICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRl
eHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0Owor
ICAgIAorICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKTsKKyAgICBpZiAoIXRleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgZWRpdG9y
LnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4g
ZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgZGljdGlvbmFyeVBvcHVwSW5m
by50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmc7CisjZW5kaWYgLy8gI2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBl
ZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgcmV0dXJu
IGRpY3Rpb25hcnlQb3B1cEluZm87Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgppbmRleCBkYmM2ODEyNDRiM2U3MjViODk3ZGVhZTNkNGQxODJjMDZmMDg0YjI0Li42MjFjODU0
OWU5N2JhM2YwNDgxMjQ0MjdkNGJhNTQ0MTk1ZmQwNGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTE4OCw5ICsx
ODgsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICAjIERpY3Rpb25hcnkgc3VwcG9ydC4KICAgICBQZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCkKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oTUFDKQogICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2Vs
ZWN0aW9uKCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGVmM2E1ZjNmNTk0ZjVjZDYyZTJkNWJkYzk4NTM2
M2YxYmE3YWFhNWUuLmQ0ODg0YWY0MTc0NjdkNzEwMzY0N2I0ZTFhYWY4MzFkMDEzMmY2YzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCkBAIC00MTIsMjEgKzQxMiw2IEBAIHZvaWQgV2ViUGFnZTo6c2VuZENvbXBsZXhUZXh0SW5w
dXRUb1BsdWdpbih1aW50NjRfdCwgY29uc3QgU3RyaW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihj
b25zdCBGbG9hdFBvaW50JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYsIFJhbmdlJiwgTlNEaWN0aW9uYXJ5ICosIFRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9y
KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCmluZGV4IDQ3MzNiMWNiZjJmZTQ1Y2Q5ZDBjZWE3ZWVmOWJjN2MzOGFmYWY3
ZTQuLmZhN2E2YWFmMWI2MGJkYTkwZGNkMDc5YmExYTk0MzZmMTIxNmIwZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0z
ODksMTAyICszODksNyBAQCB2b2lkIFdlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbihDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGb250QXRTZWxl
Y3Rpb25DYWxsYmFjayhmb250TmFtZSwgZm9udFNpemUsIHNlbGVjdGlvbkhhc011bHRpcGxlRm9u
dHMsIGNhbGxiYWNrSUQpKTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCi17Ci0gICAg
aWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZy
YW1lKCkpKSB7Ci0gICAgICAgIGlmIChwbHVnaW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlzIG92ZXIuCi0gICAgSGl0VGVzdFJlc3Vs
dCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1
bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHJv
dW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0g
ICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOwotICAgIHN0ZDo6dGllKHJhbmdlLCBvcHRpb25zKSA9
IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7Ci0gICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogZnJhbWUgPSByZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50
KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOwotfQotCi12b2lkIFdlYlBhZ2U6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0
ZWRSYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUoc2VsZWN0
ZWRSYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihz
ZWxlY3Rpb24pOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKQotICAgICAgICBwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywgcHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbik7Ci19CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQotewotICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2Zh
ZGUpOwotfQotCi1EaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cElu
Zm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRp
b25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFu
c2l0aW9uKQotewotICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7Ci0gICAgZWRp
dG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7Ci0KLSAgICBEaWN0aW9u
YXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgaWYgKHJhbmdlLnRleHQoKS5z
dHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWRpdG9yLnNldElzR2V0dGlu
Z0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBv
cHVwSW5mbzsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICByYW5n
ZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7Ci0gICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgewot
ICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0g
ICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIEludFJlY3Qg
cmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCkpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmFu
Z2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOwotICAgIGZsb2F0IHNjYWxlZEFzY2Vu
dCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKiBwYWdlU2NhbGVGYWN0
b3IoKSA6IDA7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50KHJh
bmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQpOwotICAgIGRpY3Rpb25h
cnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7Ci0KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
Km5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJh
bmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0KLSAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nID0g
YWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
Oltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwotCi0gICAgTlNGb250TWFuYWdlciAqZm9u
dE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0KLSAgICBbbnNB
dHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAs
IFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0Rp
Y3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKLSAgICAg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9w
dE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0KLSAgICAgICAgTlNGb250ICpmb250ID0g
W3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAg
ICAgICBpZiAoZm9udCkKLSAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZv
bnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3IoKV07Ci0gICAg
ICAgIGlmIChmb250KQotICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZv
bnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotCi0gICAgICAgIFtzY2FsZWROU0F0dHJp
YnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJh
bmdlXTsKLSAgICB9XTsKLQotICAgIFRleHRJbmRpY2F0b3JPcHRpb25zIGluZGljYXRvck9wdGlv
bnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50
Rm9yQ29tcGxleFJhbmdlczsKLSAgICBpZiAocHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQotICAg
ICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNo
b3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OwotCi0gICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRl
eHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGlj
YXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwotICAgIGlmICghdGV4dEluZGlj
YXRvcikgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhm
YWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAg
IGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEo
KTsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmc7Ci0KLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVw
SW5mbyhmYWxzZSk7Ci0gICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci19CiAKICNpZiBF
TkFCTEUoUERGS0lUX1BMVUdJTikKIApAQCAtNTM5LDExICs0NDQsNiBAQCBEaWN0aW9uYXJ5UG9w
dXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JTZWxlY3Rpb25JblBERlBsdWdp
bihQREZTZWxlYwogCiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9w
dGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRy
YW5zaXRpb24pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdl
LCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkpOwotfQotCiBib29sIFdlYlBhZ2U6
OnBlcmZvcm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBGaXJzdCBnaXZlIGFjY2Vzc2li
aWxpdHkgYSBjaGFuY2UgdG8gaGFuZGxlIHRoZSBldmVudC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355013</attachid>
            <date>2018-11-15 19:10:41 -0800</date>
            <delta_ts>2018-11-16 10:01:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181115191040.patch</filename>
            <type>text/plain</type>
            <size>74582</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk1MzEwYzNhNWFhNTU0
OGJmNDg4MmY2MTA4NGM2MzNhNTdhYzRkZC4uMWZlOWEwMzI1MjU1N2JiYWUzNmRhMzAxZjA0MDhj
ZWMxOWViODEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTUg
IEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW2N1
cmxdIHdhcm5pbmc6IGRlbGV0ZSBjYWxsZWQgb24gbm9uLWZpbmFsICdXZWJDb3JlOjpDdXJsRG93
bmxvYWQnIHRoYXQgaGFzIHZpcnR1YWwgZnVuY3Rpb25zIGJ1dCBub24tdmlydHVhbCBkZXN0cnVj
dG9yIFstV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMmJm
ZWQ4NDkzNWVmZGU3NDJmZDE4OWFhMGZjYWU5OTljZWVlNGRkNy4uMGM0OGMzZmIxNjM3ZGZiNTFk
YmYwMDdjYThkYzI5MjM2MjYwNjMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNh
Z2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTcz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICogcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6
CisKIDIwMTgtMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcmVtb3Zpbmcgc29tZSBXS1NJIGNhbGxz
IG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU3MGU4NjlkNjE0ZTI2ZDQ1ZGQwMTAyZGI3YTQ2NjAz
YmZlN2ExM2MuLmE3OTdkODFkODM3Zjg0MmQzYjQwMWJjYzY5ODAxZmYxMTY3NzE1YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9n
YXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIg
Y3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIExvb2t1cCBpcyBiZWluZyByZXBsYWNlZCBieSBSZXZlYWwuIFRoaXMgZnJh
bWV3b3JrIHNob3VsZCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBwYXRjaCBt
b3ZlcyB0aGUgY29kZSB0aGF0IHdlIGV4cGVjdCB3aWxsIGJlIG5lZWRlZCBmb3IgYWxsIHBsYXRm
b3JtcyB0byB0aGUgbW9yZQorICAgICAgICBnZW5lcmFsIGNvY29hIGFyZWEuIFRoaXMgcGF0Y2gg
Y2hhbmdlcyBubyBmdW5jYXRpb25hbGl0eSwgYW5kIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAg
IGFueXRoaW5nIGN1cnJlbnRseS4gVGhpcyB3b3JrIHdpbGwgYmUgYnVpbGQgb24gbGF0ZXIgd2hl
biBSZXZlYWwgaXMgcmVhZHkgdG8gc3VwcG9ydAorICAgICAgICBtdWx0aXBsZSBwbGF0Zm9ybXMu
CisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IF9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX2FkZERlZmF1bHRHZXN0dXJlUmVjb2duaXplcnNdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
bG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UpOiBEZWxldGVkLgorCiAyMDE4LTExLTE1ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgV0tQcmVmZXJlbmNlc1NldEZv
bnRTbW9vdGhpbmdMZXZlbCBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjE1NTJk
ZjdmNzVmYzUzOWJiODc1NmQwODQ5YjU0ZDY4Njk1NTQwOS4uMTgyNDdkNjRjOWQzMDI5OTYzMDVm
Y2M1NDcyMzVjNGNiNTQxYmUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAyLDYgKzQwMiw3IEBACiAJCQkJMEMyREExMzkx
RjNCRUI0OTAwREJDMzE3IC8qIFBhc3NLaXRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQTFGM0JFQjQ5
MDBEQkMzMTcgLyogcHRocmVhZFNQSS5oICovLAogCQkJCTBDMkRBMTNCMUYzQkVCNDkwMERCQzMx
NyAvKiBRdWFydHpDb3JlU1BJLmggKi8sCisJCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8q
IFJldmVhbFNQSS5oICovLAogCQkJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovLAogCQkJCTBDMkRBMTNDMUYzQkVCNDkwMERCQzMxNyAvKiBTZXJ2ZXJzU1BJ
LmggKi8sCiAJCQkJMEMyREExMkIxRjNCRUI0OTAwREJDMzE3IC8qIFVSTEZvcm1hdHRpbmdTUEku
aCAqLywKQEAgLTQ2Nyw3ICs0NjgsNiBAQAogCQkJCTBDNzc4NTg2MUY0NTEzMEYwMEY0RUJCNiAv
KiBRVEtpdFNQSS5oICovLAogCQkJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0NCAvKiBRdWlja0Ry
YXdTUEkuaCAqLywKIAkJCQkwQzc3ODU4NzFGNDUxMzBGMDBGNEVCQjYgLyogUXVpY2tMb29rTWFj
U1BJLmggKi8sCi0JCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8qIFJldmVhbFNQSS5oICov
LAogCQkJCUExMTc1QjQ4MUY2QUZGOEUwMEM0QjlGMCAvKiBTcGVlY2hTeW50aGVzaXNTUEkuaCAq
LywKIAkJCQkwQzc3ODU4ODFGNDUxMzBGMDBGNEVCQjYgLyogVFVDYWxsU1BJLmggKi8sCiAJCQkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zNDg2NGE2NzYyYWQ5YjYyNTI1ZmU4ZGFhZmJlODdkZDVkYmZlNTBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCitT
T0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQorU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLKFJldmVhbENvcmUpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlBy
ZXNlbnRlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0Nv
bnRleHQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQorCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVh
bC9SVlByZXNlbnRlci5oPgorI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KKyNpbXBvcnQg
PFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgorCisKKyNlbHNlCisKK0BpbnRlcmZhY2UgUlZJdGVt
IDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBO
U19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJWU2VsZWN0aW9u
IDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNs
aWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJh
bmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247
CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAorI2lmIFBMQVRGT1JN
KE1BQykKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0
aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRv
Y3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVz
ZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KW9wdGlvbnM7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorLSAoQk9PTClyZXZlYWxJdGVtOihS
Vkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVu
dENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50
aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworQGVuZAorCisjZW5k
aWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9tYWMvTG9va3VwU1BJLmgKaW5kZXggZWI3Zjk1MWY3MWM3NWM4MTIxN2IyMmU3OGFkYWQzMGU0
ZDZhNWMwNC4uZTBhMzM3NWQzMGNjODg5ZjEzNWVhMmExMWQ0N2QwZGE5NGY5OGE4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaApAQCAtMjMsMTIgKzIzLDEz
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisKKyNpZiBQTEFURk9STShNQUMpCisKICNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rp
b25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAK
LSNpZiBQTEFURk9STShNQUMpCi0KIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05B
TChMb29rdXApCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoTG9va3VwLCBMVUxvb2t1cERlZmlu
aXRpb25Nb2R1bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiOGRhNDJjODU5OTBhZTMyZWE2N2Ew
YWY3NzUzZjNkYjk4MjhhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFs
KQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUpCi1TT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKLVNPRlRfTElOS19DTEFTU19PUFRJT05B
TChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwo
UmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUs
IFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQotI2ltcG9ydCA8
UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+Ci0jaW1wb3J0
IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JldmVhbENv
cmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2JqZWN0IDxOU1NlY3Vy
ZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBz
ZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdOQVRFRF9JTklUSUFM
SVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2JqZWN0Ci0rIChOU1Jh
bmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4IHNlbGVjdGVkUmFu
Z2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2Vs
ZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOwotQGVuZAotCi1AaW50ZXJmYWNl
IFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9j
dW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50
aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChCT09MKXJldmVhbEl0ZW06KFJWSXRlbSAq
KWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4
dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250
ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci1AZW5kCi0KLSNlbmRpZiAvLyAh
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ODBjZmM0ZjYxMWI5NDAxMjgwMWY2ZGRmODA2
YjczNGQ2OTA2YjhkLi4wOWU1YzVlNjY3MDVjMGIzMDBkN2YzYzY5ZjUzZTgyNWQ4MjY5NTg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMjAzLDYgKzEyMDMsNyBAQAogCQk0NDM5MTgwMDFBOTFCMkY4MDA2RTA0RjIgLyogUXVp
Y2tMb29rU29mdExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0MzkxN0ZFMUE5MUIyRjgwMDZFMDRGMiAvKiBRdWlja0xvb2tTb2Z0TGluay5oICov
OyB9OwogCQk0NDU3NzVFNTIwNDcyRjczMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBw
ZWFyYW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQ1Nzc1RTQyMDQ3MkY3MzAwOERDRTVEIC8qIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDU3
NzVFQTIwNDczMDNDMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NTc3NUU5MjA0
NzMwM0IwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLm1tICovOyB9Owor
CQk0NDVGMTZBMDIxOUU2Njk5MDBEMzA5RkYgLyogRGljdGlvbmFyeUxvb2t1cC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzN0ZGM0Q2MUExMDEzMUIw
MDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovOyB9OwogCQk0NDcxNzEwRTIwNUFGOTQ1
MDAwQTExNkUgLyogTWVkaWFRdWVyeVBhcnNlckNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzE3MTBDMjA1QUY5NDUwMDBBMTE2RSAvKiBN
ZWRpYVF1ZXJ5UGFyc2VyQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQ0Nzk1ODA0MTY0M0I0OUEwMDFFMEE3RiAvKiBQYXJzZWRDb250
ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQ3OTU4MDMxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQ4QTI5QkYwQTQ2RDlD
QjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDhBMjlCRDBBNDZEOUNCMDAzMDc1OUYgLyog
SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMjA0MTksNiArMjA0MjAsNyBAQAogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJQzUyMjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKIAkJ
CQlDNTIyN0RGMDFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSAqLywKKwkJCQk5
MzdGRjNENjFBMTAxMzFCMDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk5
QjU1RUVFODFCM0U4ODk4MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJRjQyQ0VC
NTQyMTQwMzFFRTAwMkRDQTcyIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0gKi8sCiAJ
CQkJRjQ4RDJBNzUyMTU2RkU1NzAwQzY3NTJCIC8qIEZvbnRBdHRyaWJ1dGVzQ29jb2EubW0gKi8s
CkBAIC0yNjE0MCw3ICsyNjE0Miw2IEBACiAJCQkJQ0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8q
IEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNFN0IyREIwMTU4NkFCQUQw
MDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTM3RkYz
RDQxQTEwMTJENjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAuaCAqLywKLQkJCQk5MzdGRjNE
NjFBMTAxMzFCMDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk0NDI5NTZD
QTIxOEE2RDMwMDA4MERCNTQgLyogRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSAqLywKIAkJCQlF
RDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovLAogCQkJCTRBOEM5NkVB
MEJFNjkwMzIwMDRFRUZGMCAvKiBGcmFtZVNlbGVjdGlvbk1hYy5tbSAqLywKQEAgLTMyMjM1LDYg
KzMyMjM2LDcgQEAKIAkJCQkxQUJBNzZDQTExRDIwRTUwMDA0QzIwMUMgLyogQ1NTUHJvcGVydHlO
YW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTIzNDgwQzE4QTk4NzBCMDBFNEI2RTggLyog
RGF0YUN1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNThCNDVCQjIwQUQwN0REMDA5OTEwMjUg
LyogRGF0YUxpc3RCdXR0b25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0NUYxNkEw
MjE5RTY2OTkwMEQzMDlGRiAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE1QkUxOEYxRDU0RjVGQjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTcyNEVEMzJDMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MkYxQURBMjFBMzkwNERDMDAwMTRFMTggLyog
RVhURnJhZ0RlcHRoLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4YjRlZTVjY2M3NWNj
ZmExZTA3YzZhZmE1NmE4MTMzYzE2ZDg0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTAsMCArMSw0MDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRGljdGlvbmFy
eUxvb2t1cC5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShSRVZFQUwpCisKKyNp
bXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJFZGl0aW5nLmgiCisjaW1wb3J0ICJGb2N1c0Nv
bnRyb2xsZXIuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5o
IgorI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgorI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgor
I2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJh
bmdlLmgiCisjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKKyNpbXBvcnQgIlRleHRJdGVyYXRvci5o
IgorI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9u
LmgiCisjaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4K
KyNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMv
UmV2ZWFsU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL1JlZlB0ci5oPgorCisKKworI2lmIFBMQVRGT1JNKE1BQykKKworQGludGVyZmFjZSBX
ZWJSZXZlYWxIaWdobGlnaHQgPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmpl
Y3QgeworQHByaXZhdGUKKyAgICBGdW5jdGlvbjx2b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7
CisgICAgTlNSZWN0IF9oaWdobGlnaHRSZWN0OworICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGln
aHQ7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpfYXR0cmlidXRlZFN0cmluZzsKK30KKworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCB1c2VEZWZhdWx0SGlnaGxpZ2h0OworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmc7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVj
dCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hs
aWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0
cmluZzsKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYp
Y2xlYXJUZXh0SW5kaWNhdG9yOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxI
aWdobGlnaHQKKworQHN5bnRoZXNpemUgaGlnaGxpZ2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKK0Bz
eW50aGVzaXplIHVzZURlZmF1bHRIaWdobGlnaHQ9X3VzZURlZmF1bHRIaWdobGlnaHQ7CitAc3lu
dGhlc2l6ZSBhdHRyaWJ1dGVkU3RyaW5nPV9hdHRyaWJ1dGVkU3RyaW5nOworCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZh
dWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzoo
TlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfaGlnaGxp
Z2h0UmVjdCA9IGhpZ2hsaWdodFJlY3Q7CisgICAgX3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VE
ZWZhdWx0SGlnaGxpZ2h0OworICAgIF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmlu
ZzsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDbGVhclRleHRJbmRp
Y2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3IKK3sKKyAgICBfY2xl
YXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpOworfQorCistIChO
U0FycmF5PE5TVmFsdWUgKj4gKilyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICop
Y29udGV4dCByZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBAW1tOU1ZhbHVl
IHZhbHVlV2l0aFJlY3Q6c2VsZi5oaWdobGlnaHRSZWN0XV07Cit9CisKKy0gKHZvaWQpcmV2ZWFs
Q29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbToo
UlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICAKKyAgICBmb3Ig
KE5TVmFsdWUgKnJlY3RWYWwgaW4gY29udGV4dC5pdGVtUmVjdHNJblZpZXcpIHsKKyAgICAgICAg
TlNSZWN0IHJlY3QgPSByZWN0VmFsLnJlY3RWYWx1ZTsKKworICAgICAgICAvLyBHZXQgY3VycmVu
dCBmb250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBh
ZGQgcGFyYWdyYXBoIHN0eWxlIGF0dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50ZXIgdGV4dC4KKyAg
ICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0
dHJpYnV0ZWRTdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxm
LmF0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSldXSk7CisgICAgICAgIFJldGFpblB0cjxOU011dGFi
bGVQYXJhZ3JhcGhTdHlsZT4gcGFyYWdyYXBoID0gYWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFw
aFN0eWxlIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5T
VGV4dEFsaWdubWVudENlbnRlcl07CisgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJh
Z3JhcGguZ2V0KCkgZm9yS2V5Ok5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKKyAgICAK
KyAgICAgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRl
ZFN0cmluZyBzdHJpbmddIGF0dHJpYnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0pOworICAgICAgICBb
c3RyaW5nIGRyYXdJblJlY3Q6cmVjdF07CisgICAgfQorfQorCistIChCT09MKXJldmVhbENvbnRl
eHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGln
aHRGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwor
ICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICByZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxp
Z2h0OworfQorCistICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilj
b250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICBhdXRvIGJsb2Nr
ID0gV1RGTW92ZShfY2xlYXJUZXh0SW5kaWNhdG9yKTsKKyAgICBpZiAoYmxvY2spCisgICAgICAg
IGJsb2NrKCk7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAq
PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07CisgICAgCisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgICAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKKworICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ug
d2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCisgICAg
YXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRv
IHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisKKyAgICAvLyBBcyBjb250
ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRl
eHQuCisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
U3RhcnQpOworICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
RW5kKTsKKworICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQo
KSk7CisgICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOworICAg
IE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOworICAgIAor
ICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOworICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0
KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9
IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBz
ZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9
IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlv
biwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKwor
c3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1
cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3Vs
dCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFn
ZXRSVkl0ZW1DbGFzcygpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAK
KyAgICBhdXRvKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiB7IG51bGxw
dHIsIG5pbCB9OworCisgICAgYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBv
aW50LgorICAgIGF1dG8gZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5J
bm5lck5vZGVGcmFtZSgpOworICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2lu
dCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgYXV0byBwb3NpdGlv
biA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBpZiAo
cG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKG5vZGUpOworCisgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICBOU1JhbmdlIHNlbGVjdGlvblJhbmdlOworICAgIGludCBoaXRJbmRleDsKKyAg
ICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKKyAgICAKKyAgICBpZiAoc2VsZWN0
aW9uLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikg
eworICAgICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
OworICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBz
dXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCisgICAgICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgYXV0byBwYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAg
ICAgYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAg
ZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhF
bmQpOworICAgICAgICAKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25F
bmQpLmdldCgpKSk7CisgICAgICAgIAorICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGlu
Z0ZvckxpbmVSdWxlcyB7IHBvc2l0aW9uIH07CisgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdG
b3JMaW5lUnVsZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOworICAg
ICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsK
KyAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVy
cyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgorICAgICAgICBmdWxsQ2hhcmFj
dGVyUmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRp
b24sIDI1MCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKKyAg
ICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICAKKyAgICAgICAgc2Vs
ZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAgICAgaGl0SW5k
ZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9CisgICAgCisgICAg
TlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5n
ZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5n
ZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOworICAgIAorICAg
IFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7
CisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFu
Y2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2Vd
KTsKKyAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5n
ZTsKKworICAgIGlmIChoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFo
aWdobGlnaHRSYW5nZS5sZW5ndGgpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
ICAgIAorICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJS
YW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5p
bCB9OworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCit9CisKK3N0YXRpYyB2b2lkIGV4cGFuZFNlbGVj
dGlvbkJ5Q2hhcmFjdGVycyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbiwgTlNJbnRlZ2VyIG51bWJl
ck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0LCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHNpemVfdCBvcmlnaW5hbExlbmd0aCA9IHNlbGVj
dGlvbi5zdHJpbmcubGVuZ3RoOworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFy
dDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07CisgICAgCisgICAgY2hhcmFjdGVyc0FkZGVk
QmVmb3JlU3RhcnQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoOwor
ICAgIAorICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bnVtYmVyT2ZDaGFyYWN0
ZXJzVG9FeHBhbmRdOworICAgIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gc2VsZWN0aW9uLnN0
cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aCAtIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0
OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworc3RkOjp0dXBsZTxOU1N0
cmluZyAqLCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6c3RyaW5nRm9yUERGU2Vs
ZWN0aW9uKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhl
cmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KKyAgICBpZiAoIXNlbGVjdGlvbiB8fCAh
c2VsZWN0aW9uLnN0cmluZy5sZW5ndGgpCisgICAgICAgIHJldHVybiB7IEAiIiwgbmlsIH07CisK
KyAgICBSZXRhaW5QdHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JMb29rdXAgPSBhZG9wdE5T
KFtzZWxlY3Rpb24gY29weV0pOworCisgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRv
IHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50Lgor
ICAgIGF1dG8gb3JpZ2luYWxMZW5ndGggPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ10ubGVu
Z3RoOworICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IDA7CisgICAg
TlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gMDsKKyAgICBleHBhbmRTZWxlY3Rp
b25CeUNoYXJhY3RlcnMoc2VsZWN0aW9uRm9yTG9va3VwLmdldCgpLCAyNTAsIGNoYXJhY3RlcnNB
ZGRlZEJlZm9yZVN0YXJ0LCBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCk7CisKKyAgICBhdXRvIGZ1
bGxQbGFpblRleHRTdHJpbmcgPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ107CisgICAgYXV0
byByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCAw
KTsKKworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUlu
c3RhbmNlKCkgaW5pdFdpdGhUZXh0OmZ1bGxQbGFpblRleHRTdHJpbmcgc2VsZWN0ZWRSYW5nZTpy
YW5nZVRvUGFzc10pOworICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBpdGVtLmdldCgpLmhp
Z2hsaWdodFJhbmdlOworICAgIAorICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9PSBO
U05vdEZvdW5kKQorICAgICAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKwor
ICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEJlZm9yZSA9IHJhbmdlVG9QYXNzLmxvY2F0aW9uIC0g
ZXh0cmFjdGVkUmFuZ2UubG9jYXRpb247CisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQWZ0ZXIg
PSAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gKyBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpIC0gKHJh
bmdlVG9QYXNzLmxvY2F0aW9uICsgb3JpZ2luYWxMZW5ndGgpOworCisgICAgW3NlbGVjdGlvbiBl
eHRlbmRTZWxlY3Rpb25BdFN0YXJ0Omxvb2t1cEFkZGVkQmVmb3JlXTsKKyAgICBbc2VsZWN0aW9u
IGV4dGVuZFNlbGVjdGlvbkF0RW5kOmxvb2t1cEFkZGVkQWZ0ZXJdOworCisgICAgQVNTRVJUKFtz
ZWxlY3Rpb24uc3RyaW5nIGlzRXF1YWxUb1N0cmluZzpbZnVsbFBsYWluVGV4dFN0cmluZyBzdWJz
dHJpbmdXaXRoUmFuZ2U6ZXh0cmFjdGVkUmFuZ2VdXSk7CisgICAgcmV0dXJuIHsgc2VsZWN0aW9u
LnN0cmluZywgbmlsIH07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
cmV0dXJuIHsgQCIiLCBuaWwgfTsKK30KKworc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBzaG93
UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250
cm9sbGVyLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBO
U1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248Rmxv
YXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgCisgICAg
aWYgKCFnZXRSVkl0ZW1DbGFzcygpIHx8ICFnZXRSVlByZXNlbnRlckNsYXNzKCkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJs
ZU9wdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwor
ICAgIGlmIChOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlv
bnMuZ2V0KCkpCisgICAgICAgIFttdXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25h
cnk6b3B0aW9uc107CisKKyAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpj
cmVhdGUoZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKTsKKyAgICAKKyAgICBSZXRh
aW5QdHI8UlZQcmVzZW50ZXI+IHByZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJ
bnN0YW5jZSgpIGluaXRdKTsKKyAgICAKKyAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKKyAgICBO
U1BvaW50IHBvaW50ZXJMb2NhdGlvbjsKKyAgICAKKyAgICBpZiAodGV4dEluZGljYXRvci5nZXQo
KS5jb250ZW50SW1hZ2UoKSkgeworICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2Fs
bGJhY2sodGV4dEluZGljYXRvci5nZXQoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4
dFJlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcygpWzBdOworICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRp
bmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rp
b25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2Vs
ZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICAKKyAgICAgICAgaWYg
KHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKSB7CisgICAgICAgICAgICB0ZXh0Qm91
bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjayh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgc2Vs
ZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZl
cnNpb25DYWxsYmFjayhzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRl
cy5tb3ZlQnkodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwor
ICAgICAgICBoaWdobGlnaHRSZWN0ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRp
bmF0ZXM7CisgICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29y
ZGluYXRlcy5sb2NhdGlvbigpOworICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBOU1Bv
aW50IHRleHRCYXNlbGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOworICAg
ICAgICAKKyAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3Zp
ZXcgY29udmVydFBvaW50OnRleHRCYXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKKyAgICB9Cisg
ICAgCisgICAgUmV0YWluUHRyPFdlYlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFk
b3B0TlMoW1tXZWJSZXZlYWxIaWdobGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDog
aGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNv
bnRlbnRJbWFnZSgpIGF0dHJpYnV0ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1
dGVkU3RyaW5nLmdldCgpXSk7CisgICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNv
bnRleHQgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRX
aXRoUG9pbnRlckxvY2F0aW9uSW5WaWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdo
bGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hs
aWdodC5nZXQoKV0pOworICAgIAorICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5T
KFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8u
YXR0cmlidXRlZFN0cmluZy5nZXQoKS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgw
LCAwKV0pOworICAgIAorICAgIFt3ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3
ZWJIaWdobGlnaHQgPSBXVEZNb3ZlKHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9
IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKV0geworICAgICAgICBpZiAoY2xlYXJUZXh0SW5k
aWNhdG9yKQorICAgICAgICAgICAgY2xlYXJUZXh0SW5kaWNhdG9yKCk7CisgICAgfV07CisgICAg
CisgICAgaWYgKGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBbcHJl
c2VudGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250
ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAg
ICBbcHJlc2VudGVyIHJldmVhbEl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHBy
ZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIHJldHVybiBu
aWw7CisgICAgCisjZW5kaWYgLy8gIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBVTlVTRURfUEFS
QU0oY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgVU5VU0VEX1BBUkFNKGRpY3Rpb25h
cnlQb3B1cEluZm8pOworICAgIFVOVVNFRF9QQVJBTSh2aWV3KTsKKyAgICBVTlVTRURfUEFSQU0o
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKTsKKyAgICBVTlVTRURfUEFSQU0ocm9v
dFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2spOworICAgIFVOVVNFRF9QQVJBTShjbGVhclRl
eHRJbmRpY2F0b3IpOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1
cm4gbmlsOworfQorCit2b2lkIERpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cChjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0
IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFs
bGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+
JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9u
Q29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRv
ckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywg
V1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKwordm9pZCBEaWN0aW9uYXJ5TG9va3Vw
OjpoaWRlUG9wdXAoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBQTEFURk9S
TShNQUMpCisKK1dLUmV2ZWFsQ29udHJvbGxlciBEaWN0aW9uYXJ5TG9va3VwOjphbmltYXRpb25D
b250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBv
cHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGlj
YXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAg
ICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKHRydWUsIGRpY3Rp
b25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNh
dG9yKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCmluZGV4IGNiNmQ1M2ViOGY4YzRjZmQzODk0NTdm
NWJlYWUyODNhMzdkYTgxOTIuLmY4Zjc2MWNkYzgxYWViZDNkZjA4ODM3YTMyMzFjMDhmMzVhNGZl
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgK
QEAgLTIzLDE1ICsyMywyNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZiBQTEFURk9STShNQUMpCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKENP
Q09BKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgotI2luY2x1ZGUgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNpZiBQTEFU
Rk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVS
ZWNvZ25pemVyU1BJLmg+CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgogCiBPQkpDX0NMQVNTIE5TVmlldzsKIE9CSkNfQ0xBU1MgUERGU2VsZWN0aW9u
OwogCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBpZCA8TlNJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb25Db250cm9sbGVyPiBXS1JldmVhbENvbnRyb2xsZXI7CisjZWxzZQordHlwZWRlZiBpZCBX
S1JldmVhbENvbnRyb2xsZXI7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC00OCw4ICs1OCwxMSBAQCBwdWJs
aWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzaG93UG9wdXAoY29uc3QgRGlj
dGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4
dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBX
VEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJz
aW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJ
bmRpY2F0b3IgPSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBoaWRl
UG9wdXAoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3Qg
RGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQo
VGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252
ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBhbmltYXRpb25Db250cm9sbGVy
Rm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6
OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlv
bkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9v
dFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCisgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggY2U5ZTQ0NzRhNDlmY2M5YjA5NWIyZjRiZGE2YzlhZTNmMzhjZmU0Ny4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzg4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
RGljdGlvbmFyeUxvb2t1cC5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVWRUFM
KQotCi0jaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRWRpdGluZy5oIgotI2ltcG9ydCAi
Rm9jdXNDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJhbWVTZWxl
Y3Rpb24uaCIKLSNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKLSNpbXBvcnQgIkhpdFRlc3RSZXN1
bHQuaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlJhbmdlLmgiCi0jaW1wb3J0ICJSZW5k
ZXJPYmplY3QuaCIKLSNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgotI2ltcG9ydCAiVmlzaWJsZVBv
c2l0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxl
VW5pdHMuaCIKLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFj
L0xvb2t1cFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0
dXJlUmVjb2duaXplclNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg+Ci0j
aW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1JlZlB0ci5o
PgotCi1AaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGlnaHRE
ZWxlZ2F0ZT4gOiBOU09iamVjdCB7Ci1AcHJpdmF0ZQotICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2Ns
ZWFyVGV4dEluZGljYXRvcjsKLSAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7Ci0gICAgQk9PTCBf
dXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVk
U3RyaW5nOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBoaWdo
bGlnaHRSZWN0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURlZmF1
bHRIaWdobGlnaHQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGln
aGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9P
TCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmlu
ZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOwotLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1
bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAotCi1Ac3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9o
aWdobGlnaHRSZWN0OwotQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVs
dEhpZ2hsaWdodDsKLUBzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJp
bmc7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdo
bGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBh
dHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZwot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAotICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKLSAgICBfdXNlRGVmYXVs
dEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgX2F0dHJpYnV0ZWRTdHJpbmcg
PSBhdHRyaWJ1dGVkU3RyaW5nOwotICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGlj
YXRvcgotewotICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGlj
YXRvcik7Ci19Ci0KLS0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJl
c2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQotewot
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAg
cmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsKLX0K
LQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBk
cmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0p
OwotICAgIAotICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0c0lu
VmlldykgewotICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOwotCi0gICAg
ICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0
cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVyIHRv
IGNlbnRlciB0ZXh0LgotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0
cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERp
Y3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKLSAgICAgICAg
UmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtb
TlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3BhcmFncmFw
aCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKLSAgICAgICAgW2F0dHJpYnV0
ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJp
YnV0ZU5hbWVdOwotICAgIAotICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBz
dHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmlu
Zzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVzLmdl
dCgpXSk7Ci0gICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKLSAgICB9Ci19Ci0KLS0g
KEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hvdWxk
VXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIHJldHVybiBzZWxm
LnVzZURlZmF1bHRIaWdobGlnaHQ7Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVz
ZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0
ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0p
OwotICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOwotICAgIGlm
IChibG9jaykKLSAgICAgICAgYmxvY2soKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYg
KCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAg
ICAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5p
bCB9OwotCi0gICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3
ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KLSAgICBhdXRvIHNlbGVj
dGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9u
RW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLQotICAgIC8vIEFzIGNvbnRleHQsIHdlIGFy
ZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICBh
dXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0g
ICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwotCi0g
ICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLSAgICBp
bnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VS
YW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7Ci0gICAgTlNSYW5nZSBy
YW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRv
U2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7Ci0gICAgCi0gICAgUmVmUHRy
PFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBh
cmFncmFwaEVuZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJh
Y3RlclJhbmdlLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhb
YWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFu
Z2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQo
KS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJh
bmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGln
aHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotfQotCi1zdGQ6OnR1cGxl
PFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0
SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQotewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNs
YXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8q
IG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICghbm9k
ZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
Ci0KLSAgICBhdXRvKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERvbid0
IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0gICAg
YXV0byBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZy
YW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKLSAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUt
PnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwotICAgIGlmIChwb3NpdGlvbi5p
c051bGwoKSkKLSAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bm9kZSk7Ci0KLSAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAg
IE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7Ci0gICAgaW50IGhpdEluZGV4OwotICAgIFJlZlB0cjxS
YW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOwotICAgIAotICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0
aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7Ci0gICAgICAg
IGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAg
IGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5n
IHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9
IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAotICAgICAgICBhdXRvIHJh
bmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9u
U3RhcnQpOwotICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFy
YWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAotICAgICAgICBmdWxsQ2hhcmFj
dGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Ci0gICAg
ICAgIAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkp
KTsKLSAgICAgICAgCi0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1
bGVzIHsgcG9zaXRpb24gfTsKLSAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxl
cy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7Ci0gICAgICAgIHBvc2l0
aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOwotICAgICAgICAv
LyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQg
YmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9
IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQotICAgICAgICAgICAg
cmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgICAgIAotICAgICAgICBzZWxlY3Rpb25SYW5n
ZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBOU1JhbmdlIHNl
bGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpo
aXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlv
blJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07Ci0gICAgCi0gICAgU3RyaW5nIGl0
ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICBSZXRh
aW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRX
aXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOwotICAgIE5T
UmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotCi0gICAg
aWYgKGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdodFJh
bmdlLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAg
cmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdo
bGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0gICAg
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4geyBudWxs
cHRyLCBuaWwgfTsKLSAgICAKLX0KLQotc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFy
YWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0
ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50
ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotCi0gICAgc2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0cmlu
Zy5sZW5ndGg7Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9m
Q2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICAKLSAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFy
dCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7Ci0gICAgCi0gICAg
W3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFu
ZF07Ci0gICAgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0
aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7Ci0KLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1zdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERG
U2VsZWN0aW9uICpzZWxlY3Rpb24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVs
bHB0ciwgbmlsIH07Ci0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBj
aGFyYWN0ZXIgYXQgdGhlIHBvaW50LgotICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24u
c3RyaW5nLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKLQotICAgIFJldGFp
blB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlv
biBjb3B5XSk7Ci0KLSAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBj
aGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgYXV0byBv
cmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7Ci0gICAg
TlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKLSAgICBOU0ludGVnZXIg
Y2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAwOwotICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFj
dGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3Jl
U3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsKLQotICAgIGF1dG8gZnVsbFBsYWluVGV4
dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXTsKLSAgICBhdXRvIHJhbmdlVG9Q
YXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOwotCi0gICAg
UmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBp
bml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNz
XSk7Ci0gICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFu
Z2U7Ci0gICAgCi0gICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQp
Ci0gICAgICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgTlNJbnRl
Z2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0ZWRS
YW5nZS5sb2NhdGlvbjsKLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRyYWN0
ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3Mu
bG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7Ci0KLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVj
dGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZvcmVdOwotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2Vs
ZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRlcl07Ci0KLSAgICBBU1NFUlQoW3NlbGVjdGlvbi5z
dHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhS
YW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKLSAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBu
aWwgfTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4geyBA
IiIsIG5pbCB9OwotfQotCi1zdGF0aWMgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29u
dHJvbGxlcj4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRl
QW5pbWF0aW9uQ29udHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFy
eVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dElu
ZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6
OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9u
Q2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0
ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRdKTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGljdGlv
bmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgpKQotICAgICAgICBbbXV0YWJsZU9wdGlvbnMgYWRk
RW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlvbnNdOwotCi0gICAgYXV0byB0ZXh0SW5kaWNhdG9y
ID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRv
cik7Ci0gICAgCi0gICAgUmV0YWluUHRyPFJWUHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5T
KFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgCi0gICAgTlNSZWN0IGhp
Z2hsaWdodFJlY3Q7Ci0gICAgTlNQb2ludCBwb2ludGVyTG9jYXRpb247Ci0gICAgCi0gICAgaWYg
KHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkpIHsKLSAgICAgICAgdGV4dEluZGlj
YXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRleHRJbmRpY2F0b3IuZ2V0KCkpOwotCi0gICAgICAg
IEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9y
LmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKVswXTsKLSAgICAgICAg
RmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0
b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAgICAg
ICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0
SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykgewot
ICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVz
KTsKLSAgICAgICAgICAgIHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0g
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaXJzdFRleHRS
ZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGlu
YXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBmaXJz
dFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgCi0gICAgfSBl
bHNlIHsKLSAgICAgICAgTlNQb2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9w
dXBJbmZvLm9yaWdpbjsKLSAgICAgICAgCi0gICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5k
aWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAgIHBv
aW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9W
aWV3Om5pbF07Ci0gICAgfQotICAgIAotICAgIFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+
IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0
V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4
dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25h
cnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKV0pOwotICAgIFJldGFpblB0cjxSVlBy
ZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdDb250
ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9jYXRp
b24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0
RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UlZJ
dGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpk
aWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVk
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsKLSAgICAKLSAgICBbd2ViSGlnaGxpZ2h0IHNldENs
ZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBj
bGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcildIHsKLSAgICAg
ICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikKLSAgICAgICAgICAgIGNsZWFyVGV4dEluZGljYXRv
cigpOwotICAgIH1dOwotICAgIAotICAgIGlmIChjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKQot
ICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTppdGVt
LmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQo
KSBvcHRpb25zOm5pbF07Ci0gICAgW3ByZXNlbnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9j
dW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6
bmlsXTsKLSAgICByZXR1cm4gbmlsOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICByZXR1cm4gbmlsOwotfQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cChj
b25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZp
ZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNh
dG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZs
b2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIHNob3dQb3B1cE9yQ3JlYXRl
QW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4
dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25D
YWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKLX0KLQotdm9pZCBEaWN0aW9u
YXJ5TG9va3VwOjpoaWRlUG9wdXAoKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLQotICAgIGlmICghZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFtnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpIGhpZGVE
ZWZpbml0aW9uXTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLWlkIDxO
U0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IERpY3Rpb25hcnlMb29rdXA6OmFu
aW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0
aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChU
ZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0
IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZl
cnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9y
KQotewotICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIodHJ1
ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNh
bGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRl
eHRJbmRpY2F0b3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9z
L1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaApp
bmRleCA5ZWVmYjk3ODRmYmU2ODliMDkwYTViMDFmY2VlY2U3MGQ2NTQxMzJkLi4xOTU1ZDYyZDQw
YjFkODZlNGRkNTEwZWIxNDg4NjFkNGJkYTY5NzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNzM1LDYgKzczNSw5IEBAIHN0cnVjdCBfVUlXZWJUb3Vj
aEV2ZW50IHsKICAgICBib29sIGlzUG90ZW50aWFsVGFwOwogfTsKIAorQGludGVyZmFjZSBfVUlM
b29rdXBHZXN0dXJlUmVjb2duaXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIKK0BlbmQKKwogQGNs
YXNzIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplcjsKIAogQHByb3RvY29sIFVJV2Vi
VG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlIDxOU09iamVjdD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KaW5kZXgg
ZjU2ODc1ZGZmM2ExY2M0NWViZWU2MTcyMTVjZTk1NzIzZjUzZGU0ZS4uNjVhZWNkOTIxOTJmZTY2
NjFmMWJhYTQyZDM0MDc4NmNlNGQxZDUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBv
cnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1NQSS5oIgogI2ltcG9ydCAi
U2FmZUJyb3dzaW5nV2FybmluZy5oIgorI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1w
b3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0l0ZW0uaD4KICNp
bXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTE4OSw1ICsxOTAsMjEgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtQ2xvbmVBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFjaG1l
bnQ+JiYgZnJvbUF0dGFjaG1lbnQKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VM
RU1FTlQpCisgICAgCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmICgh
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2ludCks
IG1fcGFnZUlEKTsKK30KIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJm
b3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7CiB9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCmluZGV4IGM0OGMzOWQ2NmRjMTM5NjQy
MDU2NTRiOWQ1NDBmMGY2ODc4ODQyMGEuLjlkYzM5MDhjYjEwNzYwYmU4MjRhNTljY2ZiZTZmOTMz
Yjc4ZmJmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTg3LDYgKzg3LDcgQEAgY2xhc3MgV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KIAorQGNsYXNz
IF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIF9VSUhpZ2hsaWdodFZpZXc7CiBA
Y2xhc3MgX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xhc3Mg
VUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyOwpAQCAtMjE0LDYgKzIxNSw3IEBAIHN0cnVjdCBXS0F1
dG9Db3JyZWN0aW9uRGF0YSB7CiAKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgUmV0YWluUHRy
PFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcj4gX2hvdmVyR2VzdHVyZVJlY29nbml6ZXI7CisgICAg
UmV0YWluUHRyPF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyPiBfbG9va3VwR2VzdHVyZVJlY29n
bml6ZXI7CiAjZW5kaWYKIAogICAgIFJldGFpblB0cjxVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0
YW50PiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDIxZDMxNzcw
MDZiMWM2ZGYwMTZiYWJmM2UwYzM2YTczODg0MmEwOTIuLjI3Nzc1MDg0ZWU5MjRkYWZkMDU1MDY5
ZmY3ZWIzZDc3ZDQ5OTcxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMTEyLDYgKzExMiw3IEBACiAj
aWYgUExBVEZPUk0oSU9TTUFDKQogI2ltcG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2lt
cG9ydCA8VUlLaXQvVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9f
VUlMb29rdXBHZXN0dXJlUmVjb2duaXplci5oPgogI2ltcG9ydCA8cGFsL3NwaS9pb3MvR3JhcGhp
Y3NTZXJ2aWNlc1NQSS5oPgogI2VuZGlmCiAKQEAgLTY0OSw2ICs2NTAsMTEgQEAgLSAodm9pZClz
ZXR1cEludGVyYWN0aW9uCiAgICAgX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtb
VUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlv
bjpAc2VsZWN0b3IoX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOildKTsKICAgICBbX2hv
dmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CiAgICAgW3NlbGYgYWRkR2Vz
dHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAorICAg
IF9sb29rdXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tfVUlMb29rdXBHZXN0dXJlUmVj
b2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9sb29r
dXBHZXN0dXJlUmVjb2duaXplZDopXSk7CisgICAgW19sb29rdXBHZXN0dXJlUmVjb2duaXplciBz
ZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAogI2VuZGlmCiAKICAgICBfc2luZ2xlVGFw
R2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbV0tTeW50aGV0aWNDbGlja1RhcEdlc3R1cmVS
ZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3Np
bmdsZVRhcENvbW1pdGVkOildKTsKQEAgLTc1Myw2ICs3NTksOSBAQCAtICh2b2lkKWNsZWFudXBJ
bnRlcmFjdGlvbgogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbX2hvdmVyR2VzdHVyZVJlY29n
bml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXpl
cjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCisgICAgW19sb29rdXBHZXN0
dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVS
ZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIAogICAg
IFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKQEAgLTgzNiw2
ICs4NDUsNyBAQCAtICh2b2lkKV9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAgICAg
W3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclNpbmdsZVRhcEdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW3NlbGYgcmVtb3Zl
R2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtz
ZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQo
KV07CiAjZW5kaWYKIH0KIApAQCAtODUwLDYgKzg2MCw3IEBAIC0gKHZvaWQpX2FkZERlZmF1bHRH
ZXN0dXJlUmVjb2duaXplcnMKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfdHdvRmlu
Z2VyU2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBMQVRGT1JNKElPU01B
QykKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBAIC0xNDUwLDYgKzE0NjEsMTAgQEAgLSAo
Qk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNv
Z25pemVyIHNob3VsZFJlY29nbmkKIAogICAgIGlmIChbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5k
T2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gfHwgW290aGVyR2VzdHVy
ZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNsYXNz
XV0pCiAgICAgICAgIHJldHVybiBZRVM7CisgICAgCisgICAgaWYgKChbZ2VzdHVyZVJlY29nbml6
ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAmJiBb
b3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyIGNsYXNzXV0pIHx8IChbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNs
YXNzOltVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gJiYgW2dlc3R1cmVSZWNv
Z25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0p
KQorICAgICAgICByZXR1cm4gWUVTOworCiAjZW5kaWYKICAgICBpZiAoaXNTYW1lUGFpcihnZXN0
dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXplciwgX2hpZ2hsaWdodExvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKS5m
b3JjZVByZXNzR2VzdHVyZSkpCiAgICAgICAgIHJldHVybiBZRVM7CkBAIC02MDMzLDYgKzYwNDgs
MTIgQEAgLSAoQk9PTClhbGxvd3NEaWN0YXRpb25JbnB1dEZvckxpc3RWaWV3Q29udHJvbGxlcjoo
UFVJQ1F1aWNrYm9hcmRWaWV3Q29udHJvbGxlcgogI2VuZGlmIC8vIFBMQVRGT1JNKFdBVENIT1Mp
CiAKICNpZiBQTEFURk9STShJT1NNQUMpCistICh2b2lkKV9sb29rdXBHZXN0dXJlUmVjb2duaXpl
ZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgTlNQb2lu
dCBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzID0gW2dlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9u
SW5WaWV3OnNlbGZdOworICAgIF9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oV2ViQ29yZTo6RmxvYXRQb2ludChsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzKSk7Cit9CisK
IC0gKHZvaWQpX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOihVSUdlc3R1cmVSZWNvZ25p
emVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKICAgICBpZiAoIV9wYWdlLT5pc1ZhbGlkKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBk
YzgwMjgzNmRkNjBlODQyZGFhMTNhZjQ0NGIyZjc5NzkyMjIwNDkwLi5kOTk4YmI1NjJlYTY3MzQ2
YzMxYjMzMDgzM2YyYmMyZmIwZjk2ZmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTEyMSwxMSArMTIxLDYgQEAgYm9vbCBXZWJQYWdl
UHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZUNhbGxiYWNrKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90
IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsK
ICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxHZXN0dXJlQ2FsbGJhY2s+KGNh
bGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBh
Z2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0KaW5kZXggMTVjN2Q3NjE1MzYyMzRiNmJjY2JhMGZkZjNiZDdjNjBhOTZjM2VmMi4uYmJk
ODc5OTk5MTI0MDAzNzQ5ZDAyZjNkNDM4OTM4NGQwZDI2MmNjZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC0zMjMsMjIgKzMyMyw2IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHBvaW50KQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQotewotICAgIGlmICgh
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKSwg
bV9wYWdlSUQpOwotfQotCiAvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1Zy1p
bnMuCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50
NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0
SW5wdXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggM2U3OTQzMWY5MzcxMTRjNDFmOWQyZGZkNThlMGI0
ZjcyMTgxNTlhNi4uZTY0ZTFiMjRiMjQxMWJhNGJlOTY3YmYxZTNlNTFkNzA2OTJjZjc0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbQpAQCAtMjYsOSArMjYsMjAgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiV2ViUGFnZS5oIgogCisKICNpbXBvcnQgIkxvYWRQYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJQ
bHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCA8
V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9jdXND
b250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob2RlUmVuZGVyU3R5
bGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
T2JqZWN0Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKIApAQCAtNTksNiArNzAsMTE0IEBAIHZv
aWQgV2ViUGFnZTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok5vd1BsYXlp
bmdJbmZvQ2FsbGJhY2soaGFzQWN0aXZlU2Vzc2lvbiwgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0Fw
cGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVsYXBzZWRUaW1lLCB1bmlxdWVJZGVudGlmaWVy
LCBjYWxsYmFja0lEKSk7CiB9CisgICAgCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQoreworICAgIGlm
IChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFt
ZSgpKSkgeworICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKGZsb2F0UG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KKyAgICBIaXRUZXN0UmVz
dWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJl
c3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
cm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZTsK
KyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0aWUocmFuZ2UsIG9wdGlvbnMp
ID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKKyAgICBp
ZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byogZnJhbWUgPSByZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRv
Y3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwgKnJhbmdlLCBvcHRpb25zLCBU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKK30KKwordm9pZCBX
ZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGVkUmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0ZDo6
dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JT
ZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2UsIG9wdGlv
bnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBhdXRvJiBmcmFtZSA9
IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgcGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNl
QW5kQ3Jvc3NmYWRlKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpv
cHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25U
cmFuc2l0aW9uKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9y
bURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKGZyYW1lLCByYW5n
ZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsKK30KKworRGljdGlvbmFyeVBv
cHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1l
LCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBFZGl0b3Im
IGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOworICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9u
YXJ5UG9wdXBJbmZvKHRydWUpOworICAgIAorICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlv
bmFyeVBvcHVwSW5mbzsKKyAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlz
RW1wdHkoKSkgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5m
byhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAg
ICAKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICByYW5nZS5hYnNvbHV0ZVRleHRR
dWFkcyhxdWFkcyk7CisgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0b3Iu
c2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBk
aWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBJbnRSZWN0IHJhbmdlUmVjdCA9
IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpKTsKKyAgICAKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5zdGFy
dENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CisgICAgZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5
bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3RvcigpIDog
MDsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0
LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7CisgICAgZGljdGlvbmFyeVBvcHVw
SW5mby5vcHRpb25zID0gb3B0aW9uczsKKworI2lmIFBMQVRGT1JNKE1BQykKKworICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsK
KyAgICAKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOworICAgIAor
ICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9u
dE1hbmFnZXJdOworICAgIAorICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmli
dXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBv
cHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSBy
YW5nZSwgQk9PTCAqc3RvcCkgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFy
eT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsK
KyAgICAgICAgCisgICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVj
dEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAgICAg
ICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9p
bnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICBpZiAoZm9udCkKKyAgICAgICAg
ICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKKyAgICAgICAgCisgICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRk
QXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKKyAgICB9XTsK
KworI2VuZGlmIC8vICNpZiBQTEFURk9STShNQUMpCisgICAgCisgICAgVGV4dEluZGljYXRvck9w
dGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1Jl
Y3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOworICAgIGlmIChwcmVzZW50YXRp
b25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3Vu
Y2VBbmRDcm9zc2ZhZGUpCisgICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRv
ck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7CisgICAgCisgICAg
UmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pOworICAgIGlmICghdGV4dEluZGljYXRvcikgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5
UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRp
Y2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGRp
Y3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0
cmluZzsKKyNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKQorICAgIAorICAgIGVkaXRvci5zZXRJ
c0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICByZXR1cm4gZGljdGlvbmFy
eVBvcHVwSW5mbzsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDQ2
Y2QwNTBkNWUwMDQ2ZDBmZjBhMzcxZDAzMjE0MjVkZjQwYmJjMGYuLjU5NDljNWUwMGM3OWRhMWZh
NGI5ZTliOTY5MzFlMzNmZjMwMjQ0YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtMTkxLDkgKzE5MSw2IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgICMgRGljdGlvbmFyeSBzdXBwb3J0LgogICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRM
b2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShNQUMpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KaW5kZXggZWUwODJjNGE5ZjRhNDQzZTMwYjI2ZGU2ZmQwNjRiMmZhYmQxZTU2
Ny4uMTFkMGM1OGI1ODUzMDMwMWFjM2M1ZjgwMDcwZmY4YWMzNGExZWU5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQx
MywyMSArNDEzLDYgQEAgdm9pZCBXZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2lu
KHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclJhbmdlKEZyYW1lJiwgUmFuZ2UmLCBOU0RpY3Rpb25hcnkgKiwgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9v
bCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3Ry
aW5nJiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KaW5kZXggNDczM2IxY2JmMmZlNDVjZDlkMGNlYTdlZWY5YmM3YzM4YWZhZjdlNC4uZmE3YTZh
YWYxYjYwYmRhOTBkY2QwNzliYTFhOTQzNmYxMjE2YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTM4OSwxMDIgKzM4
OSw3IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxi
YWNrKGZvbnROYW1lLCBmb250U2l6ZSwgc2VsZWN0aW9uSGFzTXVsdGlwbGVGb250cywgY2FsbGJh
Y2tJRCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKLXsKLSAgICBpZiAoYXV0byog
cGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsK
LSAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bihmbG9hdFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGaW5k
IHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9
IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQo
bV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBv
aW50KGZsb2F0UG9pbnQpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBOU0RpY3Rp
b25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUocmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKLSAgICBpZiAoIXJhbmdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgp
IDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29r
dXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb246OkJvdW5jZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNl
bnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOwot
ICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAgICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBv
cHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7
Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFu
c2l0aW9uKTsKLX0KIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3Vy
cmVudFNlbGVjdGlvbigpCi17Ci0gICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7Ci19Ci0K
LURpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdl
KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17
Ci0gICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKLSAgICBlZGl0b3Iuc2V0SXNH
ZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKLQotICAgIERpY3Rpb25hcnlQb3B1cElu
Zm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVT
cGFjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFy
eVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwot
ICAgIH0KLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLmFic29sdXRl
VGV4dFF1YWRzKHF1YWRzKTsKLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVk
aXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0
dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgSW50UmVjdCByYW5nZVJlY3Qg
PSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRp
bmdCb3goKSk7Ci0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENv
bnRhaW5lcigpLnJlbmRlclN0eWxlKCk7Ci0gICAgZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5bGUg
PyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3RvcigpIDogMDsK
LSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0Lngo
KSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5m
by5vcHRpb25zID0gb3B0aW9uczsKLQotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1
dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1
ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLQotICAgIFJldGFpblB0cjxOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmli
dXRlZFN0cmluZyBzdHJpbmddXSk7Ci0KLSAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9
IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLQotICAgIFtuc0F0dHJpYnV0ZWRT
dHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmli
dXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAq
YXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgewotICAgICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJp
YnV0ZXMgbXV0YWJsZUNvcHldKTsKLQotICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0
cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChm
b250KQotICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRv
U2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKLSAgICAgICAgaWYgKGZv
bnQpCi0gICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmlu
ZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwotICAg
IH1dOwotCi0gICAgVGV4dEluZGljYXRvck9wdGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJ
bmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4
UmFuZ2VzOwotICAgIGlmIChwcmVzZW50YXRpb25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpCi0gICAgICAgIGluZGlj
YXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxl
Y3Rpb25IaWdobGlnaHQ7Ci0KLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRv
ciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9u
cywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0g
ICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAg
ICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgZGljdGlvbmFy
eVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwotICAgIGRp
Y3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0
cmluZzsKLQotICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNl
KTsKLSAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLX0KIAogI2lmIEVOQUJMRShQREZL
SVRfUExVR0lOKQogCkBAIC01MzksMTEgKzQ0NCw2IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2Vi
UGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclNlbGVjdGlvbkluUERGUGx1Z2luKFBERlNlbGVj
CiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFu
Z2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMs
IHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5v
bkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewogICAgIC8vIEZpcnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNo
YW5jZSB0byBoYW5kbGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355070</attachid>
            <date>2018-11-16 10:01:49 -0800</date>
            <delta_ts>2018-11-16 10:40:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116100148.patch</filename>
            <type>text/plain</type>
            <size>75352</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk1MzEwYzNhNWFhNTU0
OGJmNDg4MmY2MTA4NGM2MzNhNTdhYzRkZC4uMWZlOWEwMzI1MjU1N2JiYWUzNmRhMzAxZjA0MDhj
ZWMxOWViODEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTUg
IEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW2N1
cmxdIHdhcm5pbmc6IGRlbGV0ZSBjYWxsZWQgb24gbm9uLWZpbmFsICdXZWJDb3JlOjpDdXJsRG93
bmxvYWQnIHRoYXQgaGFzIHZpcnR1YWwgZnVuY3Rpb25zIGJ1dCBub24tdmlydHVhbCBkZXN0cnVj
dG9yIFstV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMmJm
ZWQ4NDkzNWVmZGU3NDJmZDE4OWFhMGZjYWU5OTljZWVlNGRkNy4uMGM0OGMzZmIxNjM3ZGZiNTFk
YmYwMDdjYThkYzI5MjM2MjYwNjMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNh
Z2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTcz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICogcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6
CisKIDIwMTgtMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcmVtb3Zpbmcgc29tZSBXS1NJIGNhbGxz
IG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU3MGU4NjlkNjE0ZTI2ZDQ1ZGQwMTAyZGI3YTQ2NjAz
YmZlN2ExM2MuLmE3OTdkODFkODM3Zjg0MmQzYjQwMWJjYzY5ODAxZmYxMTY3NzE1YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9n
YXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIg
Y3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIExvb2t1cCBpcyBiZWluZyByZXBsYWNlZCBieSBSZXZlYWwuIFRoaXMgZnJh
bWV3b3JrIHNob3VsZCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBwYXRjaCBt
b3ZlcyB0aGUgY29kZSB0aGF0IHdlIGV4cGVjdCB3aWxsIGJlIG5lZWRlZCBmb3IgYWxsIHBsYXRm
b3JtcyB0byB0aGUgbW9yZQorICAgICAgICBnZW5lcmFsIGNvY29hIGFyZWEuIFRoaXMgcGF0Y2gg
Y2hhbmdlcyBubyBmdW5jYXRpb25hbGl0eSwgYW5kIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAg
IGFueXRoaW5nIGN1cnJlbnRseS4gVGhpcyB3b3JrIHdpbGwgYmUgYnVpbGQgb24gbGF0ZXIgd2hl
biBSZXZlYWwgaXMgcmVhZHkgdG8gc3VwcG9ydAorICAgICAgICBtdWx0aXBsZSBwbGF0Zm9ybXMu
CisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IF9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX2FkZERlZmF1bHRHZXN0dXJlUmVjb2duaXplcnNdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
bG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UpOiBEZWxldGVkLgorCiAyMDE4LTExLTE1ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgV0tQcmVmZXJlbmNlc1NldEZv
bnRTbW9vdGhpbmdMZXZlbCBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjE1NTJk
ZjdmNzVmYzUzOWJiODc1NmQwODQ5YjU0ZDY4Njk1NTQwOS4uMTgyNDdkNjRjOWQzMDI5OTYzMDVm
Y2M1NDcyMzVjNGNiNTQxYmUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAyLDYgKzQwMiw3IEBACiAJCQkJMEMyREExMzkx
RjNCRUI0OTAwREJDMzE3IC8qIFBhc3NLaXRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQTFGM0JFQjQ5
MDBEQkMzMTcgLyogcHRocmVhZFNQSS5oICovLAogCQkJCTBDMkRBMTNCMUYzQkVCNDkwMERCQzMx
NyAvKiBRdWFydHpDb3JlU1BJLmggKi8sCisJCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8q
IFJldmVhbFNQSS5oICovLAogCQkJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovLAogCQkJCTBDMkRBMTNDMUYzQkVCNDkwMERCQzMxNyAvKiBTZXJ2ZXJzU1BJ
LmggKi8sCiAJCQkJMEMyREExMkIxRjNCRUI0OTAwREJDMzE3IC8qIFVSTEZvcm1hdHRpbmdTUEku
aCAqLywKQEAgLTQ2Nyw3ICs0NjgsNiBAQAogCQkJCTBDNzc4NTg2MUY0NTEzMEYwMEY0RUJCNiAv
KiBRVEtpdFNQSS5oICovLAogCQkJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0NCAvKiBRdWlja0Ry
YXdTUEkuaCAqLywKIAkJCQkwQzc3ODU4NzFGNDUxMzBGMDBGNEVCQjYgLyogUXVpY2tMb29rTWFj
U1BJLmggKi8sCi0JCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8qIFJldmVhbFNQSS5oICov
LAogCQkJCUExMTc1QjQ4MUY2QUZGOEUwMEM0QjlGMCAvKiBTcGVlY2hTeW50aGVzaXNTUEkuaCAq
LywKIAkJCQkwQzc3ODU4ODFGNDUxMzBGMDBGNEVCQjYgLyogVFVDYWxsU1BJLmggKi8sCiAJCQkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zNDg2NGE2NzYyYWQ5YjYyNTI1ZmU4ZGFhZmJlODdkZDVkYmZlNTBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCitT
T0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQorU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLKFJldmVhbENvcmUpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlBy
ZXNlbnRlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0Nv
bnRleHQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQorCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVh
bC9SVlByZXNlbnRlci5oPgorI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KKyNpbXBvcnQg
PFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgorCisKKyNlbHNlCisKK0BpbnRlcmZhY2UgUlZJdGVt
IDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBO
U19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJWU2VsZWN0aW9u
IDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNs
aWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJh
bmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247
CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAorI2lmIFBMQVRGT1JN
KE1BQykKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0
aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRv
Y3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVz
ZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KW9wdGlvbnM7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorLSAoQk9PTClyZXZlYWxJdGVtOihS
Vkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVu
dENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50
aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworQGVuZAorCisjZW5k
aWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9tYWMvTG9va3VwU1BJLmgKaW5kZXggZWI3Zjk1MWY3MWM3NWM4MTIxN2IyMmU3OGFkYWQzMGU0
ZDZhNWMwNC4uZTBhMzM3NWQzMGNjODg5ZjEzNWVhMmExMWQ0N2QwZGE5NGY5OGE4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaApAQCAtMjMsMTIgKzIzLDEz
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisKKyNpZiBQTEFURk9STShNQUMpCisKICNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rp
b25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAK
LSNpZiBQTEFURk9STShNQUMpCi0KIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05B
TChMb29rdXApCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoTG9va3VwLCBMVUxvb2t1cERlZmlu
aXRpb25Nb2R1bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiOGRhNDJjODU5OTBhZTMyZWE2N2Ew
YWY3NzUzZjNkYjk4MjhhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFs
KQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUpCi1TT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKLVNPRlRfTElOS19DTEFTU19PUFRJT05B
TChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwo
UmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUs
IFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQotI2ltcG9ydCA8
UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+Ci0jaW1wb3J0
IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JldmVhbENv
cmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2JqZWN0IDxOU1NlY3Vy
ZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBz
ZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdOQVRFRF9JTklUSUFM
SVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2JqZWN0Ci0rIChOU1Jh
bmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4IHNlbGVjdGVkUmFu
Z2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2Vs
ZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOwotQGVuZAotCi1AaW50ZXJmYWNl
IFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9j
dW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50
aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChCT09MKXJldmVhbEl0ZW06KFJWSXRlbSAq
KWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4
dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250
ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci1AZW5kCi0KLSNlbmRpZiAvLyAh
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGNiNmRl
Y2IxN2MxZTBlMmVhNTc3ZDI0Mjg2ZTY2MzVkYzcyZjY5NzcuLjQ0YWFjYmEyMWQzMzA0ODllY2Q1
NDY5MWQyMzEyNDNkODE1OTE4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtODQsNiAr
ODQsNyBAQCBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAKIGVkaXRpbmcvU21hcnRS
ZXBsYWNlQ0YuY3BwCiAKIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCiBl
ZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0KIGVkaXRpbmcvY29jb2Ev
Rm9udEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtOTcsNyArOTgsNiBAQCBlZGl0aW5nL2lvcy9EaWN0
YXRpb25Db21tYW5kSU9TLmNwcAogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCiAKIGVkaXRpbmcv
bWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQotZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cC5tbQogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQogZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCiBlZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDg4MGNmYzRmNjExYjk0MDEyODAxZjZkZGY4MDZiNzM0ZDY5MDZiOGQuLjA5ZTVjNWU2NjcwNWMw
YjMwMGQ3ZjNjNjlmNTNlODI1ZDgyNjk1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyMDMsNiArMTIwMyw3IEBACiAJCTQ0
MzkxODAwMUE5MUIyRjgwMDZFMDRGMiAvKiBRdWlja0xvb2tTb2Z0TGluay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzOTE3RkUxQTkxQjJGODAwNkUw
NEYyIC8qIFF1aWNrTG9va1NvZnRMaW5rLmggKi87IH07CiAJCTQ0NTc3NUU1MjA0NzJGNzMwMDhE
Q0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDU3NzVFNDIwNDcyRjczMDA4RENFNUQgLyog
TG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0NTc3NUVBMjA0NzMwM0MwMDhEQ0U1RCAvKiBMb2Nh
bERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQ1Nzc1RTkyMDQ3MzAzQjAwOERDRTVEIC8qIExvY2FsRGVmYXVs
dFN5c3RlbUFwcGVhcmFuY2UubW0gKi87IH07CisJCTQ0NUYxNkEwMjE5RTY2OTkwMEQzMDlGRiAv
KiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAu
bW0gKi87IH07CiAJCTQ0NzE3MTBFMjA1QUY5NDUwMDBBMTE2RSAvKiBNZWRpYVF1ZXJ5UGFyc2Vy
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQ3MTcxMEMyMDVBRjk0NTAwMEExMTZFIC8qIE1lZGlhUXVlcnlQYXJzZXJDb250ZXh0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQ3OTU4MDQx
NjQzQjQ5QTAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDc5NTgwMzE2NDNCNDdCMDAxRTBBN0YgLyog
UGFyc2VkQ29udGVudFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0NDhBMjlCRjBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDQxOSw2
ICsyMDQyMCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVE
NTQgLyogRGF0YURldGVjdGlvbi5oICovLAogCQkJCUM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAv
KiBEYXRhRGV0ZWN0aW9uLm1tICovLAorCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBE
aWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTlCNTVFRUU4MUIzRTg4OTgwMDUzNDJCQyAvKiBF
ZGl0b3JDb2NvYS5tbSAqLywKIAkJCQlGNDJDRUI1NDIxNDAzMUVFMDAyRENBNzIgLyogRm9udEF0
dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbSAqLywKIAkJCQlGNDhEMkE3NTIxNTZGRTU3MDBDNjc1MkIg
LyogRm9udEF0dHJpYnV0ZXNDb2NvYS5tbSAqLywKQEAgLTI2MTQwLDcgKzI2MTQyLDYgQEAKIAkJ
CQlDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVy
LmggKi8sCiAJCQkJQ0U3QjJEQjAxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJ
Q29udHJvbGxlci5tbSAqLywKIAkJCQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEgLyogRGljdGlv
bmFyeUxvb2t1cC5oICovLAotCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9u
YXJ5TG9va3VwLm1tICovLAogCQkJCTQ0Mjk1NkNBMjE4QTZEMzAwMDgwREI1NCAvKiBEaWN0aW9u
YXJ5TG9va3VwTGVnYWN5Lm1tICovLAogCQkJCUVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBF
ZGl0b3JNYWMubW0gKi8sCiAJCQkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2Vs
ZWN0aW9uTWFjLm1tICovLApAQCAtMzIyMzUsNiArMzIyMzYsNyBAQAogCQkJCTFBQkE3NkNBMTFE
MjBFNTAwMDRDMjAxQyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJFMjM0ODBDMThBOTg3MEIwMEU0QjZFOCAvKiBEYXRhQ3VlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUU1OEI0NUJCMjBBRDA3REQwMDk5MTAyNSAvKiBEYXRhTGlzdEJ1dHRvbkVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDQ1RjE2QTAyMTlFNjY5OTAwRDMwOUZGIC8qIERpY3Rpb25h
cnlMb29rdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTVCRTE4RjFENTRGNUZCMDBERDdDNjgg
LyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzI0RUQzMkMx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTcyRjFBREEyMUEzOTA0REMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlM
b29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDhiNGVlNWNjYzc1Y2NmYTFlMDdjNmFmYTU2YTgxMzNjMTZkODQ0Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFy
eUxvb2t1cC5tbQpAQCAtMCwwICsxLDQwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCisKKyNpZiBQTEFURk9STShD
T0NPQSkgJiYgRU5BQkxFKFJFVkVBTCkKKworI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQg
IkVkaXRpbmcuaCIKKyNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWUu
aCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgi
CisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgor
I2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlJlbmRlck9iamVj
dC5oIgorI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24u
aCIKKyNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlZpc2libGVVbml0cy5o
IgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3Vw
U1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9SZXZlYWxTUEkuaD4KKyNpbXBvcnQgPHd0Zi9C
bG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKKworCisjaWYg
UExBVEZPUk0oTUFDKQorCitAaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50
ZXJIaWdobGlnaHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIEZ1bmN0aW9u
PHZvaWQoKT4gX2NsZWFyVGV4dEluZGljYXRvcjsKKyAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7
CisgICAgQk9PTCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
Kl9hdHRyaWJ1dGVkU3RyaW5nOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TUmVjdCBoaWdobGlnaHRSZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIHVzZURlZmF1bHRIaWdobGlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhp
Z2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0
cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOworLSAodm9pZClzZXRDbGVhclRleHRJ
bmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAorCitAc3ludGhlc2l6ZSBoaWdo
bGlnaHRSZWN0PV9oaWdobGlnaHRSZWN0OworQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdo
dD1fdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0BzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0
dHJpYnV0ZWRTdHJpbmc7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6
KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVs
dEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmli
dXRlZFN0cmluZworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIAorICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKKyAg
ICBfdXNlRGVmYXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7CisgICAgX2F0dHJp
YnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nOworICAgIAorICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNs
ZWFyVGV4dEluZGljYXRvcgoreworICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNs
ZWFyVGV4dEluZGljYXRvcik7Cit9CisKKy0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENv
bnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVt
ICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0o
aXRlbSk7CisgICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdo
dFJlY3RdXTsKK30KKworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0
ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOworICAgIAorICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0
Lml0ZW1SZWN0c0luVmlldykgeworICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZh
bHVlOworCisgICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBh
dHRyaWJ1dGVkIHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRl
IGluIG9yZGVyIHRvIGNlbnRlciB0ZXh0LgorICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGlj
dGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0V2l0aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRl
c0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1d
KTsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGgg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgW3BhcmFncmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKKyAgICAg
ICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3Jh
cGhTdHlsZUF0dHJpYnV0ZU5hbWVdOworICAgIAorICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1
dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczph
dHRyaWJ1dGVzLmdldCgpXSk7CisgICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKKyAg
ICB9Cit9CisKKy0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNv
bnRleHQgc2hvdWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sK
KyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAg
IHJldHVybiBzZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29u
dGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06
KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOworICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0
b3IpOworICAgIGlmIChibG9jaykKKyAgICAgICAgYmxvY2soKTsKK30KKworQGVuZAorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dHVwbGU8
UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9y
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygp
KQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gU2lu
Y2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3Jh
YiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZp
c2libGVFbmQoKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhl
IHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0
ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhF
bmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworCisgICAgaW50IGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rp
b25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFr
ZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVu
Z3RoVG9TZWxlY3Rpb25TdGFydCk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFj
dGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAg
U3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsK
KyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5j
ZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsK
KyAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsK
KyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVy
UmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBu
aWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25z
dCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvKiBmcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRo
ZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgYXV0byBmcmFtZVBvaW50ID0g
aGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisKKyAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KGZyYW1lUG9pbnQpOworICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAg
cG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7CisKKyAgICBhdXRv
IHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIE5TUmFuZ2Ugc2VsZWN0aW9u
UmFuZ2U7CisgICAgaW50IGhpdEluZGV4OworICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3Rl
clJhbmdlOworICAgIAorICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2li
bGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uU3Rh
cnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5k
ID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzIGNvbnRl
eHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4
dC4KKyAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0
aW9uU3RhcnQpOworICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFy
dCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOworICAgICAgICBh
dXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVj
dGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAgICAgIAorICAgICAgICBzZWxl
Y3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VU
b1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsK
KyAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51
bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNj
b3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOworICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBh
cmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0
aGUgcG9pbnQuCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91
bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghZnVsbENoYXJhY3RlclJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07CisgICAgICAgIAorICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOworICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlv
bikuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0
UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJh
bmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBk
YXRlU2VsZWN0aW9uOm5pbF07CisgICAgCisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRl
eHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVt
ID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5n
IHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFu
Z2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworCisgICAgaWYgKGhpZ2hsaWdodFJhbmdl
LmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlv
biwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAK
K30KKworc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlv
biAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50
ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0Fk
ZGVkQWZ0ZXJFbmQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
c2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7CisgICAgW3Nl
bGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5k
XTsKKyAgICAKKyAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJp
bmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7CisgICAgCisgICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07CisgICAgY2hhcmFjdGVy
c0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3Ro
IC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworfQorCitzdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0
aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rp
b24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICgh
Z2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBv
aW50LgorICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKKworICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+
IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7CisKKyAgICAv
LyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQg
YmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCisgICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtz
ZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3Rl
cnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0
ZXJFbmQgPSAwOworICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JM
b29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNB
ZGRlZEFmdGVyRW5kKTsKKworICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rp
b25Gb3JMb29rdXAgc3RyaW5nXTsKKyAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2Uo
Y2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOworCisgICAgUmV0YWluUHRyPFJWSXRlbT4g
aXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBs
YWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBl
eHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgaWYg
KGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiB7
IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVm
b3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKKyAg
ICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiAr
IGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5h
bExlbmd0aCk7CisKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3Vw
QWRkZWRCZWZvcmVdOworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3Vw
QWRkZWRBZnRlcl07CisKKyAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3Ry
aW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5n
ZV1dKTsKKyAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4geyBAIiIsIG5pbCB9OworfQorCitz
dGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJv
bGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1
cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkgfHwgIWdl
dFJWUHJlc2VudGVyQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9u
cyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKKyAgICAgICAgW211dGFibGVP
cHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKKworICAgIGF1dG8gdGV4
dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRl
eHRJbmRpY2F0b3IpOworICAgIAorICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVy
ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOworICAgIAorICAg
IE5TUmVjdCBoaWdobGlnaHRSZWN0OworICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOworICAg
IAorICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7CisgICAgICAg
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsK
KworICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4
dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07
CisgICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
KTsKKyAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKCk7CisgICAgICAgIAorICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyk7CisgICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7CisgICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxl
Y3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKKyAgICAgICAgcG9pbnRlckxvY2F0
aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7CisgICAgICAg
IAorICAgIH0gZWxzZSB7CisgICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcmlnaW47CisgICAgICAgIAorICAgICAgICBoaWdobGlnaHRSZWN0
ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwor
ICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5l
T3JpZ2luIHRvVmlldzpuaWxdOworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8V2ViUmV2ZWFs
SGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBh
bGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmlu
ZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKKyAgICBSZXRh
aW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVz
ZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9p
bnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRl
ckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7CisgICAgCisgICAgUmV0
YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0
V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmlu
ZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7CisgICAgCisgICAgW3dlYkhpZ2hs
aWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGln
aGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3Ip
XSB7CisgICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCisgICAgICAgICAgICBjbGVhclRl
eHRJbmRpY2F0b3IoKTsKKyAgICB9XTsKKyAgICAKKyAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZv
ckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNv
bnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVt
LmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQo
KSBvcHRpb25zOm5pbF07CisgICAgcmV0dXJuIG5pbDsKKyAgICAKKyNlbmRpZiAvLyAgUExBVEZP
Uk0oTUFDKQorICAgIAorICAgIFVOVVNFRF9QQVJBTShjcmVhdGVBbmltYXRpb25Db250cm9sbGVy
KTsKKyAgICBVTlVTRURfUEFSQU0oZGljdGlvbmFyeVBvcHVwSW5mbyk7CisgICAgVU5VU0VEX1BB
UkFNKHZpZXcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2Fs
bGJhY2spOworICAgIFVOVVNFRF9QQVJBTShyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFj
ayk7CisgICAgVU5VU0VEX1BBUkFNKGNsZWFyVGV4dEluZGljYXRvcik7CisKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBuaWw7Cit9CisKK3ZvaWQgRGljdGlvbmFy
eUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQ
b3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRp
Y2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpG
dW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7Cisg
ICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5
UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RW
aWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikp
OworfQorCit2b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKworV0tSZXZlYWxDb250cm9sbGVy
IERpY3Rpb25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0
IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFs
bGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+
JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIodHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dElu
ZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKworI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5
TG9va3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgK
aW5kZXggY2I2ZDUzZWI4ZjhjNGNmZDM4OTQ1N2Y1YmVhZTI4M2EzN2RhODE5Mi4uZjhmNzYxY2Rj
ODFhZWJkM2RmMDg4MzdhMzIzMWMwOGYzNWE0ZmViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaApAQCAtMjMsMTUgKzIzLDI1IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNw
cmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5
UG9wdXBJbmZvLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0
dXJlUmVjb2duaXplclNQSS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAKIE9CSkNfQ0xBU1MgTlNW
aWV3OwogT0JKQ19DTEFTUyBQREZTZWxlY3Rpb247CiAKKyNpZiBQTEFURk9STShNQUMpCit0eXBl
ZGVmIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IFdLUmV2ZWFsQ29u
dHJvbGxlcjsKKyNlbHNlCit0eXBlZGVmIGlkIFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSGl0VGVzdFJl
c3VsdDsKQEAgLTQ4LDggKzU4LDExIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICos
IGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9y
SW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0
UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6
RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGhpZGVQb3B1cCgpOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1h
dGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3
ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNh
dG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZs
b2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOworICAg
IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgV0tSZXZlYWxD
b250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9w
dXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9y
Jik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rp
b248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFj
ayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9
IG51bGxwdHIpOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5
TG9va3VwLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTllNDQ3NGE0OWZjYzli
MDk1YjJmNGJkYTZjOWFlM2YzOGNmZTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCi0KLSNpZiBQ
TEFURk9STShNQUMpICYmIEVOQUJMRShSRVZFQUwpCi0KLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0j
aW1wb3J0ICJFZGl0aW5nLmgiCi0jaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQg
IkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAiSFRNTENvbnZl
cnRlci5oIgotI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2lt
cG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiVGV4dEl0
ZXJhdG9yLmgiCi0jaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIlZpc2libGVT
ZWxlY3Rpb24uaCIKLSNpbXBvcnQgIlZpc2libGVVbml0cy5oIgotI2ltcG9ydCA8UERGS2l0L1BE
RktpdC5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+Ci0jaW1wb3J0IDxwYWwv
c3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0
IDxwYWwvc3BpL21hYy9SZXZlYWxTUEkuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRp
b25zLmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0KLUBpbnRlcmZhY2UgV2ViUmV2ZWFsSGln
aGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKLUBwcml2
YXRlCi0gICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOwotICAgIE5TUmVj
dCBfaGlnaGxpZ2h0UmVjdDsKLSAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0
UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmli
dXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Ci0tICh2
b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dElu
ZGljYXRvcjsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0Ci0K
LUBzeW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7Ci1Ac3ludGhlc2l6ZSB1
c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHN5bnRoZXNpemUgYXR0
cmlidXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdo
dDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRl
ZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX2hpZ2hsaWdodFJlY3QgPSBo
aWdobGlnaHRSZWN0OwotICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhpZ2hs
aWdodDsKLSAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Ci0gICAgCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5j
dGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCi17Ci0gICAgX2NsZWFyVGV4dEluZGlj
YXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKLX0KLQotLSAoTlNBcnJheTxOU1Zh
bHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVj
dHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwot
ICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhS
ZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOwotfQotCi0tICh2b2lkKXJldmVhbENvbnRleHQ6KFJW
UHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0
ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgCi0gICAgZm9yIChOU1ZhbHVlICpy
ZWN0VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7Ci0gICAgICAgIE5TUmVjdCByZWN0
ID0gcmVjdFZhbC5yZWN0VmFsdWU7Ci0KLSAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBhdHRy
aWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFncmFw
aCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCi0gICAgICAgIFJldGFp
blB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVkU3Ry
aW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1dGVk
U3RyaW5nIGxlbmd0aF0pXV0pOwotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBo
U3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxv
Y10gaW5pdF0pOwotICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1l
bnRDZW50ZXJdOwotICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdldCgp
IGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAgCi0gICAgICAgIFJl
dGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgc3Ry
aW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKLSAgICAgICAgW3N0cmluZyBkcmF3
SW5SZWN0OnJlY3RdOwotICAgIH0KLX0KLQotLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlByZXNl
bnRpbmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRlbToo
UlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURf
UEFSQU0oaXRlbSk7Ci0gICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKLX0KLQot
LSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9w
SGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgYXV0byBibG9jayA9IFdURk1vdmUo
X2NsZWFyVGV4dEluZGljYXRvcik7Ci0gICAgaWYgKGJsb2NrKQotICAgICAgICBibG9jaygpOwot
fQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFu
Z2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAg
IHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9
IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkK
LSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBTaW5jZSB3ZSBhbHJl
YWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1
cm5lZCBvcHRpb25zLgotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgp
OwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRp
bmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9m
UGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9m
UGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0KLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFy
dCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBz
ZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rp
b25FbmQpLmdldCgpKTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVu
Z3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVj
dGlvblN0YXJ0KTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9
IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRl
bVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFp
blB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdp
dGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5TUmFu
Z2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAotICAg
IHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGln
aGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAg
IAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsgbnVs
bHB0ciwgbmlsIH07Ci19Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5
ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIGhpdFRlc3RSZXN1bHQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVs
bHB0ciwgbmlsIH07Ci0gICAgCi0gICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+
ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8g
Y2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVz
dWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5yYW5n
ZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
LQotICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJh
bWVQb2ludCk7Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9
IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLQotICAgIGF1dG8gc2VsZWN0aW9u
ID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKLSAg
ICBpbnQgaGl0SW5kZXg7Ci0gICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7Ci0g
ICAgCi0gICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlv
bjo6UmFuZ2VTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rp
b24udmlzaWJsZUVuZCgpOwotICAgICAgICAKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJl
IGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgICAg
ICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7
Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5k
KTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJh
bmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFuZ2VU
b1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsK
LSAgICAgICAgCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdl
ID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9u
U3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rp
b25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0SW5k
ZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwg
cG9zaXRpb24pLmdldCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwotICAgICAgICBz
ZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29y
ZEdyYW51bGFyaXR5KTsKLSAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9y
TGluZVJ1bGVzLnN0YXJ0KCk7Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0
byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4K
LSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9u
QnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmdWxs
Q2hhcmFjdGVyUmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAg
ICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwg
MCk7Ci0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7
Ci0gICAgfQotICAgIAotICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlv
bkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05T
VmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rp
b246bmlsXTsKLSAgICAKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hh
cmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5T
KFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRS
YW5nZTpzZWxlY3RlZFJhbmdlXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0u
Z2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24g
PT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4g
eyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJh
bmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGln
aHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotfQotCi1zdGF0
aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rp
b24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFy
YWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVu
ZCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBzaXplX3Qgb3Jp
Z2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKLSAgICBbc2VsZWN0aW9uIGV4
dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAgIAot
ICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGgg
LSBvcmlnaW5hbExlbmd0aDsKLSAgICAKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0
RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICBjaGFyYWN0ZXJzQWRkZWRBZnRl
ckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0
ZXJzQWRkZWRCZWZvcmVTdGFydDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19
Ci0KLXN0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29r
dXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKLXsKLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1D
bGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERvbid0
IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0gICAg
aWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQotICAgICAgICByZXR1
cm4geyBAIiIsIG5pbCB9OwotCi0gICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9u
Rm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKLQotICAgIC8vIEFzIGNvbnRl
eHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5k
IGFmdGVyIHRoZSBwb2ludC4KLSAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZv
ckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVm
b3JlU3RhcnQgPSAwOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7
Ci0gICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQo
KSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJF
bmQpOwotCi0gICAgYXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1
cCBzdHJpbmddOwotICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJz
QWRkZWRCZWZvcmVTdGFydCwgMCk7Ci0KLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRv
cHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3Ry
aW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGV4dHJhY3RlZFJh
bmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICBpZiAoZXh0cmFjdGVk
UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9u
LnN0cmluZywgbmlsIH07Ci0KLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5n
ZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOwotICAgIE5TSW50ZWdl
ciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVk
UmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsK
LQotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9y
ZV07Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVy
XTsKLQotICAgIEFTU0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQ
bGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOwotICAg
IHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLQotICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci19Ci0KLXN0YXRpYyBpZCA8
TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBzaG93UG9wdXBPckNyZWF0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNv
bnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5z
dGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVj
dCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIGlmIChO
U0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkp
Ci0gICAgICAgIFttdXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9u
c107Ci0KLSAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGlj
dGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UlZQ
cmVzZW50ZXI+IHByZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgp
IGluaXRdKTsKLSAgICAKLSAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKLSAgICBOU1BvaW50IHBv
aW50ZXJMb2NhdGlvbjsKLSAgICAKLSAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50
SW1hZ2UoKSkgewotICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4
dEluZGljYXRvci5nZXQoKSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZp
ZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1Jl
Y3RDb29yZGluYXRlcygpWzBdOwotICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdElu
Vmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5S
b290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGlu
Z1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVj
dEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0
Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICAgICAgc2VsZWN0aW9uQm91
bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjayhzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnko
dGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICBo
aWdobGlnaHRSZWN0ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7Ci0g
ICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5s
b2NhdGlvbigpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBOU1BvaW50IHRleHRC
YXNlbGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOwotICAgICAgICAKLSAg
ICAgICAgaGlnaGxpZ2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVy
dFBvaW50OnRleHRCYXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKLSAgICB9Ci0gICAgCi0gICAg
UmV0YWluUHRyPFdlYlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tX
ZWJSZXZlYWxIaWdobGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0
UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFn
ZSgpIGF0dHJpYnV0ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5n
LmdldCgpXSk7Ci0gICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdE5TKFthbGxvY1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRl
ckxvY2F0aW9uSW5WaWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxl
Z2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQo
KV0pOwotICAgIAotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JW
SXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRl
ZFN0cmluZy5nZXQoKS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOwot
ICAgIAotICAgIFt3ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGln
aHQgPSBXVEZNb3ZlKHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUo
Y2xlYXJUZXh0SW5kaWNhdG9yKV0gewotICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQot
ICAgICAgICAgICAgY2xlYXJUZXh0SW5kaWNhdG9yKCk7Ci0gICAgfV07Ci0gICAgCi0gICAgaWYg
KGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFu
aW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBw
cmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAgICBbcHJlc2Vu
dGVyIHJldmVhbEl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdD
b250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLXZvaWQg
RGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRp
Y3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lk
KFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29u
c3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0
b3IpCi17Ci0gICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBk
aWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJh
Y2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dElu
ZGljYXRvcikpOwotfQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCi17Ci0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgaWYgKCFnZXRMVUxvb2t1cERl
ZmluaXRpb25Nb2R1bGVDbGFzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgW2dldExVTG9va3Vw
RGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkgaGlkZURlZmluaXRpb25dOwotCi0gICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLX0KLQotaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29u
dHJvbGxlcj4gRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNv
bnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmll
dywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0
b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxv
YXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgcmV0dXJuIHNob3dQb3B1cE9y
Q3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3
LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVy
c2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDllZWZiOTc4NGZiZTY4OWIwOTBhNWIw
MWZjZWVjZTcwZDY1NDEzMmQuLjE5NTVkNjJkNDBiMWQ4NmU0ZGQ1MTBlYjE0ODg2MWQ0YmRhNjk3
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC03MzUs
NiArNzM1LDkgQEAgc3RydWN0IF9VSVdlYlRvdWNoRXZlbnQgewogICAgIGJvb2wgaXNQb3RlbnRp
YWxUYXA7CiB9OwogCitAaW50ZXJmYWNlIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIDogVUlH
ZXN0dXJlUmVjb2duaXplcgorQGVuZAorCiBAY2xhc3MgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVS
ZWNvZ25pemVyOwogCiBAcHJvdG9jb2wgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVy
RGVsZWdhdGUgPE5TT2JqZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQYWdlUHJveHlDb2NvYS5tbQppbmRleCBmNTY4NzVkZmYzYTFjYzQ1ZWJlZTYxNzIxNWNl
OTU3MjNmNTNkZTRlLi42NWFlY2Q5MjE5MmZlNjY2MWYxYmFhNDJkMzQwNzg2Y2U0ZDFkNTMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2Nv
YS5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAi
U2FmZUJyb3dzaW5nU1BJLmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCisjaW1w
b3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2lt
cG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgpAQCAtMTg5LDUgKzE5MCwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1DbG9u
ZUF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNobWVudD4mJiBmcm9tQXR0YWNobWVudAogfQogCiAj
ZW5kaWYgLy8gRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICAKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rp
b25hcnlMb29rdXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOworfQogCit2b2lkIFdlYlBh
Z2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQorewor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50
U2VsZWN0aW9uKCksIG1fcGFnZUlEKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLmgKaW5kZXggYzQ4YzM5ZDY2ZGMxMzk2NDIwNTY1NGI5ZDU0MGYwZjY4Nzg4NDIwYS4uOWRj
MzkwOGNiMTA3NjBiZTgyNGE1OWNjZmJlNmY5MzNiNzhmYmY1MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAt
ODcsNiArODcsNyBAQCBjbGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5OwogY2xh
c3MgV2ViUGFnZVByb3h5OwogfQogCitAY2xhc3MgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXI7
CiBAY2xhc3MgX1VJSGlnaGxpZ2h0VmlldzsKIEBjbGFzcyBfVUlXZWJIaWdobGlnaHRMb25nUHJl
c3NHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI7CkBA
IC0yMTQsNiArMjE1LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIAogI2lmIFBM
QVRGT1JNKElPU01BQykKICAgICBSZXRhaW5QdHI8VUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyPiBf
aG92ZXJHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8X1VJTG9va3VwR2VzdHVyZVJl
Y29nbml6ZXI+IF9sb29rdXBHZXN0dXJlUmVjb2duaXplcjsKICNlbmRpZgogCiAgICAgUmV0YWlu
UHRyPFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQ+IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW0KaW5kZXggMjFkMzE3NzAwNmIxYzZkZjAxNmJhYmYzZTBjMzZhNzM4ODQy
YTA5Mi4uMjc3NzUwODRlZTkyNGRhZmQwNTUwNjlmZjdlYjNkNzdkNDk5NzFhOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCkBAIC0xMTIsNiArMTEyLDcgQEAKICNpZiBQTEFURk9STShJT1NNQUMpCiAjaW1wb3J0
ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW1wb3J0IDxVSUtpdC9VSUhvdmVyR2VzdHVyZVJl
Y29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJS2l0L19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmg+
CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CiAjZW5kaWYKIApA
QCAtNjQ5LDYgKzY1MCwxMSBAQCAtICh2b2lkKXNldHVwSW50ZXJhY3Rpb24KICAgICBfaG92ZXJH
ZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgYWxs
b2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfaG92ZXJHZXN0dXJlUmVj
b2duaXplckNoYW5nZWQ6KV0pOwogICAgIFtfaG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXREZWxl
Z2F0ZTpzZWxmXTsKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJl
UmVjb2duaXplci5nZXQoKV07CisgICAgCisgICAgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyID0g
YWRvcHROUyhbW19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdl
dDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOildKTsKKyAg
ICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtzZWxm
IGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07Cisg
ICAgCiAjZW5kaWYKIAogICAgIF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMo
W1tXS1N5bnRoZXRpY0NsaWNrVGFwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFy
Z2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2luZ2xlVGFwQ29tbWl0ZWQ6KV0pOwpAQCAtNzUz
LDYgKzc1OSw5IEBAIC0gKHZvaWQpY2xlYW51cEludGVyYWN0aW9uCiAjaWYgUExBVEZPUk0oSU9T
TUFDKQogICAgIFtfaG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwogICAg
IFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdl
dCgpXTsKKyAgICAKKyAgICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5p
bF07CisgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNv
Z25pemVyLmdldCgpXTsKICNlbmRpZgogCiAgICAgW19zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpuaWxdOwpAQCAtODM2LDYgKzg0NSw3IEBAIC0gKHZvaWQpX3JlbW92ZURl
ZmF1bHRHZXN0dXJlUmVjb2duaXplcnMKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXpl
cjpfdHdvRmluZ2VyU2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBMQVRG
T1JNKElPU01BQykKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0
dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6
X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBAIC04NTAsNiAr
ODYwLDcgQEAgLSAodm9pZClfYWRkRGVmYXVsdEdlc3R1cmVSZWNvZ25pemVycwogICAgIFtzZWxm
IGFkZEdlc3R1cmVSZWNvZ25pemVyOl90d29GaW5nZXJTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNv
Z25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICBbc2VsZiBhZGRHZXN0
dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9
CiAKQEAgLTE0NTAsNiArMTQ2MSwxMCBAQCAtIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdl
c3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaQogCiAgICAg
aWYgKFtnZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29n
bml6ZXIgY2xhc3NdXSB8fCBbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltV
SUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICAKKyAgICBpZiAoKFtnZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBH
ZXN0dXJlUmVjb2duaXplciBjbGFzc11dICYmIFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2lu
ZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkgfHwgKFtvdGhl
ckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXIgY2xhc3NdXSAmJiBbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkpCisgICAgICAgIHJldHVybiBZRVM7CisKICNl
bmRpZgogICAgIGlmIChpc1NhbWVQYWlyKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVS
ZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF90
ZXh0U2VsZWN0aW9uQXNzaXN0YW50LmdldCgpLmZvcmNlUHJlc3NHZXN0dXJlKSkKICAgICAgICAg
cmV0dXJuIFlFUzsKQEAgLTYwMzMsNiArNjA0OCwxMiBAQCAtIChCT09MKWFsbG93c0RpY3RhdGlv
bklucHV0Rm9yTGlzdFZpZXdDb250cm9sbGVyOihQVUlDUXVpY2tib2FyZFZpZXdDb250cm9sbGVy
CiAjZW5kaWYgLy8gUExBVEZPUk0oV0FUQ0hPUykKIAogI2lmIFBMQVRGT1JNKElPU01BQykKKy0g
KHZvaWQpX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2Vz
dHVyZVJlY29nbml6ZXIKK3sKKyAgICBOU1BvaW50IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMg
PSBbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRpb25JblZpZXc6c2VsZl07CisgICAgX3BhZ2UtPnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KGxvY2F0
aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKTsKK30KKwogLSAodm9pZClfaG92ZXJHZXN0dXJlUmVjb2du
aXplckNoYW5nZWQ6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgogewog
ICAgIGlmICghX3BhZ2UtPmlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IGRjODAyODM2ZGQ2MGU4NDJkYWExM2FmNDQ0YjJm
Nzk3OTIyMjA0OTAuLmQ5OThiYjU2MmVhNjczNDZjMzFiMzMwODMzZjJiYzJmYjBmOTZmYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAt
MTIxLDExICsxMjEsNiBAQCBib29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2ViUGFn
ZVByb3h5OjpnZXN0dXJlQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1
aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFn
cywgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxi
YWNrcy50YWtlPEdlc3R1cmVDYWxsYmFjaz4oY2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQppbmRleCAxNWM3ZDc2MTUzNjIzNGI2
YmNjYmEwZmRmM2JkN2M2MGE5NmMzZWYyLi5iYmQ4Nzk5OTkxMjQwMDM3NDlkMDJmM2Q0Mzg5Mzg0
ZDBkMjYyY2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW0KQEAgLTMyMywyMiArMzIzLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFByb21p
c2VkRGF0YUZvckltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFMKIAog
I2VuZGlmCiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9j
YXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFpc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJ
RCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3Vy
cmVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFy
eUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7Ci19Ci0KIC8vIENvbXBsZXgg
dGV4dCBpbnB1dCBzdXBwb3J0IGZvciBwbHVnLWlucy4KIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5k
Q29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAz
ZTc5NDMxZjkzNzExNGM0MWY5ZDJkZmQ1OGUwYjRmNzIxODE1OWE2Li5lNjRlMWIyNGIyNDExYmE0
YmU5NjdiZjFlM2U1MWQ3MDY5MmNmNzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC0yNiw5ICsyNiwyMCBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAKKwogI2ltcG9ydCAi
TG9hZFBhcmFtZXRlcnMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYlBh
Z2VQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxl
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvSFRNTENvbnZlcnRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL05vZGVSZW5kZXJTdHlsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0
Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxlbWVu
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogCkBAIC01OSw2ICs3MCwxMTQgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QWN0aXZlTm93
UGxheWluZ1Nlc3Npb25JbmZvKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIAogICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6Tm93UGxheWluZ0luZm9DYWxsYmFjayhoYXNBY3RpdmVTZXNz
aW9uLCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlvbiwg
ZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKIH0KKyAgICAKK3Zv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIGZsb2F0UG9pbnQpCit7CisgICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVnaW5W
aWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChwbHVnaW5W
aWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBw
b2ludCBpcyBvdmVyLgorICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFt
ZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkp
KTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsK
KyAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0
SGl0VGVzdFJlc3VsdChyZXN1bHQpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFu
Z2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uOjpCb3VuY2UpOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25U
cmFuc2l0aW9uKQoreworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKKyAgICBOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucykg
PSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIGlm
IChzZWxlY3RlZFJhbmdlKQorICAgICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdl
KGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7
Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24oKQoreworICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVj
dGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworfQorICAgIAordm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFtZSwg
UmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5
UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFu
c2l0aW9uKSkpOworfQorCitEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQ
b3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKQoreworICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7Cisg
ICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CisgICAgCisg
ICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIGlmIChyYW5n
ZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci5z
ZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRp
Y3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1
YWRzOworICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBpZiAocXVhZHMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJ
bmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQor
ICAgIAorICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2lu
ZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIAorICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsK
KyAgICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmFz
Y2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkgOiAwOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8u
b3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVk
QXNjZW50KTsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOworCisj
aWYgUExBVEZPUk0oTUFDKQorCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRT
dHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUlt
YWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOworICAgIAorICAgIFJldGFpblB0cjxOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmli
dXRlZFN0cmluZyBzdHJpbmddXSk7CisgICAgCisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFn
ZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgCisgICAgW25zQXR0
cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBb
bnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgICAg
IFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHRO
UyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOworICAgICAgICAKKyAgICAgICAgTlNGb250ICpm
b250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVd
OworICAgICAgICBpZiAoZm9udCkKKyAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29u
dmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3IoKV07
CisgICAgICAgIGlmIChmb250KQorICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2Jq
ZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAKKyAgICAgICAg
W3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMu
Z2V0KCkgcmFuZ2U6cmFuZ2VdOworICAgIH1dOworCisjZW5kaWYgLy8gI2lmIFBMQVRGT1JNKE1B
QykKKyAgICAKKyAgICBUZXh0SW5kaWNhdG9yT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4
dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBs
ZXhSYW5nZXM7CisgICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKKyAgICAgICAgaW5k
aWNhdG9yT3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNl
bGVjdGlvbkhpZ2hsaWdodDsKKyAgICAKKyAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dElu
ZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9y
T3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgaWYgKCF0ZXh0SW5kaWNhdG9y
KSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNl
KTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAg
IGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEo
KTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVk
U3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOworI2VuZGlmIC8vICNpZiBQTEFURk9S
TShNQUMpCisgICAgCisgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8o
ZmFsc2UpOworICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggNDZjZDA1MGQ1ZTAwNDZkMGZmMGEzNzFkMDMyMTQy
NWRmNDBiYmMwZi4uNTk0OWM1ZTAwYzc5ZGExZmE0YjllOWI5NjkzMWUzM2ZmMzAyNDRjMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCkBAIC0xOTEsOSArMTkxLDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNl
aXZlciB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgIyBEaWN0aW9uYXJ5IHN1cHBvcnQuCiAg
ICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQg
cG9pbnQpCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKICAgICBQZXJmb3JtRGljdGlvbmFy
eUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBlZTA4MmM0YTlm
NGE0NDNlMzBiMjZkZTZmZDA2NGIyZmFiZDFlNTY3Li4xMWQwYzU4YjU4NTMwMzAxYWMzYzVmODAw
NzBmZjhhYzM0YTFlZTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtNDEzLDIxICs0MTMsNiBAQCB2b2lkIFdlYlBhZ2U6
OnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4odWludDY0X3QsIGNvbnN0IFN0cmluZyYpCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVj
dGlvbihGcmFtZSYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmLCBSYW5nZSYsIE5T
RGljdGlvbmFyeSAqLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiBib29sIFdlYlBhZ2U6OnBlcmZvcm1Ob25FZGl0aW5n
QmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50
KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA0NzMzYjFjYmYyZmU0NWNkOWQw
Y2VhN2VlZjliYzdjMzhhZmFmN2U0Li5mYTdhNmFhZjFiNjBiZGE5MGRjZDA3OWJhMWE5NDM2ZjEy
MTZiMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQpAQCAtMzg5LDEwMiArMzg5LDcgQEAgdm9pZCBXZWJQYWdlOjpmb250QXRT
ZWxlY3Rpb24oQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Rm9udEF0U2VsZWN0aW9uQ2FsbGJhY2soZm9udE5hbWUsIGZvbnRTaXplLCBzZWxl
Y3Rpb25IYXNNdWx0aXBsZUZvbnRzLCBjYWxsYmFja0lEKSk7CiB9CiAgICAgCi12b2lkIFdlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBm
bG9hdFBvaW50KQotewotICAgIGlmIChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZy
YW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKSkgewotICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGZsb2F0UG9pbnQpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVy
LgotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+
d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkpKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAgICBzdGQ6OnRp
ZShyYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3Vs
dChyZXN1bHQpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8q
IGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwgKnJhbmdlLCBv
cHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKLX0K
LQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFt
ZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOwot
ICAgIHN0ZDo6dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6
cmFuZ2VGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAg
ICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFu
Z2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwotfQogCi12b2lkIFdlYlBhZ2U6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLXsKLSAgICBhdXRv
JiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7
Ci0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKLX0KLQotRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdl
OjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2Us
IE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBFZGl0b3ImIGVkaXRvciA9IGZyYW1l
LmVkaXRvcigpOwotICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKHRy
dWUpOwotCi0gICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAg
IGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgVmVjdG9yPEZsb2F0UXVh
ZD4gcXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOwotICAgIGlmIChx
dWFkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQ
b3B1cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAg
ICB9Ci0KLSAgICBJbnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dp
bmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKLQotICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKLSAg
ICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmFzY2Vu
dCgpICogcGFnZVNjYWxlRmFjdG9yKCkgOiAwOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3Jp
Z2luID0gRmxvYXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkQXNj
ZW50KTsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOwotCi0gICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6
Tm8pOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxlZE5T
QXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKLQotICAg
IE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1h
bmFnZXJdOwotCi0gICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5S
YW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6
MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBC
T09MICpzdG9wKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2Fs
ZWRBdHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOwotCi0gICAg
ICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRB
dHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAgICBmb250ID0gW2Zv
bnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogcGFnZVNj
YWxlRmFjdG9yKCldOwotICAgICAgICBpZiAoZm9udCkKLSAgICAgICAgICAgIFtzY2FsZWRBdHRy
aWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLQotICAg
ICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmli
dXRlcy5nZXQoKSByYW5nZTpyYW5nZV07Ci0gICAgfV07Ci0KLSAgICBUZXh0SW5kaWNhdG9yT3B0
aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVj
dEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXM7Ci0gICAgaWYgKHByZXNlbnRhdGlv
blRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5j
ZUFuZENyb3NzZmFkZSkKLSAgICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9y
T3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKLQotICAgIFJlZlB0
cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0
aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsK
LSAgICBpZiAoIXRleHRJbmRpY2F0b3IpIHsKLSAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0Rp
Y3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVw
SW5mbzsKLSAgICB9Ci0KLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IgPSB0
ZXh0SW5kaWNhdG9yLT5kYXRhKCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVk
U3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOwotCi0gICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgIHJldHVybiBkaWN0aW9uYXJ5UG9w
dXBJbmZvOwotfQogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAKQEAgLTUzOSwxMSArNDQ0
LDYgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9y
U2VsZWN0aW9uSW5QREZQbHVnaW4oUERGU2VsZWMKIAogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5n
ZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0Zv
clJhbmdlKGZyYW1lLCByYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsK
LX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3Io
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgLy8g
Rmlyc3QgZ2l2ZSBhY2Nlc3NpYmlsaXR5IGEgY2hhbmNlIHRvIGhhbmRsZSB0aGUgZXZlbnQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355076</attachid>
            <date>2018-11-16 10:40:13 -0800</date>
            <delta_ts>2018-11-16 11:28:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116104012.patch</filename>
            <type>text/plain</type>
            <size>75896</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk1MzEwYzNhNWFhNTU0
OGJmNDg4MmY2MTA4NGM2MzNhNTdhYzRkZC4uMWZlOWEwMzI1MjU1N2JiYWUzNmRhMzAxZjA0MDhj
ZWMxOWViODEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTUg
IEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW2N1
cmxdIHdhcm5pbmc6IGRlbGV0ZSBjYWxsZWQgb24gbm9uLWZpbmFsICdXZWJDb3JlOjpDdXJsRG93
bmxvYWQnIHRoYXQgaGFzIHZpcnR1YWwgZnVuY3Rpb25zIGJ1dCBub24tdmlydHVhbCBkZXN0cnVj
dG9yIFstV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMmJm
ZWQ4NDkzNWVmZGU3NDJmZDE4OWFhMGZjYWU5OTljZWVlNGRkNy4uMGM0OGMzZmIxNjM3ZGZiNTFk
YmYwMDdjYThkYzI5MjM2MjYwNjMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNh
Z2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTcz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICogcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6
CisKIDIwMTgtMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcmVtb3Zpbmcgc29tZSBXS1NJIGNhbGxz
IG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU3MGU4NjlkNjE0ZTI2ZDQ1ZGQwMTAyZGI3YTQ2NjAz
YmZlN2ExM2MuLmE3OTdkODFkODM3Zjg0MmQzYjQwMWJjYzY5ODAxZmYxMTY3NzE1YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9n
YXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIg
Y3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIExvb2t1cCBpcyBiZWluZyByZXBsYWNlZCBieSBSZXZlYWwuIFRoaXMgZnJh
bWV3b3JrIHNob3VsZCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBwYXRjaCBt
b3ZlcyB0aGUgY29kZSB0aGF0IHdlIGV4cGVjdCB3aWxsIGJlIG5lZWRlZCBmb3IgYWxsIHBsYXRm
b3JtcyB0byB0aGUgbW9yZQorICAgICAgICBnZW5lcmFsIGNvY29hIGFyZWEuIFRoaXMgcGF0Y2gg
Y2hhbmdlcyBubyBmdW5jYXRpb25hbGl0eSwgYW5kIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAg
IGFueXRoaW5nIGN1cnJlbnRseS4gVGhpcyB3b3JrIHdpbGwgYmUgYnVpbGQgb24gbGF0ZXIgd2hl
biBSZXZlYWwgaXMgcmVhZHkgdG8gc3VwcG9ydAorICAgICAgICBtdWx0aXBsZSBwbGF0Zm9ybXMu
CisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IF9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX2FkZERlZmF1bHRHZXN0dXJlUmVjb2duaXplcnNdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
bG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UpOiBEZWxldGVkLgorCiAyMDE4LTExLTE1ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgV0tQcmVmZXJlbmNlc1NldEZv
bnRTbW9vdGhpbmdMZXZlbCBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjE1NTJk
ZjdmNzVmYzUzOWJiODc1NmQwODQ5YjU0ZDY4Njk1NTQwOS4uMTgyNDdkNjRjOWQzMDI5OTYzMDVm
Y2M1NDcyMzVjNGNiNTQxYmUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAyLDYgKzQwMiw3IEBACiAJCQkJMEMyREExMzkx
RjNCRUI0OTAwREJDMzE3IC8qIFBhc3NLaXRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQTFGM0JFQjQ5
MDBEQkMzMTcgLyogcHRocmVhZFNQSS5oICovLAogCQkJCTBDMkRBMTNCMUYzQkVCNDkwMERCQzMx
NyAvKiBRdWFydHpDb3JlU1BJLmggKi8sCisJCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8q
IFJldmVhbFNQSS5oICovLAogCQkJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovLAogCQkJCTBDMkRBMTNDMUYzQkVCNDkwMERCQzMxNyAvKiBTZXJ2ZXJzU1BJ
LmggKi8sCiAJCQkJMEMyREExMkIxRjNCRUI0OTAwREJDMzE3IC8qIFVSTEZvcm1hdHRpbmdTUEku
aCAqLywKQEAgLTQ2Nyw3ICs0NjgsNiBAQAogCQkJCTBDNzc4NTg2MUY0NTEzMEYwMEY0RUJCNiAv
KiBRVEtpdFNQSS5oICovLAogCQkJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0NCAvKiBRdWlja0Ry
YXdTUEkuaCAqLywKIAkJCQkwQzc3ODU4NzFGNDUxMzBGMDBGNEVCQjYgLyogUXVpY2tMb29rTWFj
U1BJLmggKi8sCi0JCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8qIFJldmVhbFNQSS5oICov
LAogCQkJCUExMTc1QjQ4MUY2QUZGOEUwMEM0QjlGMCAvKiBTcGVlY2hTeW50aGVzaXNTUEkuaCAq
LywKIAkJCQkwQzc3ODU4ODFGNDUxMzBGMDBGNEVCQjYgLyogVFVDYWxsU1BJLmggKi8sCiAJCQkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zNDg2NGE2NzYyYWQ5YjYyNTI1ZmU4ZGFhZmJlODdkZDVkYmZlNTBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCitT
T0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQorU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLKFJldmVhbENvcmUpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlBy
ZXNlbnRlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0Nv
bnRleHQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQorCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVh
bC9SVlByZXNlbnRlci5oPgorI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KKyNpbXBvcnQg
PFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgorCisKKyNlbHNlCisKK0BpbnRlcmZhY2UgUlZJdGVt
IDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBO
U19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJWU2VsZWN0aW9u
IDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNs
aWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJh
bmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247
CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAorI2lmIFBMQVRGT1JN
KE1BQykKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0
aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRv
Y3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVz
ZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KW9wdGlvbnM7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorLSAoQk9PTClyZXZlYWxJdGVtOihS
Vkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVu
dENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50
aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworQGVuZAorCisjZW5k
aWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9tYWMvTG9va3VwU1BJLmgKaW5kZXggZWI3Zjk1MWY3MWM3NWM4MTIxN2IyMmU3OGFkYWQzMGU0
ZDZhNWMwNC4uZTBhMzM3NWQzMGNjODg5ZjEzNWVhMmExMWQ0N2QwZGE5NGY5OGE4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaApAQCAtMjMsMTIgKzIzLDEz
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisKKyNpZiBQTEFURk9STShNQUMpCisKICNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rp
b25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAK
LSNpZiBQTEFURk9STShNQUMpCi0KIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05B
TChMb29rdXApCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoTG9va3VwLCBMVUxvb2t1cERlZmlu
aXRpb25Nb2R1bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiOGRhNDJjODU5OTBhZTMyZWE2N2Ew
YWY3NzUzZjNkYjk4MjhhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFs
KQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUpCi1TT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKLVNPRlRfTElOS19DTEFTU19PUFRJT05B
TChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwo
UmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUs
IFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQotI2ltcG9ydCA8
UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+Ci0jaW1wb3J0
IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JldmVhbENv
cmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2JqZWN0IDxOU1NlY3Vy
ZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBz
ZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdOQVRFRF9JTklUSUFM
SVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2JqZWN0Ci0rIChOU1Jh
bmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4IHNlbGVjdGVkUmFu
Z2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2Vs
ZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOwotQGVuZAotCi1AaW50ZXJmYWNl
IFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9j
dW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50
aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChCT09MKXJldmVhbEl0ZW06KFJWSXRlbSAq
KWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4
dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250
ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci1AZW5kCi0KLSNlbmRpZiAvLyAh
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGNiNmRl
Y2IxN2MxZTBlMmVhNTc3ZDI0Mjg2ZTY2MzVkYzcyZjY5NzcuLjQ0YWFjYmEyMWQzMzA0ODllY2Q1
NDY5MWQyMzEyNDNkODE1OTE4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtODQsNiAr
ODQsNyBAQCBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAKIGVkaXRpbmcvU21hcnRS
ZXBsYWNlQ0YuY3BwCiAKIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCiBl
ZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0KIGVkaXRpbmcvY29jb2Ev
Rm9udEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtOTcsNyArOTgsNiBAQCBlZGl0aW5nL2lvcy9EaWN0
YXRpb25Db21tYW5kSU9TLmNwcAogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCiAKIGVkaXRpbmcv
bWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQotZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cC5tbQogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQogZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCiBlZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDg4MGNmYzRmNjExYjk0MDEyODAxZjZkZGY4MDZiNzM0ZDY5MDZiOGQuLjA5ZTVjNWU2NjcwNWMw
YjMwMGQ3ZjNjNjlmNTNlODI1ZDgyNjk1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyMDMsNiArMTIwMyw3IEBACiAJCTQ0
MzkxODAwMUE5MUIyRjgwMDZFMDRGMiAvKiBRdWlja0xvb2tTb2Z0TGluay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzOTE3RkUxQTkxQjJGODAwNkUw
NEYyIC8qIFF1aWNrTG9va1NvZnRMaW5rLmggKi87IH07CiAJCTQ0NTc3NUU1MjA0NzJGNzMwMDhE
Q0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDU3NzVFNDIwNDcyRjczMDA4RENFNUQgLyog
TG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0NTc3NUVBMjA0NzMwM0MwMDhEQ0U1RCAvKiBMb2Nh
bERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQ1Nzc1RTkyMDQ3MzAzQjAwOERDRTVEIC8qIExvY2FsRGVmYXVs
dFN5c3RlbUFwcGVhcmFuY2UubW0gKi87IH07CisJCTQ0NUYxNkEwMjE5RTY2OTkwMEQzMDlGRiAv
KiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAu
bW0gKi87IH07CiAJCTQ0NzE3MTBFMjA1QUY5NDUwMDBBMTE2RSAvKiBNZWRpYVF1ZXJ5UGFyc2Vy
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQ3MTcxMEMyMDVBRjk0NTAwMEExMTZFIC8qIE1lZGlhUXVlcnlQYXJzZXJDb250ZXh0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQ3OTU4MDQx
NjQzQjQ5QTAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDc5NTgwMzE2NDNCNDdCMDAxRTBBN0YgLyog
UGFyc2VkQ29udGVudFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0NDhBMjlCRjBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDQxOSw2
ICsyMDQyMCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVE
NTQgLyogRGF0YURldGVjdGlvbi5oICovLAogCQkJCUM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAv
KiBEYXRhRGV0ZWN0aW9uLm1tICovLAorCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBE
aWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTlCNTVFRUU4MUIzRTg4OTgwMDUzNDJCQyAvKiBF
ZGl0b3JDb2NvYS5tbSAqLywKIAkJCQlGNDJDRUI1NDIxNDAzMUVFMDAyRENBNzIgLyogRm9udEF0
dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbSAqLywKIAkJCQlGNDhEMkE3NTIxNTZGRTU3MDBDNjc1MkIg
LyogRm9udEF0dHJpYnV0ZXNDb2NvYS5tbSAqLywKQEAgLTI2MTQwLDcgKzI2MTQyLDYgQEAKIAkJ
CQlDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVy
LmggKi8sCiAJCQkJQ0U3QjJEQjAxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJ
Q29udHJvbGxlci5tbSAqLywKIAkJCQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEgLyogRGljdGlv
bmFyeUxvb2t1cC5oICovLAotCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9u
YXJ5TG9va3VwLm1tICovLAogCQkJCTQ0Mjk1NkNBMjE4QTZEMzAwMDgwREI1NCAvKiBEaWN0aW9u
YXJ5TG9va3VwTGVnYWN5Lm1tICovLAogCQkJCUVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBF
ZGl0b3JNYWMubW0gKi8sCiAJCQkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2Vs
ZWN0aW9uTWFjLm1tICovLApAQCAtMzIyMzUsNiArMzIyMzYsNyBAQAogCQkJCTFBQkE3NkNBMTFE
MjBFNTAwMDRDMjAxQyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJFMjM0ODBDMThBOTg3MEIwMEU0QjZFOCAvKiBEYXRhQ3VlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUU1OEI0NUJCMjBBRDA3REQwMDk5MTAyNSAvKiBEYXRhTGlzdEJ1dHRvbkVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDQ1RjE2QTAyMTlFNjY5OTAwRDMwOUZGIC8qIERpY3Rpb25h
cnlMb29rdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTVCRTE4RjFENTRGNUZCMDBERDdDNjgg
LyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzI0RUQzMkMx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTcyRjFBREEyMUEzOTA0REMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlM
b29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDhiNGVlNWNjYzc1Y2NmYTFlMDdjNmFmYTU2YTgxMzNjMTZkODQ0Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFy
eUxvb2t1cC5tbQpAQCAtMCwwICsxLDQwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCisKKyNpZiBQTEFURk9STShD
T0NPQSkgJiYgRU5BQkxFKFJFVkVBTCkKKworI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQg
IkVkaXRpbmcuaCIKKyNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWUu
aCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgi
CisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgor
I2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlJlbmRlck9iamVj
dC5oIgorI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24u
aCIKKyNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlZpc2libGVVbml0cy5o
IgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3Vw
U1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9SZXZlYWxTUEkuaD4KKyNpbXBvcnQgPHd0Zi9C
bG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKKworCisjaWYg
UExBVEZPUk0oTUFDKQorCitAaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50
ZXJIaWdobGlnaHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIEZ1bmN0aW9u
PHZvaWQoKT4gX2NsZWFyVGV4dEluZGljYXRvcjsKKyAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7
CisgICAgQk9PTCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
Kl9hdHRyaWJ1dGVkU3RyaW5nOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TUmVjdCBoaWdobGlnaHRSZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIHVzZURlZmF1bHRIaWdobGlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhp
Z2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0
cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOworLSAodm9pZClzZXRDbGVhclRleHRJ
bmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAorCitAc3ludGhlc2l6ZSBoaWdo
bGlnaHRSZWN0PV9oaWdobGlnaHRSZWN0OworQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdo
dD1fdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0BzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0
dHJpYnV0ZWRTdHJpbmc7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6
KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVs
dEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmli
dXRlZFN0cmluZworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIAorICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKKyAg
ICBfdXNlRGVmYXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7CisgICAgX2F0dHJp
YnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nOworICAgIAorICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNs
ZWFyVGV4dEluZGljYXRvcgoreworICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNs
ZWFyVGV4dEluZGljYXRvcik7Cit9CisKKy0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENv
bnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVt
ICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0o
aXRlbSk7CisgICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdo
dFJlY3RdXTsKK30KKworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0
ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOworICAgIAorICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0
Lml0ZW1SZWN0c0luVmlldykgeworICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZh
bHVlOworCisgICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBh
dHRyaWJ1dGVkIHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRl
IGluIG9yZGVyIHRvIGNlbnRlciB0ZXh0LgorICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGlj
dGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0V2l0aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRl
c0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1d
KTsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGgg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgW3BhcmFncmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKKyAgICAg
ICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3Jh
cGhTdHlsZUF0dHJpYnV0ZU5hbWVdOworICAgIAorICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1
dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczph
dHRyaWJ1dGVzLmdldCgpXSk7CisgICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKKyAg
ICB9Cit9CisKKy0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNv
bnRleHQgc2hvdWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sK
KyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAg
IHJldHVybiBzZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29u
dGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06
KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOworICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0
b3IpOworICAgIGlmIChibG9jaykKKyAgICAgICAgYmxvY2soKTsKK30KKworQGVuZAorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dHVwbGU8
UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9y
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygp
KQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gU2lu
Y2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3Jh
YiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZp
c2libGVFbmQoKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhl
IHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0
ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhF
bmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworCisgICAgaW50IGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rp
b25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFr
ZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVu
Z3RoVG9TZWxlY3Rpb25TdGFydCk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFj
dGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAg
U3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsK
KyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5j
ZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsK
KyAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsK
KyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVy
UmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBu
aWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25z
dCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvKiBmcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRo
ZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgYXV0byBmcmFtZVBvaW50ID0g
aGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisKKyAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KGZyYW1lUG9pbnQpOworICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAg
cG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7CisKKyAgICBhdXRv
IHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIE5TUmFuZ2Ugc2VsZWN0aW9u
UmFuZ2U7CisgICAgaW50IGhpdEluZGV4OworICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3Rl
clJhbmdlOworICAgIAorICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2li
bGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uU3Rh
cnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5k
ID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzIGNvbnRl
eHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4
dC4KKyAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0
aW9uU3RhcnQpOworICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFy
dCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOworICAgICAgICBh
dXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVj
dGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAgICAgIAorICAgICAgICBzZWxl
Y3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VU
b1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsK
KyAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51
bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNj
b3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOworICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBh
cmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0
aGUgcG9pbnQuCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91
bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghZnVsbENoYXJhY3RlclJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07CisgICAgICAgIAorICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOworICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlv
bikuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0
UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJh
bmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBk
YXRlU2VsZWN0aW9uOm5pbF07CisgICAgCisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRl
eHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVt
ID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5n
IHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFu
Z2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworCisgICAgaWYgKGhpZ2hsaWdodFJhbmdl
LmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlv
biwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAK
K30KKworc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlv
biAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50
ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0Fk
ZGVkQWZ0ZXJFbmQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
c2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7CisgICAgW3Nl
bGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5k
XTsKKyAgICAKKyAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJp
bmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7CisgICAgCisgICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07CisgICAgY2hhcmFjdGVy
c0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3Ro
IC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworfQorCitzdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0
aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rp
b24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICgh
Z2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBv
aW50LgorICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKKworICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+
IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7CisKKyAgICAv
LyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQg
YmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCisgICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtz
ZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3Rl
cnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0
ZXJFbmQgPSAwOworICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JM
b29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNB
ZGRlZEFmdGVyRW5kKTsKKworICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rp
b25Gb3JMb29rdXAgc3RyaW5nXTsKKyAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2Uo
Y2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOworCisgICAgUmV0YWluUHRyPFJWSXRlbT4g
aXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBs
YWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBl
eHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgaWYg
KGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiB7
IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVm
b3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKKyAg
ICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiAr
IGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5h
bExlbmd0aCk7CisKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3Vw
QWRkZWRCZWZvcmVdOworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3Vw
QWRkZWRBZnRlcl07CisKKyAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3Ry
aW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5n
ZV1dKTsKKyAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4geyBAIiIsIG5pbCB9OworfQorCitz
dGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJv
bGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1
cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkgfHwgIWdl
dFJWUHJlc2VudGVyQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9u
cyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKKyAgICAgICAgW211dGFibGVP
cHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKKworICAgIGF1dG8gdGV4
dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRl
eHRJbmRpY2F0b3IpOworICAgIAorICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVy
ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOworICAgIAorICAg
IE5TUmVjdCBoaWdobGlnaHRSZWN0OworICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOworICAg
IAorICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7CisgICAgICAg
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsK
KworICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4
dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07
CisgICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
KTsKKyAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKCk7CisgICAgICAgIAorICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyk7CisgICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7CisgICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxl
Y3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKKyAgICAgICAgcG9pbnRlckxvY2F0
aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7CisgICAgICAg
IAorICAgIH0gZWxzZSB7CisgICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcmlnaW47CisgICAgICAgIAorICAgICAgICBoaWdobGlnaHRSZWN0
ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwor
ICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5l
T3JpZ2luIHRvVmlldzpuaWxdOworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8V2ViUmV2ZWFs
SGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBh
bGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmlu
ZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKKyAgICBSZXRh
aW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVz
ZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9p
bnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRl
ckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7CisgICAgCisgICAgUmV0
YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0
V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmlu
ZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7CisgICAgCisgICAgW3dlYkhpZ2hs
aWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGln
aGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3Ip
XSB7CisgICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCisgICAgICAgICAgICBjbGVhclRl
eHRJbmRpY2F0b3IoKTsKKyAgICB9XTsKKyAgICAKKyAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZv
ckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNv
bnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVt
LmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQo
KSBvcHRpb25zOm5pbF07CisgICAgcmV0dXJuIG5pbDsKKyAgICAKKyNlbmRpZiAvLyAgUExBVEZP
Uk0oTUFDKQorICAgIAorICAgIFVOVVNFRF9QQVJBTShjcmVhdGVBbmltYXRpb25Db250cm9sbGVy
KTsKKyAgICBVTlVTRURfUEFSQU0oZGljdGlvbmFyeVBvcHVwSW5mbyk7CisgICAgVU5VU0VEX1BB
UkFNKHZpZXcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2Fs
bGJhY2spOworICAgIFVOVVNFRF9QQVJBTShyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFj
ayk7CisgICAgVU5VU0VEX1BBUkFNKGNsZWFyVGV4dEluZGljYXRvcik7CisKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBuaWw7Cit9CisKK3ZvaWQgRGljdGlvbmFy
eUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQ
b3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRp
Y2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpG
dW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7Cisg
ICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5
UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RW
aWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikp
OworfQorCit2b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKworV0tSZXZlYWxDb250cm9sbGVy
IERpY3Rpb25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0
IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFs
bGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+
JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIodHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dElu
ZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKworI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRl
bnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVu
dFJlYWRlckNvY29hLm1tCmluZGV4IGU0YjkwYmRmMjcwNTJiMDMyZjlhM2NlNDMzNTQzZDFmODc3
ODRmNjcuLjg1YzQyNzQxYWJhZDc1N2RkMTBmZTRhNmQ0M2YxYmJhNzNkZmY2OTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29h
Lm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRG9j
dW1lbnRGcmFnbWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbXBvcnQgIkVk
aXRvci5oIgorI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJGaWxlLmgiCiAjaW1w
b3J0ICJGaWxlU3lzdGVtLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCmluZGV4IGNiNmQ1M2ViOGY4YzRjZmQzODk0
NTdmNWJlYWUyODNhMzdkYTgxOTIuLmY4Zjc2MWNkYzgxYWViZDNkZjA4ODM3YTMyMzFjMDhmMzVh
NGZlYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlM
b29rdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
LmgKQEAgLTIzLDE1ICsyMywyNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZiBQTEFURk9STShNQUMpCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JN
KENPQ09BKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgotI2luY2x1ZGUgPHBh
bC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNpZiBQ
TEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyU1BJLmg+CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgogCiBPQkpDX0NMQVNTIE5TVmlldzsKIE9CSkNfQ0xBU1MgUERGU2VsZWN0
aW9uOwogCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBpZCA8TlNJbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyPiBXS1JldmVhbENvbnRyb2xsZXI7CisjZWxzZQordHlwZWRlZiBp
ZCBXS1JldmVhbENvbnRyb2xsZXI7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC00OCw4ICs1OCwxMSBAQCBw
dWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzaG93UG9wdXAoY29uc3Qg
RGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQo
VGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252
ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IgPSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBo
aWRlUG9wdXAoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpZCA8TlNJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29u
c3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZv
aWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdD
b252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVh
clRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBhbmltYXRpb25Db250cm9s
bGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBX
VEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxh
dGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCisgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2U5ZTQ0NzRhNDlmY2M5YjA5NWIyZjRiZGE2YzlhZTNmMzhjZmU0Ny4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyAvZGV2L251bGwKQEAgLTEs
Mzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiRGljdGlvbmFyeUxvb2t1cC5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVW
RUFMKQotCi0jaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRWRpdGluZy5oIgotI2ltcG9y
dCAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJhbWVT
ZWxlY3Rpb24uaCIKLSNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKLSNpbXBvcnQgIkhpdFRlc3RS
ZXN1bHQuaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlJhbmdlLmgiCi0jaW1wb3J0ICJS
ZW5kZXJPYmplY3QuaCIKLSNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgotI2ltcG9ydCAiVmlzaWJs
ZVBvc2l0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJWaXNp
YmxlVW5pdHMuaCIKLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkv
bWFjL0xvb2t1cFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25H
ZXN0dXJlUmVjb2duaXplclNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg+
Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1JlZlB0
ci5oPgotCi1AaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGln
aHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7Ci1AcHJpdmF0ZQotICAgIEZ1bmN0aW9uPHZvaWQoKT4g
X2NsZWFyVGV4dEluZGljYXRvcjsKLSAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7Ci0gICAgQk9P
TCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1
dGVkU3RyaW5nOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBo
aWdobGlnaHRSZWN0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURl
ZmF1bHRIaWdobGlnaHQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDoo
Qk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0
cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOwotLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6
KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAotCi1Ac3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0
PV9oaWdobGlnaHRSZWN0OwotQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVm
YXVsdEhpZ2hsaWdodDsKLUBzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRT
dHJpbmc7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdClo
aWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdo
dCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmlu
ZwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKLSAgICBfdXNlRGVm
YXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgX2F0dHJpYnV0ZWRTdHJp
bmcgPSBhdHRyaWJ1dGVkU3RyaW5nOwotICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dElu
ZGljYXRvcgotewotICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dElu
ZGljYXRvcik7Ci19Ci0KLS0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJW
UHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQot
ewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0g
ICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsK
LX0KLQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4
dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGl0
ZW0pOwotICAgIAotICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0
c0luVmlldykgewotICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOwotCi0g
ICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVk
IHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVy
IHRvIGNlbnRlciB0ZXh0LgotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4g
YXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKLSAgICAg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5T
KFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3BhcmFn
cmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKLSAgICAgICAgW2F0dHJp
YnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0
dHJpYnV0ZU5hbWVdOwotICAgIAotICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5n
PiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVz
LmdldCgpXSk7Ci0gICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKLSAgICB9Ci19Ci0K
LS0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hv
dWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVT
RURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIHJldHVybiBz
ZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQ
cmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAq
KWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0
ZW0pOwotICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOwotICAg
IGlmIChibG9jaykKLSAgICAgICAgYmxvY2soKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAg
aWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
LSAgICAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotCi0gICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50
LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KLSAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLQotICAgIC8vIEFzIGNvbnRleHQsIHdl
IGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAg
ICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7
Ci0gICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwot
Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLSAg
ICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7Ci0gICAgTlNSYW5n
ZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0
aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7Ci0gICAgCi0gICAgUmVm
UHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHBhcmFncmFwaEVuZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENo
YXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHRO
UyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVk
UmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5n
ZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdo
bGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotfQotCi1zdGQ6OnR1
cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQotewot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRl
bUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1
dG8qIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmls
IH07Ci0KLSAgICBhdXRvKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERv
bid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0g
ICAgYXV0byBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9k
ZUZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKLSAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICBhdXRvIHBvc2l0aW9uID0gZnJh
bWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwotICAgIGlmIChwb3NpdGlv
bi5pc051bGwoKSkKLSAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUobm9kZSk7Ci0KLSAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwot
ICAgIE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7Ci0gICAgaW50IGhpdEluZGV4OwotICAgIFJlZlB0
cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOwotICAgIAotICAgIGlmIChzZWxlY3Rpb24uc2Vs
ZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7Ci0gICAg
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAg
ICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5k
aW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHBhcmFncmFwaEVu
ZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAotICAgICAgICBhdXRv
IHJhbmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAotICAgICAgICBmdWxsQ2hh
cmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Ci0g
ICAgICAgIAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0
KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGlu
ZVJ1bGVzIHsgcG9zaXRpb24gfTsKLSAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVS
dWxlcy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7Ci0gICAgICAgIHBv
c2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOwotICAgICAg
ICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRl
eHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5n
ZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUw
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQotICAgICAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgICAgIAotICAgICAgICBzZWxlY3Rpb25S
YW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBOU1Jhbmdl
IHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRl
eDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVj
dGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07Ci0gICAgCi0gICAgU3RyaW5n
IGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICBS
ZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGlu
aXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOwotICAg
IE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotCi0g
ICAgaWYgKGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdo
dFJhbmdlLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0g
ICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBo
aWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0g
ICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKLSAgICAKLX0KLQotc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlD
aGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFy
YWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5T
SW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotCi0gICAgc2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0
cmluZy5sZW5ndGg7Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJl
ck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICAKLSAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVT
dGFydCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7Ci0gICAgCi0g
ICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4
cGFuZF07Ci0gICAgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxl
bmd0aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7Ci0KLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1zdGQ6OnR1cGxlPE5TU3RyaW5nICos
IE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24o
UERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBu
byBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgotICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rp
b24uc3RyaW5nLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKLQotICAgIFJl
dGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVj
dGlvbiBjb3B5XSk7Ci0KLSAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1
MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgYXV0
byBvcmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7Ci0g
ICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKLSAgICBOU0ludGVn
ZXIgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAwOwotICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hh
cmFjdGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVm
b3JlU3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsKLQotICAgIGF1dG8gZnVsbFBsYWlu
VGV4dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXTsKLSAgICBhdXRvIHJhbmdl
VG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOwotCi0g
ICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2Uo
KSBpbml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9Q
YXNzXSk7Ci0gICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0
UmFuZ2U7Ci0gICAgCi0gICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91
bmQpCi0gICAgICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgTlNJ
bnRlZ2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0
ZWRSYW5nZS5sb2NhdGlvbjsKLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRy
YWN0ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bh
c3MubG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7Ci0KLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNl
bGVjdGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZvcmVdOwotICAgIFtzZWxlY3Rpb24gZXh0ZW5k
U2VsZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRlcl07Ci0KLSAgICBBU1NFUlQoW3NlbGVjdGlv
bi5zdHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dp
dGhSYW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKLSAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5n
LCBuaWwgfTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4g
eyBAIiIsIG5pbCB9OwotfQotCi1zdGF0aWMgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3Jl
YXRlQW5pbWF0aW9uQ29udHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlv
bmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4
dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBX
VEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJz
aW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikK
LXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRS
Vkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgpKQotICAgICAgICBbbXV0YWJsZU9wdGlvbnMg
YWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlvbnNdOwotCi0gICAgYXV0byB0ZXh0SW5kaWNh
dG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGlj
YXRvcik7Ci0gICAgCi0gICAgUmV0YWluUHRyPFJWUHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9w
dE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgCi0gICAgTlNSZWN0
IGhpZ2hsaWdodFJlY3Q7Ci0gICAgTlNQb2ludCBwb2ludGVyTG9jYXRpb247Ci0gICAgCi0gICAg
aWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkpIHsKLSAgICAgICAgdGV4dElu
ZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRleHRJbmRpY2F0b3IuZ2V0KCkpOwotCi0gICAg
ICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNh
dG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKVswXTsKLSAgICAg
ICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRp
Y2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAg
ICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykg
ewotICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZp
ZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVz
ID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaXJzdFRl
eHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJv
dW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBm
aXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgCi0gICAg
fSBlbHNlIHsKLSAgICAgICAgTlNQb2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5
UG9wdXBJbmZvLm9yaWdpbjsKLSAgICAgICAgCi0gICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0
SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAg
IHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4g
dG9WaWV3Om5pbF07Ci0gICAgfQotICAgIAotICAgIFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGln
aHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBp
bml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDoh
dGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rp
b25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKV0pOwotICAgIFJldGFpblB0cjxS
VlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdD
b250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9j
YXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxp
Z2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8
UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4
dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVj
dGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsKLSAgICAKLSAgICBbd2ViSGlnaGxpZ2h0IHNl
dENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQp
LCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcildIHsKLSAg
ICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikKLSAgICAgICAgICAgIGNsZWFyVGV4dEluZGlj
YXRvcigpOwotICAgIH1dOwotICAgIAotICAgIGlmIChjcmVhdGVBbmltYXRpb25Db250cm9sbGVy
KQotICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTpp
dGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5n
ZXQoKSBvcHRpb25zOm5pbF07Ci0gICAgW3ByZXNlbnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkg
ZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlv
bnM6bmlsXTsKLSAgICByZXR1cm4gbmlsOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICByZXR1cm4gbmlsOwotfQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1
cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcg
KnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5k
aWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0
KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIHNob3dQb3B1cE9yQ3Jl
YXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNp
b25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKLX0KLQotdm9pZCBEaWN0
aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLQotICAgIGlmICghZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFtnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpIGhp
ZGVEZWZpbml0aW9uXTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLWlk
IDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IERpY3Rpb25hcnlMb29rdXA6
OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBk
aWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9p
ZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNv
bnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNh
dG9yKQotewotICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIo
dHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlv
bkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVh
clRleHRJbmRpY2F0b3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEku
aAppbmRleCA5ZWVmYjk3ODRmYmU2ODliMDkwYTViMDFmY2VlY2U3MGQ2NTQxMzJkLi4xOTU1ZDYy
ZDQwYjFkODZlNGRkNTEwZWIxNDg4NjFkNGJkYTY5NzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNzM1LDYgKzczNSw5IEBAIHN0cnVjdCBfVUlXZWJU
b3VjaEV2ZW50IHsKICAgICBib29sIGlzUG90ZW50aWFsVGFwOwogfTsKIAorQGludGVyZmFjZSBf
VUlMb29rdXBHZXN0dXJlUmVjb2duaXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIKK0BlbmQKKwog
QGNsYXNzIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplcjsKIAogQHByb3RvY29sIFVJ
V2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlIDxOU09iamVjdD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KaW5k
ZXggZjU2ODc1ZGZmM2ExY2M0NWViZWU2MTcyMTVjZTk1NzIzZjUzZGU0ZS4uNjVhZWNkOTIxOTJm
ZTY2NjFmMWJhYTQyZDM0MDc4NmNlNGQxZDUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNp
bXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1NQSS5oIgogI2ltcG9y
dCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgorI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0l0ZW0uaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTE4OSw1ICsxOTAsMjEgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtQ2xvbmVBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFj
aG1lbnQ+JiYgZnJvbUF0dGFjaG1lbnQKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5U
X0VMRU1FTlQpCisgICAgCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlm
ICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2lu
dCksIG1fcGFnZUlEKTsKK30KIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQ
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7CiB9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCmluZGV4IGM0OGMzOWQ2NmRjMTM5
NjQyMDU2NTRiOWQ1NDBmMGY2ODc4ODQyMGEuLjlkYzM5MDhjYjEwNzYwYmU4MjRhNTljY2ZiZTZm
OTMzYjc4ZmJmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTg3LDYgKzg3LDcgQEAgY2xhc3MgV2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KIAorQGNs
YXNzIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIF9VSUhpZ2hsaWdodFZpZXc7
CiBAY2xhc3MgX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xh
c3MgVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyOwpAQCAtMjE0LDYgKzIxNSw3IEBAIHN0cnVjdCBX
S0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgUmV0YWlu
UHRyPFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcj4gX2hvdmVyR2VzdHVyZVJlY29nbml6ZXI7Cisg
ICAgUmV0YWluUHRyPF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyPiBfbG9va3VwR2VzdHVyZVJl
Y29nbml6ZXI7CiAjZW5kaWYKIAogICAgIFJldGFpblB0cjxVSVdLVGV4dEludGVyYWN0aW9uQXNz
aXN0YW50PiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDIxZDMx
NzcwMDZiMWM2ZGYwMTZiYWJmM2UwYzM2YTczODg0MmEwOTIuLjI3Nzc1MDg0ZWU5MjRkYWZkMDU1
MDY5ZmY3ZWIzZDc3ZDQ5OTcxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMTEyLDYgKzExMiw3IEBA
CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogI2ltcG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgog
I2ltcG9ydCA8VUlLaXQvVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtp
dC9fVUlMb29rdXBHZXN0dXJlUmVjb2duaXplci5oPgogI2ltcG9ydCA8cGFsL3NwaS9pb3MvR3Jh
cGhpY3NTZXJ2aWNlc1NQSS5oPgogI2VuZGlmCiAKQEAgLTY0OSw2ICs2NTAsMTEgQEAgLSAodm9p
ZClzZXR1cEludGVyYWN0aW9uCiAgICAgX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5T
KFtbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFj
dGlvbjpAc2VsZWN0b3IoX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOildKTsKICAgICBb
X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CiAgICAgW3NlbGYgYWRk
R2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAor
ICAgIF9sb29rdXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tfVUlMb29rdXBHZXN0dXJl
UmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9s
b29rdXBHZXN0dXJlUmVjb2duaXplZDopXSk7CisgICAgW19sb29rdXBHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAogI2VuZGlmCiAKICAgICBfc2luZ2xl
VGFwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbV0tTeW50aGV0aWNDbGlja1RhcEdlc3R1
cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3Io
X3NpbmdsZVRhcENvbW1pdGVkOildKTsKQEAgLTc1Myw2ICs3NTksOSBAQCAtICh2b2lkKWNsZWFu
dXBJbnRlcmFjdGlvbgogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbX2hvdmVyR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2du
aXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCisgICAgW19sb29rdXBH
ZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtzZWxmIHJlbW92ZUdlc3R1
cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIAog
ICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKQEAgLTgz
Niw2ICs4NDUsNyBAQCAtICh2b2lkKV9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAg
ICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclNpbmdsZVRhcEdlc3R1
cmVSZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW3NlbGYgcmVt
b3ZlR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAg
IFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5n
ZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtODUwLDYgKzg2MCw3IEBAIC0gKHZvaWQpX2FkZERlZmF1
bHRHZXN0dXJlUmVjb2duaXplcnMKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfdHdv
RmluZ2VyU2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBMQVRGT1JNKElP
U01BQykKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2du
aXplci5nZXQoKV07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1
cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBAIC0xNDUwLDYgKzE0NjEsMTAgQEAg
LSAoQk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVS
ZWNvZ25pemVyIHNob3VsZFJlY29nbmkKIAogICAgIGlmIChbZ2VzdHVyZVJlY29nbml6ZXIgaXNL
aW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gfHwgW290aGVyR2Vz
dHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNs
YXNzXV0pCiAgICAgICAgIHJldHVybiBZRVM7CisgICAgCisgICAgaWYgKChbZ2VzdHVyZVJlY29n
bml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAm
JiBbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1
cmVSZWNvZ25pemVyIGNsYXNzXV0pIHx8IChbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRP
ZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gJiYgW2dlc3R1cmVS
ZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNsYXNz
XV0pKQorICAgICAgICByZXR1cm4gWUVTOworCiAjZW5kaWYKICAgICBpZiAoaXNTYW1lUGFpcihn
ZXN0dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXplciwgX2hpZ2hsaWdodExvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQo
KS5mb3JjZVByZXNzR2VzdHVyZSkpCiAgICAgICAgIHJldHVybiBZRVM7CkBAIC02MDMzLDYgKzYw
NDgsMTIgQEAgLSAoQk9PTClhbGxvd3NEaWN0YXRpb25JbnB1dEZvckxpc3RWaWV3Q29udHJvbGxl
cjooUFVJQ1F1aWNrYm9hcmRWaWV3Q29udHJvbGxlcgogI2VuZGlmIC8vIFBMQVRGT1JNKFdBVENI
T1MpCiAKICNpZiBQTEFURk9STShJT1NNQUMpCistICh2b2lkKV9sb29rdXBHZXN0dXJlUmVjb2du
aXplZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgTlNQ
b2ludCBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzID0gW2dlc3R1cmVSZWNvZ25pemVyIGxvY2F0
aW9uSW5WaWV3OnNlbGZdOworICAgIF9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9j
YXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludChsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzKSk7Cit9
CisKIC0gKHZvaWQpX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOihVSUdlc3R1cmVSZWNv
Z25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKICAgICBpZiAoIV9wYWdlLT5pc1ZhbGlkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRl
eCBkYzgwMjgzNmRkNjBlODQyZGFhMTNhZjQ0NGIyZjc5NzkyMjIwNDkwLi5kOTk4YmI1NjJlYTY3
MzQ2YzMxYjMzMDgzM2YyYmMyZmIwZjk2ZmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTEyMSwxMSArMTIxLDYgQEAgYm9vbCBXZWJQ
YWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZUNhbGxiYWNrKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQz
Ml90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
IHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxHZXN0dXJlQ2FsbGJhY2s+
KGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW0KaW5kZXggMTVjN2Q3NjE1MzYyMzRiNmJjY2JhMGZkZjNiZDdjNjBhOTZjM2VmMi4u
YmJkODc5OTk5MTI0MDAzNzQ5ZDAyZjNkNDM4OTM4NGQwZDI2MmNjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC0zMjMsMjIgKzMyMyw2
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94
eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHBvaW50KQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94
eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQotewotICAgIGlm
ICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24o
KSwgbV9wYWdlSUQpOwotfQotCiAvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1
Zy1pbnMuCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1
aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0
ZXh0SW5wdXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggM2U3OTQzMWY5MzcxMTRjNDFmOWQyZGZkNThl
MGI0ZjcyMTgxNTlhNi4uZTY0ZTFiMjRiMjQxMWJhNGJlOTY3YmYxZTNlNTFkNzA2OTJjZjc0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbQpAQCAtMjYsOSArMjYsMjAgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2lt
cG9ydCAiV2ViUGFnZS5oIgogCisKICNpbXBvcnQgIkxvYWRQYXJhbWV0ZXJzLmgiCisjaW1wb3J0
ICJQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2ltcG9y
dCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9j
dXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob2RlUmVuZGVy
U3R5bGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyT2JqZWN0Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKIApAQCAtNTksNiArNzAsMTE0IEBA
IHZvaWQgV2ViUGFnZTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok5vd1Bs
YXlpbmdJbmZvQ2FsbGJhY2soaGFzQWN0aXZlU2Vzc2lvbiwgcmVnaXN0ZXJlZEFzTm93UGxheWlu
Z0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVsYXBzZWRUaW1lLCB1bmlxdWVJZGVudGlm
aWVyLCBjYWxsYmFja0lEKSk7CiB9CisgICAgCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQoreworICAg
IGlmIChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5G
cmFtZSgpKSkgeworICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGZsb2F0UG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KKyAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVz
dFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVu
dHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0aWUocmFuZ2UsIG9wdGlv
bnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKKyAg
ICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byogZnJhbWUgPSBy
ZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkt
PmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwgKnJhbmdlLCBvcHRpb25z
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKK30KKwordm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYgZnJh
bWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0
ZDo6dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VG
b3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAg
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2UsIG9w
dGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBhdXRvJiBmcmFt
ZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAg
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91
bmNlQW5kQ3Jvc3NmYWRlKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVy
Zm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKGZyYW1lLCBy
YW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsKK30KKworRGljdGlvbmFy
eVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZy
YW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBFZGl0
b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOworICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0
aW9uYXJ5UG9wdXBJbmZvKHRydWUpOworICAgIAorICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGlj
dGlvbmFyeVBvcHVwSW5mbzsKKyAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgp
LmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVw
SW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0K
KyAgICAKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICByYW5nZS5hYnNvbHV0ZVRl
eHRRdWFkcyhxdWFkcyk7CisgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0
b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVy
biBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBJbnRSZWN0IHJhbmdlUmVj
dCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKKyAgICAKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5z
dGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CisgICAgZmxvYXQgc2NhbGVkQXNjZW50ID0g
c3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3Rvcigp
IDogMDsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VS
ZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7CisgICAgZGljdGlvbmFyeVBv
cHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKKworI2lmIFBMQVRGT1JNKE1BQykKKworICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5v
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVk
TlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOworICAg
IAorICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVk
Rm9udE1hbmFnZXJdOworICAgIAorICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0
cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhd
KSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5n
ZSByYW5nZSwgQk9PTCAqc3RvcCkgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlv
bmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHld
KTsKKyAgICAgICAgCisgICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9i
amVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAg
ICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQu
cG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICBpZiAoZm9udCkKKyAgICAg
ICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRy
aWJ1dGVOYW1lXTsKKyAgICAgICAgCisgICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcg
YWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKKyAgICB9
XTsKKworI2VuZGlmIC8vICNpZiBQTEFURk9STShNQUMpCisgICAgCisgICAgVGV4dEluZGljYXRv
ck9wdGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGlu
Z1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOworICAgIGlmIChwcmVzZW50
YXRpb25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpC
b3VuY2VBbmRDcm9zc2ZhZGUpCisgICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGlj
YXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7CisgICAgCisg
ICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5z
aXRpb24pOworICAgIGlmICghdGV4dEluZGljYXRvcikgeworICAgICAgICBlZGl0b3Iuc2V0SXNH
ZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9u
YXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJ
bmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRl
ZFN0cmluZzsKKyNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKQorICAgIAorICAgIGVkaXRvci5z
ZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICByZXR1cm4gZGljdGlv
bmFyeVBvcHVwSW5mbzsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4
IDQ2Y2QwNTBkNWUwMDQ2ZDBmZjBhMzcxZDAzMjE0MjVkZjQwYmJjMGYuLjU5NDljNWUwMGM3OWRh
MWZhNGI5ZTliOTY5MzFlMzNmZjMwMjQ0YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtMTkxLDkgKzE5MSw2IEBA
IG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgICMgRGljdGlvbmFyeSBzdXBwb3J0LgogICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShNQUMpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24o
KQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KaW5kZXggZWUwODJjNGE5ZjRhNDQzZTMwYjI2ZGU2ZmQwNjRiMmZhYmQx
ZTU2Ny4uMTFkMGM1OGI1ODUzMDMwMWFjM2M1ZjgwMDcwZmY4YWMzNGExZWU5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAg
LTQxMywyMSArNDEzLDYgQEAgdm9pZCBXZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1
Z2luKHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclJhbmdlKEZyYW1lJiwgUmFuZ2UmLCBOU0RpY3Rpb25hcnkgKiwgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQog
Ym9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3Qg
U3RyaW5nJiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KaW5kZXggNDczM2IxY2JmMmZlNDVjZDlkMGNlYTdlZWY5YmM3YzM4YWZhZjdlNC4uZmE3
YTZhYWYxYjYwYmRhOTBkY2QwNzliYTFhOTQzNmYxMjE2YjBkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTM4OSwxMDIg
KzM4OSw3IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZvbnRBdFNlbGVjdGlvbkNh
bGxiYWNrKGZvbnROYW1lLCBmb250U2l6ZSwgc2VsZWN0aW9uSGFzTXVsdGlwbGVGb250cywgY2Fs
bGJhY2tJRCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKLXsKLSAgICBpZiAoYXV0
byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkp
IHsKLSAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihmbG9hdFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBG
aW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3Vs
dCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMocm91bmRlZElu
dFBvaW50KGZsb2F0UG9pbnQpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUocmFuZ2UsIG9wdGlvbnMpID0gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKLSAgICBpZiAoIXJhbmdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFt
ZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0g
ICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
OwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAgICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdl
LCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlv
bik7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25U
cmFuc2l0aW9uKTsKLX0KIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9m
Q3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7Ci19
Ci0KLURpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJh
bmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRl
eHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24p
Ci17Ci0gICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKLSAgICBlZGl0b3Iuc2V0
SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKLQotICAgIERpY3Rpb25hcnlQb3B1
cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hp
dGVTcGFjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlv
bmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZv
OwotICAgIH0KLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLmFic29s
dXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgSW50UmVjdCByYW5nZVJl
Y3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91
bmRpbmdCb3goKSk7Ci0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5zdGFy
dENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7Ci0gICAgZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5
bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3RvcigpIDog
MDsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0
LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7Ci0gICAgZGljdGlvbmFyeVBvcHVw
SW5mby5vcHRpb25zID0gb3B0aW9uczsKLQotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRy
aWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIElu
Y2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLQotICAgIFJldGFpblB0cjxOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0
cmlidXRlZFN0cmluZyBzdHJpbmddXSk7Ci0KLSAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdl
ciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLQotICAgIFtuc0F0dHJpYnV0
ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0
cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFy
eSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgewotICAgICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0
dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLQotICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVk
QXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlm
IChmb250KQotICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250
IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKLSAgICAgICAgaWYg
KGZvbnQpCi0gICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JL
ZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0
cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwot
ICAgIH1dOwotCi0gICAgVGV4dEluZGljYXRvck9wdGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRl
eHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21w
bGV4UmFuZ2VzOwotICAgIGlmIChwcmVzZW50YXRpb25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpCi0gICAgICAgIGlu
ZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhT
ZWxlY3Rpb25IaWdobGlnaHQ7Ci0KLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGlj
YXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0
aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7
Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsK
LSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgZGljdGlv
bmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwotICAg
IGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRl
ZFN0cmluZzsKLQotICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZh
bHNlKTsKLSAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLX0KIAogI2lmIEVOQUJMRShQ
REZLSVRfUExVR0lOKQogCkBAIC01MzksMTEgKzQ0NCw2IEBAIERpY3Rpb25hcnlQb3B1cEluZm8g
V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclNlbGVjdGlvbkluUERGUGx1Z2luKFBERlNl
bGVjCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywg
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlv
bikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlv
bnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9y
bU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIC8vIEZpcnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBh
IGNoYW5jZSB0byBoYW5kbGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355084</attachid>
            <date>2018-11-16 11:28:11 -0800</date>
            <delta_ts>2018-11-16 11:33:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116112810.patch</filename>
            <type>text/plain</type>
            <size>74071</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk1MzEwYzNhNWFhNTU0
OGJmNDg4MmY2MTA4NGM2MzNhNTdhYzRkZC4uMWZlOWEwMzI1MjU1N2JiYWUzNmRhMzAxZjA0MDhj
ZWMxOWViODEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTUg
IEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW2N1
cmxdIHdhcm5pbmc6IGRlbGV0ZSBjYWxsZWQgb24gbm9uLWZpbmFsICdXZWJDb3JlOjpDdXJsRG93
bmxvYWQnIHRoYXQgaGFzIHZpcnR1YWwgZnVuY3Rpb25zIGJ1dCBub24tdmlydHVhbCBkZXN0cnVj
dG9yIFstV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMmJm
ZWQ4NDkzNWVmZGU3NDJmZDE4OWFhMGZjYWU5OTljZWVlNGRkNy4uMGM0OGMzZmIxNjM3ZGZiNTFk
YmYwMDdjYThkYzI5MjM2MjYwNjMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNh
Z2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTcz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICogcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6
CisKIDIwMTgtMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcmVtb3Zpbmcgc29tZSBXS1NJIGNhbGxz
IG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU3MGU4NjlkNjE0ZTI2ZDQ1ZGQwMTAyZGI3YTQ2NjAz
YmZlN2ExM2MuLmE3OTdkODFkODM3Zjg0MmQzYjQwMWJjYzY5ODAxZmYxMTY3NzE1YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9n
YXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIg
Y3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIExvb2t1cCBpcyBiZWluZyByZXBsYWNlZCBieSBSZXZlYWwuIFRoaXMgZnJh
bWV3b3JrIHNob3VsZCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBwYXRjaCBt
b3ZlcyB0aGUgY29kZSB0aGF0IHdlIGV4cGVjdCB3aWxsIGJlIG5lZWRlZCBmb3IgYWxsIHBsYXRm
b3JtcyB0byB0aGUgbW9yZQorICAgICAgICBnZW5lcmFsIGNvY29hIGFyZWEuIFRoaXMgcGF0Y2gg
Y2hhbmdlcyBubyBmdW5jYXRpb25hbGl0eSwgYW5kIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAg
IGFueXRoaW5nIGN1cnJlbnRseS4gVGhpcyB3b3JrIHdpbGwgYmUgYnVpbGQgb24gbGF0ZXIgd2hl
biBSZXZlYWwgaXMgcmVhZHkgdG8gc3VwcG9ydAorICAgICAgICBtdWx0aXBsZSBwbGF0Zm9ybXMu
CisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IF9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX2FkZERlZmF1bHRHZXN0dXJlUmVjb2duaXplcnNdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
bG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UpOiBEZWxldGVkLgorCiAyMDE4LTExLTE1ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgV0tQcmVmZXJlbmNlc1NldEZv
bnRTbW9vdGhpbmdMZXZlbCBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjE1NTJk
ZjdmNzVmYzUzOWJiODc1NmQwODQ5YjU0ZDY4Njk1NTQwOS4uMTgyNDdkNjRjOWQzMDI5OTYzMDVm
Y2M1NDcyMzVjNGNiNTQxYmUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAyLDYgKzQwMiw3IEBACiAJCQkJMEMyREExMzkx
RjNCRUI0OTAwREJDMzE3IC8qIFBhc3NLaXRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQTFGM0JFQjQ5
MDBEQkMzMTcgLyogcHRocmVhZFNQSS5oICovLAogCQkJCTBDMkRBMTNCMUYzQkVCNDkwMERCQzMx
NyAvKiBRdWFydHpDb3JlU1BJLmggKi8sCisJCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8q
IFJldmVhbFNQSS5oICovLAogCQkJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovLAogCQkJCTBDMkRBMTNDMUYzQkVCNDkwMERCQzMxNyAvKiBTZXJ2ZXJzU1BJ
LmggKi8sCiAJCQkJMEMyREExMkIxRjNCRUI0OTAwREJDMzE3IC8qIFVSTEZvcm1hdHRpbmdTUEku
aCAqLywKQEAgLTQ2Nyw3ICs0NjgsNiBAQAogCQkJCTBDNzc4NTg2MUY0NTEzMEYwMEY0RUJCNiAv
KiBRVEtpdFNQSS5oICovLAogCQkJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0NCAvKiBRdWlja0Ry
YXdTUEkuaCAqLywKIAkJCQkwQzc3ODU4NzFGNDUxMzBGMDBGNEVCQjYgLyogUXVpY2tMb29rTWFj
U1BJLmggKi8sCi0JCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8qIFJldmVhbFNQSS5oICov
LAogCQkJCUExMTc1QjQ4MUY2QUZGOEUwMEM0QjlGMCAvKiBTcGVlY2hTeW50aGVzaXNTUEkuaCAq
LywKIAkJCQkwQzc3ODU4ODFGNDUxMzBGMDBGNEVCQjYgLyogVFVDYWxsU1BJLmggKi8sCiAJCQkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zNDg2NGE2NzYyYWQ5YjYyNTI1ZmU4ZGFhZmJlODdkZDVkYmZlNTBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCitT
T0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQorU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLKFJldmVhbENvcmUpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlBy
ZXNlbnRlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0Nv
bnRleHQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQorCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVh
bC9SVlByZXNlbnRlci5oPgorI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KKyNpbXBvcnQg
PFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgorCisKKyNlbHNlCisKK0BpbnRlcmZhY2UgUlZJdGVt
IDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBO
U19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJWU2VsZWN0aW9u
IDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNs
aWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJh
bmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247
CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAorI2lmIFBMQVRGT1JN
KE1BQykKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0
aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRv
Y3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVz
ZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KW9wdGlvbnM7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorLSAoQk9PTClyZXZlYWxJdGVtOihS
Vkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVu
dENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50
aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworQGVuZAorCisjZW5k
aWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9tYWMvTG9va3VwU1BJLmgKaW5kZXggZWI3Zjk1MWY3MWM3NWM4MTIxN2IyMmU3OGFkYWQzMGU0
ZDZhNWMwNC4uZTBhMzM3NWQzMGNjODg5ZjEzNWVhMmExMWQ0N2QwZGE5NGY5OGE4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaApAQCAtMjMsMTIgKzIzLDEz
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisKKyNpZiBQTEFURk9STShNQUMpCisKICNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rp
b25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAK
LSNpZiBQTEFURk9STShNQUMpCi0KIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05B
TChMb29rdXApCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoTG9va3VwLCBMVUxvb2t1cERlZmlu
aXRpb25Nb2R1bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiOGRhNDJjODU5OTBhZTMyZWE2N2Ew
YWY3NzUzZjNkYjk4MjhhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFs
KQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUpCi1TT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKLVNPRlRfTElOS19DTEFTU19PUFRJT05B
TChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwo
UmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUs
IFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQotI2ltcG9ydCA8
UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+Ci0jaW1wb3J0
IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JldmVhbENv
cmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2JqZWN0IDxOU1NlY3Vy
ZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBz
ZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdOQVRFRF9JTklUSUFM
SVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2JqZWN0Ci0rIChOU1Jh
bmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4IHNlbGVjdGVkUmFu
Z2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2Vs
ZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOwotQGVuZAotCi1AaW50ZXJmYWNl
IFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9j
dW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50
aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChCT09MKXJldmVhbEl0ZW06KFJWSXRlbSAq
KWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4
dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250
ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci1AZW5kCi0KLSNlbmRpZiAvLyAh
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGNiNmRl
Y2IxN2MxZTBlMmVhNTc3ZDI0Mjg2ZTY2MzVkYzcyZjY5NzcuLjQ0YWFjYmEyMWQzMzA0ODllY2Q1
NDY5MWQyMzEyNDNkODE1OTE4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtODQsNiAr
ODQsNyBAQCBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAKIGVkaXRpbmcvU21hcnRS
ZXBsYWNlQ0YuY3BwCiAKIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCiBl
ZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0KIGVkaXRpbmcvY29jb2Ev
Rm9udEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtOTcsNyArOTgsNiBAQCBlZGl0aW5nL2lvcy9EaWN0
YXRpb25Db21tYW5kSU9TLmNwcAogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCiAKIGVkaXRpbmcv
bWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQotZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cC5tbQogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQogZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCiBlZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDg4MGNmYzRmNjExYjk0MDEyODAxZjZkZGY4MDZiNzM0ZDY5MDZiOGQuLjZiNGQ2MjAwNGU3NzRk
NTNlMTBjMWMwOGZjZjY1Njg3MzJjYWI5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNDE5LDYgKzIwNDE5LDcgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCUM1MjI3REVGMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0
aW9uLmggKi8sCiAJCQkJQzUyMjdERjAxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24u
bW0gKi8sCisJCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAu
bW0gKi8sCiAJCQkJOUI1NUVFRTgxQjNFODg5ODAwNTM0MkJDIC8qIEVkaXRvckNvY29hLm1tICov
LAogCQkJCUY0MkNFQjU0MjE0MDMxRUUwMDJEQ0E3MiAvKiBGb250QXR0cmlidXRlQ2hhbmdlc0Nv
Y29hLm1tICovLAogCQkJCUY0OEQyQTc1MjE1NkZFNTcwMEM2NzUyQiAvKiBGb250QXR0cmlidXRl
c0NvY29hLm1tICovLApAQCAtMjYxNDAsNyArMjYxNDEsNiBAQAogCQkJCUNFN0IyREFGMTU4NkFC
QUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRTdC
MkRCMDE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tICov
LAogCQkJCTkzN0ZGM0Q0MUExMDEyRDYwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLmggKi8s
Ci0JCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAubW0gKi8s
CiAJCQkJNDQyOTU2Q0EyMThBNkQzMDAwODBEQjU0IC8qIERpY3Rpb25hcnlMb29rdXBMZWdhY3ku
bW0gKi8sCiAJCQkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSAqLywK
IAkJCQk0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogRnJhbWVTZWxlY3Rpb25NYWMubW0gKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29r
dXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTFhMzljNzZiMTU0ZGY3MDhjZTg0ZDllNmVmN2E4YzQ4Zjk0YTc1NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxv
b2t1cC5tbQpAQCAtMCwwICsxLDQwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCisKKyNpZiBQTEFURk9STShDT0NP
QSkgJiYgRU5BQkxFKFJFVkVBTCkKKworI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkVk
aXRpbmcuaCIKKyNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWUuaCIK
KyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCisj
aW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2lt
cG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlJlbmRlck9iamVjdC5o
IgorI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIK
KyNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlZpc2libGVVbml0cy5oIgor
I2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9SZXZlYWxT
UEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgorI2ltcG9ydCA8d3RmL0Js
b2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKworCisKKyNpZiBQ
TEFURk9STShNQUMpCisKK0BpbnRlcmZhY2UgV2ViUmV2ZWFsSGlnaGxpZ2h0IDxSVlByZXNlbnRl
ckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKK0Bwcml2YXRlCisgICAgRnVuY3Rpb248
dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOworICAgIE5TUmVjdCBfaGlnaGxpZ2h0UmVjdDsK
KyAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OworICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
X2F0dHJpYnV0ZWRTdHJpbmc7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
TlNSZWN0IGhpZ2hsaWdodFJlY3Q7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJP
T0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOworCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGln
aGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRy
aWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7CistICh2b2lkKXNldENsZWFyVGV4dElu
ZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcjsKKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0CisKK0BzeW50aGVzaXplIGhpZ2hs
aWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7CitAc3ludGhlc2l6ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0
PV91c2VEZWZhdWx0SGlnaGxpZ2h0OworQHN5bnRoZXNpemUgYXR0cmlidXRlZFN0cmluZz1fYXR0
cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDoo
TlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0
SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1
dGVkU3RyaW5nCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgX2hpZ2hsaWdodFJlY3QgPSBoaWdobGlnaHRSZWN0OworICAg
IF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhpZ2hsaWdodDsKKyAgICBfYXR0cmli
dXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xl
YXJUZXh0SW5kaWNhdG9yCit7CisgICAgX2NsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xl
YXJUZXh0SW5kaWNhdG9yKTsKK30KKworLSAoTlNBcnJheTxOU1ZhbHVlICo+ICopcmV2ZWFsQ29u
dGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNGb3JJdGVtOihSVkl0ZW0g
KilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJBTShp
dGVtKTsKKyAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnNlbGYuaGlnaGxpZ2h0
UmVjdF1dOworfQorCistICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQg
Kiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURf
UEFSQU0oaXRlbSk7CisgICAgCisgICAgZm9yIChOU1ZhbHVlICpyZWN0VmFsIGluIGNvbnRleHQu
aXRlbVJlY3RzSW5WaWV3KSB7CisgICAgICAgIE5TUmVjdCByZWN0ID0gcmVjdFZhbC5yZWN0VmFs
dWU7CisKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBhdHRyaWJ1dGVzIGZyb20gdGhlIGF0
dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFncmFwaCBzdHlsZSBhdHRyaWJ1dGUg
aW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0
aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGZvbnRBdHRyaWJ1dGVz
SW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pXV0p
OworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaCA9
IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10gaW5pdF0pOworICAgICAg
ICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRDZW50ZXJdOworICAgICAg
ICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdldCgpIGZvcktleTpOU1BhcmFncmFw
aFN0eWxlQXR0cmlidXRlTmFtZV07CisgICAgCisgICAgICAgIFJldGFpblB0cjxOU0F0dHJpYnV0
ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBhdHRyaWJ1dGVzOmF0
dHJpYnV0ZXMuZ2V0KCldKTsKKyAgICAgICAgW3N0cmluZyBkcmF3SW5SZWN0OnJlY3RdOworICAg
IH0KK30KKworLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29u
dGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRlbTooUlZJdGVtICopaXRlbQorewor
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAg
cmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKK30KKworLSAodm9pZClyZXZlYWxDb250
ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbToo
UlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURf
UEFSQU0oaXRlbSk7CisgICAgYXV0byBibG9jayA9IFdURk1vdmUoX2NsZWFyVGV4dEluZGljYXRv
cik7CisgICAgaWYgKGJsb2NrKQorICAgICAgICBibG9jaygpOworfQorCitAZW5kCisKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkp
CisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0
ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBTaW5j
ZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFi
IHRoZSByZXR1cm5lZCBvcHRpb25zLgorICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rp
b24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlz
aWJsZUVuZCgpOworCisgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUg
c3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQg
PSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIHBhcmFncmFwaEVu
ZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisKKyAgICBpbnQgbGVuZ3RoVG9TZWxl
Y3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworICAgIGludCBsZW5ndGhUb1NlbGVjdGlv
bkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKKyAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtl
UmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5n
dGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICAKKyAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0
ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAgICBT
dHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwor
ICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNl
KCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwor
ICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwor
ICAgIAorICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJS
YW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5p
bCB9OworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNE
aWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJl
cigpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8qIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhl
cmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KKyAgICBhdXRvIGZyYW1lUG9pbnQgPSBo
aXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKKyAgICBpZiAoIWZy
YW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQorICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKKworICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9y
UG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICBw
b3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKKworICAgIGF1dG8g
c2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgTlNSYW5nZSBzZWxlY3Rpb25S
YW5nZTsKKyAgICBpbnQgaGl0SW5kZXg7CisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVy
UmFuZ2U7CisgICAgCisgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJs
ZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQg
PSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgY29udGV4
dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0
LgorICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rp
b25TdGFydCk7CisgICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2Vs
ZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0
ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1
dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5n
ZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAgICAgICAgCisgICAgICAgIHNlbGVj
dGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRv
U2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5n
ZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOworICAgICAgICAKKyAgICAg
ICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9Owor
ICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVs
YXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2Nv
dW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7CisgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFy
ZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRo
ZSBwb2ludC4KKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3Vu
ZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOworICAgICAgICAKKyAgICAgICAg
aWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBu
aWwgfTsKKyAgICAgICAgCisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7CisgICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9u
KS5nZXQoKSk7CisgICAgfQorICAgIAorICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRS
VlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFu
Z2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRh
dGVTZWxlY3Rpb246bmlsXTsKKyAgICAKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4
dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0g
PSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcg
c2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5n
ZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisKKyAgICBpZiAoaGlnaGxpZ2h0UmFuZ2Uu
bG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0
b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9u
LCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAor
fQorCitzdGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9u
ICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRl
Z2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRk
ZWRBZnRlckVuZCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBz
aXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKKyAgICBbc2Vs
ZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRd
OworICAgIAorICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmlu
Zy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsKKyAgICAKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNl
bGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKKyAgICBjaGFyYWN0ZXJz
QWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGgg
LSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Cit9CisKK3N0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlv
bikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFn
ZXRSVkl0ZW1DbGFzcygpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAg
IC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9p
bnQuCisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQorICAg
ICAgICByZXR1cm4geyBAIiIsIG5pbCB9OworCisgICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4g
c2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKKworICAgIC8v
IEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBi
ZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3Nl
bGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVy
c0FkZGVkQmVmb3JlU3RhcnQgPSAwOworICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRl
ckVuZCA9IDA7CisgICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxv
b2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0Fk
ZGVkQWZ0ZXJFbmQpOworCisgICAgYXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlv
bkZvckxvb2t1cCBzdHJpbmddOworICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShj
aGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7CisKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBp
dGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxh
aW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKKyAgICBOU1JhbmdlIGV4
dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKKyAgICAKKyAgICBpZiAo
ZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsg
c2VsZWN0aW9uLnN0cmluZywgbmlsIH07CisKKyAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZv
cmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOworICAg
IE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsg
ZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFs
TGVuZ3RoKTsKKworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBB
ZGRlZEJlZm9yZV07CisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBB
ZGRlZEFmdGVyXTsKKworICAgIEFTU0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJp
bmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdl
XV0pOworICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiB7IEAiIiwgbmlsIH07Cit9CisKK3N0
YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9s
bGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxi
YWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4
dEluZGljYXRvcikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSB8fCAhZ2V0
UlZQcmVzZW50ZXJDbGFzcygpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpvcHRpb25z
ID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgpKQorICAgICAgICBbbXV0YWJsZU9w
dGlvbnMgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlvbnNdOworCisgICAgYXV0byB0ZXh0
SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4
dEluZGljYXRvcik7CisgICAgCisgICAgUmV0YWluUHRyPFJWUHJlc2VudGVyPiBwcmVzZW50ZXIg
PSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2UoKSBpbml0XSk7CisgICAgCisgICAg
TlNSZWN0IGhpZ2hsaWdodFJlY3Q7CisgICAgTlNQb2ludCBwb2ludGVyTG9jYXRpb247CisgICAg
CisgICAgaWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkpIHsKKyAgICAgICAg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRleHRJbmRpY2F0b3IuZ2V0KCkpOwor
CisgICAgICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0
SW5kaWNhdG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKVswXTsK
KyAgICAgICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRl
eHRJbmRpY2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygp
OworICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0
ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjaykgeworICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0g
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nv
b3JkaW5hdGVzKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3Jk
aW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2soc2VsZWN0aW9uQm91bmRp
bmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
aXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblZp
ZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKKyAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHNlbGVj
dGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOworICAgICAgICBwb2ludGVyTG9jYXRp
b24gPSBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKKyAgICAgICAg
CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNQb2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0
aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbjsKKyAgICAgICAgCisgICAgICAgIGhpZ2hsaWdodFJlY3Qg
PSB0ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Cisg
ICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVP
cmlnaW4gdG9WaWV3Om5pbF07CisgICAgfQorICAgIAorICAgIFJldGFpblB0cjxXZWJSZXZlYWxI
aWdobGlnaHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2ZWFsSGlnaGxpZ2h0IGFs
bG9jXSBpbml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hs
aWdodDohdGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSBhdHRyaWJ1dGVkU3RyaW5n
OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKV0pOworICAgIFJldGFp
blB0cjxSVlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0gYWRvcHROUyhbYWxsb2NSVlByZXNl
bnRpbmdDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzpwb2lu
dGVyTG9jYXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVy
SGlnaGxpZ2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsKKyAgICAKKyAgICBSZXRh
aW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRX
aXRoVGV4dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkuc3RyaW5n
IHNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsKKyAgICAKKyAgICBbd2ViSGlnaGxp
Z2h0IHNldENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0gV1RGTW92ZSh3ZWJIaWdo
bGlnaHQpLCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcild
IHsKKyAgICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikKKyAgICAgICAgICAgIGNsZWFyVGV4
dEluZGljYXRvcigpOworICAgIH1dOworICAgIAorICAgIGlmIChjcmVhdGVBbmltYXRpb25Db250
cm9sbGVyKQorICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBhbmltYXRpb25Db250cm9sbGVyRm9y
SXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29u
dGV4dC5nZXQoKSBvcHRpb25zOm5pbF07CisgICAgW3ByZXNlbnRlciByZXZlYWxJdGVtOml0ZW0u
Z2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgp
IG9wdGlvbnM6bmlsXTsKKyAgICByZXR1cm4gbmlsOworICAgIAorI2VuZGlmIC8vICBQTEFURk9S
TShNQUMpCisgICAgCisgICAgVU5VU0VEX1BBUkFNKGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIp
OworICAgIFVOVVNFRF9QQVJBTShkaWN0aW9uYXJ5UG9wdXBJbmZvKTsKKyAgICBVTlVTRURfUEFS
QU0odmlldyk7CisgICAgVU5VU0VEX1BBUkFNKHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjayk7CisgICAgVU5VU0VEX1BBUkFNKHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNr
KTsKKyAgICBVTlVTRURfUEFSQU0oY2xlYXJUZXh0SW5kaWNhdG9yKTsKKworICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIG5pbDsKK30KKwordm9pZCBEaWN0aW9uYXJ5
TG9va3VwOjpzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBv
cHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGlj
YXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAg
ICBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25hcnlQ
b3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZp
ZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7
Cit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQorCitXS1JldmVhbENvbnRyb2xsZXIg
RGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rp
b25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3Qg
V1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxs
YXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4m
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgcmV0dXJuIHNob3dQb3B1cE9yQ3JlYXRlQW5p
bWF0aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5k
aWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxi
YWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQorCisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShD
T0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVu
dFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50
UmVhZGVyQ29jb2EubW0KaW5kZXggZTRiOTBiZGYyNzA1MmIwMzJmOWEzY2U0MzM1NDNkMWY4Nzc4
NGY2Ny4uODVjNDI3NDFhYmFkNzU3ZGQxMGZlNGE2ZDQzZjFiYmE3M2RmZjY5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2Eu
bW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1
bWVudEZyYWdtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgorI2ltcG9ydCAiRWRp
dG9yLmgiCisjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNpbXBvcnQgIkZpbGUuaCIKICNpbXBv
cnQgIkZpbGVTeXN0ZW0uaCIKICNpbXBvcnQgIkZyYW1lLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKaW5kZXggY2I2ZDUzZWI4ZjhjNGNmZDM4OTQ1
N2Y1YmVhZTI4M2EzN2RhODE5Mi4uZjhmNzYxY2RjODFhZWJkM2RmMDg4MzdhMzIzMWMwOGYzNWE0
ZmViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAu
aApAQCAtMjMsMTUgKzIzLDI1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0o
Q09DT0EpCiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCi0jaW5jbHVkZSA8cGFs
L3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgorI2lmIFBM
QVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVy
ZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uLmg+CiAKIE9CSkNfQ0xBU1MgTlNWaWV3OwogT0JKQ19DTEFTUyBQREZTZWxlY3Rp
b247CiAKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVmIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXI+IFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbHNlCit0eXBlZGVmIGlk
IFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTQ4LDggKzU4LDExIEBAIHB1
YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNob3dQb3B1cChjb25zdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChU
ZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0
IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZl
cnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4
dEluZGljYXRvciA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGhp
ZGVQb3B1cCgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGlkIDxOU0ltbWVkaWF0ZUFj
dGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25z
dCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9p
ZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNv
bnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFy
VGV4dEluZGljYXRvciA9IG51bGxwdHIpOworICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xs
ZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdU
Rjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0
aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiBy
b290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOworI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKKyAgICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjZTllNDQ3NGE0OWZjYzliMDk1YjJmNGJkYTZjOWFlM2YzOGNmZTQ3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIC9kZXYvbnVsbApAQCAtMSwz
ODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJEaWN0aW9uYXJ5TG9va3VwLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShSRVZF
QUwpCi0KLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJFZGl0aW5nLmgiCi0jaW1wb3J0
ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZVNl
bGVjdGlvbi5oIgotI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgotI2ltcG9ydCAiSGl0VGVzdFJl
c3VsdC5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJl
bmRlck9iamVjdC5oIgotI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJWaXNpYmxl
UG9zaXRpb24uaCIKLSNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKLSNpbXBvcnQgIlZpc2li
bGVVbml0cy5oIgotI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgotI2ltcG9ydCA8cGFsL3NwaS9t
YWMvTG9va3VwU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdl
c3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9SZXZlYWxTUEkuaD4K
LSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRy
Lmg+Ci0KLUBpbnRlcmZhY2UgV2ViUmV2ZWFsSGlnaGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hsaWdo
dERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKLUBwcml2YXRlCi0gICAgRnVuY3Rpb248dm9pZCgpPiBf
Y2xlYXJUZXh0SW5kaWNhdG9yOwotICAgIE5TUmVjdCBfaGlnaGxpZ2h0UmVjdDsKLSAgICBCT09M
IF91c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0
ZWRTdHJpbmc7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0IGhp
Z2hsaWdodFJlY3Q7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgdXNlRGVm
YXVsdEhpZ2hsaWdodDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhI
aWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihC
T09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3Ry
aW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Ci0tICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjoo
RnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcjsKLQotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0Ci0KLUBzeW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9
X2hpZ2hsaWdodFJlY3Q7Ci1Ac3ludGhlc2l6ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZh
dWx0SGlnaGxpZ2h0OwotQHN5bnRoZXNpemUgYXR0cmlidXRlZFN0cmluZz1fYXR0cmlidXRlZFN0
cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhp
Z2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0
IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5n
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCi0gICAgX2hpZ2hsaWdodFJlY3QgPSBoaWdobGlnaHRSZWN0OwotICAgIF91c2VEZWZh
dWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBfYXR0cmlidXRlZFN0cmlu
ZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Ci0gICAgCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5k
aWNhdG9yCi17Ci0gICAgX2NsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5k
aWNhdG9yKTsKLX0KLQotLSAoTlNBcnJheTxOU1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQ
cmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAg
ICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOwot
fQotCi0tICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0
IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oaXRl
bSk7Ci0gICAgCi0gICAgZm9yIChOU1ZhbHVlICpyZWN0VmFsIGluIGNvbnRleHQuaXRlbVJlY3Rz
SW5WaWV3KSB7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gcmVjdFZhbC5yZWN0VmFsdWU7Ci0KLSAg
ICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBhdHRyaWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQg
c3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFncmFwaCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIg
dG8gY2VudGVyIHRleHQuCi0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBh
dHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRo
RGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpO
U01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pXV0pOwotICAgICAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMo
W1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10gaW5pdF0pOwotICAgICAgICBbcGFyYWdy
YXBoIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRDZW50ZXJdOwotICAgICAgICBbYXR0cmli
dXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdldCgpIGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0
cmlidXRlTmFtZV07Ci0gICAgCi0gICAgICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+
IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMu
Z2V0KCldKTsKLSAgICAgICAgW3N0cmluZyBkcmF3SW5SZWN0OnJlY3RdOwotICAgIH0KLX0KLQot
LSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzaG91
bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNF
RF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgcmV0dXJuIHNl
bGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKLX0KLQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlBy
ZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICop
aXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRl
bSk7Ci0gICAgYXV0byBibG9jayA9IFdURk1vdmUoX2NsZWFyVGV4dEluZGljYXRvcik7Ci0gICAg
aWYgKGJsb2NrKQotICAgICAgICBibG9jaygpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBp
ZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owot
ICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07Ci0KLSAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQs
IHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgotICAgIGF1dG8gc2Vs
ZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rp
b25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2Ug
YXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsK
LSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0K
LSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAg
IGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1Jhbmdl
IHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3Ro
VG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKLSAgICAKLSAgICBSZWZQ
dHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwg
cGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hh
cmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5T
KFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRS
YW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdl
dCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAotICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hs
aWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci19Ci0KLXN0ZDo6dHVw
bGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
QXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCi17Ci0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVt
Q2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAgYXV0
byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKLQotICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlm
ICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9u
J3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAg
ICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2Rl
RnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8gcG9zaXRpb24gPSBmcmFt
ZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0gICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKTsKLQotICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0g
ICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKLSAgICBpbnQgaGl0SW5kZXg7Ci0gICAgUmVmUHRy
PFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlvbi5zZWxl
Y3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKLSAgICAg
ICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotICAgICAgICAK
LSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRp
bmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3Rh
cnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBoRW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8g
cmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rp
b25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgCi0gICAgICAgIGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAg
ICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQo
KSkpOwotICAgICAgICAKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5l
UnVsZXMgeyBwb3NpdGlvbiB9OwotICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1
bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKLSAgICAgICAgcG9z
aXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7Ci0gICAgICAg
IC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4
dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTAp
OwotICAgICAgICAKLSAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCi0gICAgICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJh
bmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgICAgIGhpdEluZGV4ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgfQotICAgIAotICAgIE5TUmFuZ2Ug
c2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4
OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0
aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKLSAgICAKLSAgICBTdHJpbmcg
aXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJl
dGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7Ci0gICAg
TlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0KLSAg
ICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0
UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAg
ICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhp
Z2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAg
ICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OwotICAgIAotfQotCi1zdGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNo
YXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJh
Y3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJ
bnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0KLSAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3Ry
aW5nLmxlbmd0aDsKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVy
T2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAgIAotICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsKLSAgICAKLSAg
ICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhw
YW5kXTsKLSAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVu
Z3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKLQotICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXN0ZDo6dHVwbGU8TlNTdHJpbmcgKiwg
TlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQ
REZTZWxlY3Rpb24gKnNlbGVjdGlvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5v
IGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0gICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlv
bi5zdHJpbmcubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBAIiIsIG5pbCB9OwotCi0gICAgUmV0
YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0
aW9uIGNvcHldKTsKLQotICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUw
IGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICBhdXRv
IG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKLSAg
ICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAwOwotICAgIE5TSW50ZWdl
ciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7Ci0gICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFy
YWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZv
cmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOwotCi0gICAgYXV0byBmdWxsUGxhaW5U
ZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOwotICAgIGF1dG8gcmFuZ2VU
b1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7Ci0KLSAg
ICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgp
IGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bh
c3NdKTsKLSAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRS
YW5nZTsKLSAgICAKLSAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3Vu
ZCkKLSAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07Ci0KLSAgICBOU0lu
dGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3Rl
ZFJhbmdlLmxvY2F0aW9uOwotICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJh
Y3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFz
cy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKLQotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2Vs
ZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKLQotICAgIEFTU0VSVChbc2VsZWN0aW9u
LnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0
aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOwotICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcs
IG5pbCB9OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHJldHVybiB7
IEAiIiwgbmlsIH07Ci19Ci0KLXN0YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25D
b250cm9sbGVyPiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVh
dGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9u
YXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0
SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdU
Rjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNp
b25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQot
ewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJW
SXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF0pOwotICAgIGlmIChOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBkaWN0
aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkpCi0gICAgICAgIFttdXRhYmxlT3B0aW9ucyBh
ZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9uc107Ci0KLSAgICBhdXRvIHRleHRJbmRpY2F0
b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNh
dG9yKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UlZQcmVzZW50ZXI+IHByZXNlbnRlciA9IGFkb3B0
TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICAKLSAgICBOU1JlY3Qg
aGlnaGxpZ2h0UmVjdDsKLSAgICBOU1BvaW50IHBvaW50ZXJMb2NhdGlvbjsKLSAgICAKLSAgICBp
ZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSkgewotICAgICAgICB0ZXh0SW5k
aWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4dEluZGljYXRvci5nZXQoKSk7Ci0KLSAgICAg
ICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0
b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpWzBdOwotICAgICAg
ICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGlj
YXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAg
ICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRl
eHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKSB7
Ci0gICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmll
d1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0
ZXMpOwotICAgICAgICAgICAgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMg
PSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayhzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJ
blZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZpcnN0VGV4
dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnkodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3Jk
aW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICBoaWdobGlnaHRSZWN0ID0gc2VsZWN0aW9uQm91
bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IGZp
cnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwotICAgICAgICAKLSAgICB9
IGVsc2UgewotICAgICAgICBOU1BvaW50IHRleHRCYXNlbGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQ
b3B1cEluZm8ub3JpZ2luOwotICAgICAgICAKLSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHRleHRJ
bmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAg
cG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBvaW50OnRleHRCYXNlbGluZU9yaWdpbiB0
b1ZpZXc6bmlsXTsKLSAgICB9Ci0gICAgCi0gICAgUmV0YWluUHRyPFdlYlJldmVhbEhpZ2hsaWdo
dD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tXZWJSZXZlYWxIaWdobGlnaHQgYWxsb2NdIGlu
aXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OiF0
ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpIGF0dHJpYnV0ZWRTdHJpbmc6ZGljdGlv
bmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpXSk7Ci0gICAgUmV0YWluUHRyPFJW
UHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGluZ0Nv
bnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRlckxvY2F0aW9uSW5WaWV3OnBvaW50ZXJMb2Nh
dGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGln
aHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQoKV0pOwotICAgIAotICAgIFJldGFpblB0cjxS
Vkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0
OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKS5zdHJpbmcgc2VsZWN0
ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOwotICAgIAotICAgIFt3ZWJIaWdobGlnaHQgc2V0
Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGlnaHQgPSBXVEZNb3ZlKHdlYkhpZ2hsaWdodCks
IGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKV0gewotICAg
ICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQotICAgICAgICAgICAgY2xlYXJUZXh0SW5kaWNh
dG9yKCk7Ci0gICAgfV07Ci0gICAgCi0gICAgaWYgKGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIp
Ci0gICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOml0
ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0Lmdl
dCgpIG9wdGlvbnM6bmlsXTsKLSAgICBbcHJlc2VudGVyIHJldmVhbEl0ZW06aXRlbS5nZXQoKSBk
b2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9u
czpuaWxdOwotICAgIHJldHVybiBuaWw7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgIHJldHVybiBuaWw7Ci19Ci0KLXZvaWQgRGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVw
KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAq
dmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3Qo
RmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgc2hvd1BvcHVwT3JDcmVh
dGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQotCi12b2lkIERpY3Rp
b25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCi0gICAgaWYgKCFnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgW2dldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkgaGlk
ZURlZmluaXRpb25dOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotaWQg
PE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gRGljdGlvbmFyeUxvb2t1cDo6
YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRp
Y3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lk
KFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29u
c3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0
b3IpCi17Ci0gICAgcmV0dXJuIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcih0
cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9u
Q2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFy
VGV4dEluZGljYXRvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9p
b3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5o
CmluZGV4IDllZWZiOTc4NGZiZTY4OWIwOTBhNWIwMWZjZWVjZTcwZDY1NDEzMmQuLjE5NTVkNjJk
NDBiMWQ4NmU0ZGQ1MTBlYjE0ODg2MWQ0YmRhNjk3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC03MzUsNiArNzM1LDkgQEAgc3RydWN0IF9VSVdlYlRv
dWNoRXZlbnQgewogICAgIGJvb2wgaXNQb3RlbnRpYWxUYXA7CiB9OwogCitAaW50ZXJmYWNlIF9V
SUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2duaXplcgorQGVuZAorCiBA
Y2xhc3MgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyOwogCiBAcHJvdG9jb2wgVUlX
ZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUgPE5TT2JqZWN0PgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQppbmRl
eCBmNTY4NzVkZmYzYTFjYzQ1ZWJlZTYxNzIxNWNlOTU3MjNmNTNkZTRlLi42NWFlY2Q5MjE5MmZl
NjY2MWYxYmFhNDJkMzQwNzg2Y2U0ZDFkNTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2lt
cG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiU2FmZUJyb3dzaW5nU1BJLmgiCiAjaW1wb3J0
ICJTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCisjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNp
bXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtMTg5LDUgKzE5MCwyMSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1DbG9uZUF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNo
bWVudD4mJiBmcm9tQXR0YWNobWVudAogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEFUVEFDSE1FTlRf
RUxFTUVOVCkKKyAgICAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYg
KCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKHBvaW50
KSwgbV9wYWdlSUQpOworfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCksIG1fcGFnZUlEKTsKIH0K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggYzQ4YzM5ZDY2ZGMxMzk2
NDIwNTY1NGI5ZDU0MGYwZjY4Nzg4NDIwYS4uOWRjMzkwOGNiMTA3NjBiZTgyNGE1OWNjZmJlNmY5
MzNiNzhmYmY1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtODcsNiArODcsNyBAQCBjbGFzcyBXZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5OwogY2xhc3MgV2ViUGFnZVByb3h5OwogfQogCitAY2xh
c3MgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xhc3MgX1VJSGlnaGxpZ2h0VmlldzsK
IEBjbGFzcyBfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFz
cyBVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI7CkBAIC0yMTQsNiArMjE1LDcgQEAgc3RydWN0IFdL
QXV0b0NvcnJlY3Rpb25EYXRhIHsKIAogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBSZXRhaW5Q
dHI8VUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyPiBfaG92ZXJHZXN0dXJlUmVjb2duaXplcjsKKyAg
ICBSZXRhaW5QdHI8X1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXI+IF9sb29rdXBHZXN0dXJlUmVj
b2duaXplcjsKICNlbmRpZgogCiAgICAgUmV0YWluUHRyPFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Np
c3RhbnQ+IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMjFkMzE3
NzAwNmIxYzZkZjAxNmJhYmYzZTBjMzZhNzM4ODQyYTA5Mi4uMjc3NzUwODRlZTkyNGRhZmQwNTUw
NjlmZjdlYjNkNzdkNDk5NzFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0xMTIsNiArMTEyLDcgQEAK
ICNpZiBQTEFURk9STShJT1NNQUMpCiAjaW1wb3J0ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAj
aW1wb3J0IDxVSUtpdC9VSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJS2l0
L19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFw
aGljc1NlcnZpY2VzU1BJLmg+CiAjZW5kaWYKIApAQCAtNjQ5LDYgKzY1MCwxMSBAQCAtICh2b2lk
KXNldHVwSW50ZXJhY3Rpb24KICAgICBfaG92ZXJHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMo
W1tVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0
aW9uOkBzZWxlY3RvcihfaG92ZXJHZXN0dXJlUmVjb2duaXplckNoYW5nZWQ6KV0pOwogICAgIFtf
aG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKICAgICBbc2VsZiBhZGRH
ZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCisg
ICAgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW19VSUxvb2t1cEdlc3R1cmVS
ZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2xv
b2t1cEdlc3R1cmVSZWNvZ25pemVkOildKTsKKyAgICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVy
IHNldERlbGVnYXRlOnNlbGZdOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb29r
dXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCiAjZW5kaWYKIAogICAgIF9zaW5nbGVU
YXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tXS1N5bnRoZXRpY0NsaWNrVGFwR2VzdHVy
ZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihf
c2luZ2xlVGFwQ29tbWl0ZWQ6KV0pOwpAQCAtNzUzLDYgKzc1OSw5IEBAIC0gKHZvaWQpY2xlYW51
cEludGVyYWN0aW9uCiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtfaG92ZXJHZXN0dXJlUmVj
b2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25p
emVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKKyAgICBbX2xvb2t1cEdl
c3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW3NlbGYgcmVtb3ZlR2VzdHVy
ZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogCiAg
ICAgW19zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwpAQCAtODM2
LDYgKzg0NSw3IEBAIC0gKHZvaWQpX3JlbW92ZURlZmF1bHRHZXN0dXJlUmVjb2duaXplcnMKICAg
ICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfdHdvRmluZ2VyU2luZ2xlVGFwR2VzdHVy
ZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbc2VsZiByZW1v
dmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAg
W3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdl
dCgpXTsKICNlbmRpZgogfQogCkBAIC04NTAsNiArODYwLDcgQEAgLSAodm9pZClfYWRkRGVmYXVs
dEdlc3R1cmVSZWNvZ25pemVycwogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl90d29G
aW5nZXJTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9T
TUFDKQogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25p
emVyLmdldCgpXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVy
ZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTE0NTAsNiArMTQ2MSwxMCBAQCAt
IChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJl
Y29nbml6ZXIgc2hvdWxkUmVjb2duaQogCiAgICAgaWYgKFtnZXN0dXJlUmVjb2duaXplciBpc0tp
bmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSB8fCBbb3RoZXJHZXN0
dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgY2xh
c3NdXSkKICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBpZiAoKFtnZXN0dXJlUmVjb2du
aXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBjbGFzc11dICYm
IFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVy
ZVJlY29nbml6ZXIgY2xhc3NdXSkgfHwgKFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9m
Q2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAmJiBbZ2VzdHVyZVJl
Y29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3Nd
XSkpCisgICAgICAgIHJldHVybiBZRVM7CisKICNlbmRpZgogICAgIGlmIChpc1NhbWVQYWlyKGdl
c3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9uZ1By
ZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50LmdldCgp
LmZvcmNlUHJlc3NHZXN0dXJlKSkKICAgICAgICAgcmV0dXJuIFlFUzsKQEAgLTYwMzMsNiArNjA0
OCwxMiBAQCAtIChCT09MKWFsbG93c0RpY3RhdGlvbklucHV0Rm9yTGlzdFZpZXdDb250cm9sbGVy
OihQVUlDUXVpY2tib2FyZFZpZXdDb250cm9sbGVyCiAjZW5kaWYgLy8gUExBVEZPUk0oV0FUQ0hP
UykKIAogI2lmIFBMQVRGT1JNKElPU01BQykKKy0gKHZvaWQpX2xvb2t1cEdlc3R1cmVSZWNvZ25p
emVkOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBOU1Bv
aW50IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMgPSBbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRp
b25JblZpZXc6c2VsZl07CisgICAgX3BhZ2UtPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKTsKK30K
KwogLSAodm9pZClfaG92ZXJHZXN0dXJlUmVjb2duaXplckNoYW5nZWQ6KFVJR2VzdHVyZVJlY29n
bml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgogewogICAgIGlmICghX3BhZ2UtPmlzVmFsaWQoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4
IGRjODAyODM2ZGQ2MGU4NDJkYWExM2FmNDQ0YjJmNzk3OTIyMjA0OTAuLmQ5OThiYjU2MmVhNjcz
NDZjMzFiMzMwODMzZjJiYzJmYjBmOTZmYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtMTIxLDExICsxMjEsNiBAQCBib29sIFdlYlBh
Z2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpnZXN0dXJlQ2FsbGJhY2soY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMy
X3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQog
ewogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlPEdlc3R1cmVDYWxsYmFjaz4o
Y2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2Vi
UGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94
eU1hYy5tbQppbmRleCAxNWM3ZDc2MTUzNjIzNGI2YmNjYmEwZmRmM2JkN2M2MGE5NmMzZWYyLi5i
YmQ4Nzk5OTkxMjQwMDM3NDlkMDJmM2Q0Mzg5Mzg0ZDBkMjYyY2NkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTMyMywyMiArMzIzLDYg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFByb21pc2VkRGF0YUZvckltYWdlKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFMKIAogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYg
KCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigp
LCBtX3BhZ2VJRCk7Ci19Ci0KIC8vIENvbXBsZXggdGV4dCBpbnB1dCBzdXBwb3J0IGZvciBwbHVn
LWlucy4KIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVp
bnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRl
eHRJbnB1dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAzZTc5NDMxZjkzNzExNGM0MWY5ZDJkZmQ1OGUw
YjRmNzIxODE1OWE2Li5lNjRlMWIyNGIyNDExYmE0YmU5NjdiZjFlM2U1MWQ3MDY5MmNmNzQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdl
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2Vi
UGFnZUNvY29hLm1tCkBAIC0yNiw5ICsyNiwyMCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJXZWJQYWdlLmgiCiAKKwogI2ltcG9ydCAiTG9hZFBhcmFtZXRlcnMuaCIKKyNpbXBvcnQg
IlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0
IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1
c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL05vZGVSZW5kZXJT
dHlsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5k
ZXJPYmplY3QuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogCkBAIC01OSw2ICs3MCwxMTQgQEAg
dm9pZCBXZWJQYWdlOjpyZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvKENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Tm93UGxh
eWluZ0luZm9DYWxsYmFjayhoYXNBY3RpdmVTZXNzaW9uLCByZWdpc3RlcmVkQXNOb3dQbGF5aW5n
QXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlvbiwgZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50aWZp
ZXIsIGNhbGxiYWNrSUQpKTsKIH0KKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCit7CisgICAg
aWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZy
YW1lKCkpKSB7CisgICAgICAgIGlmIChwbHVnaW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgorICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0
UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50
cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
OworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKKyAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9u
cykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOworICAg
IGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvKiBmcmFtZSA9IHJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+
ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMs
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOworfQorCit2b2lk
IFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFt
ZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIFJlZlB0cjxS
YW5nZT4gc2VsZWN0ZWRSYW5nZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3Rk
Ojp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZv
clNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIGlmIChzZWxlY3RlZFJhbmdlKQorICAgICAgICBw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwgb3B0
aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQoreworICAgIGF1dG8mIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3Vu
Y2VBbmRDcm9zc2ZhZGUpOworfQorICAgIAordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkg
Km9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlv
blRyYW5zaXRpb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJm
b3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJh
bmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkpOworfQorCitEaWN0aW9uYXJ5
UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJh
bWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIEVkaXRv
ciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7CisgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rp
b25hcnlQb3B1cEluZm8odHJ1ZSk7CisgICAgCisgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0
aW9uYXJ5UG9wdXBJbmZvOworICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCku
aXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJ
bmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQor
ICAgIAorICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHJhbmdlLmFic29sdXRlVGV4
dFF1YWRzKHF1YWRzKTsKKyAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRv
ci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
IGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIEludFJlY3QgcmFuZ2VSZWN0
ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCkpOworICAgIAorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0
YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKKyAgICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBz
dHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkg
OiAwOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJl
Y3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkQXNjZW50KTsKKyAgICBkaWN0aW9uYXJ5UG9w
dXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOworCisjaWYgUExBVEZPUk0oTUFDKQorCisgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0
cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8p
OworICAgIAorICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWRO
U0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CisgICAg
CisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRG
b250TWFuYWdlcl07CisgICAgCisgICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRy
aWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0p
IG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1Jhbmdl
IHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9u
YXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0p
OworICAgICAgICAKKyAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2Jq
ZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoZm9udCkKKyAgICAg
ICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5w
b2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3IoKV07CisgICAgICAgIGlmIChmb250KQorICAgICAg
ICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOworICAgICAgICAKKyAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBh
ZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOworICAgIH1d
OworCisjZW5kaWYgLy8gI2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBUZXh0SW5kaWNhdG9y
T3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5n
UmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXM7CisgICAgaWYgKHByZXNlbnRh
dGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJv
dW5jZUFuZENyb3NzZmFkZSkKKyAgICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8PSBUZXh0SW5kaWNh
dG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKKyAgICAKKyAg
ICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNp
dGlvbik7CisgICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dl
dHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25h
cnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dElu
ZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAg
ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVk
U3RyaW5nOworI2VuZGlmIC8vICNpZiBQTEFURk9STShNQUMpCisgICAgCisgICAgZWRpdG9yLnNl
dElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgIHJldHVybiBkaWN0aW9u
YXJ5UG9wdXBJbmZvOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXgg
NDZjZDA1MGQ1ZTAwNDZkMGZmMGEzNzFkMDMyMTQyNWRmNDBiYmMwZi4uNTk0OWM1ZTAwYzc5ZGEx
ZmE0YjllOWI5NjkzMWUzM2ZmMzAyNDRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0xOTEsOSArMTkxLDYgQEAg
bWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgIyBEaWN0aW9uYXJ5IHN1cHBvcnQuCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCi0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKE1BQykKICAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigp
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQppbmRleCBlZTA4MmM0YTlmNGE0NDNlMzBiMjZkZTZmZDA2NGIyZmFiZDFl
NTY3Li4xMWQwYzU4YjU4NTMwMzAxYWMzYzVmODAwNzBmZjhhYzM0YTFlZTkyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAt
NDEzLDIxICs0MTMsNiBAQCB2b2lkIFdlYlBhZ2U6OnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVn
aW4odWludDY0X3QsIGNvbnN0IFN0cmluZyYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxv
YXRQb2ludCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwRm9yUmFuZ2UoRnJhbWUmLCBSYW5nZSYsIE5TRGljdGlvbmFyeSAqLCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiBi
b29sIFdlYlBhZ2U6OnBlcmZvcm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBT
dHJpbmcmLCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQppbmRleCA0NzMzYjFjYmYyZmU0NWNkOWQwY2VhN2VlZjliYzdjMzhhZmFmN2U0Li5mYTdh
NmFhZjFiNjBiZGE5MGRjZDA3OWJhMWE5NDM2ZjEyMTZiMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMzg5LDEwMiAr
Mzg5LDcgQEAgdm9pZCBXZWJQYWdlOjpmb250QXRTZWxlY3Rpb24oQ2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9udEF0U2VsZWN0aW9uQ2Fs
bGJhY2soZm9udE5hbWUsIGZvbnRTaXplLCBzZWxlY3Rpb25IYXNNdWx0aXBsZUZvbnRzLCBjYWxs
YmFja0lEKSk7CiB9CiAgICAgCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
QXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQotewotICAgIGlmIChhdXRv
KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKSkg
ewotICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKGZsb2F0UG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZp
bmQgdGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2lu
dChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50
UG9pbnQoZmxvYXRQb2ludCkpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9uczsKLSAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9u
YXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOwotICAgIGlmICghcmFuZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1l
KCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclJhbmdlKCpmcmFtZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJl
c2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7
Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOwotICAgIHN0ZDo6dGllKHNlbGVjdGVkUmFuZ2Us
IG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oc2VsZWN0aW9u
KTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29r
dXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRy
YW5zaXRpb24pOwotfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZD
dXJyZW50U2VsZWN0aW9uKCkKLXsKLSAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29r
dXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKLX0K
LQotRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFu
Z2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikK
LXsKLSAgICBFZGl0b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOwotICAgIGVkaXRvci5zZXRJ
c0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKHRydWUpOwotCi0gICAgRGljdGlvbmFyeVBvcHVw
SW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0
ZVNwYWNlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9u
YXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87
Ci0gICAgfQotCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1
dGVUZXh0UXVhZHMocXVhZHMpOwotICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICBy
ZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHJhbmdlUmVj
dCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKLQotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0
Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKLSAgICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBzdHls
ZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkgOiAw
OwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJlY3Qu
eCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkQXNjZW50KTsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJ
bmZvLm9wdGlvbnMgPSBvcHRpb25zOwotCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJp
YnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5j
bHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOwotCi0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMo
W1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRy
aWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKLQotICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2Vy
ID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotCi0gICAgW25zQXR0cmlidXRl
ZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRy
aWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5
ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7Ci0gICAgICAgIFJldGFp
blB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0
cmlidXRlcyBtdXRhYmxlQ29weV0pOwotCi0gICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRB
dHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYg
KGZvbnQpCi0gICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQg
dG9TaXplOmZvbnQucG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOwotICAgICAgICBpZiAo
Zm9udCkKLSAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLQotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07Ci0g
ICAgfV07Ci0KLSAgICBUZXh0SW5kaWNhdG9yT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4
dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBs
ZXhSYW5nZXM7Ci0gICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKLSAgICAgICAgaW5k
aWNhdG9yT3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNl
bGVjdGlvbkhpZ2hsaWdodDsKLQotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNh
dG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRp
b25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLSAgICBpZiAoIXRleHRJbmRpY2F0b3IpIHsK
LSAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwot
ICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBkaWN0aW9u
YXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7Ci0gICAg
ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVk
U3RyaW5nOwotCi0gICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFs
c2UpOwotICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotfQogCiAjaWYgRU5BQkxFKFBE
RktJVF9QTFVHSU4pCiAKQEAgLTUzOSwxMSArNDQ0LDYgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBX
ZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yU2VsZWN0aW9uSW5QREZQbHVnaW4oUERGU2Vs
ZWMKIAogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JS
YW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9u
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURpY3Rpb25h
cnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKGZyYW1lLCByYW5nZSwgb3B0aW9u
cywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3Jt
Tm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgS2V5
Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gRmlyc3QgZ2l2ZSBhY2Nlc3NpYmlsaXR5IGEg
Y2hhbmNlIHRvIGhhbmRsZSB0aGUgZXZlbnQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355086</attachid>
            <date>2018-11-16 11:33:02 -0800</date>
            <delta_ts>2018-11-16 11:45:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116113301.patch</filename>
            <type>text/plain</type>
            <size>74113</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk1MzEwYzNhNWFhNTU0
OGJmNDg4MmY2MTA4NGM2MzNhNTdhYzRkZC4uMWZlOWEwMzI1MjU1N2JiYWUzNmRhMzAxZjA0MDhj
ZWMxOWViODEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTUg
IEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW2N1
cmxdIHdhcm5pbmc6IGRlbGV0ZSBjYWxsZWQgb24gbm9uLWZpbmFsICdXZWJDb3JlOjpDdXJsRG93
bmxvYWQnIHRoYXQgaGFzIHZpcnR1YWwgZnVuY3Rpb25zIGJ1dCBub24tdmlydHVhbCBkZXN0cnVj
dG9yIFstV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMmJm
ZWQ4NDkzNWVmZGU3NDJmZDE4OWFhMGZjYWU5OTljZWVlNGRkNy4uMGM0OGMzZmIxNjM3ZGZiNTFk
YmYwMDdjYThkYzI5MjM2MjYwNjMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNh
Z2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTcz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICogcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6
CisKIDIwMTgtMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcmVtb3Zpbmcgc29tZSBXS1NJIGNhbGxz
IG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU3MGU4NjlkNjE0ZTI2ZDQ1ZGQwMTAyZGI3YTQ2NjAz
YmZlN2ExM2MuLmE3OTdkODFkODM3Zjg0MmQzYjQwMWJjYzY5ODAxZmYxMTY3NzE1YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9n
YXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIg
Y3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIExvb2t1cCBpcyBiZWluZyByZXBsYWNlZCBieSBSZXZlYWwuIFRoaXMgZnJh
bWV3b3JrIHNob3VsZCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBwYXRjaCBt
b3ZlcyB0aGUgY29kZSB0aGF0IHdlIGV4cGVjdCB3aWxsIGJlIG5lZWRlZCBmb3IgYWxsIHBsYXRm
b3JtcyB0byB0aGUgbW9yZQorICAgICAgICBnZW5lcmFsIGNvY29hIGFyZWEuIFRoaXMgcGF0Y2gg
Y2hhbmdlcyBubyBmdW5jYXRpb25hbGl0eSwgYW5kIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAg
IGFueXRoaW5nIGN1cnJlbnRseS4gVGhpcyB3b3JrIHdpbGwgYmUgYnVpbGQgb24gbGF0ZXIgd2hl
biBSZXZlYWwgaXMgcmVhZHkgdG8gc3VwcG9ydAorICAgICAgICBtdWx0aXBsZSBwbGF0Zm9ybXMu
CisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IF9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX2FkZERlZmF1bHRHZXN0dXJlUmVjb2duaXplcnNdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
bG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UpOiBEZWxldGVkLgorCiAyMDE4LTExLTE1ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgV0tQcmVmZXJlbmNlc1NldEZv
bnRTbW9vdGhpbmdMZXZlbCBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjE1NTJk
ZjdmNzVmYzUzOWJiODc1NmQwODQ5YjU0ZDY4Njk1NTQwOS4uMTgyNDdkNjRjOWQzMDI5OTYzMDVm
Y2M1NDcyMzVjNGNiNTQxYmUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAyLDYgKzQwMiw3IEBACiAJCQkJMEMyREExMzkx
RjNCRUI0OTAwREJDMzE3IC8qIFBhc3NLaXRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQTFGM0JFQjQ5
MDBEQkMzMTcgLyogcHRocmVhZFNQSS5oICovLAogCQkJCTBDMkRBMTNCMUYzQkVCNDkwMERCQzMx
NyAvKiBRdWFydHpDb3JlU1BJLmggKi8sCisJCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8q
IFJldmVhbFNQSS5oICovLAogCQkJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovLAogCQkJCTBDMkRBMTNDMUYzQkVCNDkwMERCQzMxNyAvKiBTZXJ2ZXJzU1BJ
LmggKi8sCiAJCQkJMEMyREExMkIxRjNCRUI0OTAwREJDMzE3IC8qIFVSTEZvcm1hdHRpbmdTUEku
aCAqLywKQEAgLTQ2Nyw3ICs0NjgsNiBAQAogCQkJCTBDNzc4NTg2MUY0NTEzMEYwMEY0RUJCNiAv
KiBRVEtpdFNQSS5oICovLAogCQkJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0NCAvKiBRdWlja0Ry
YXdTUEkuaCAqLywKIAkJCQkwQzc3ODU4NzFGNDUxMzBGMDBGNEVCQjYgLyogUXVpY2tMb29rTWFj
U1BJLmggKi8sCi0JCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8qIFJldmVhbFNQSS5oICov
LAogCQkJCUExMTc1QjQ4MUY2QUZGOEUwMEM0QjlGMCAvKiBTcGVlY2hTeW50aGVzaXNTUEkuaCAq
LywKIAkJCQkwQzc3ODU4ODFGNDUxMzBGMDBGNEVCQjYgLyogVFVDYWxsU1BJLmggKi8sCiAJCQkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NzBiYTk2ZDNmZDhmZGE4MWYwYzVjZmQyNjA5NTkzNjZlNDY5MDg3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKQEAg
LTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCitT
T0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQorU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLKFJldmVhbENvcmUpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlBy
ZXNlbnRlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0Nv
bnRleHQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQorCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVh
bC9SVlByZXNlbnRlci5oPgorI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KKyNpbXBvcnQg
PFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgorCisjZWxzZSAvLyBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQorCitAaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdl
OihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKK0BlbmQK
KworQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2JqZWN0CisrIChOU1JhbmdlKXJldmVhbFJh
bmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4IHNlbGVjdGVkUmFuZ2VzOihOU0FycmF5
IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2VsZWN0aW9uOihCT09M
ICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOworQGVuZAorCitAaW50ZXJmYWNlIFJWUHJlc2VudGVy
IDogTlNPYmplY3QKKyNpZiBQTEFURk9STShNQUMpCistIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOihSVkl0ZW0gKilp
dGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQg
cHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4
dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKKy0gKEJPT0wpcmV2ZWFsSXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJW
RG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlBy
ZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5
ICopb3B0aW9uczsKK0BlbmQKKworI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCmluZGV4IGViN2Y5NTFm
NzFjNzVjODEyMTdiMjJlNzhhZGFkMzBlNGQ2YTVjMDQuLmUwYTMzNzVkMzBjYzg4OWYxMzVlYTJh
MTFkNDdkMGRhOTRmOThhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3Bp
L21hYy9Mb29rdXBTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9v
a3VwU1BJLmgKQEAgLTIzLDEyICsyMywxMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorCisj
aWYgUExBVEZPUk0oTUFDKQorCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHBh
bC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KICNpbXBv
cnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQotCiBTT0ZUX0xJTktf
UFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTG9va3VwKQogU09GVF9MSU5LX0NMQVNTX09QVElP
TkFMKExvb2t1cCwgTFVMb29rdXBEZWZpbml0aW9uTW9kdWxlKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ2YjhkYTQyYzg1OTkwYWUzMmVhNjdhMGFmNzc1M2YzZGI5ODI4YTUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9z
cGkvbWFjL1JldmVhbFNQSS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8b2JqYy9y
dW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVS
ZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotU09GVF9MSU5L
X1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhS
ZXZlYWxDb3JlKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIp
Ci1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQot
U09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKLVNPRlRfTElOS19D
TEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKLQotI2lmIFVTRShBUFBMRV9J
TlRFUk5BTF9TREspCi0KLSNpbXBvcnQgPFJldmVhbC9SVlByZXNlbnRlci5oPgotI2ltcG9ydCA8
UmV2ZWFsL1JldmVhbC5oPgotI2ltcG9ydCA8UmV2ZWFsQ29yZS9SVlNlbGVjdGlvbi5oPgotI2lt
cG9ydCA8UmV2ZWFsQ29yZS9SZXZlYWxDb3JlLmg+Ci0KLQotI2Vsc2UKLQotQGludGVyZmFjZSBS
Vkl0ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJh
bmdlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUlZTZWxl
Y3Rpb24gOiBOU09iamVjdAotKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6KE5TVUludGVn
ZXIpY2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXNlbGVj
dGVkUmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVwZGF0ZVNlbGVj
dGlvbjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlByZXNlbnRlciA6IE5TT2JqZWN0Ci0tIChpZDxO
U0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlvbkNvbnRyb2xsZXJG
b3JJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQg
Kilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQg
KilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOwotLSAo
Qk9PTClyZXZlYWxJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVu
dENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGlu
Z0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRp
b25zOwotQGVuZAotCi0jZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAppbmRleCBjYjZkZWNiMTdjMWUwZTJlYTU3N2QyNDI4NmU2NjM1ZGM3MmY2
OTc3Li40NGFhY2JhMjFkMzMwNDg5ZWNkNTQ2OTFkMjMxMjQzZDgxNTkxODNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKQEAgLTg0LDYgKzg0LDcgQEAgZWRpdGluZy9TZWxlY3Rpb25SZWN0R2F0
aGVyZXIuY3BwCiBlZGl0aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcAogCiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW0KK2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQogZWRpdGlu
Zy9jb2NvYS9FZGl0b3JDb2NvYS5tbQogZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlQ2hhbmdl
c0NvY29hLm1tCiBlZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2EubW0KQEAgLTk3LDcg
Kzk4LDYgQEAgZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKIGVkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQogCiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIu
bW0KLWVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KIGVkaXRpbmcvbWFjL0RpY3Rpb25h
cnlMb29rdXBMZWdhY3kubW0KIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQogZWRpdGluZy9tYWMv
RnJhbWVTZWxlY3Rpb25NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ODBjZmM0ZjYxMWI5NDAxMjgwMWY2ZGRmODA2Yjcz
NGQ2OTA2YjhkLi42YjRkNjIwMDRlNzc0ZDUzZTEwYzFjMDhmY2Y2NTY4NzMyY2FiOWZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yMDQxOSw2ICsyMDQxOSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDNTIyN0RFRjFDM0M2
REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oICovLAogCQkJCUM1MjI3REYwMUMzQzZERDcw
MEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovLAorCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhF
QkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTlCNTVFRUU4MUIzRTg4OTgwMDUz
NDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAqLywKIAkJCQlGNDJDRUI1NDIxNDAzMUVFMDAyRENBNzIg
LyogRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbSAqLywKIAkJCQlGNDhEMkE3NTIxNTZGRTU3
MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXNDb2NvYS5tbSAqLywKQEAgLTI2MTQwLDcgKzI2MTQx
LDYgQEAKIAkJCQlDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyLmggKi8sCiAJCQkJQ0U3QjJEQjAxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0
aXZlVGV4dFVJQ29udHJvbGxlci5tbSAqLywKIAkJCQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEg
LyogRGljdGlvbmFyeUxvb2t1cC5oICovLAotCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAv
KiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTQ0Mjk1NkNBMjE4QTZEMzAwMDgwREI1NCAv
KiBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tICovLAogCQkJCUVENTAxREM1MEIyNDlGMjkwMEFF
MThEOSAvKiBFZGl0b3JNYWMubW0gKi8sCiAJCQkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8q
IEZyYW1lU2VsZWN0aW9uTWFjLm1tICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1ZTcyNjM2OGRmNjFjN2M4NzQ2
M2RiNzg4Zjk5YWUzNzJlYTgyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTAsMCArMSw0MDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRGljdGlvbmFyeUxvb2t1
cC5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShSRVZFQUwpCisKKyNpbXBvcnQg
IkRvY3VtZW50LmgiCisjaW1wb3J0ICJFZGl0aW5nLmgiCisjaW1wb3J0ICJGb2N1c0NvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgorI2lt
cG9ydCAiSFRNTENvbnZlcnRlci5oIgorI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9y
dCAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJhbmdlLmgi
CisjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKKyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgorI2lt
cG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCisj
aW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBv
cnQgPHBhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29r
dXBTUEkuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3
dGYvUmVmUHRyLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisKK0BpbnRlcmZhY2UgV2ViUmV2ZWFs
SGlnaGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKK0Bw
cml2YXRlCisgICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOworICAgIE5T
UmVjdCBfaGlnaGxpZ2h0UmVjdDsKKyAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OworICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Cit9CisKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
OworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxp
Z2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0
cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Cist
ICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4
dEluZGljYXRvcjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0
CisKK0BzeW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7CitAc3ludGhlc2l6
ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OworQHN5bnRoZXNpemUg
YXR0cmlidXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hs
aWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmli
dXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2hpZ2hsaWdodFJlY3Qg
PSBoaWdobGlnaHRSZWN0OworICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhp
Z2hsaWdodDsKKyAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7CisgICAg
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihG
dW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCit7CisgICAgX2NsZWFyVGV4dElu
ZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKK30KKworLSAoTlNBcnJheTxO
U1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQg
cmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdp
dGhSZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOworfQorCistICh2b2lkKXJldmVhbENvbnRleHQ6
KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAq
KWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgCisgICAgZm9yIChOU1ZhbHVl
ICpyZWN0VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7CisgICAgICAgIE5TUmVjdCBy
ZWN0ID0gcmVjdFZhbC5yZWN0VmFsdWU7CisKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBh
dHRyaWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFn
cmFwaCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCisgICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVk
U3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1
dGVkU3RyaW5nIGxlbmd0aF0pXV0pOworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdy
YXBoU3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBh
bGxvY10gaW5pdF0pOworICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGln
bm1lbnRDZW50ZXJdOworICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdl
dCgpIGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07CisgICAgCisgICAgICAg
IFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcg
c3RyaW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKKyAgICAgICAgW3N0cmluZyBk
cmF3SW5SZWN0OnJlY3RdOworICAgIH0KK30KKworLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlBy
ZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRl
bTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVT
RURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKK30K
KworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBz
dG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgYXV0byBibG9jayA9IFdURk1v
dmUoX2NsZWFyVGV4dEluZGljYXRvcik7CisgICAgaWYgKGJsb2NrKQorICAgICAgICBibG9jaygp
OworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICBp
ZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
ICAgIAorICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07CisKKyAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQs
IHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgorICAgIGF1dG8gc2Vs
ZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rp
b25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworCisgICAgLy8gQXMgY29udGV4dCwgd2Ug
YXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsK
KyAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisK
KyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworICAg
IGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKKyAgICBOU1Jhbmdl
IHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3Ro
VG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICAKKyAgICBSZWZQ
dHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwg
cGFyYWdyYXBoRW5kKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hh
cmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5T
KFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRS
YW5nZTpyYW5nZVRvUGFzc10pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdl
dCgpLmhpZ2hsaWdodFJhbmdlOworICAgIAorICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hs
aWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKK3N0ZDo6dHVw
bGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
QXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVt
Q2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgYXV0
byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKKworICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gRG9u
J3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KKyAg
ICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2Rl
RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQorICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8gcG9zaXRpb24gPSBmcmFt
ZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQorICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKTsKKworICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKKyAgICBpbnQgaGl0SW5kZXg7CisgICAgUmVmUHRy
PFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7CisgICAgCisgICAgaWYgKHNlbGVjdGlvbi5zZWxl
Y3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKKyAgICAg
ICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICAg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworICAgICAgICAK
KyAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRp
bmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3Rh
cnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1dG8gcGFyYWdyYXBoRW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
cmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rp
b25TdGFydCk7CisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAg
ICAgICAgCisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQo
KSkpOworICAgICAgICAKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5l
UnVsZXMgeyBwb3NpdGlvbiB9OworICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1
bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAgICAgICAgcG9z
aXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7CisgICAgICAg
IC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4
dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTAp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCisgICAgICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgCisgICAgICAgIHNlbGVjdGlvblJh
bmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgICAgIGhpdEluZGV4ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfQorICAgIAorICAgIE5TUmFuZ2Ug
c2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4
OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0
aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKKyAgICAKKyAgICBTdHJpbmcg
aXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJl
dGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7CisgICAg
TlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisKKyAg
ICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0
UmFuZ2UubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAg
ICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhp
Z2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKKyAg
ICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OworICAgIAorfQorCitzdGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNo
YXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJh
Y3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJ
bnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisKKyAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3Ry
aW5nLmxlbmd0aDsKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVy
T2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOworICAgIAorICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsKKyAgICAKKyAg
ICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhw
YW5kXTsKKyAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVu
Z3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3N0ZDo6dHVwbGU8TlNTdHJpbmcgKiwg
TlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQ
REZTZWxlY3Rpb24gKnNlbGVjdGlvbikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQorICAgICAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5v
IGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlv
bi5zdHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBAIiIsIG5pbCB9OworCisgICAgUmV0
YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0
aW9uIGNvcHldKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUw
IGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICBhdXRv
IG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKKyAg
ICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAwOworICAgIE5TSW50ZWdl
ciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7CisgICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFy
YWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZv
cmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOworCisgICAgYXV0byBmdWxsUGxhaW5U
ZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOworICAgIGF1dG8gcmFuZ2VU
b1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7CisKKyAg
ICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgp
IGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bh
c3NdKTsKKyAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRS
YW5nZTsKKyAgICAKKyAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07CisKKyAgICBOU0lu
dGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3Rl
ZFJhbmdlLmxvY2F0aW9uOworICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJh
Y3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFz
cy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKKworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2Vs
ZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07CisgICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKKworICAgIEFTU0VSVChbc2VsZWN0aW9u
LnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0
aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOworICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcs
IG5pbCB9OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiB7
IEAiIiwgbmlsIH07Cit9CisKK3N0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgc2hvd1BvcHVwT3JD
cmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlciwg
Y29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2
aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGlj
YXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChG
bG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rp
b248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIAorICAgIGlmICghZ2V0
UlZJdGVtQ2xhc3MoKSB8fCAhZ2V0UlZQcmVzZW50ZXJDbGFzcygpKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBpZiAo
TlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgp
KQorICAgICAgICBbbXV0YWJsZU9wdGlvbnMgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlv
bnNdOworCisgICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRp
Y3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvcik7CisgICAgCisgICAgUmV0YWluUHRyPFJW
UHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2Uo
KSBpbml0XSk7CisgICAgCisgICAgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CisgICAgTlNQb2ludCBw
b2ludGVyTG9jYXRpb247CisgICAgCisgICAgaWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVu
dEltYWdlKCkpIHsKKyAgICAgICAgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRl
eHRJbmRpY2F0b3IuZ2V0KCkpOworCisgICAgICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXMoKVswXTsKKyAgICAgICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJ
blZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdElu
Um9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRp
bmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyb290Vmll
d1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykgeworICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVj
dEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4
dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbkJv
dW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5
KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKKyAgICAgICAg
aGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOwor
ICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMu
bG9jYXRpb24oKTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNQb2ludCB0ZXh0
QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbjsKKyAgICAgICAgCisg
ICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZl
cnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07CisgICAgfQorICAgIAorICAg
IFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtb
V2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdo
dFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1h
Z2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmlu
Zy5nZXQoKV0pOworICAgIFJldGFpblB0cjxSVlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50
ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9jYXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVs
ZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0
KCldKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NS
Vkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0
ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsK
KyAgICAKKyAgICBbd2ViSGlnaGxpZ2h0IHNldENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxp
Z2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3Zl
KGNsZWFyVGV4dEluZGljYXRvcildIHsKKyAgICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikK
KyAgICAgICAgICAgIGNsZWFyVGV4dEluZGljYXRvcigpOworICAgIH1dOworICAgIAorICAgIGlm
IChjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBh
bmltYXRpb25Db250cm9sbGVyRm9ySXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwg
cHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07CisgICAgW3ByZXNl
bnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5n
Q29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICByZXR1cm4gbmlsOworICAg
IAorI2Vsc2UgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIFVOVVNFRF9QQVJBTShjcmVhdGVB
bmltYXRpb25Db250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZGljdGlvbmFyeVBvcHVwSW5m
byk7CisgICAgVU5VU0VEX1BBUkFNKHZpZXcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0SW5kaWNh
dG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2spOworICAgIFVOVVNFRF9QQVJBTShyb290Vmlld1RvVmll
d0NvbnZlcnNpb25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKGNsZWFyVGV4dEluZGljYXRv
cik7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBuaWw7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorfQorCit2b2lkIERpY3Rpb25hcnlMb29rdXA6
OnNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZv
LCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+
JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248
RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIHNob3dQ
b3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5m
bywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmll
d0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKwor
dm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCisKK1dLUmV2ZWFsQ29udHJvbGxlciBEaWN0aW9u
YXJ5TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBv
cHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1
bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNh
bGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZp
ZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFy
VGV4dEluZGljYXRvcikKK3sKKyAgICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25D
b250cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJ
bnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdU
Rk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVy
Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJD
b2NvYS5tbQppbmRleCBlNGI5MGJkZjI3MDUyYjAzMmY5YTNjZTQzMzU0M2QxZjg3Nzg0ZjY3Li44
NWM0Mjc0MWFiYWQ3NTdkZDEwZmU0YTZkNDNmMWJiYTczZGZmNjkwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAt
MzQsNiArMzQsOCBAQAogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50RnJh
Z21lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCisjaW1wb3J0ICJFZGl0b3IuaCIK
KyNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgogI2ltcG9ydCAiRmlsZS5oIgogI2ltcG9ydCAiRmls
ZVN5c3RlbS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0RpY3Rpb25hcnlMb29rdXAuaAppbmRleCBjYjZkNTNlYjhmOGM0Y2ZkMzg5NDU3ZjViZWFl
MjgzYTM3ZGE4MTkyLi5mOGY3NjFjZGM4MWFlYmQzZGYwODgzN2EzMjMxYzA4ZjM1YTRmZWI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCkBAIC0y
MywxNSArMjMsMjUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWYgUExBVEZPUk0oTUFDKQorI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShDT0NPQSkK
IAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKLSNpbmNsdWRlIDxwYWwvc3BpL21h
Yy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CisjaWYgUExBVEZPUk0o
TUFDKQorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2du
aXplclNQSS5oPgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KIAogT0JKQ19DTEFTUyBOU1ZpZXc7CiBPQkpDX0NMQVNTIFBERlNlbGVjdGlvbjsKIAor
I2lmIFBMQVRGT1JNKE1BQykKK3R5cGVkZWYgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4gV0tSZXZlYWxDb250cm9sbGVyOworI2Vsc2UKK3R5cGVkZWYgaWQgV0tSZXZl
YWxDb250cm9sbGVyOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtNDgsOCArNTgsMTEgQEAgcHVibGljOgog
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2hvd1BvcHVwKGNvbnN0IERpY3Rpb25h
cnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRp
Y2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpG
dW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNh
dG9yID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgaGlkZVBvcHVw
KCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rp
b25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJ
bmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RG
OjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5k
aWNhdG9yID0gbnVsbHB0cik7CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvclBv
cHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorICAgIAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGNlOWU0NDc0YTQ5ZmNjOWIwOTViMmY0YmRhNmM5YWUzZjM4Y2ZlNDcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDM4OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkRpY3Rp
b25hcnlMb29rdXAuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFJFVkVBTCkKLQot
I2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkVkaXRpbmcuaCIKLSNpbXBvcnQgIkZvY3Vz
Q29udHJvbGxlci5oIgotI2ltcG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQgIkZyYW1lU2VsZWN0aW9u
LmgiCi0jaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCi0jaW1wb3J0ICJIaXRUZXN0UmVzdWx0Lmgi
Ci0jaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyT2Jq
ZWN0LmgiCi0jaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKLSNpbXBvcnQgIlZpc2libGVQb3NpdGlv
bi5oIgotI2ltcG9ydCAiVmlzaWJsZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVVuaXRz
LmgiCi0jaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29r
dXBTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXJTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL1JldmVhbFNQSS5oPgotI2ltcG9y
dCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KLQot
QGludGVyZmFjZSBXZWJSZXZlYWxIaWdobGlnaHQgPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdh
dGU+IDogTlNPYmplY3QgewotQHByaXZhdGUKLSAgICBGdW5jdGlvbjx2b2lkKCk+IF9jbGVhclRl
eHRJbmRpY2F0b3I7Ci0gICAgTlNSZWN0IF9oaWdobGlnaHRSZWN0OwotICAgIEJPT0wgX3VzZURl
ZmF1bHRIaWdobGlnaHQ7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpfYXR0cmlidXRlZFN0cmlu
ZzsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0
UmVjdDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCB1c2VEZWZhdWx0SGln
aGxpZ2h0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJp
bmcgKmF0dHJpYnV0ZWRTdHJpbmc7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdo
dFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNl
RGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikg
YXR0cmlidXRlZFN0cmluZzsKLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlv
bjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBXZWJSZXZlYWxIaWdobGlnaHQKLQotQHN5bnRoZXNpemUgaGlnaGxpZ2h0UmVjdD1faGlnaGxp
Z2h0UmVjdDsKLUBzeW50aGVzaXplIHVzZURlZmF1bHRIaWdobGlnaHQ9X3VzZURlZmF1bHRIaWdo
bGlnaHQ7Ci1Ac3ludGhlc2l6ZSBhdHRyaWJ1dGVkU3RyaW5nPV9hdHRyaWJ1dGVkU3RyaW5nOwot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0
UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmli
dXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmcKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAK
LSAgICBfaGlnaGxpZ2h0UmVjdCA9IGhpZ2hsaWdodFJlY3Q7Ci0gICAgX3VzZURlZmF1bHRIaWdo
bGlnaHQgPSB1c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0
cmlidXRlZFN0cmluZzsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRD
bGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3IK
LXsKLSAgICBfY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3Ip
OwotfQotCi0tIChOU0FycmF5PE5TVmFsdWUgKj4gKilyZXZlYWxDb250ZXh0OihSVlByZXNlbnRp
bmdDb250ZXh0ICopY29udGV4dCByZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBV
TlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIHJldHVy
biBAW1tOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c2VsZi5oaWdobGlnaHRSZWN0XV07Ci19Ci0KLS0g
KHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgZHJhd1Jl
Y3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAg
ICAKLSAgICBmb3IgKE5TVmFsdWUgKnJlY3RWYWwgaW4gY29udGV4dC5pdGVtUmVjdHNJblZpZXcp
IHsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSByZWN0VmFsLnJlY3RWYWx1ZTsKLQotICAgICAgICAv
LyBHZXQgY3VycmVudCBmb250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgYXR0cmlidXRlZCBzdHJpbmcg
YWJvdmUsIGFuZCBhZGQgcGFyYWdyYXBoIHN0eWxlIGF0dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50
ZXIgdGV4dC4KLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0
ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhEaWN0aW9u
YXJ5OltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJh
bmdlKDAsIFtzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSldXSk7Ci0gICAgICAgIFJldGFp
blB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFyYWdyYXBoID0gYWRvcHROUyhbW05TTXV0
YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtwYXJhZ3JhcGggc2V0
QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudENlbnRlcl07Ci0gICAgICAgIFthdHRyaWJ1dGVzIHNl
dE9iamVjdDpwYXJhZ3JhcGguZ2V0KCkgZm9yS2V5Ok5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVO
YW1lXTsKLSAgICAKLSAgICAgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc3RyaW5n
ID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W3Nl
bGYuYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGF0dHJpYnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0p
OwotICAgICAgICBbc3RyaW5nIGRyYXdJblJlY3Q6cmVjdF07Ci0gICAgfQotfQotCi0tIChCT09M
KXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHNob3VsZFVzZURl
ZmF1bHRIaWdobGlnaHRGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICByZXR1cm4gc2VsZi51c2VE
ZWZhdWx0SGlnaGxpZ2h0OwotfQotCi0tICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGlu
Z0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihSVkl0ZW0gKilpdGVtCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAg
ICBhdXRvIGJsb2NrID0gV1RGTW92ZShfY2xlYXJUZXh0SW5kaWNhdG9yKTsKLSAgICBpZiAoYmxv
Y2spCi0gICAgICAgIGJsb2NrKCk7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
Ci17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmICghZ2V0
UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0g
ICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0g
ICAgaWYgKCFzZWxlY3RlZFJhbmdlKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
LQotICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVz
dCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCi0gICAgYXV0byBzZWxlY3Rpb25T
dGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBhdXRvIHNlbGVjdGlvbkVuZCA9
IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0KLSAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29p
bmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgYXV0byBw
YXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1
dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKLQotICAgIGlu
dCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtl
UmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxl
bmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwotICAgIE5TUmFuZ2UgcmFuZ2VU
b1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVj
dGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOwotICAgIAotICAgIFJlZlB0cjxSYW5n
ZT4gZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3Jh
cGhFbmQpOwotICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJS
YW5nZS5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9j
UlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnJh
bmdlVG9QYXNzXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGln
aGxpZ2h0UmFuZ2U7Ci0gICAgCi0gICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgq
ZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFu
Z2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICAKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLX0KLQotc3RkOjp0dXBsZTxSZWZQ
dHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRl
c3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKLXsKLSAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygp
KQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICBhdXRvKiBub2Rl
ID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwg
IW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0g
ICAgYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBEb24ndCBkbyBh
bnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgotICAgIGF1dG8g
ZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgp
OwotICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCi0gICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLT52aXNp
YmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKLSAgICBpZiAocG9zaXRpb24uaXNOdWxs
KCkpCi0gICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUp
OwotCi0gICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBOU1Jh
bmdlIHNlbGVjdGlvblJhbmdlOwotICAgIGludCBoaXRJbmRleDsKLSAgICBSZWZQdHI8UmFuZ2U+
IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKLSAgICAKLSAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblR5
cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikgewotICAgICAgICBhdXRv
IHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgICAgICBhdXRv
IHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJh
Z3JhcGhzIG9mIHRleHQuCi0gICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRP
ZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwotICAgICAgICAKLSAgICAgICAgYXV0byByYW5nZVRv
U2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0
KTsKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgICAgICAKLSAgICAgICAgZnVsbENoYXJhY3RlclJh
bmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAgICAgICAK
LSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSk7Ci0g
ICAgICAgIAotICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7
IHBvc2l0aW9uIH07Ci0gICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuZXhw
YW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOwotICAgICAgICBwb3NpdGlvbiA9
IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsKLSAgICAgICAgLy8gQXMg
Y29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9y
ZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgotICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSByYW5n
ZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKLSAgICAgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG5pbCB9OwotICAgICAgICAKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBO
U01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9Ci0gICAgCi0gICAgTlNSYW5nZSBzZWxlY3Rl
ZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5k
ZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5n
ZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwotICAgIAotICAgIFN0cmluZyBpdGVtU3Ry
aW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgUmV0YWluUHRy
PFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRl
eHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2VdKTsKLSAgICBOU1Jhbmdl
IGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLQotICAgIGlmICho
aWdobGlnaHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFoaWdobGlnaHRSYW5nZS5s
ZW5ndGgpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIHJldHVy
biB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0
UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAotICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07Ci0gICAgCi19Ci0KLXN0YXRpYyB2b2lkIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVy
cyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbiwgTlNJbnRlZ2VyIG51bWJlck9mQ2hhcmFjdGVyc1Rv
RXhwYW5kLCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBOU0ludGVnZXIm
IGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLQotICAgIHNpemVfdCBvcmlnaW5hbExlbmd0aCA9IHNlbGVjdGlvbi5zdHJpbmcubGVu
Z3RoOwotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpudW1iZXJPZkNoYXJh
Y3RlcnNUb0V4cGFuZF07Ci0gICAgCi0gICAgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSBz
ZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoOwotICAgIAotICAgIFtzZWxl
Y3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwot
ICAgIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBv
cmlnaW5hbExlbmd0aCAtIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0OwotCi0gICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotc3RkOjp0dXBsZTxOU1N0cmluZyAqLCBOU0RpY3Rp
b25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6c3RyaW5nRm9yUERGU2VsZWN0aW9uKFBERlNlbGVj
dGlvbiAqc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFj
dGVyIGF0IHRoZSBwb2ludC4KLSAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLnN0cmlu
Zy5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci0KLSAgICBSZXRhaW5QdHI8
UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JMb29rdXAgPSBhZG9wdE5TKFtzZWxlY3Rpb24gY29w
eV0pOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFj
dGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgotICAgIGF1dG8gb3JpZ2lu
YWxMZW5ndGggPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ10ubGVuZ3RoOwotICAgIE5TSW50
ZWdlciBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IDA7Ci0gICAgTlNJbnRlZ2VyIGNoYXJh
Y3RlcnNBZGRlZEFmdGVyRW5kID0gMDsKLSAgICBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMo
c2VsZWN0aW9uRm9yTG9va3VwLmdldCgpLCAyNTAsIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0
LCBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCk7Ci0KLSAgICBhdXRvIGZ1bGxQbGFpblRleHRTdHJp
bmcgPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ107Ci0gICAgYXV0byByYW5nZVRvUGFzcyA9
IE5TTWFrZVJhbmdlKGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCAwKTsKLQotICAgIFJldGFp
blB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdp
dGhUZXh0OmZ1bGxQbGFpblRleHRTdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwot
ICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwot
ICAgIAotICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAg
ICAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKLQotICAgIE5TSW50ZWdlciBs
b29rdXBBZGRlZEJlZm9yZSA9IHJhbmdlVG9QYXNzLmxvY2F0aW9uIC0gZXh0cmFjdGVkUmFuZ2Uu
bG9jYXRpb247Ci0gICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQWZ0ZXIgPSAoZXh0cmFjdGVkUmFu
Z2UubG9jYXRpb24gKyBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpIC0gKHJhbmdlVG9QYXNzLmxvY2F0
aW9uICsgb3JpZ2luYWxMZW5ndGgpOwotCi0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25B
dFN0YXJ0Omxvb2t1cEFkZGVkQmVmb3JlXTsKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlv
bkF0RW5kOmxvb2t1cEFkZGVkQWZ0ZXJdOwotCi0gICAgQVNTRVJUKFtzZWxlY3Rpb24uc3RyaW5n
IGlzRXF1YWxUb1N0cmluZzpbZnVsbFBsYWluVGV4dFN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6
ZXh0cmFjdGVkUmFuZ2VdXSk7Ci0gICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07
Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIHsgQCIiLCBu
aWwgfTsKLX0KLQotc3RhdGljIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xs
ZXI+IHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihib29sIGNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1
cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0
b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5j
dGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxi
YWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xh
c3MoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0
aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0XSk7Ci0gICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IGRpY3Rpb25hcnlQ
b3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKLSAgICAgICAgW211dGFibGVPcHRpb25zIGFkZEVudHJp
ZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKLQotICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IpOwot
ICAgIAotICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVyID0gYWRvcHROUyhbYWxs
b2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOwotICAgIAotICAgIE5TUmVjdCBoaWdobGln
aHRSZWN0OwotICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOwotICAgIAotICAgIGlmICh0ZXh0
SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7Ci0gICAgICAgIHRleHRJbmRpY2F0b3JJ
bnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsKLQotICAgICAgICBGbG9h
dFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQo
KS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07Ci0gICAgICAgIEZsb2F0
UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdl
dCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgRmxv
YXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGlj
YXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2spIHsKLSAgICAg
ICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3
Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0g
ICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RW
aWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nv
b3JkaW5hdGVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmlyc3RUZXh0UmVjdElu
Vmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMu
bG9jYXRpb24oKSk7Ci0gICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxlY3Rpb25Cb3VuZGluZ1Jl
Y3RJblZpZXdDb29yZGluYXRlczsKLSAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gZmlyc3RUZXh0
UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0gICAgICAgIAotICAgIH0gZWxzZSB7
Ci0gICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGljdGlvbmFyeVBvcHVwSW5m
by5vcmlnaW47Ci0gICAgICAgIAotICAgICAgICBoaWdobGlnaHRSZWN0ID0gdGV4dEluZGljYXRv
ci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAgICAgICBwb2ludGVy
TG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5lT3JpZ2luIHRvVmlldzpu
aWxdOwotICAgIH0KLSAgICAKLSAgICBSZXRhaW5QdHI8V2ViUmV2ZWFsSGlnaGxpZ2h0PiB3ZWJI
aWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhI
aWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6IXRleHRJbmRp
Y2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmluZzpkaWN0aW9uYXJ5UG9w
dXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKLSAgICBSZXRhaW5QdHI8UlZQcmVzZW50
aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50aW5nQ29udGV4dElu
c3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9pbnRlckxvY2F0aW9uIGlu
Vmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVn
YXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7Ci0gICAgCi0gICAgUmV0YWluUHRyPFJWSXRlbT4g
aXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZGljdGlv
bmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmluZyBzZWxlY3RlZFJhbmdl
Ok5TTWFrZVJhbmdlKDAsIDApXSk7Ci0gICAgCi0gICAgW3dlYkhpZ2hsaWdodCBzZXRDbGVhclRl
eHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGlnaGxpZ2h0KSwgY2xlYXJU
ZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpXSB7Ci0gICAgICAgIGlm
IChjbGVhclRleHRJbmRpY2F0b3IpCi0gICAgICAgICAgICBjbGVhclRleHRJbmRpY2F0b3IoKTsK
LSAgICB9XTsKLSAgICAKLSAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAg
ICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06aXRlbS5nZXQo
KSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0
aW9uczpuaWxdOwotICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVtLmdldCgpIGRvY3VtZW50
Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07
Ci0gICAgcmV0dXJuIG5pbDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotdm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXAoY29uc3Qg
RGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvcklu
c3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJl
Y3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICBzaG93UG9wdXBPckNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJh
Y2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Ci19Ci0KLXZvaWQgRGljdGlvbmFyeUxv
b2t1cDo6aGlkZVBvcHVwKCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0K
LSAgICBpZiAoIWdldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBbZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSBoaWRlRGVmaW5p
dGlvbl07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1pZCA8TlNJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBEaWN0aW9uYXJ5TG9va3VwOjphbmltYXRp
b25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFy
eVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dElu
ZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6
OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9u
Q2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsK
LSAgICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKHRydWUsIGRp
Y3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFj
aywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5k
aWNhdG9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtp
dFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXgg
OWVlZmI5Nzg0ZmJlNjg5YjA5MGE1YjAxZmNlZWNlNzBkNjU0MTMyZC4uMTk1NWQ2MmQ0MGIxZDg2
ZTRkZDUxMGViMTQ4ODYxZDRiZGE2OTc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmgKQEAgLTczNSw2ICs3MzUsOSBAQCBzdHJ1Y3QgX1VJV2ViVG91Y2hFdmVu
dCB7CiAgICAgYm9vbCBpc1BvdGVudGlhbFRhcDsKIH07CiAKK0BpbnRlcmZhY2UgX1VJTG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCitAZW5kCisKIEBjbGFzcyBV
SVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXI7CiAKIEBwcm90b2NvbCBVSVdlYlRvdWNo
RXZlbnRzR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCmluZGV4IGY1Njg3
NWRmZjNhMWNjNDVlYmVlNjE3MjE1Y2U5NTcyM2Y1M2RlNGUuLjY1YWVjZDkyMTkyZmU2NjYxZjFi
YWE0MmQzNDA3ODZjZTRkMWQ1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJQ
YWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdTUEkuaCIKICNpbXBvcnQgIlNhZmVC
cm93c2luZ1dhcm5pbmcuaCIKKyNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAi
V2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdJdGVtLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0xODksNSArMTkwLDIxIEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpwbGF0Zm9ybUNsb25lQXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYm
IGZyb21BdHRhY2htZW50CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5U
KQorICAgIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoIWlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3Bh
Z2VJRCk7Cit9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9m
Q3VycmVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKSwgbV9wYWdlSUQpOwogfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCBjNDhjMzlkNjZkYzEzOTY0MjA1NjU0
YjlkNTQwZjBmNjg3ODg0MjBhLi45ZGMzOTA4Y2IxMDc2MGJlODI0YTU5Y2NmYmU2ZjkzM2I3OGZi
ZjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5oCkBAIC04Nyw2ICs4Nyw3IEBAIGNsYXNzIFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9CiAKK0BjbGFzcyBfVUlM
b29rdXBHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBfVUlIaWdobGlnaHRWaWV3OwogQGNsYXNz
IF9VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIFVJSG92
ZXJHZXN0dXJlUmVjb2duaXplcjsKQEAgLTIxNCw2ICsyMTUsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29y
cmVjdGlvbkRhdGEgewogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFJldGFpblB0cjxVSUhv
dmVyR2VzdHVyZVJlY29nbml6ZXI+IF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFp
blB0cjxfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcj4gX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVy
OwogI2VuZGlmCiAKICAgICBSZXRhaW5QdHI8VUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudD4g
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCAyMWQzMTc3MDA2YjFj
NmRmMDE2YmFiZjNlMGMzNmE3Mzg4NDJhMDkyLi4yNzc3NTA4NGVlOTI0ZGFmZDA1NTA2OWZmN2Vi
M2Q3N2Q0OTk3MWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTExMiw2ICsxMTIsNyBAQAogI2lmIFBM
QVRGT1JNKElPU01BQykKICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbXBvcnQg
PFVJS2l0L1VJSG92ZXJHZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9ydCA8VUlLaXQvX1VJTG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2Vy
dmljZXNTUEkuaD4KICNlbmRpZgogCkBAIC02NDksNiArNjUwLDExIEBAIC0gKHZvaWQpc2V0dXBJ
bnRlcmFjdGlvbgogICAgIF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1VJSG92
ZXJHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdlZDopXSk7CiAgICAgW19ob3Zlckdl
c3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwogICAgIFtzZWxmIGFkZEdlc3R1cmVS
ZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKKyAgICBfbG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6
ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfbG9va3VwR2Vz
dHVyZVJlY29nbml6ZWQ6KV0pOworICAgIFtfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVs
ZWdhdGU6c2VsZl07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1
cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKICNlbmRpZgogCiAgICAgX3NpbmdsZVRhcEdlc3R1
cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1dLU3ludGhldGljQ2xpY2tUYXBHZXN0dXJlUmVjb2du
aXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9zaW5nbGVU
YXBDb21taXRlZDopXSk7CkBAIC03NTMsNiArNzU5LDkgQEAgLSAodm9pZCljbGVhbnVwSW50ZXJh
Y3Rpb24KICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVy
IHNldERlbGVnYXRlOm5pbF07CiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2hv
dmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAorICAgIFtfbG9va3VwR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2du
aXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiAKICAgICBbX3Np
bmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CkBAIC04MzYsNiArODQ1
LDcgQEAgLSAodm9pZClfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNvZ25pemVycwogICAgIFtzZWxm
IHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl90d29GaW5nZXJTaW5nbGVUYXBHZXN0dXJlUmVjb2du
aXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtzZWxmIHJlbW92ZUdlc3R1
cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICBbc2VsZiBy
ZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwog
I2VuZGlmCiB9CiAKQEAgLTg1MCw2ICs4NjAsNyBAQCAtICh2b2lkKV9hZGREZWZhdWx0R2VzdHVy
ZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclNp
bmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFURk9STShJT1NNQUMpCiAg
ICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0
KCldOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2du
aXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtMTQ1MCw2ICsxNDYxLDEwIEBAIC0gKEJPT0wp
Z2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXpl
ciBzaG91bGRSZWNvZ25pCiAKICAgICBpZiAoW2dlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xh
c3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBjbGFzc11dIHx8IFtvdGhlckdlc3R1cmVSZWNv
Z25pemVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBjbGFzc11dKQog
ICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAgIGlmICgoW2dlc3R1cmVSZWNvZ25pemVyIGlz
S2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gJiYgW290aGVy
R2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplciBjbGFzc11dKSB8fCAoW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpb
VUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBjbGFzc11dICYmIFtnZXN0dXJlUmVjb2duaXpl
ciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBjbGFzc11dKSkKKyAg
ICAgICAgcmV0dXJuIFlFUzsKKwogI2VuZGlmCiAgICAgaWYgKGlzU2FtZVBhaXIoZ2VzdHVyZVJl
Y29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6ZXIsIF9oaWdobGlnaHRMb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplci5nZXQoKSwgX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCkuZm9yY2VQ
cmVzc0dlc3R1cmUpKQogICAgICAgICByZXR1cm4gWUVTOwpAQCAtNjAzMyw2ICs2MDQ4LDEyIEBA
IC0gKEJPT0wpYWxsb3dzRGljdGF0aW9uSW5wdXRGb3JMaXN0Vmlld0NvbnRyb2xsZXI6KFBVSUNR
dWlja2JvYXJkVmlld0NvbnRyb2xsZXIKICNlbmRpZiAvLyBQTEFURk9STShXQVRDSE9TKQogCiAj
aWYgUExBVEZPUk0oSU9TTUFDKQorLSAodm9pZClfbG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6KFVJ
R2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgoreworICAgIE5TUG9pbnQgbG9j
YXRpb25JblZpZXdDb29yZGluYXRlcyA9IFtnZXN0dXJlUmVjb2duaXplciBsb2NhdGlvbkluVmll
dzpzZWxmXTsKKyAgICBfcGFnZS0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKFdl
YkNvcmU6OkZsb2F0UG9pbnQobG9jYXRpb25JblZpZXdDb29yZGluYXRlcykpOworfQorCiAtICh2
b2lkKV9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdlZDooVUlHZXN0dXJlUmVjb2duaXplciAq
KWdlc3R1cmVSZWNvZ25pemVyCiB7CiAgICAgaWYgKCFfcGFnZS0+aXNWYWxpZCgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggZGM4MDI4
MzZkZDYwZTg0MmRhYTEzYWY0NDRiMmY3OTc5MjIyMDQ5MC4uZDk5OGJiNTYyZWE2NzM0NmMzMWIz
MzA4MzNmMmJjMmZiMGY5NmZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCkBAIC0xMjEsMTEgKzEyMSw2IEBAIGJvb2wgV2ViUGFnZVByb3h5
OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJikKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6Omdlc3R1cmVDYWxsYmFjayhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0
dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAg
YXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2U8R2VzdHVyZUNhbGxiYWNrPihjYWxsYmFj
a0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
CmluZGV4IDE1YzdkNzYxNTM2MjM0YjZiY2NiYTBmZGYzYmQ3YzYwYTk2YzNlZjIuLmJiZDg3OTk5
OTEyNDAwMzc0OWQwMmYzZDQzODkzODRkMGQyNjJjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpAQCAtMzIzLDIyICszMjMsNiBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0UHJvbWlzZWREYXRhRm9ySW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgY29uc3QgUwogCiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
b2ludCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRM
b2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLXsKLSAgICBpZiAoIWlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCksIG1fcGFn
ZUlEKTsKLX0KLQogLy8gQ29tcGxleCB0ZXh0IGlucHV0IHN1cHBvcnQgZm9yIHBsdWctaW5zLgog
dm9pZCBXZWJQYWdlUHJveHk6OnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4odWludDY0X3Qg
cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdGV4dElucHV0
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
V2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
V2ViUGFnZUNvY29hLm1tCmluZGV4IDNlNzk0MzFmOTM3MTE0YzQxZjlkMmRmZDU4ZTBiNGY3MjE4
MTU5YTYuLmEzOGNkMmJmNjM3OTRjOGU5ZjFkMjEyYTNlNzhiM2U4YzRlZjhjNmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29j
b2EubW0KQEAgLTI2LDkgKzI2LDIwIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldl
YlBhZ2UuaCIKIAorCiAjaW1wb3J0ICJMb2FkUGFyYW1ldGVycy5oIgorI2ltcG9ydCAiUGx1Z2lu
Vmlldy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgPFdlYkNv
cmUvRGljdGlvbmFyeUxvb2t1cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVJlbmRlclN0eWxlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlck9iamVj
dC5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAKQEAgLTU5LDYgKzcwLDExNCBAQCB2b2lkIFdl
YlBhZ2U6OnJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm8oQ2FsbGJhY2tJRCBjYWxs
YmFja0lEKQogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpOb3dQbGF5aW5nSW5m
b0NhbGxiYWNrKGhhc0FjdGl2ZVNlc3Npb24sIHJlZ2lzdGVyZWRBc05vd1BsYXlpbmdBcHBsaWNh
dGlvbiwgdGl0bGUsIGR1cmF0aW9uLCBlbGFwc2VkVGltZSwgdW5pcXVlSWRlbnRpZmllciwgY2Fs
bGJhY2tJRCkpOwogfQorICAgIAordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKK3sKKyAgICBpZiAoYXV0
byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkp
IHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihmbG9hdFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
Ly8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlzIG92ZXIuCisgICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRB
dFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHJvdW5k
ZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAg
TlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0ZDo6dGllKHJhbmdlLCBvcHRpb25zKSA9IERp
Y3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7CisgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8qIGZyYW1lID0gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVu
dCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0aW9ucywgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3RlZFJhbmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKKyAgICBzdGQ6OnRpZShz
ZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0
aW9uKHNlbGVjdGlvbik7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBvcHRpb25zLCBw
cmVzZW50YXRpb25UcmFuc2l0aW9uKTsKK30KKwordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgYXV0byYgZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIHBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENy
b3NzZmFkZSk7Cit9CisgICAgCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9u
cywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9w
dGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Cit9CisKK0RpY3Rpb25hcnlQb3B1cElu
Zm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFu
Z2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgRWRpdG9yJiBlZGl0
b3IgPSBmcmFtZS5lZGl0b3IoKTsKKyAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBv
cHVwSW5mbyh0cnVlKTsKKyAgICAKKyAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQ
b3B1cEluZm87CisgICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFs
c2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHMo
cXVhZHMpOworICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWRpdG9yLnNldElz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGljdGlv
bmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFt
ZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3go
KSk7CisgICAgCisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250
YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGZsb2F0IHNjYWxlZEFzY2VudCA9IHN0eWxlID8g
c3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKiBwYWdlU2NhbGVGYWN0b3IoKSA6IDA7Cisg
ICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50KHJhbmdlUmVjdC54KCks
IHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQpOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8u
b3B0aW9ucyA9IG9wdGlvbnM7CisKKyNpZiBQTEFURk9STShNQUMpCisKKyAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJv
bVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7CisgICAg
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmli
dXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKKyAgICAKKyAgICBO
U0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXTsKKyAgICAKKyAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJ
blJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9u
czowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2Us
IEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNj
YWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7CisgICAg
ICAgIAorICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JL
ZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChmb250KQorICAgICAgICAgICAg
Zm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6
ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAgICAgICAgICBb
c2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFt
ZV07CisgICAgICAgIAorICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJp
YnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CisgICAgfV07CisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAgVGV4dEluZGljYXRvck9wdGlvbnMgaW5k
aWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWlu
dEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOworICAgIGlmIChwcmVzZW50YXRpb25UcmFuc2l0
aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9z
c2ZhZGUpCisgICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9wdGlvbklu
Y2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7CisgICAgCisgICAgUmVmUHRyPFRl
eHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFu
Z2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOworICAg
IGlmICghdGV4dEluZGljYXRvcikgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlv
bmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZv
OworICAgIH0KKyAgICAKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IgPSB0
ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGRpY3Rpb25hcnlQ
b3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZzsKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rp
b25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwor
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggNDZjZDA1MGQ1ZTAwNDZk
MGZmMGEzNzFkMDMyMTQyNWRmNDBiYmMwZi4uNTk0OWM1ZTAwYzc5ZGExZmE0YjllOWI5NjkzMWUz
M2ZmMzAyNDRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0xOTEsOSArMTkxLDYgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZSBMZWdhY3lSZWNlaXZlciB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgIyBEaWN0aW9u
YXJ5IHN1cHBvcnQuCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKFdlYkNv
cmU6OkZsb2F0UG9pbnQgcG9pbnQpCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKICAgICBQ
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpp
bmRleCBlZTA4MmM0YTlmNGE0NDNlMzBiMjZkZTZmZDA2NGIyZmFiZDFlNTY3Li4xMWQwYzU4YjU4
NTMwMzAxYWMzYzVmODAwNzBmZjhhYzM0YTFlZTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtNDEzLDIxICs0MTMsNiBA
QCB2b2lkIFdlYlBhZ2U6OnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4odWludDY0X3QsIGNv
bnN0IFN0cmluZyYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJh
bWUmLCBSYW5nZSYsIE5TRGljdGlvbmFyeSAqLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiBib29sIFdlYlBhZ2U6OnBl
cmZvcm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmLCBXZWJDb3Jl
OjpLZXlib2FyZEV2ZW50KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA0NzMz
YjFjYmYyZmU0NWNkOWQwY2VhN2VlZjliYzdjMzhhZmFmN2U0Li5mYTdhNmFhZjFiNjBiZGE5MGRj
ZDA3OWJhMWE5NDM2ZjEyMTZiMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMzg5LDEwMiArMzg5LDcgQEAgdm9pZCBX
ZWJQYWdlOjpmb250QXRTZWxlY3Rpb24oQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9udEF0U2VsZWN0aW9uQ2FsbGJhY2soZm9udE5hbWUs
IGZvbnRTaXplLCBzZWxlY3Rpb25IYXNNdWx0aXBsZUZvbnRzLCBjYWxsYmFja0lEKSk7CiB9CiAg
ICAgCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25z
dCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQotewotICAgIGlmIChhdXRvKiBwbHVnaW5WaWV3ID0g
cGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKSkgewotICAgICAgICBpZiAo
cGx1Z2luVmlldy0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGZsb2F0UG9pbnQp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRo
ZSBwb2ludCBpcyBvdmVyLgotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWlu
RnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5G
cmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2lu
dCkpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9u
czsKLSAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF1dG8qIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpm
cmFtZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZv
clNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKLXsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7Ci0gICAgTlNEaWN0aW9u
YXJ5ICpvcHRpb25zOwotICAgIHN0ZDo6dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGlj
dGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICBpZiAoc2Vs
ZWN0ZWRSYW5nZSkKLSAgICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFt
ZSwgKnNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwotfQog
Ci12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9u
KCkKLXsKLSAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCk7Ci0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24o
ZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKLX0KLQotRGljdGlvbmFyeVBv
cHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1l
LCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBFZGl0b3Im
IGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOwotICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9u
YXJ5UG9wdXBJbmZvKHRydWUpOwotCi0gICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5
UG9wdXBJbmZvOwotICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZh
bHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAg
VmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHMocXVh
ZHMpOwotICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFy
eVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKLQot
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVu
ZGVyU3R5bGUoKTsKLSAgICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250
TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkgOiAwOwotICAgIGRpY3Rpb25h
cnlQb3B1cEluZm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3Qu
eSgpICsgc2NhbGVkQXNjZW50KTsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSBv
cHRpb25zOwotCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBl
ZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0
cmlidXRlZFN0cmluZzo6Tm8pOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0
cmluZ11dKTsKLQotICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFn
ZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotCi0gICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJh
dGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxl
bmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBO
U1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVE
aWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxl
Q29weV0pOwotCi0gICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVj
dEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAg
ICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9p
bnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOwotICAgICAgICBpZiAoZm9udCkKLSAgICAgICAg
ICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKLQotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0
ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07Ci0gICAgfV07Ci0KLSAgICBU
ZXh0SW5kaWNhdG9yT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlv
blVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXM7Ci0gICAg
aWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKLSAgICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8
PSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdo
dDsKLQotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKTsKLSAgICBpZiAoIXRleHRJbmRpY2F0b3IpIHsKLSAgICAgICAgZWRpdG9y
LnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4g
ZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRl
eHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7Ci0gICAgZGljdGlvbmFyeVBvcHVw
SW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOwotCi0gICAg
ZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgIHJldHVy
biBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotfQogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAK
QEAgLTUzOSwxMSArNDQ0LDYgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9u
YXJ5UG9wdXBJbmZvRm9yU2VsZWN0aW9uSW5QREZQbHVnaW4oUERGU2VsZWMKIAogI2VuZGlmCiAK
LXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYgZnJh
bWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlv
bmFyeVBvcHVwSW5mb0ZvclJhbmdlKGZyYW1lLCByYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9u
VHJhbnNpdGlvbikpKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2
aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgS2V5Ym9hcmRFdmVudCogZXZl
bnQpCiB7CiAgICAgLy8gRmlyc3QgZ2l2ZSBhY2Nlc3NpYmlsaXR5IGEgY2hhbmNlIHRvIGhhbmRs
ZSB0aGUgZXZlbnQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355088</attachid>
            <date>2018-11-16 11:45:45 -0800</date>
            <delta_ts>2018-11-16 13:53:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116114544.patch</filename>
            <type>text/plain</type>
            <size>74123</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk1MzEwYzNhNWFhNTU0
OGJmNDg4MmY2MTA4NGM2MzNhNTdhYzRkZC4uMWZlOWEwMzI1MjU1N2JiYWUzNmRhMzAxZjA0MDhj
ZWMxOWViODEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTUg
IEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW2N1
cmxdIHdhcm5pbmc6IGRlbGV0ZSBjYWxsZWQgb24gbm9uLWZpbmFsICdXZWJDb3JlOjpDdXJsRG93
bmxvYWQnIHRoYXQgaGFzIHZpcnR1YWwgZnVuY3Rpb25zIGJ1dCBub24tdmlydHVhbCBkZXN0cnVj
dG9yIFstV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMmJm
ZWQ4NDkzNWVmZGU3NDJmZDE4OWFhMGZjYWU5OTljZWVlNGRkNy4uMGM0OGMzZmIxNjM3ZGZiNTFk
YmYwMDdjYThkYzI5MjM2MjYwNjMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNh
Z2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTcz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICogcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6
CisKIDIwMTgtMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcmVtb3Zpbmcgc29tZSBXS1NJIGNhbGxz
IG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU3MGU4NjlkNjE0ZTI2ZDQ1ZGQwMTAyZGI3YTQ2NjAz
YmZlN2ExM2MuLmE3OTdkODFkODM3Zjg0MmQzYjQwMWJjYzY5ODAxZmYxMTY3NzE1YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9n
YXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIg
Y3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIExvb2t1cCBpcyBiZWluZyByZXBsYWNlZCBieSBSZXZlYWwuIFRoaXMgZnJh
bWV3b3JrIHNob3VsZCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBwYXRjaCBt
b3ZlcyB0aGUgY29kZSB0aGF0IHdlIGV4cGVjdCB3aWxsIGJlIG5lZWRlZCBmb3IgYWxsIHBsYXRm
b3JtcyB0byB0aGUgbW9yZQorICAgICAgICBnZW5lcmFsIGNvY29hIGFyZWEuIFRoaXMgcGF0Y2gg
Y2hhbmdlcyBubyBmdW5jYXRpb25hbGl0eSwgYW5kIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAg
IGFueXRoaW5nIGN1cnJlbnRseS4gVGhpcyB3b3JrIHdpbGwgYmUgYnVpbGQgb24gbGF0ZXIgd2hl
biBSZXZlYWwgaXMgcmVhZHkgdG8gc3VwcG9ydAorICAgICAgICBtdWx0aXBsZSBwbGF0Zm9ybXMu
CisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IF9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX2FkZERlZmF1bHRHZXN0dXJlUmVjb2duaXplcnNdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
bG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UpOiBEZWxldGVkLgorCiAyMDE4LTExLTE1ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgV0tQcmVmZXJlbmNlc1NldEZv
bnRTbW9vdGhpbmdMZXZlbCBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjE1NTJk
ZjdmNzVmYzUzOWJiODc1NmQwODQ5YjU0ZDY4Njk1NTQwOS4uMTgyNDdkNjRjOWQzMDI5OTYzMDVm
Y2M1NDcyMzVjNGNiNTQxYmUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAyLDYgKzQwMiw3IEBACiAJCQkJMEMyREExMzkx
RjNCRUI0OTAwREJDMzE3IC8qIFBhc3NLaXRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQTFGM0JFQjQ5
MDBEQkMzMTcgLyogcHRocmVhZFNQSS5oICovLAogCQkJCTBDMkRBMTNCMUYzQkVCNDkwMERCQzMx
NyAvKiBRdWFydHpDb3JlU1BJLmggKi8sCisJCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8q
IFJldmVhbFNQSS5oICovLAogCQkJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovLAogCQkJCTBDMkRBMTNDMUYzQkVCNDkwMERCQzMxNyAvKiBTZXJ2ZXJzU1BJ
LmggKi8sCiAJCQkJMEMyREExMkIxRjNCRUI0OTAwREJDMzE3IC8qIFVSTEZvcm1hdHRpbmdTUEku
aCAqLywKQEAgLTQ2Nyw3ICs0NjgsNiBAQAogCQkJCTBDNzc4NTg2MUY0NTEzMEYwMEY0RUJCNiAv
KiBRVEtpdFNQSS5oICovLAogCQkJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0NCAvKiBRdWlja0Ry
YXdTUEkuaCAqLywKIAkJCQkwQzc3ODU4NzFGNDUxMzBGMDBGNEVCQjYgLyogUXVpY2tMb29rTWFj
U1BJLmggKi8sCi0JCQkJNDQyOTU2Q0MyMThBNzJERTAwODBEQjU0IC8qIFJldmVhbFNQSS5oICov
LAogCQkJCUExMTc1QjQ4MUY2QUZGOEUwMEM0QjlGMCAvKiBTcGVlY2hTeW50aGVzaXNTUEkuaCAq
LywKIAkJCQkwQzc3ODU4ODFGNDUxMzBGMDBGNEVCQjYgLyogVFVDYWxsU1BJLmggKi8sCiAJCQkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NzBiYTk2ZDNmZDhmZGE4MWYwYzVjZmQyNjA5NTkzNjZlNDY5MDg3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKQEAg
LTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCitT
T0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQorU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLKFJldmVhbENvcmUpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlBy
ZXNlbnRlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0Nv
bnRleHQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQorCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVh
bC9SVlByZXNlbnRlci5oPgorI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KKyNpbXBvcnQg
PFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgorCisjZWxzZSAvLyBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQorCitAaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdl
OihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKK0BlbmQK
KworQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2JqZWN0CisrIChOU1JhbmdlKXJldmVhbFJh
bmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4IHNlbGVjdGVkUmFuZ2VzOihOU0FycmF5
IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2VsZWN0aW9uOihCT09M
ICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOworQGVuZAorCitAaW50ZXJmYWNlIFJWUHJlc2VudGVy
IDogTlNPYmplY3QKKyNpZiBQTEFURk9STShNQUMpCistIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOihSVkl0ZW0gKilp
dGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQg
cHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4
dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKKy0gKEJPT0wpcmV2ZWFsSXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJW
RG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlBy
ZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5
ICopb3B0aW9uczsKK0BlbmQKKworI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCmluZGV4IGViN2Y5NTFm
NzFjNzVjODEyMTdiMjJlNzhhZGFkMzBlNGQ2YTVjMDQuLmUwYTMzNzVkMzBjYzg4OWYxMzVlYTJh
MTFkNDdkMGRhOTRmOThhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3Bp
L21hYy9Mb29rdXBTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9v
a3VwU1BJLmgKQEAgLTIzLDEyICsyMywxMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorCisj
aWYgUExBVEZPUk0oTUFDKQorCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHBh
bC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KICNpbXBv
cnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQotCiBTT0ZUX0xJTktf
UFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTG9va3VwKQogU09GVF9MSU5LX0NMQVNTX09QVElP
TkFMKExvb2t1cCwgTFVMb29rdXBEZWZpbml0aW9uTW9kdWxlKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ2YjhkYTQyYzg1OTkwYWUzMmVhNjdhMGFmNzc1M2YzZGI5ODI4YTUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9z
cGkvbWFjL1JldmVhbFNQSS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8b2JqYy9y
dW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVS
ZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotU09GVF9MSU5L
X1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhS
ZXZlYWxDb3JlKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIp
Ci1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQot
U09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKLVNPRlRfTElOS19D
TEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKLQotI2lmIFVTRShBUFBMRV9J
TlRFUk5BTF9TREspCi0KLSNpbXBvcnQgPFJldmVhbC9SVlByZXNlbnRlci5oPgotI2ltcG9ydCA8
UmV2ZWFsL1JldmVhbC5oPgotI2ltcG9ydCA8UmV2ZWFsQ29yZS9SVlNlbGVjdGlvbi5oPgotI2lt
cG9ydCA8UmV2ZWFsQ29yZS9SZXZlYWxDb3JlLmg+Ci0KLQotI2Vsc2UKLQotQGludGVyZmFjZSBS
Vkl0ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJh
bmdlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUlZTZWxl
Y3Rpb24gOiBOU09iamVjdAotKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6KE5TVUludGVn
ZXIpY2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXNlbGVj
dGVkUmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVwZGF0ZVNlbGVj
dGlvbjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlByZXNlbnRlciA6IE5TT2JqZWN0Ci0tIChpZDxO
U0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlvbkNvbnRyb2xsZXJG
b3JJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQg
Kilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQg
KilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOwotLSAo
Qk9PTClyZXZlYWxJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVu
dENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGlu
Z0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRp
b25zOwotQGVuZAotCi0jZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAppbmRleCBjYjZkZWNiMTdjMWUwZTJlYTU3N2QyNDI4NmU2NjM1ZGM3MmY2
OTc3Li40NGFhY2JhMjFkMzMwNDg5ZWNkNTQ2OTFkMjMxMjQzZDgxNTkxODNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKQEAgLTg0LDYgKzg0LDcgQEAgZWRpdGluZy9TZWxlY3Rpb25SZWN0R2F0
aGVyZXIuY3BwCiBlZGl0aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcAogCiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW0KK2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQogZWRpdGlu
Zy9jb2NvYS9FZGl0b3JDb2NvYS5tbQogZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlQ2hhbmdl
c0NvY29hLm1tCiBlZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2EubW0KQEAgLTk3LDcg
Kzk4LDYgQEAgZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKIGVkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQogCiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIu
bW0KLWVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KIGVkaXRpbmcvbWFjL0RpY3Rpb25h
cnlMb29rdXBMZWdhY3kubW0KIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQogZWRpdGluZy9tYWMv
RnJhbWVTZWxlY3Rpb25NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ODBjZmM0ZjYxMWI5NDAxMjgwMWY2ZGRmODA2Yjcz
NGQ2OTA2YjhkLi42YjRkNjIwMDRlNzc0ZDUzZTEwYzFjMDhmY2Y2NTY4NzMyY2FiOWZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yMDQxOSw2ICsyMDQxOSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDNTIyN0RFRjFDM0M2
REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oICovLAogCQkJCUM1MjI3REYwMUMzQzZERDcw
MEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovLAorCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhF
QkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTlCNTVFRUU4MUIzRTg4OTgwMDUz
NDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAqLywKIAkJCQlGNDJDRUI1NDIxNDAzMUVFMDAyRENBNzIg
LyogRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbSAqLywKIAkJCQlGNDhEMkE3NTIxNTZGRTU3
MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXNDb2NvYS5tbSAqLywKQEAgLTI2MTQwLDcgKzI2MTQx
LDYgQEAKIAkJCQlDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyLmggKi8sCiAJCQkJQ0U3QjJEQjAxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0
aXZlVGV4dFVJQ29udHJvbGxlci5tbSAqLywKIAkJCQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEg
LyogRGljdGlvbmFyeUxvb2t1cC5oICovLAotCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAv
KiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTQ0Mjk1NkNBMjE4QTZEMzAwMDgwREI1NCAv
KiBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tICovLAogCQkJCUVENTAxREM1MEIyNDlGMjkwMEFF
MThEOSAvKiBFZGl0b3JNYWMubW0gKi8sCiAJCQkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8q
IEZyYW1lU2VsZWN0aW9uTWFjLm1tICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5YWU3NWY5NjdlZTFhZTRmZDE2
Njg1OWI2ZTUyODU5YzRmYmZiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTAsMCArMSw0MDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRGljdGlvbmFyeUxvb2t1
cC5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShSRVZFQUwpCisKKyNpbXBvcnQg
IkRvY3VtZW50LmgiCisjaW1wb3J0ICJFZGl0aW5nLmgiCisjaW1wb3J0ICJGb2N1c0NvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgorI2lt
cG9ydCAiSFRNTENvbnZlcnRlci5oIgorI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9y
dCAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJhbmdlLmgi
CisjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKKyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgorI2lt
cG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCisj
aW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBv
cnQgPHBhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29r
dXBTUEkuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3
dGYvUmVmUHRyLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisKK0BpbnRlcmZhY2UgV2ViUmV2ZWFs
SGlnaGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKK0Bw
cml2YXRlCisgICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOworICAgIE5T
UmVjdCBfaGlnaGxpZ2h0UmVjdDsKKyAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OworICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Cit9CisKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
OworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxp
Z2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0
cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Cist
ICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4
dEluZGljYXRvcjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0
CisKK0BzeW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7CitAc3ludGhlc2l6
ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OworQHN5bnRoZXNpemUg
YXR0cmlidXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hs
aWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmli
dXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2hpZ2hsaWdodFJlY3Qg
PSBoaWdobGlnaHRSZWN0OworICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhp
Z2hsaWdodDsKKyAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7CisgICAg
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihG
dW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCit7CisgICAgX2NsZWFyVGV4dElu
ZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKK30KKworLSAoTlNBcnJheTxO
U1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQg
cmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdp
dGhSZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOworfQorCistICh2b2lkKXJldmVhbENvbnRleHQ6
KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAq
KWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgCisgICAgZm9yIChOU1ZhbHVl
ICpyZWN0VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7CisgICAgICAgIE5TUmVjdCBy
ZWN0ID0gcmVjdFZhbC5yZWN0VmFsdWU7CisKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBh
dHRyaWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFn
cmFwaCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCisgICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVk
U3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1
dGVkU3RyaW5nIGxlbmd0aF0pXV0pOworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdy
YXBoU3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBh
bGxvY10gaW5pdF0pOworICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGln
bm1lbnRDZW50ZXJdOworICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdl
dCgpIGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07CisgICAgCisgICAgICAg
IFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcg
c3RyaW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKKyAgICAgICAgW3N0cmluZyBk
cmF3SW5SZWN0OnJlY3RdOworICAgIH0KK30KKworLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlBy
ZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRl
bTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVT
RURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKK30K
KworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBz
dG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgYXV0byBibG9jayA9IFdURk1v
dmUoX2NsZWFyVGV4dEluZGljYXRvcik7CisgICAgaWYgKGJsb2NrKQorICAgICAgICBibG9jaygp
OworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICBp
ZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
ICAgIAorICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07CisKKyAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQs
IHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgorICAgIGF1dG8gc2Vs
ZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rp
b25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworCisgICAgLy8gQXMgY29udGV4dCwgd2Ug
YXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsK
KyAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisK
KyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworICAg
IGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKKyAgICBOU1Jhbmdl
IHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3Ro
VG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICAKKyAgICBSZWZQ
dHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwg
cGFyYWdyYXBoRW5kKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hh
cmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5T
KFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRS
YW5nZTpyYW5nZVRvUGFzc10pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdl
dCgpLmhpZ2hsaWdodFJhbmdlOworICAgIAorICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hs
aWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKK3N0ZDo6dHVw
bGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
QXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVt
Q2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgYXV0
byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKKworICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gRG9u
J3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KKyAg
ICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2Rl
RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQorICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8gcG9zaXRpb24gPSBmcmFt
ZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQorICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKTsKKworICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKKyAgICBpbnQgaGl0SW5kZXg7CisgICAgUmVmUHRy
PFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7CisgICAgCisgICAgaWYgKHNlbGVjdGlvbi5zZWxl
Y3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKKyAgICAg
ICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICAg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworICAgICAgICAK
KyAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRp
bmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3Rh
cnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1dG8gcGFyYWdyYXBoRW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
cmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rp
b25TdGFydCk7CisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAg
ICAgICAgCisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQo
KSkpOworICAgICAgICAKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5l
UnVsZXMgeyBwb3NpdGlvbiB9OworICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1
bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAgICAgICAgcG9z
aXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7CisgICAgICAg
IC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4
dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTAp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCisgICAgICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgCisgICAgICAgIHNlbGVjdGlvblJh
bmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgICAgIGhpdEluZGV4ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfQorICAgIAorICAgIE5TUmFuZ2Ug
c2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4
OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0
aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKKyAgICAKKyAgICBTdHJpbmcg
aXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJl
dGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7CisgICAg
TlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisKKyAg
ICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0
UmFuZ2UubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAg
ICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhp
Z2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKKyAg
ICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OworICAgIAorfQorCitzdGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNo
YXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJh
Y3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJ
bnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisKKyAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3Ry
aW5nLmxlbmd0aDsKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVy
T2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOworICAgIAorICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsKKyAgICAKKyAg
ICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhw
YW5kXTsKKyAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVu
Z3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3N0ZDo6dHVwbGU8TlNTdHJpbmcgKiwg
TlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQ
REZTZWxlY3Rpb24gKnNlbGVjdGlvbikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQorICAgICAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5v
IGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlv
bi5zdHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBAIiIsIG5pbCB9OworCisgICAgUmV0
YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0
aW9uIGNvcHldKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUw
IGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICBhdXRv
IG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKKyAg
ICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAwOworICAgIE5TSW50ZWdl
ciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7CisgICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFy
YWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZv
cmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOworCisgICAgYXV0byBmdWxsUGxhaW5U
ZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOworICAgIGF1dG8gcmFuZ2VU
b1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7CisKKyAg
ICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgp
IGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bh
c3NdKTsKKyAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRS
YW5nZTsKKyAgICAKKyAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07CisKKyAgICBOU0lu
dGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3Rl
ZFJhbmdlLmxvY2F0aW9uOworICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJh
Y3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFz
cy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKKworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2Vs
ZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07CisgICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKKworICAgIEFTU0VSVChbc2VsZWN0aW9u
LnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0
aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOworICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcs
IG5pbCB9OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiB7
IEAiIiwgbmlsIH07Cit9CisKK3N0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgc2hvd1BvcHVwT3JD
cmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlciwg
Y29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2
aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGlj
YXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChG
bG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rp
b248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIAorICAgIGlmICghZ2V0
UlZJdGVtQ2xhc3MoKSB8fCAhZ2V0UlZQcmVzZW50ZXJDbGFzcygpKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBpZiAo
TlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgp
KQorICAgICAgICBbbXV0YWJsZU9wdGlvbnMgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlv
bnNdOworCisgICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRp
Y3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvcik7CisgICAgCisgICAgUmV0YWluUHRyPFJW
UHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2Uo
KSBpbml0XSk7CisgICAgCisgICAgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CisgICAgTlNQb2ludCBw
b2ludGVyTG9jYXRpb247CisgICAgCisgICAgaWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVu
dEltYWdlKCkpIHsKKyAgICAgICAgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRl
eHRJbmRpY2F0b3IuZ2V0KCkpOworCisgICAgICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXMoKVswXTsKKyAgICAgICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJ
blZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdElu
Um9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRp
bmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyb290Vmll
d1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykgeworICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVj
dEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4
dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbkJv
dW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5
KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKKyAgICAgICAg
aGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOwor
ICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMu
bG9jYXRpb24oKTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNQb2ludCB0ZXh0
QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbjsKKyAgICAgICAgCisg
ICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZl
cnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07CisgICAgfQorICAgIAorICAg
IFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtb
V2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdo
dFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1h
Z2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmlu
Zy5nZXQoKV0pOworICAgIFJldGFpblB0cjxSVlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50
ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9jYXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVs
ZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0
KCldKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NS
Vkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0
ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsK
KyAgICAKKyAgICBbd2ViSGlnaGxpZ2h0IHNldENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxp
Z2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3Zl
KGNsZWFyVGV4dEluZGljYXRvcildIHsKKyAgICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikK
KyAgICAgICAgICAgIGNsZWFyVGV4dEluZGljYXRvcigpOworICAgIH1dOworICAgIAorICAgIGlm
IChjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBh
bmltYXRpb25Db250cm9sbGVyRm9ySXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwg
cHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07CisgICAgW3ByZXNl
bnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5n
Q29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICByZXR1cm4gbmlsOworICAg
IAorI2Vsc2UgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIFVOVVNFRF9QQVJBTShjcmVhdGVB
bmltYXRpb25Db250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZGljdGlvbmFyeVBvcHVwSW5m
byk7CisgICAgVU5VU0VEX1BBUkFNKHZpZXcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0SW5kaWNh
dG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2spOworICAgIFVOVVNFRF9QQVJBTShyb290Vmlld1RvVmll
d0NvbnZlcnNpb25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKGNsZWFyVGV4dEluZGljYXRv
cik7CisgICAgCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAg
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKK30KKwordm9pZCBEaWN0aW9u
YXJ5TG9va3VwOjpzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFy
eVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dElu
ZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6
OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9u
Q2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sK
KyAgICBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25h
cnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9v
dFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9y
KSk7Cit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQorCitXS1JldmVhbENvbnRyb2xs
ZXIgRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERp
Y3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29u
c3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0
YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0
KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgcmV0dXJuIHNob3dQb3B1cE9yQ3JlYXRl
QW5pbWF0aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0
SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQorCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9S
TShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29u
dGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250
ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggZTRiOTBiZGYyNzA1MmIwMzJmOWEzY2U0MzM1NDNkMWY4
Nzc4NGY2Ny4uODVjNDI3NDFhYmFkNzU3ZGQxMGZlNGE2ZDQzZjFiYmE3M2RmZjY5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29j
b2EubW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJE
b2N1bWVudEZyYWdtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgorI2ltcG9ydCAi
RWRpdG9yLmgiCisjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNpbXBvcnQgIkZpbGUuaCIKICNp
bXBvcnQgIkZpbGVTeXN0ZW0uaCIKICNpbXBvcnQgIkZyYW1lLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKaW5kZXggY2I2ZDUzZWI4ZjhjNGNmZDM4
OTQ1N2Y1YmVhZTI4M2EzN2RhODE5Mi4uZjhmNzYxY2RjODFhZWJkM2RmMDg4MzdhMzIzMWMwOGYz
NWE0ZmViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAuaApAQCAtMjMsMTUgKzIzLDI1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZP
Uk0oQ09DT0EpCiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCi0jaW5jbHVkZSA8
cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgorI2lm
IFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2Vz
dHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAKIE9CSkNfQ0xBU1MgTlNWaWV3OwogT0JKQ19DTEFTUyBQREZTZWxl
Y3Rpb247CiAKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVmIGlkIDxOU0ltbWVkaWF0ZUFjdGlv
bkFuaW1hdGlvbkNvbnRyb2xsZXI+IFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbHNlCit0eXBlZGVm
IGlkIFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTQ4LDggKzU4LDExIEBA
IHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNob3dQb3B1cChjb25z
dCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9p
ZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNv
bnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFy
VGV4dEluZGljYXRvciA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IGhpZGVQb3B1cCgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGlkIDxOU0ltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChj
b25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248
dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ss
IGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmll
d0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNs
ZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOworICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRy
b2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0
IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFs
bGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+
JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyAgICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjZTllNDQ3NGE0OWZjYzliMDk1YjJmNGJkYTZjOWFlM2YzOGNmZTQ3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIC9kZXYvbnVsbApAQCAt
MSwzODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShS
RVZFQUwpCi0KLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJFZGl0aW5nLmgiCi0jaW1w
b3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFt
ZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgotI2ltcG9ydCAiSGl0VGVz
dFJlc3VsdC5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQg
IlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJWaXNp
YmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKLSNpbXBvcnQgIlZp
c2libGVVbml0cy5oIgotI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgotI2ltcG9ydCA8cGFsL3Nw
aS9tYWMvTG9va3VwU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlv
bkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9SZXZlYWxTUEku
aD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUmVm
UHRyLmg+Ci0KLUBpbnRlcmZhY2UgV2ViUmV2ZWFsSGlnaGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hs
aWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKLUBwcml2YXRlCi0gICAgRnVuY3Rpb248dm9pZCgp
PiBfY2xlYXJUZXh0SW5kaWNhdG9yOwotICAgIE5TUmVjdCBfaGlnaGxpZ2h0UmVjdDsKLSAgICBC
T09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqX2F0dHJp
YnV0ZWRTdHJpbmc7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0
IGhpZ2hsaWdodFJlY3Q7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgdXNl
RGVmYXVsdEhpZ2hsaWdodDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0
OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVk
U3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Ci0tICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRv
cjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcjsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0Ci0KLUBzeW50aGVzaXplIGhpZ2hsaWdodFJl
Y3Q9X2hpZ2hsaWdodFJlY3Q7Ci1Ac3ludGhlc2l6ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VE
ZWZhdWx0SGlnaGxpZ2h0OwotQHN5bnRoZXNpemUgYXR0cmlidXRlZFN0cmluZz1fYXR0cmlidXRl
ZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0
KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxp
Z2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3Ry
aW5nCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgCi0gICAgX2hpZ2hsaWdodFJlY3QgPSBoaWdobGlnaHRSZWN0OwotICAgIF91c2VE
ZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBfYXR0cmlidXRlZFN0
cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Ci0gICAgCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0
SW5kaWNhdG9yCi17Ci0gICAgX2NsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0
SW5kaWNhdG9yKTsKLX0KLQotLSAoTlNBcnJheTxOU1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDoo
UlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVt
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsK
LSAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1d
OwotfQotCi0tICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250
ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0o
aXRlbSk7Ci0gICAgCi0gICAgZm9yIChOU1ZhbHVlICpyZWN0VmFsIGluIGNvbnRleHQuaXRlbVJl
Y3RzSW5WaWV3KSB7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gcmVjdFZhbC5yZWN0VmFsdWU7Ci0K
LSAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBhdHRyaWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0
ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFncmFwaCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3Jk
ZXIgdG8gY2VudGVyIHRleHQuCi0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5
PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRX
aXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5n
ZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pXV0pOwotICAg
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0
TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10gaW5pdF0pOwotICAgICAgICBbcGFy
YWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRDZW50ZXJdOwotICAgICAgICBbYXR0
cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdldCgpIGZvcktleTpOU1BhcmFncmFwaFN0eWxl
QXR0cmlidXRlTmFtZV07Ci0gICAgCi0gICAgICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJp
bmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0
ZXMuZ2V0KCldKTsKLSAgICAgICAgW3N0cmluZyBkcmF3SW5SZWN0OnJlY3RdOwotICAgIH0KLX0K
LQotLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBz
aG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVO
VVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgcmV0dXJu
IHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKLX0KLQotLSAodm9pZClyZXZlYWxDb250ZXh0OihS
VlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVt
ICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0o
aXRlbSk7Ci0gICAgYXV0byBibG9jayA9IFdURk1vdmUoX2NsZWFyVGV4dEluZGljYXRvcik7Ci0g
ICAgaWYgKGJsb2NrKQotICAgICAgICBibG9jaygpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGlj
dGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAg
ICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9
OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07Ci0KLSAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdh
bnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgotICAgIGF1dG8g
c2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxl
Y3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotCi0gICAgLy8gQXMgY29udGV4dCwg
d2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0Lgot
ICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0
KTsKLSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7
Ci0KLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwot
ICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1Jh
bmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVu
Z3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKLSAgICAKLSAgICBS
ZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxs
Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9w
dE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0
ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVt
LmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAotICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6
c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhp
Z2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci19Ci0KLXN0ZDo6
dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJh
bmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCi17
Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmICghZ2V0UlZJ
dGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAg
YXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYg
KCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBu
aWwgfTsKLQotICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8g
RG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4K
LSAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJO
b2RlRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQot
ICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8gcG9zaXRpb24gPSBm
cmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0gICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShub2RlKTsKLQotICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKLSAgICBpbnQgaGl0SW5kZXg7Ci0gICAgUmVm
UHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlvbi5z
ZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKLSAg
ICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAg
ICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotICAgICAg
ICAKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91
bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0g
c3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBo
RW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgCi0gICAgICAgIGF1
dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxl
Y3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5n
ZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgCi0gICAgICAgIGZ1bGxD
aGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsK
LSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5n
ZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JM
aW5lUnVsZXMgeyBwb3NpdGlvbiB9OwotICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGlu
ZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKLSAgICAgICAg
cG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7Ci0gICAg
ICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2Yg
dGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICAgICAgZnVsbENoYXJhY3RlclJh
bmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAy
NTApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCi0gICAgICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlv
blJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgICAgIGhpdEluZGV4ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgfQotICAgIAotICAgIE5TUmFu
Z2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdElu
ZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2Vs
ZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKLSAgICAKLSAgICBTdHJp
bmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAg
IFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkg
aW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7Ci0g
ICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0K
LSAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxp
Z2h0UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAK
LSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2Us
IGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsK
LSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OwotICAgIAotfQotCi1zdGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25C
eUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNo
YXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwg
TlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKLXsKLSAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24u
c3RyaW5nLmxlbmd0aDsKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVt
YmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAgIAotICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9y
ZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsKLSAgICAK
LSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1Rv
RXhwYW5kXTsKLSAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcu
bGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKLQot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXN0ZDo6dHVwbGU8TlNTdHJpbmcg
KiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlv
bihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4g
eyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlz
IG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0gICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVj
dGlvbi5zdHJpbmcubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBAIiIsIG5pbCB9OwotCi0gICAg
UmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2Vs
ZWN0aW9uIGNvcHldKTsKLQotICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2Ug
MjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICBh
dXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsK
LSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAwOwotICAgIE5TSW50
ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7Ci0gICAgZXhwYW5kU2VsZWN0aW9uQnlD
aGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRC
ZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOwotCi0gICAgYXV0byBmdWxsUGxh
aW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOwotICAgIGF1dG8gcmFu
Z2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7Ci0K
LSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5j
ZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VU
b1Bhc3NdKTsKLSAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGln
aHRSYW5nZTsKLSAgICAKLSAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RG
b3VuZCkKLSAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07Ci0KLSAgICBO
U0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJh
Y3RlZFJhbmdlLmxvY2F0aW9uOwotICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4
dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRv
UGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKLQotICAgIFtzZWxlY3Rpb24gZXh0ZW5k
U2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07Ci0gICAgW3NlbGVjdGlvbiBleHRl
bmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKLQotICAgIEFTU0VSVChbc2VsZWN0
aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5n
V2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOwotICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJp
bmcsIG5pbCB9OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHJldHVy
biB7IEAiIiwgbmlsIH07Ci19Ci0KLXN0YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRp
b25Db250cm9sbGVyPiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBj
cmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0
aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChU
ZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0
IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZl
cnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9y
KQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdl
dFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIGlmIChOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBk
aWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkpCi0gICAgICAgIFttdXRhYmxlT3B0aW9u
cyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9uc107Ci0KLSAgICBhdXRvIHRleHRJbmRp
Y2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5k
aWNhdG9yKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UlZQcmVzZW50ZXI+IHByZXNlbnRlciA9IGFk
b3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICAKLSAgICBOU1Jl
Y3QgaGlnaGxpZ2h0UmVjdDsKLSAgICBOU1BvaW50IHBvaW50ZXJMb2NhdGlvbjsKLSAgICAKLSAg
ICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSkgewotICAgICAgICB0ZXh0
SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4dEluZGljYXRvci5nZXQoKSk7Ci0KLSAg
ICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRp
Y2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpWzBdOwotICAg
ICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dElu
ZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0g
ICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9
IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygp
OwotICAgICAgICAKLSAgICAgICAgaWYgKHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNr
KSB7Ci0gICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290
Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRp
bmF0ZXMpOwotICAgICAgICAgICAgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0
ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayhzZWxlY3Rpb25Cb3VuZGluZ1Jl
Y3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZpcnN0
VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnkodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nv
b3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICBoaWdobGlnaHRSZWN0ID0gc2VsZWN0aW9u
Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9
IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwotICAgICAgICAKLSAg
ICB9IGVsc2UgewotICAgICAgICBOU1BvaW50IHRleHRCYXNlbGluZU9yaWdpbiA9IGRpY3Rpb25h
cnlQb3B1cEluZm8ub3JpZ2luOwotICAgICAgICAKLSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHRl
eHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAg
ICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBvaW50OnRleHRCYXNlbGluZU9yaWdp
biB0b1ZpZXc6bmlsXTsKLSAgICB9Ci0gICAgCi0gICAgUmV0YWluUHRyPFdlYlJldmVhbEhpZ2hs
aWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tXZWJSZXZlYWxIaWdobGlnaHQgYWxsb2Nd
IGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0
OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpIGF0dHJpYnV0ZWRTdHJpbmc6ZGlj
dGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpXSk7Ci0gICAgUmV0YWluUHRy
PFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGlu
Z0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRlckxvY2F0aW9uSW5WaWV3OnBvaW50ZXJM
b2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdo
bGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQoKV0pOwotICAgIAotICAgIFJldGFpblB0
cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhU
ZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKS5zdHJpbmcgc2Vs
ZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOwotICAgIAotICAgIFt3ZWJIaWdobGlnaHQg
c2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGlnaHQgPSBXVEZNb3ZlKHdlYkhpZ2hsaWdo
dCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKV0gewot
ICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQotICAgICAgICAgICAgY2xlYXJUZXh0SW5k
aWNhdG9yKCk7Ci0gICAgfV07Ci0gICAgCi0gICAgaWYgKGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xs
ZXIpCi0gICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVt
Oml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0
LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAgICBbcHJlc2VudGVyIHJldmVhbEl0ZW06aXRlbS5nZXQo
KSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0
aW9uczpuaWxdOwotICAgIHJldHVybiBuaWw7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLXZvaWQgRGljdGlvbmFyeUxvb2t1cDo6c2hvd1Bv
cHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmll
dyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJ
bmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJl
Y3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgc2hvd1BvcHVwT3JD
cmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3
LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVy
c2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQotCi12b2lkIERp
Y3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotCi0gICAgaWYgKCFnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgW2dldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkg
aGlkZURlZmluaXRpb25dOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQot
aWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gRGljdGlvbmFyeUxvb2t1
cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8m
IGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2
b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywg
Y29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3
Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRp
Y2F0b3IpCi17Ci0gICAgcmV0dXJuIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxl
cih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0
aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNs
ZWFyVGV4dEluZGljYXRvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3Nw
aS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oCmluZGV4IDllZWZiOTc4NGZiZTY4OWIwOTBhNWIwMWZjZWVjZTcwZDY1NDEzMmQuLjE5NTVk
NjJkNDBiMWQ4NmU0ZGQ1MTBlYjE0ODg2MWQ0YmRhNjk3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC03MzUsNiArNzM1LDkgQEAgc3RydWN0IF9VSVdl
YlRvdWNoRXZlbnQgewogICAgIGJvb2wgaXNQb3RlbnRpYWxUYXA7CiB9OwogCitAaW50ZXJmYWNl
IF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2duaXplcgorQGVuZAor
CiBAY2xhc3MgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyOwogCiBAcHJvdG9jb2wg
VUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUgPE5TT2JqZWN0PgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpp
bmRleCBmNTY4NzVkZmYzYTFjYzQ1ZWJlZTYxNzIxNWNlOTU3MjNmNTNkZTRlLi42NWFlY2Q5MjE5
MmZlNjY2MWYxYmFhNDJkMzQwNzg2Y2U0ZDFkNTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtMzMsNiArMzMsNyBAQAog
I2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiU2FmZUJyb3dzaW5nU1BJLmgiCiAjaW1w
b3J0ICJTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCisjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIK
ICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtMTg5LDUgKzE5MCwyMSBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1DbG9uZUF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0
YWNobWVudD4mJiBmcm9tQXR0YWNobWVudAogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEFUVEFDSE1F
TlRfRUxFTUVOVCkKKyAgICAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAg
aWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKHBv
aW50KSwgbV9wYWdlSUQpOworfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCksIG1fcGFnZUlEKTsK
IH0KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggYzQ4YzM5ZDY2ZGMx
Mzk2NDIwNTY1NGI5ZDU0MGYwZjY4Nzg4NDIwYS4uOWRjMzkwOGNiMTA3NjBiZTgyNGE1OWNjZmJl
NmY5MzNiNzhmYmY1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtODcsNiArODcsNyBAQCBjbGFzcyBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5OwogY2xhc3MgV2ViUGFnZVByb3h5OwogfQogCitA
Y2xhc3MgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xhc3MgX1VJSGlnaGxpZ2h0Vmll
dzsKIEBjbGFzcyBfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcjsKIEBj
bGFzcyBVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI7CkBAIC0yMTQsNiArMjE1LDcgQEAgc3RydWN0
IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIAogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBSZXRh
aW5QdHI8VUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyPiBfaG92ZXJHZXN0dXJlUmVjb2duaXplcjsK
KyAgICBSZXRhaW5QdHI8X1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXI+IF9sb29rdXBHZXN0dXJl
UmVjb2duaXplcjsKICNlbmRpZgogCiAgICAgUmV0YWluUHRyPFVJV0tUZXh0SW50ZXJhY3Rpb25B
c3Npc3RhbnQ+IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMjFk
MzE3NzAwNmIxYzZkZjAxNmJhYmYzZTBjMzZhNzM4ODQyYTA5Mi4uMjc3NzUwODRlZTkyNGRhZmQw
NTUwNjlmZjdlYjNkNzdkNDk5NzFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0xMTIsNiArMTEyLDcg
QEAKICNpZiBQTEFURk9STShJT1NNQUMpCiAjaW1wb3J0ICJOYXRpdmVXZWJNb3VzZUV2ZW50Lmgi
CiAjaW1wb3J0IDxVSUtpdC9VSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJ
S2l0L19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9H
cmFwaGljc1NlcnZpY2VzU1BJLmg+CiAjZW5kaWYKIApAQCAtNjQ5LDYgKzY1MCwxMSBAQCAtICh2
b2lkKXNldHVwSW50ZXJhY3Rpb24KICAgICBfaG92ZXJHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0
TlMoW1tVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYg
YWN0aW9uOkBzZWxlY3RvcihfaG92ZXJHZXN0dXJlUmVjb2duaXplckNoYW5nZWQ6KV0pOwogICAg
IFtfaG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKICAgICBbc2VsZiBh
ZGRHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAg
CisgICAgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW19VSUxvb2t1cEdlc3R1
cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3Io
X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOildKTsKKyAgICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25p
emVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9s
b29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCiAjZW5kaWYKIAogICAgIF9zaW5n
bGVUYXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tXS1N5bnRoZXRpY0NsaWNrVGFwR2Vz
dHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rv
cihfc2luZ2xlVGFwQ29tbWl0ZWQ6KV0pOwpAQCAtNzUzLDYgKzc1OSw5IEBAIC0gKHZvaWQpY2xl
YW51cEludGVyYWN0aW9uCiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtfaG92ZXJHZXN0dXJl
UmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNv
Z25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKKyAgICBbX2xvb2t1
cEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW3NlbGYgcmVtb3ZlR2Vz
dHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgog
CiAgICAgW19zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwpAQCAt
ODM2LDYgKzg0NSw3IEBAIC0gKHZvaWQpX3JlbW92ZURlZmF1bHRHZXN0dXJlUmVjb2duaXplcnMK
ICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfdHdvRmluZ2VyU2luZ2xlVGFwR2Vz
dHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbc2VsZiBy
ZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07Cisg
ICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKICNlbmRpZgogfQogCkBAIC04NTAsNiArODYwLDcgQEAgLSAodm9pZClfYWRkRGVm
YXVsdEdlc3R1cmVSZWNvZ25pemVycwogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl90
d29GaW5nZXJTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0o
SU9TTUFDKQogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNv
Z25pemVyLmdldCgpXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2Vz
dHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTE0NTAsNiArMTQ2MSwxMCBA
QCAtIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVy
ZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaQogCiAgICAgaWYgKFtnZXN0dXJlUmVjb2duaXplciBp
c0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSB8fCBbb3RoZXJH
ZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIg
Y2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBpZiAoKFtnZXN0dXJlUmVj
b2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBjbGFzc11d
ICYmIFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXIgY2xhc3NdXSkgfHwgKFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2lu
ZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAmJiBbZ2VzdHVy
ZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xh
c3NdXSkpCisgICAgICAgIHJldHVybiBZRVM7CisKICNlbmRpZgogICAgIGlmIChpc1NhbWVQYWly
KGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50Lmdl
dCgpLmZvcmNlUHJlc3NHZXN0dXJlKSkKICAgICAgICAgcmV0dXJuIFlFUzsKQEAgLTYwMzMsNiAr
NjA0OCwxMiBAQCAtIChCT09MKWFsbG93c0RpY3RhdGlvbklucHV0Rm9yTGlzdFZpZXdDb250cm9s
bGVyOihQVUlDUXVpY2tib2FyZFZpZXdDb250cm9sbGVyCiAjZW5kaWYgLy8gUExBVEZPUk0oV0FU
Q0hPUykKIAogI2lmIFBMQVRGT1JNKElPU01BQykKKy0gKHZvaWQpX2xvb2t1cEdlc3R1cmVSZWNv
Z25pemVkOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBO
U1BvaW50IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMgPSBbZ2VzdHVyZVJlY29nbml6ZXIgbG9j
YXRpb25JblZpZXc6c2VsZl07CisgICAgX3BhZ2UtPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRM
b2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKTsK
K30KKwogLSAodm9pZClfaG92ZXJHZXN0dXJlUmVjb2duaXplckNoYW5nZWQ6KFVJR2VzdHVyZVJl
Y29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgogewogICAgIGlmICghX3BhZ2UtPmlzVmFsaWQo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmlu
ZGV4IGRjODAyODM2ZGQ2MGU4NDJkYWExM2FmNDQ0YjJmNzk3OTIyMjA0OTAuLmQ5OThiYjU2MmVh
NjczNDZjMzFiMzMwODMzZjJiYzJmYjBmOTZmYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtMTIxLDExICsxMjEsNiBAQCBib29sIFdl
YlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpnZXN0dXJlQ2FsbGJhY2so
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWlu
dDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgQ2FsbGJhY2tJRCBjYWxsYmFja0lE
KQogewogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlPEdlc3R1cmVDYWxsYmFj
az4oY2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQ
cm94eU1hYy5tbQppbmRleCAxNWM3ZDc2MTUzNjIzNGI2YmNjYmEwZmRmM2JkN2M2MGE5NmMzZWYy
Li5iYmQ4Nzk5OTkxMjQwMDM3NDlkMDJmM2Q0Mzg5Mzg0ZDBkMjYyY2NkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTMyMywyMiArMzIz
LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFByb21pc2VkRGF0YUZvckltYWdlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFMKIAogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZVBy
b3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVBy
b3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAg
aWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlv
bigpLCBtX3BhZ2VJRCk7Ci19Ci0KIC8vIENvbXBsZXggdGV4dCBpbnB1dCBzdXBwb3J0IGZvciBw
bHVnLWlucy4KIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2lu
KHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHRleHRJbnB1dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAzZTc5NDMxZjkzNzExNGM0MWY5ZDJkZmQ1
OGUwYjRmNzIxODE1OWE2Li5hMzhjZDJiZjYzNzk0YzhlOWYxZDIxMmEzZTc4YjNlOGM0ZWY4YzZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
V2ViUGFnZUNvY29hLm1tCkBAIC0yNiw5ICsyNiwyMCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJXZWJQYWdlLmgiCiAKKwogI2ltcG9ydCAiTG9hZFBhcmFtZXRlcnMuaCIKKyNpbXBv
cnQgIlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW1w
b3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9y
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9G
b2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL05vZGVSZW5k
ZXJTdHlsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJPYmplY3QuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogCkBAIC01OSw2ICs3MCwxMTQg
QEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvKENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Tm93
UGxheWluZ0luZm9DYWxsYmFjayhoYXNBY3RpdmVTZXNzaW9uLCByZWdpc3RlcmVkQXNOb3dQbGF5
aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlvbiwgZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50
aWZpZXIsIGNhbGxiYWNrSUQpKTsKIH0KKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCit7Cisg
ICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFp
bkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChwbHVnaW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgorICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRU
ZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250
ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKKyAgICBzdGQ6OnRpZShyYW5nZSwgb3B0
aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOwor
ICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvKiBmcmFtZSA9
IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUo
KS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlv
bnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOworfQorCit2
b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBm
cmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAg
c3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIGlmIChzZWxlY3RlZFJhbmdlKQorICAgICAg
ICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwg
b3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQoreworICAgIGF1dG8mIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAg
ICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpC
b3VuY2VBbmRDcm9zc2ZhZGUpOworfQorICAgIAordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25h
cnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRh
dGlvblRyYW5zaXRpb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQ
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUs
IHJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkpOworfQorCitEaWN0aW9u
YXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYg
ZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIEVk
aXRvciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7CisgICAgZWRpdG9yLnNldElzR2V0dGluZ0Rp
Y3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CisgICAgCisgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBk
aWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNl
KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAg
fQorICAgIAorICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHJhbmdlLmFic29sdXRl
VGV4dFF1YWRzKHF1YWRzKTsKKyAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGVk
aXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIEludFJlY3QgcmFuZ2VS
ZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCkpOworICAgIAorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdl
LnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKKyAgICBmbG9hdCBzY2FsZWRBc2NlbnQg
PSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9y
KCkgOiAwOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5n
ZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkQXNjZW50KTsKKyAgICBkaWN0aW9uYXJ5
UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOworCisjaWYgUExBVEZPUk0oTUFDKQorCisgICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6
Tm8pOworICAgIAorICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2Fs
ZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7Cisg
ICAgCisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFy
ZWRGb250TWFuYWdlcl07CisgICAgCisgICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVB
dHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0
aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1Jh
bmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0
aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29w
eV0pOworICAgICAgICAKKyAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMg
b2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoZm9udCkKKyAg
ICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9u
dC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3IoKV07CisgICAgICAgIGlmIChmb250KQorICAg
ICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0
dHJpYnV0ZU5hbWVdOworICAgICAgICAKKyAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmlu
ZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOworICAg
IH1dOworCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIFRleHRJbmRpY2F0b3JP
cHRpb25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdS
ZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlczsKKyAgICBpZiAocHJlc2VudGF0
aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91
bmNlQW5kQ3Jvc3NmYWRlKQorICAgICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRleHRJbmRpY2F0
b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OworICAgIAorICAg
IFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3Jl
YXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0
aW9uKTsKKyAgICBpZiAoIXRleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFy
eVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5k
aWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBk
aWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRT
dHJpbmc7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIGVkaXRvci5zZXRJc0dl
dHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICByZXR1cm4gZGljdGlvbmFyeVBv
cHVwSW5mbzsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDQ2Y2Qw
NTBkNWUwMDQ2ZDBmZjBhMzcxZDAzMjE0MjVkZjQwYmJjMGYuLjU5NDljNWUwMGM3OWRhMWZhNGI5
ZTliOTY5MzFlMzNmZjMwMjQ0YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtMTkxLDkgKzE5MSw2IEBAIG1lc3Nh
Z2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
ICMgRGljdGlvbmFyeSBzdXBwb3J0LgogICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShN
QUMpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KaW5kZXggZWUwODJjNGE5ZjRhNDQzZTMwYjI2ZGU2ZmQwNjRiMmZhYmQxZTU2Ny4u
MTFkMGM1OGI1ODUzMDMwMWFjM2M1ZjgwMDcwZmY4YWMzNGExZWU5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxMywy
MSArNDEzLDYgQEAgdm9pZCBXZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVp
bnQ2NF90LCBjb25zdCBTdHJpbmcmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQg
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZv
clJhbmdlKEZyYW1lJiwgUmFuZ2UmLCBOU0RpY3Rpb25hcnkgKiwgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBX
ZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5n
JiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
aW5kZXggNDczM2IxY2JmMmZlNDVjZDlkMGNlYTdlZWY5YmM3YzM4YWZhZjdlNC4uZmE3YTZhYWYx
YjYwYmRhOTBkY2QwNzliYTFhOTQzNmYxMjE2YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTM4OSwxMDIgKzM4OSw3
IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxiYWNr
KGZvbnROYW1lLCBmb250U2l6ZSwgc2VsZWN0aW9uSGFzTXVsdGlwbGVGb250cywgY2FsbGJhY2tJ
RCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9j
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKLXsKLSAgICBpZiAoYXV0byogcGx1
Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAg
ICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihm
bG9hdFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRo
ZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1f
cGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9w
YWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50
KGZsb2F0UG9pbnQpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBOU0RpY3Rpb25h
cnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUocmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKLSAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDog
Jm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBG
b3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb246OkJvdW5jZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRh
dGlvblRyYW5zaXRpb24pCi17Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOwotICAg
IE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAgICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRp
b25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0g
ICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0
aW9uKTsKLX0KIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVu
dFNlbGVjdGlvbigpCi17Ci0gICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
U2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7Ci19Ci0KLURp
Y3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZy
YW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0g
ICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKLSAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKLQotICAgIERpY3Rpb25hcnlQb3B1cEluZm8g
ZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBv
cHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAg
IH0KLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4
dFF1YWRzKHF1YWRzKTsKLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRv
ci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJu
IGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgSW50UmVjdCByYW5nZVJlY3QgPSBm
cmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdC
b3goKSk7Ci0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRh
aW5lcigpLnJlbmRlclN0eWxlKCk7Ci0gICAgZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBz
dHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKLSAg
ICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwg
cmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5v
cHRpb25zID0gb3B0aW9uczsKLQotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVk
U3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJ
bWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRl
ZFN0cmluZyBzdHJpbmddXSk7Ci0KLSAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLQotICAgIFtuc0F0dHJpYnV0ZWRTdHJp
bmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRl
ZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0
cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0
ZXMgbXV0YWJsZUNvcHldKTsKLQotICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmli
dXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChmb250
KQotICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6
ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKLSAgICAgICAgaWYgKGZvbnQp
Ci0gICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNG
b250QXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBh
ZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwotICAgIH1d
OwotCi0gICAgVGV4dEluZGljYXRvck9wdGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRp
Y2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFu
Z2VzOwotICAgIGlmIChwcmVzZW50YXRpb25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpCi0gICAgICAgIGluZGljYXRv
ck9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rp
b25IaWdobGlnaHQ7Ci0KLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9
IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywg
cHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0gICAg
ICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgZGljdGlvbmFyeVBv
cHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwotICAgIGRpY3Rp
b25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmlu
ZzsKLQotICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsK
LSAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLX0KIAogI2lmIEVOQUJMRShQREZLSVRf
UExVR0lOKQogCkBAIC01MzksMTEgKzQ0NCw2IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFn
ZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclNlbGVjdGlvbkluUERGUGx1Z2luKFBERlNlbGVjCiAK
ICNlbmRpZgogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2Uo
RnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVk
aXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogewogICAgIC8vIEZpcnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5j
ZSB0byBoYW5kbGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355112</attachid>
            <date>2018-11-16 13:53:52 -0800</date>
            <delta_ts>2018-11-16 14:07:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116135351.patch</filename>
            <type>text/plain</type>
            <size>74451</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Mjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI0YjI4MTNlNmMwZTcw
MDY2MTU2NTA1NGY3ZTU4ZDZlOTg4Zjk1OS4uNWFmNGZlYjAxN2FiMWJiZWJiYzQ2NzMwODAxZGNk
ODk3ZDczYjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTYg
IFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBodG1s
e2NvbG9yOnRleHR9IHRvIHRoZSBzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0IG9uIG1hY09TLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggYzUyMjE2MTBmY2E2MzdmY2FmYWE4NTgyZjQ3MGE1OWQyMjAz
YzE5Mi4uZTM0ZWFkZTMyYWVkMTA4NmU0YjliN2UwMzdhNDQ3ZjNjZTVmOTEzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxt
ZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBi
ZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGFsL3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICog
cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6CisKIDIwMTgtMTEtMTYgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBSZWdyZXNzaW9uOiBXZWJDb250ZW50IHBy
b2Nlc3MncyBkaXNwbGF5IG5hbWUgaXMgbm8gbG9uZ2VyIHNldApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3MTgzOGJk
NjBiODRlMzI1MDJiZGM4MmY4Njc5ZDA0MWVkZmQxYjRmLi5kYzg2YjFmYzA5YjQyZWZjYzY0Zjk1
MjM4MTYzMzBkOTVmOTRhNzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE4LTExLTE1
ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMb29rdXAgaXMgYmVpbmcgcmVw
bGFjZWQgYnkgUmV2ZWFsLiBUaGlzIGZyYW1ld29yayBzaG91bGQgd29yayBvbiBhbGwgcGxhdGZv
cm1zLgorICAgICAgICBUaGUgcGF0Y2ggbW92ZXMgdGhlIGNvZGUgdGhhdCB3ZSBleHBlY3Qgd2ls
bCBiZSBuZWVkZWQgZm9yIGFsbCBwbGF0Zm9ybXMgdG8gdGhlIG1vcmUKKyAgICAgICAgZ2VuZXJh
bCBjb2NvYSBhcmVhLiBUaGlzIHBhdGNoIGNoYW5nZXMgbm8gZnVuY2F0aW9uYWxpdHksIGFuZCBz
aG91bGQgbm90IGNoYW5nZQorICAgICAgICBhbnl0aGluZyBjdXJyZW50bHkuIFRoaXMgd29yayB3
aWxsIGJlIGJ1aWxkIG9uIGxhdGVyIHdoZW4gUmV2ZWFsIGlzIHJlYWR5IHRvIHN1cHBvcnQKKyAg
ICAgICAgbXVsdGlwbGUgcGxhdGZvcm1zLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldHVw
SW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjbGVhbnVwSW50ZXJhY3Rp
b25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNv
Z25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hZGREZWZhdWx0R2VzdHVyZVJl
Y29nbml6ZXJzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJlY29nbml6ZXI6
c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yUmFuZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1
dG9tYXRpYyBwcm9jZXNzIHByZXdhcm1pbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBpZiBQU09OIGlz
IGVuYWJsZWQgdmlhIGV4cGVyaW1lbnRhbCBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
UEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIxNTUyZGY3Zjc1ZmM1Mzli
Yjg3NTZkMDg0OWI1NGQ2ODY5NTU0MDkuLjE4MjQ3ZDY0YzlkMzAyOTk2MzA1ZmNjNTQ3MjM1YzRj
YjU0MWJlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTQwMiw2ICs0MDIsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERC
QzMxNyAvKiBQYXNzS2l0U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8q
IHB0aHJlYWRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6
Q29yZVNQSS5oICovLAorCQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEku
aCAqLywKIAkJCQk1NzBBQjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJ
CTBDMkRBMTJCMUYzQkVCNDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00
NjcsNyArNDY4LDYgQEAKIAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEku
aCAqLywKIAkJCQlBMTAyNjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8s
CiAJCQkJMEM3Nzg1ODcxRjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAot
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3
NUI0ODFGNkFGRjhFMDBDNEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3
Nzg1ODgxRjQ1MTMwRjAwRjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjcwYmE5
NmQzZmQ4ZmRhODFmMGM1Y2ZkMjYwOTU5MzY2ZTQ2OTA4NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BS
SVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZl
YWxDb3JlKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitT
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50
ZXIuaD4KKyNpbXBvcnQgPFJldmVhbC9SZXZlYWwuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisjaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxDb3Jl
L1JldmVhbENvcmUuaD4KKworI2Vsc2UgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworQGlu
dGVyZmFjZSBSVkl0ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlz
ZWxlY3RlZFJhbmdlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7CitAZW5kCisKK0BpbnRlcmZh
Y2UgUlZTZWxlY3Rpb24gOiBOU09iamVjdAorKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6
KE5TVUludGVnZXIpY2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAq
PiAqKXNlbGVjdGVkUmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVw
ZGF0ZVNlbGVjdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBSVlByZXNlbnRlciA6IE5TT2JqZWN0
CisjaWYgUExBVEZPUk0oTUFDKQorLSAoaWQ8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250
cm9sbGVyPilhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVu
dENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdD
b250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczoo
TlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCistIChCT09M
KXJldmVhbEl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29u
dGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29u
dGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7
CitAZW5kCisKKyNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaAppbmRleCBlYjdmOTUxZjcxYzc1YzgxMjE3
YjIyZTc4YWRhZDMwZTRkNmE1YzA0Li5lMGEzMzc1ZDMwY2M4ODlmMTM1ZWEyYTExZDQ3ZDBkYTk0
Zjk4YTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3Vw
U1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCkBA
IC0yMywxMiArMjMsMTMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKworI2lmIFBMQVRGT1JN
KE1BQykKKwogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9O
U0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW1wb3J0IDx3dGYvU29m
dExpbmtpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKLQogU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLX09QVElPTkFMKExvb2t1cCkKIFNPRlRfTElOS19DTEFTU19PUFRJT05BTChMb29rdXAs
IExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkv
bWFjL1JldmVhbFNQSS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmI4ZGE0MmM4
NTk5MGFlMzJlYTY3YTBhZjc3NTNmM2RiOTgyOGE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZl
YWxTUEkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgPG9iamMvcnVudGltZS5oPgot
I2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQ
SS5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0KLVNPRlRfTElOS19QUklWQVRFX0ZS
QU1FV09SSyhSZXZlYWwpCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsQ29yZSkK
LVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGVyKQotU09GVF9MSU5L
X0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50aW5nQ29udGV4dCkKLVNPRlRfTElOS19D
TEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVkl0ZW0pCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9O
QUwoUmV2ZWFsQ29yZSwgUlZTZWxlY3Rpb24pCi0KLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RL
KQotCi0jaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50ZXIuaD4KLSNpbXBvcnQgPFJldmVhbC9SZXZl
YWwuaD4KLSNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KLSNpbXBvcnQgPFJldmVh
bENvcmUvUmV2ZWFsQ29yZS5oPgotCi0KLSNlbHNlCi0KLUBpbnRlcmZhY2UgUlZJdGVtIDogTlNP
YmplY3QgPE5TU2VjdXJlQ29kaW5nPgotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4dDooTlNT
dHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBOU19ERVNJ
R05BVEVEX0lOSVRJQUxJWkVSOwotQGVuZAotCi1AaW50ZXJmYWNlIFJWU2VsZWN0aW9uIDogTlNP
YmplY3QKLSsgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNsaWNrSW5k
ZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJhbmdlcyBz
aG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAotLSAoaWQ8TlNJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Db250cm9sbGVyPilhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTooUlZJ
dGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRD
b250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGlu
Z0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKLS0gKEJPT0wpcmV2ZWFs
SXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICop
ZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICop
cHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKLUBlbmQK
LQotI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggY2I2ZGVjYjE3YzFlMGUyZWE1NzdkMjQyODZlNjYzNWRjNzJmNjk3Ny4uNDRhYWNi
YTIxZDMzMDQ4OWVjZDU0NjkxZDIzMTI0M2Q4MTU5MTgzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC04NCw2ICs4NCw3IEBAIGVkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNwcAog
ZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKIAogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCitlZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KIGVkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW0KIGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbQog
ZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCkBAIC05Nyw3ICs5OCw2IEBAIGVk
aXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCiBlZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KIAogZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tCi1lZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVn
YWN5Lm1tCiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KIGVkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0
aW9uTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggODgwY2ZjNGY2MTFiOTQwMTI4MDFmNmRkZjgwNmI3MzRkNjkwNmI4ZC4u
NmI0ZDYyMDA0ZTc3NGQ1M2UxMGMxYzA4ZmNmNjU2ODczMmNhYjlmYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjA0MTksNiAr
MjA0MTksNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQzUyMjdERUYxQzNDNkRENzAwRjVFRDU0
IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKIAkJCQlDNTIyN0RGMDFDM0M2REQ3MDBGNUVENTQgLyog
RGF0YURldGVjdGlvbi5tbSAqLywKKwkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJBMzEgLyogRGlj
dGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk5QjU1RUVFODFCM0U4ODk4MDA1MzQyQkMgLyogRWRp
dG9yQ29jb2EubW0gKi8sCiAJCQkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRDQTcyIC8qIEZvbnRBdHRy
aWJ1dGVDaGFuZ2VzQ29jb2EubW0gKi8sCiAJCQkJRjQ4RDJBNzUyMTU2RkU1NzAwQzY3NTJCIC8q
IEZvbnRBdHRyaWJ1dGVzQ29jb2EubW0gKi8sCkBAIC0yNjE0MCw3ICsyNjE0MSw2IEBACiAJCQkJ
Q0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5o
ICovLAogCQkJCUNFN0IyREIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXIubW0gKi8sCiAJCQkJOTM3RkYzRDQxQTEwMTJENjAwOEVCQTMxIC8qIERpY3Rpb25h
cnlMb29rdXAuaCAqLywKLQkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJBMzEgLyogRGljdGlvbmFy
eUxvb2t1cC5tbSAqLywKIAkJCQk0NDI5NTZDQTIxOEE2RDMwMDA4MERCNTQgLyogRGljdGlvbmFy
eUxvb2t1cExlZ2FjeS5tbSAqLywKIAkJCQlFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRp
dG9yTWFjLm1tICovLAogCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBGcmFtZVNlbGVj
dGlvbk1hYy5tbSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlv
bmFyeUxvb2t1cC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2E0N2FjYTM0YzVlYTU5YTg3MDgzYzYzYTdmZGM2
MDZmN2E1ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0wLDAgKzEsNDI0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3Rpb25hcnlMb29rdXAuaCIKKworI2lm
IFBMQVRGT1JNKENPQ09BKQorCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiRWRpdGlu
Zy5oIgorI2ltcG9ydCAiRm9jdXNDb250cm9sbGVyLmgiCisjaW1wb3J0ICJGcmFtZS5oIgorI2lt
cG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbXBv
cnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0
ICJQYWdlLmgiCisjaW1wb3J0ICJSYW5nZS5oIgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisj
aW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKKyNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgorI2lt
cG9ydCAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCisjaW1w
b3J0IDxQREZLaXQvUERGS2l0Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1JldmVhbFNQSS5o
PgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tP
YmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFJF
VkVBTCkKKworI2lmIFBMQVRGT1JNKE1BQykKKworQGludGVyZmFjZSBXZWJSZXZlYWxIaWdobGln
aHQgPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmplY3QgeworQHByaXZhdGUK
KyAgICBGdW5jdGlvbjx2b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7CisgICAgTlNSZWN0IF9o
aWdobGlnaHRSZWN0OworICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGlnaHQ7CisgICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICpfYXR0cmlidXRlZFN0cmluZzsKK30KKworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgQk9PTCB1c2VEZWZhdWx0SGlnaGxpZ2h0OworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0
IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVk
U3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZzsKKy0gKHZvaWQp
c2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNh
dG9yOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxIaWdobGlnaHQKKworQHN5
bnRoZXNpemUgaGlnaGxpZ2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKK0BzeW50aGVzaXplIHVzZURl
ZmF1bHRIaWdobGlnaHQ9X3VzZURlZmF1bHRIaWdobGlnaHQ7CitAc3ludGhlc2l6ZSBhdHRyaWJ1
dGVkU3RyaW5nPV9hdHRyaWJ1dGVkU3RyaW5nOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhI
aWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihC
T09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3Ry
aW5nICopIGF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfaGlnaGxpZ2h0UmVjdCA9IGhpZ2hs
aWdodFJlY3Q7CisgICAgX3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VEZWZhdWx0SGlnaGxpZ2h0
OworICAgIF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZzsKKyAgICAKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9u
PHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3IKK3sKKyAgICBfY2xlYXJUZXh0SW5kaWNhdG9y
ID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpOworfQorCistIChOU0FycmF5PE5TVmFsdWUg
Kj4gKilyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCByZWN0c0Zv
ckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAg
VU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBAW1tOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6
c2VsZi5oaWdobGlnaHRSZWN0XV07Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVz
ZW50aW5nQ29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQor
eworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICAKKyAgICBmb3IgKE5TVmFsdWUgKnJlY3RW
YWwgaW4gY29udGV4dC5pdGVtUmVjdHNJblZpZXcpIHsKKyAgICAgICAgTlNSZWN0IHJlY3QgPSBy
ZWN0VmFsLnJlY3RWYWx1ZTsKKworICAgICAgICAvLyBHZXQgY3VycmVudCBmb250IGF0dHJpYnV0
ZXMgZnJvbSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBhZGQgcGFyYWdyYXBoIHN0
eWxlIGF0dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50ZXIgdGV4dC4KKyAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcg
Zm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxmLmF0dHJpYnV0ZWRTdHJp
bmcgbGVuZ3RoXSldXSk7CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHls
ZT4gcGFyYWdyYXBoID0gYWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBp
bml0XSk7CisgICAgICAgIFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudENl
bnRlcl07CisgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJhZ3JhcGguZ2V0KCkgZm9y
S2V5Ok5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKKyAgICAKKyAgICAgICAgUmV0YWlu
UHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBzdHJpbmdd
IGF0dHJpYnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0pOworICAgICAgICBbc3RyaW5nIGRyYXdJblJl
Y3Q6cmVjdF07CisgICAgfQorfQorCistIChCT09MKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGlu
Z0NvbnRleHQgKiljb250ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGlnaHRGb3JJdGVtOihSVkl0
ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJB
TShpdGVtKTsKKyAgICByZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxpZ2h0OworfQorCistICh2
b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdo
bGlnaHRpbmdJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICBhdXRvIGJsb2NrID0gV1RGTW92ZShfY2xl
YXJUZXh0SW5kaWNhdG9yKTsKKyAgICBpZiAoYmxvY2spCisgICAgICAgIGJsb2NrKCk7Cit9CisK
K0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworI2VuZGlmIC8vIEVOQUJMRShSRVZF
QUwpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShSRVZFQUwpCisKK3N0ZDo6
dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJh
bmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1D
bGFzcygpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRv
IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAo
IXNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAg
Ly8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQg
dG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0g
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0
aW9uLnZpc2libGVFbmQoKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1
c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KKyAgICBhdXRvIHBhcmFncmFw
aFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworCisgICAgaW50IGxlbmd0
aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAgICBpbnQgbGVuZ3RoVG9T
ZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9
IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5k
IC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBmdWxs
Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7
CisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdl
dCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1J
bnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bh
c3NdKTsKKyAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRS
YW5nZTsKKyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hh
cmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5n
dGgpLCBuaWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAor
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5n
ZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3Vs
dChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAg
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1dG8qIG5vZGUgPSBoaXRU
ZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRv
KiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5n
IGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgYXV0byBmcmFtZVBv
aW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3Np
dGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOworICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAg
ICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7CisKKyAg
ICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIE5TUmFuZ2Ugc2Vs
ZWN0aW9uUmFuZ2U7CisgICAgaW50IGhpdEluZGV4OworICAgIFJlZlB0cjxSYW5nZT4gZnVsbENo
YXJhY3RlclJhbmdlOworICAgIAorICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09
IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2VsZWN0
aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgICAgIGF1dG8gc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFz
IGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMg
b2YgdGV4dC4KKyAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uU3RhcnQpOworICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdy
YXBoKHNlbGVjdGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rp
b25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOworICAg
ICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBt
YWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAgICAgIAorICAgICAg
ICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
cmFuZ2VUb1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCht
YWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKKyAgICAgICAg
CisgICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRp
b24gfTsKKyAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2lu
Z0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0
aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOworICAgICAgICAvLyBBcyBjb250ZXh0
LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBh
ZnRlciB0aGUgcG9pbnQuCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5k
ZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIHsgbnVs
bHB0ciwgbmlsIH07CisgICAgICAgIAorICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJh
bmdlKE5TTm90Rm91bmQsIDApOworICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBw
b3NpdGlvbikuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2Ug
PSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxl
Y3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hv
dWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07CisgICAgCisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBw
bGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJdGVt
PiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVt
U3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOworICAgIE5TUmFuZ2UgaGlnaGxp
Z2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworCisgICAgaWYgKGhpZ2hsaWdo
dFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgcmV0dXJuIHsgVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5s
b2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
KyAgICAKK30KKworc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNl
bGVjdGlvbiAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQs
IE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFj
dGVyc0FkZGVkQWZ0ZXJFbmQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
CisgICAgc2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7Cisg
ICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1Rv
RXhwYW5kXTsKKyAgICAKKyAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlv
bi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7CisgICAgCisgICAgW3NlbGVjdGlvbiBl
eHRlbmRTZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07CisgICAgY2hh
cmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFs
TGVuZ3RoIC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7CisKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworfQorCitzdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAq
PiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpz
ZWxlY3Rpb24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAg
IGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
CisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQg
dGhlIHBvaW50LgorICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKKworICAgIFJldGFpblB0cjxQREZTZWxl
Y3Rpb24+IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7CisK
KyAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9m
IHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCisgICAgYXV0byBvcmlnaW5hbExlbmd0
aCA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7CisgICAgTlNJbnRlZ2VyIGNo
YXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0Fk
ZGVkQWZ0ZXJFbmQgPSAwOworICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rp
b25Gb3JMb29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJh
Y3RlcnNBZGRlZEFmdGVyRW5kKTsKKworICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtz
ZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXTsKKyAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtl
UmFuZ2UoY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOworCisgICAgUmV0YWluUHRyPFJW
SXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6
ZnVsbFBsYWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7CisgICAgTlNS
YW5nZSBleHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisgICAgCisg
ICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJl
dHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgTlNJbnRlZ2VyIGxvb2t1cEFk
ZGVkQmVmb3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlv
bjsKKyAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2Nh
dGlvbiArIGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBv
cmlnaW5hbExlbmd0aCk7CisKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6
bG9va3VwQWRkZWRCZWZvcmVdOworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6
bG9va3VwQWRkZWRBZnRlcl07CisKKyAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVh
bFRvU3RyaW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0
ZWRSYW5nZV1dKTsKKyAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4geyBAIiIsIG5pbCB9Owor
fQorCitzdGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9u
Q29udHJvbGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25h
cnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RG
OjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRp
b25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJv
b3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBj
bGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
ICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkg
fHwgIWdldFJWUHJlc2VudGVyQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgaWYgKE5TRGljdGlvbmFyeSAq
b3B0aW9ucyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKKyAgICAgICAgW211
dGFibGVPcHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKKworICAgIGF1
dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJ
bmZvLnRleHRJbmRpY2F0b3IpOworICAgIAorICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJl
c2VudGVyID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOworICAg
IAorICAgIE5TUmVjdCBoaWdobGlnaHRSZWN0OworICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9u
OworICAgIAorICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7Cisg
ICAgICAgIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdl
dCgpKTsKKworICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVz
ID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVz
KClbMF07CisgICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0
ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMoKTsKKyAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nv
b3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzKCk7CisgICAgICAgIAorICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJz
aW9uQ2FsbGJhY2spIHsKKyAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGlu
YXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJ
blZpZXdDb29yZGluYXRlcyk7CisgICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZp
ZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlv
bkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdS
ZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7CisgICAgICAgIGhpZ2hsaWdodFJlY3Qg
PSBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKKyAgICAgICAgcG9pbnRl
ckxvY2F0aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7Cisg
ICAgICAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2lu
ID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW47CisgICAgICAgIAorICAgICAgICBoaWdobGln
aHRSZWN0ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cygpOworICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJh
c2VsaW5lT3JpZ2luIHRvVmlldzpuaWxdOworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8V2Vi
UmV2ZWFsSGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hs
aWdodCBhbGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1
bHRIaWdobGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRl
ZFN0cmluZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKKyAg
ICBSZXRhaW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9j
UlZQcmVzZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZp
ZXc6cG9pbnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlBy
ZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7CisgICAgCisg
ICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2Uo
KSBpbml0V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgp
LnN0cmluZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7CisgICAgCisgICAgW3dl
YkhpZ2hsaWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUo
d2ViSGlnaGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRp
Y2F0b3IpXSB7CisgICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCisgICAgICAgICAgICBj
bGVhclRleHRJbmRpY2F0b3IoKTsKKyAgICB9XTsKKyAgICAKKyAgICBpZiAoY3JlYXRlQW5pbWF0
aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJv
bGxlckZvckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250
ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRl
bTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4
dC5nZXQoKSBvcHRpb25zOm5pbF07CisgICAgcmV0dXJuIG5pbDsKKyAgICAKKyNlbHNlIC8vIFBM
QVRGT1JNKE1BQykKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oY3JlYXRlQW5pbWF0aW9uQ29udHJv
bGxlcik7CisgICAgVU5VU0VEX1BBUkFNKGRpY3Rpb25hcnlQb3B1cEluZm8pOworICAgIFVOVVNF
RF9QQVJBTSh2aWV3KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dEluZGljYXRvckluc3RhbGxhdGlv
bkNhbGxiYWNrKTsKKyAgICBVTlVTRURfUEFSQU0ocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2spOworICAgIFVOVVNFRF9QQVJBTShjbGVhclRleHRJbmRpY2F0b3IpOworICAgIAorICAg
IHJldHVybiBuaWw7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgCit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6c2hv
d1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5T
VmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRl
eHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9h
dFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgc2hvd1BvcHVw
T3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2
aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQorCit2b2lk
IERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworI2lmIFBMQVRGT1JNKE1BQykKKworV0tSZXZlYWxDb250cm9sbGVyIERpY3Rpb25hcnlM
b29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJ
bmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rp
b248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJh
Y2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1Rv
Vmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0
SW5kaWNhdG9yKQoreworICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRy
b2xsZXIodHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3Rh
bGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92
ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwor
I2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBO
U0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpCit7CisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisK
K3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKQoreworICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFJFVkVBTCkKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29h
Lm1tCmluZGV4IGU0YjkwYmRmMjcwNTJiMDMyZjlhM2NlNDMzNTQzZDFmODc3ODRmNjcuLjg1YzQy
NzQxYWJhZDc1N2RkMTBmZTRhNmQ0M2YxYmJhNzNkZmY2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCkBAIC0zNCw2
ICszNCw4IEBACiAjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVu
dC5oIgogI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbXBvcnQgIkVkaXRvci5oIgorI2lt
cG9ydCAiRWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJGaWxlLmgiCiAjaW1wb3J0ICJGaWxlU3lz
dGVtLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cC5oCmluZGV4IGNiNmQ1M2ViOGY4YzRjZmQzODk0NTdmNWJlYWUyODNh
MzdkYTgxOTIuLmY4Zjc2MWNkYzgxYWViZDNkZjA4ODM3YTMyMzFjMDhmMzVhNGZlYjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKQEAgLTIzLDE1
ICsyMywyNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
ZiBQTEFURk9STShNQUMpCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKENPQ09BKQogCiAj
aW5jbHVkZSAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgotI2luY2x1ZGUgPHBhbC9zcGkvbWFjL05T
SW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNpZiBQTEFURk9STShNQUMp
CisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
U1BJLmg+CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgogCiBPQkpDX0NMQVNTIE5TVmlldzsKIE9CSkNfQ0xBU1MgUERGU2VsZWN0aW9uOwogCisjaWYg
UExBVEZPUk0oTUFDKQordHlwZWRlZiBpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250
cm9sbGVyPiBXS1JldmVhbENvbnRyb2xsZXI7CisjZWxzZQordHlwZWRlZiBpZCBXS1JldmVhbENv
bnRyb2xsZXI7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC00OCw4ICs1OCwxMSBAQCBwdWJsaWM6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBv
cHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRv
ciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0
aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJh
Y2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3Ig
PSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBoaWRlUG9wdXAoKTsK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRp
b25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFy
eVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGlj
YXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0
b3IgPSBudWxscHRyKTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAo
Y29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9u
PHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNr
LCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1Zp
ZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBj
bGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisg
ICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2U5ZTQ0NzRhNDlmY2M5YjA5NWIyZjRiZGE2YzlhZTNmMzhjZmU0Ny4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzg4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRGljdGlvbmFy
eUxvb2t1cC5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVWRUFMKQotCi0jaW1w
b3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRWRpdGluZy5oIgotI2ltcG9ydCAiRm9jdXNDb250
cm9sbGVyLmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIK
LSNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKLSNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKLSNp
bXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlJhbmdlLmgiCi0jaW1wb3J0ICJSZW5kZXJPYmplY3Qu
aCIKLSNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgotI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgi
Ci0jaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIK
LSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQ
SS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2du
aXplclNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg+Ci0jaW1wb3J0IDx3
dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgotCi1AaW50
ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4g
OiBOU09iamVjdCB7Ci1AcHJpdmF0ZQotICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFyVGV4dElu
ZGljYXRvcjsKLSAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7Ci0gICAgQk9PTCBfdXNlRGVmYXVs
dEhpZ2hsaWdodDsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3RyaW5nOwot
fQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBoaWdobGlnaHRSZWN0
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURlZmF1bHRIaWdobGln
aHQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVj
dDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZh
dWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRy
aWJ1dGVkU3RyaW5nOwotLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZv
aWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdl
YlJldmVhbEhpZ2hsaWdodAotCi1Ac3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdobGlnaHRS
ZWN0OwotQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhpZ2hsaWdo
dDsKLUBzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0
IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVk
U3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZwotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAg
IF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKLSAgICBfdXNlRGVmYXVsdEhpZ2hsaWdo
dCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1
dGVkU3RyaW5nOwotICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENsZWFy
VGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcgotewot
ICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcik7Ci19
Ci0KLS0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0Nv
bnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNF
RF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgcmV0dXJuIEBb
W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsKLX0KLQotLSAodm9p
ZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVjdHNG
b3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIAot
ICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0c0luVmlldykgewot
ICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOwotCi0gICAgICAgIC8vIEdl
dCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBhYm92
ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVyIHRvIGNlbnRlciB0
ZXh0LgotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9
IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6
W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKLSAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNNdXRhYmxl
UGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3BhcmFncmFwaCBzZXRBbGln
bm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKLSAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2Jq
ZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVd
OwotICAgIAotICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcgPSBh
ZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbc2VsZi5h
dHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVzLmdldCgpXSk7Ci0g
ICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKLSAgICB9Ci19Ci0KLS0gKEJPT0wpcmV2
ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hvdWxkVXNlRGVmYXVs
dEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIHJldHVybiBzZWxmLnVzZURlZmF1
bHRIaWdobGlnaHQ7Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29u
dGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAg
ICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIGF1
dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOwotICAgIGlmIChibG9jaykK
LSAgICAgICAgYmxvY2soKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6
OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKLXsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0
ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICBh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBp
ZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0g
ICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5l
ZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KLSAgICBhdXRvIHNlbGVjdGlvblN0YXJ0
ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKTsKLQotICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0
byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICBhdXRvIHBhcmFn
cmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgYXV0byBw
YXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwotCi0gICAgaW50IGxl
bmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5n
ZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3Ro
VG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJh
Z3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFz
cyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9u
RW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiBm
dWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVu
ZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdl
LmdldCgpKTsKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0
ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VU
b1Bhc3NdKTsKLSAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGln
aHRSYW5nZTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxs
Q2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5s
ZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAg
IAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotfQotCi1zdGQ6OnR1cGxlPFJlZlB0cjxS
YW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJl
c3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQotewotICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0g
ICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8qIG5vZGUgPSBo
aXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICBh
dXRvKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERvbid0IGRvIGFueXRo
aW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0gICAgYXV0byBmcmFt
ZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7Ci0g
ICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKLSAgICAgICAgcmV0dXJu
IHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQ
b3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkK
LSAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7Ci0K
LSAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIE5TUmFuZ2Ug
c2VsZWN0aW9uUmFuZ2U7Ci0gICAgaW50IGhpdEluZGV4OwotICAgIFJlZlB0cjxSYW5nZT4gZnVs
bENoYXJhY3RlclJhbmdlOwotICAgIAotICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgp
ID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGF1dG8gc2Vs
ZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAgIGF1dG8gc2Vs
ZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFw
aHMgb2YgdGV4dC4KLSAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3Jh
cGgoc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFy
YWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlVG9TZWxl
Y3Rpb25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOwot
ICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAotICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2Ug
PSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Ci0gICAgICAgIAotICAg
ICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgocmFuZ2VUb1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChtYWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKLSAgICAg
ICAgCi0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9z
aXRpb24gfTsKLSAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRV
c2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7Ci0gICAgICAgIHBvc2l0aW9uID0gc2Vs
ZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOwotICAgICAgICAvLyBBcyBjb250
ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFu
ZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhw
YW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci0gICAgICAgIAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigp
LCBwb3NpdGlvbikuZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBOU1JhbmdlIHNlbGVjdGVkUmFu
Z2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBz
ZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0g
c2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07Ci0gICAgCi0gICAgU3RyaW5nIGl0ZW1TdHJpbmcg
PSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8UlZJ
dGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpp
dGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOwotICAgIE5TUmFuZ2UgaGln
aGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotCi0gICAgaWYgKGhpZ2hs
aWdodFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAgcmV0dXJuIHsg
VGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5n
ZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCi0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKLSAgICAKLX0KLQotc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBE
RlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBh
bmQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hh
cmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotCi0gICAgc2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7
Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVy
c1RvRXhwYW5kXTsKLSAgICAKLSAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVj
dGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7Ci0gICAgCi0gICAgW3NlbGVjdGlv
biBleHRlbmRTZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07Ci0gICAg
Y2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdp
bmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7Ci0KLSAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotfQotCi1zdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFy
eSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9u
ICpzZWxlY3Rpb24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAot
ICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmls
IH07Ci0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIg
YXQgdGhlIHBvaW50LgotICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKLQotICAgIFJldGFpblB0cjxQREZT
ZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7
Ci0KLSAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJz
IG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgYXV0byBvcmlnaW5hbExl
bmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7Ci0gICAgTlNJbnRlZ2Vy
IGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVy
c0FkZGVkQWZ0ZXJFbmQgPSAwOwotICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxl
Y3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNo
YXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsKLQotICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9
IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXTsKLSAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNN
YWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOwotCi0gICAgUmV0YWluUHRy
PFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRl
eHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7Ci0gICAg
TlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0gICAg
Ci0gICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCi0gICAgICAg
IHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgTlNJbnRlZ2VyIGxvb2t1
cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2Nh
dGlvbjsKLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5s
b2NhdGlvbiArIGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24g
KyBvcmlnaW5hbExlbmd0aCk7Ci0KLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3Rh
cnQ6bG9va3VwQWRkZWRCZWZvcmVdOwotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRF
bmQ6bG9va3VwQWRkZWRBZnRlcl07Ci0KLSAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNF
cXVhbFRvU3RyaW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRy
YWN0ZWRSYW5nZV1dKTsKLSAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKLQot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4geyBAIiIsIG5pbCB9
OwotfQotCi1zdGF0aWMgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4g
c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9u
Q29udHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5m
bywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYp
PiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9u
PEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ss
IFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygp
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25h
cnk+IG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRdKTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGljdGlvbmFyeVBvcHVw
SW5mby5vcHRpb25zLmdldCgpKQotICAgICAgICBbbXV0YWJsZU9wdGlvbnMgYWRkRW50cmllc0Zy
b21EaWN0aW9uYXJ5Om9wdGlvbnNdOwotCi0gICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dElu
ZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvcik7Ci0gICAg
Ci0gICAgUmV0YWluUHRyPFJWUHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY1JW
UHJlc2VudGVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgCi0gICAgTlNSZWN0IGhpZ2hsaWdodFJl
Y3Q7Ci0gICAgTlNQb2ludCBwb2ludGVyTG9jYXRpb247Ci0gICAgCi0gICAgaWYgKHRleHRJbmRp
Y2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkpIHsKLSAgICAgICAgdGV4dEluZGljYXRvckluc3Rh
bGxhdGlvbkNhbGxiYWNrKHRleHRJbmRpY2F0b3IuZ2V0KCkpOwotCi0gICAgICAgIEZsb2F0UmVj
dCBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKVswXTsKLSAgICAgICAgRmxvYXRSZWN0
IHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCku
dGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAgICAgICBGbG9hdFJl
Y3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9y
LmdldCgpLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykgewotICAgICAgICAg
ICAgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252
ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAg
ICAgICAgIHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRp
bmF0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaXJzdFRleHRSZWN0SW5WaWV3
Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcy5sb2Nh
dGlvbigpKTsKLSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5kaW5nUmVjdElu
Vmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBmaXJzdFRleHRSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAg
ICAgICAgTlNQb2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9y
aWdpbjsKLSAgICAgICAgCi0gICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5kaWNhdG9yLT5z
ZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAgIHBvaW50ZXJMb2Nh
dGlvbiA9IFt2aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07
Ci0gICAgfQotICAgIAotICAgIFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+IHdlYkhpZ2hs
aWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aEhpZ2hs
aWdodFJlY3Q6IGhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4dEluZGljYXRv
ci5nZXQoKS5jb250ZW50SW1hZ2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25hcnlQb3B1cElu
Zm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKV0pOwotICAgIFJldGFpblB0cjxSVlByZXNlbnRpbmdD
b250ZXh0PiBjb250ZXh0ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdDb250ZXh0SW5zdGFu
Y2UoKSBpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9jYXRpb24gaW5WaWV3
OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+
KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVt
ID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpkaWN0aW9uYXJ5
UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVkUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgMCldKTsKLSAgICAKLSAgICBbd2ViSGlnaGxpZ2h0IHNldENsZWFyVGV4dElu
ZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBjbGVhclRleHRJ
bmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcildIHsKLSAgICAgICAgaWYgKGNs
ZWFyVGV4dEluZGljYXRvcikKLSAgICAgICAgICAgIGNsZWFyVGV4dEluZGljYXRvcigpOwotICAg
IH1dOwotICAgIAotICAgIGlmIChjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICBy
ZXR1cm4gW3ByZXNlbnRlciBhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTppdGVtLmdldCgpIGRv
Y3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25z
Om5pbF07Ci0gICAgW3ByZXNlbnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250
ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAg
ICByZXR1cm4gbmlsOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1
cm4gbmlsOwotfQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cChjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0
IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFs
bGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+
JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9u
Q29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRv
ckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywg
V1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKLX0KLQotdm9pZCBEaWN0aW9uYXJ5TG9va3Vw
OjpoaWRlUG9wdXAoKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAg
IGlmICghZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFtnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpIGhpZGVEZWZpbml0aW9u
XTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLWlkIDxOU0ltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IERpY3Rpb25hcnlMb29rdXA6OmFuaW1hdGlvbkNv
bnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9w
dXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNh
dG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVu
Y3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAg
IHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIodHJ1ZSwgZGljdGlv
bmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBy
b290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0
b3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJ
LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCA5ZWVm
Yjk3ODRmYmU2ODliMDkwYTViMDFmY2VlY2U3MGQ2NTQxMzJkLi4xOTU1ZDYyZDQwYjFkODZlNGRk
NTEwZWIxNDg4NjFkNGJkYTY5NzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L3NwaS9pb3MvVUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3Mv
VUlLaXRTUEkuaApAQCAtNzM1LDYgKzczNSw5IEBAIHN0cnVjdCBfVUlXZWJUb3VjaEV2ZW50IHsK
ICAgICBib29sIGlzUG90ZW50aWFsVGFwOwogfTsKIAorQGludGVyZmFjZSBfVUlMb29rdXBHZXN0
dXJlUmVjb2duaXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIKK0BlbmQKKwogQGNsYXNzIFVJV2Vi
VG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplcjsKIAogQHByb3RvY29sIFVJV2ViVG91Y2hFdmVu
dHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlIDxOU09iamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KaW5kZXggZjU2ODc1ZGZm
M2ExY2M0NWViZWU2MTcyMTVjZTk1NzIzZjUzZGU0ZS4uNjVhZWNkOTIxOTJmZTY2NjFmMWJhYTQy
ZDM0MDc4NmNlNGQxZDUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlBhZ2VD
bGllbnQuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1NQSS5oIgogI2ltcG9ydCAiU2FmZUJyb3dz
aW5nV2FybmluZy5oIgorI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQ
cm9jZXNzUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0l0ZW0uaD4KICNpbXBvcnQgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTE4OSw1ICsxOTAsMjEgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnBsYXRmb3JtQ2xvbmVBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYgZnJv
bUF0dGFjaG1lbnQKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisg
ICAgCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmICghaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlE
KTsKK30KIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJy
ZW50U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7CiB9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5oCmluZGV4IGM0OGMzOWQ2NmRjMTM5NjQyMDU2NTRiOWQ1
NDBmMGY2ODc4ODQyMGEuLjlkYzM5MDhjYjEwNzYwYmU4MjRhNTljY2ZiZTZmOTMzYjc4ZmJmNTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLmgKQEAgLTg3LDYgKzg3LDcgQEAgY2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KIAorQGNsYXNzIF9VSUxvb2t1
cEdlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIF9VSUhpZ2hsaWdodFZpZXc7CiBAY2xhc3MgX1VJ
V2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xhc3MgVUlIb3Zlckdl
c3R1cmVSZWNvZ25pemVyOwpAQCAtMjE0LDYgKzIxNSw3IEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0
aW9uRGF0YSB7CiAKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgUmV0YWluUHRyPFVJSG92ZXJH
ZXN0dXJlUmVjb2duaXplcj4gX2hvdmVyR2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRy
PF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyPiBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXI7CiAj
ZW5kaWYKIAogICAgIFJldGFpblB0cjxVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50PiBfdGV4
dFNlbGVjdGlvbkFzc2lzdGFudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDIxZDMxNzcwMDZiMWM2ZGYw
MTZiYWJmM2UwYzM2YTczODg0MmEwOTIuLjI3Nzc1MDg0ZWU5MjRkYWZkMDU1MDY5ZmY3ZWIzZDc3
ZDQ5OTcxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMTEyLDYgKzExMiw3IEBACiAjaWYgUExBVEZP
Uk0oSU9TTUFDKQogI2ltcG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2ltcG9ydCA8VUlL
aXQvVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9fVUlMb29rdXBH
ZXN0dXJlUmVjb2duaXplci5oPgogI2ltcG9ydCA8cGFsL3NwaS9pb3MvR3JhcGhpY3NTZXJ2aWNl
c1NQSS5oPgogI2VuZGlmCiAKQEAgLTY0OSw2ICs2NTAsMTEgQEAgLSAodm9pZClzZXR1cEludGVy
YWN0aW9uCiAgICAgX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlIb3Zlckdl
c3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0
b3IoX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOildKTsKICAgICBbX2hvdmVyR2VzdHVy
ZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29n
bml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAorICAgIF9sb29rdXBH
ZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBh
bGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9sb29rdXBHZXN0dXJl
UmVjb2duaXplZDopXSk7CisgICAgW19sb29rdXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0
ZTpzZWxmXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJl
Y29nbml6ZXIuZ2V0KCldOworICAgIAogI2VuZGlmCiAKICAgICBfc2luZ2xlVGFwR2VzdHVyZVJl
Y29nbml6ZXIgPSBhZG9wdE5TKFtbV0tTeW50aGV0aWNDbGlja1RhcEdlc3R1cmVSZWNvZ25pemVy
IGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NpbmdsZVRhcENv
bW1pdGVkOildKTsKQEAgLTc1Myw2ICs3NTksOSBAQCAtICh2b2lkKWNsZWFudXBJbnRlcmFjdGlv
bgogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0
RGVsZWdhdGU6bmlsXTsKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJH
ZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCisgICAgW19sb29rdXBHZXN0dXJlUmVjb2du
aXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVy
Ol9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIAogICAgIFtfc2luZ2xl
VGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKQEAgLTgzNiw2ICs4NDUsNyBA
QCAtICh2b2lkKV9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgcmVt
b3ZlR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclNpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJl
Y29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtzZWxmIHJlbW92
ZUdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5k
aWYKIH0KIApAQCAtODUwLDYgKzg2MCw3IEBAIC0gKHZvaWQpX2FkZERlZmF1bHRHZXN0dXJlUmVj
b2duaXplcnMKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfdHdvRmluZ2VyU2luZ2xl
VGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBb
c2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07
CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKICNlbmRpZgogfQogCkBAIC0xNDUwLDYgKzE0NjEsMTAgQEAgLSAoQk9PTClnZXN0
dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyIHNo
b3VsZFJlY29nbmkKIAogICAgIGlmIChbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpb
VUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gfHwgW290aGVyR2VzdHVyZVJlY29nbml6
ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0pCiAgICAg
ICAgIHJldHVybiBZRVM7CisgICAgCisgICAgaWYgKChbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5k
T2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAmJiBbb3RoZXJHZXN0
dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
IGNsYXNzXV0pIHx8IChbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUxv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gJiYgW2dlc3R1cmVSZWNvZ25pemVyIGlz
S2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0pKQorICAgICAg
ICByZXR1cm4gWUVTOworCiAjZW5kaWYKICAgICBpZiAoaXNTYW1lUGFpcihnZXN0dXJlUmVjb2du
aXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXplciwgX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyLmdldCgpLCBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKS5mb3JjZVByZXNz
R2VzdHVyZSkpCiAgICAgICAgIHJldHVybiBZRVM7CkBAIC02MDMzLDYgKzYwNDgsMTIgQEAgLSAo
Qk9PTClhbGxvd3NEaWN0YXRpb25JbnB1dEZvckxpc3RWaWV3Q29udHJvbGxlcjooUFVJQ1F1aWNr
Ym9hcmRWaWV3Q29udHJvbGxlcgogI2VuZGlmIC8vIFBMQVRGT1JNKFdBVENIT1MpCiAKICNpZiBQ
TEFURk9STShJT1NNQUMpCistICh2b2lkKV9sb29rdXBHZXN0dXJlUmVjb2duaXplZDooVUlHZXN0
dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgTlNQb2ludCBsb2NhdGlv
bkluVmlld0Nvb3JkaW5hdGVzID0gW2dlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uSW5WaWV3OnNl
bGZdOworICAgIF9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oV2ViQ29y
ZTo6RmxvYXRQb2ludChsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzKSk7Cit9CisKIC0gKHZvaWQp
X2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2Vz
dHVyZVJlY29nbml6ZXIKIHsKICAgICBpZiAoIV9wYWdlLT5pc1ZhbGlkKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBkYzgwMjgzNmRk
NjBlODQyZGFhMTNhZjQ0NGIyZjc5NzkyMjIwNDkwLi5kOTk4YmI1NjJlYTY3MzQ2YzMxYjMzMDgz
M2YyYmMyZmIwZjk2ZmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW0KQEAgLTEyMSwxMSArMTIxLDYgQEAgYm9vbCBXZWJQYWdlUHJveHk6OnJl
YWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZUNhbGxiYWNrKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVT
dGF0ZSwgdWludDMyX3QgZmxhZ3MsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBhdXRv
IGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxHZXN0dXJlQ2FsbGJhY2s+KGNhbGxiYWNrSUQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5k
ZXggMTVjN2Q3NjE1MzYyMzRiNmJjY2JhMGZkZjNiZDdjNjBhOTZjM2VmMi4uYmJkODc5OTk5MTI0
MDAzNzQ5ZDAyZjNkNDM4OTM4NGQwZDI2MmNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC0zMjMsMjIgKzMyMyw2IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBTCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50
KQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKHBvaW50KSwgbV9wYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQotewotICAgIGlmICghaXNWYWxpZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKSwgbV9wYWdlSUQp
OwotfQotCiAvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1Zy1pbnMuCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCBwbHVn
aW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW0KaW5kZXggM2U3OTQzMWY5MzcxMTRjNDFmOWQyZGZkNThlMGI0ZjcyMTgxNTlh
Ni4uYTM4Y2QyYmY2Mzc5NGM4ZTlmMWQyMTJhM2U3OGIzZThjNGVmOGM2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bQpAQCAtMjYsOSArMjYsMjAgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiV2ViUGFn
ZS5oIgogCisKICNpbXBvcnQgIkxvYWRQYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3
LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9E
aWN0aW9uYXJ5TG9va3VwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVy
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
SGl0VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob2RlUmVuZGVyU3R5bGUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+
CiAKICNpZiBQTEFURk9STShDT0NPQSkKIApAQCAtNTksNiArNzAsMTE0IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok5vd1BsYXlpbmdJbmZvQ2Fs
bGJhY2soaGFzQWN0aXZlU2Vzc2lvbiwgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9u
LCB0aXRsZSwgZHVyYXRpb24sIGVsYXBzZWRUaW1lLCB1bmlxdWVJZGVudGlmaWVyLCBjYWxsYmFj
a0lEKSk7CiB9CisgICAgCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRM
b2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQoreworICAgIGlmIChhdXRvKiBw
bHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKSkgewor
ICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KGZsb2F0UG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBG
aW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KKyAgICBIaXRUZXN0UmVzdWx0IHJlc3Vs
dCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMocm91bmRlZElu
dFBvaW50KGZsb2F0UG9pbnQpKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0aWUocmFuZ2UsIG9wdGlvbnMpID0gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKKyAgICBpZiAoIXJhbmdl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byogZnJhbWUgPSByZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCku
ZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKK30KKwordm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVj
dGVkUmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0ZDo6dGllKHNlbGVj
dGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24o
c2VsZWN0aW9uKTsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMsIHByZXNl
bnRhdGlvblRyYW5zaXRpb24pOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgcGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3Nm
YWRlKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JS
YW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9u
KQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURpY3Rpb25h
cnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKGZyYW1lLCByYW5nZSwgb3B0aW9u
cywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsKK30KKworRGljdGlvbmFyeVBvcHVwSW5mbyBX
ZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYg
cmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBFZGl0b3ImIGVkaXRvciA9
IGZyYW1lLmVkaXRvcigpOworICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJ
bmZvKHRydWUpOworICAgIAorICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVw
SW5mbzsKKyAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkg
eworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7
CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBW
ZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFk
cyk7CisgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5
UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBJbnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsK
KyAgICAKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpLnJlbmRlclN0eWxlKCk7CisgICAgZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHls
ZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKKyAgICBk
aWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFu
Z2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRp
b25zID0gb3B0aW9uczsKKworI2lmIFBMQVRGT1JNKE1BQykKKworICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFu
Z2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKKyAgICAKKyAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVk
U3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOworICAgIAorICAgIE5TRm9u
dE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
OworICAgIAorICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAg
dXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9P
TCAqc3RvcCkgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVk
QXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKKyAgICAgICAg
CisgICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpO
U0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAgICAgICAgICBmb250
ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICog
cGFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICBpZiAoZm9udCkKKyAgICAgICAgICAgIFtzY2Fs
ZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsK
KyAgICAgICAgCisgICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRl
czpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKKyAgICB9XTsKKworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBUZXh0SW5kaWNhdG9yT3B0aW9ucyBpbmRpY2F0
b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxs
Q29udGVudEZvckNvbXBsZXhSYW5nZXM7CisgICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24g
PT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFk
ZSkKKyAgICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVk
ZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKKyAgICAKKyAgICBSZWZQdHI8VGV4dElu
ZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShy
YW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgaWYg
KCF0ZXh0SW5kaWNhdG9yKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5
UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Cisg
ICAgfQorICAgIAorICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJ
bmRpY2F0b3ItPmRhdGEoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgZGljdGlvbmFyeVBvcHVw
SW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFy
eVBvcHVwSW5mbyhmYWxzZSk7CisgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCA0NmNkMDUwZDVlMDA0NmQwZmYw
YTM3MWQwMzIxNDI1ZGY0MGJiYzBmLi41OTQ5YzVlMDBjNzlkYTFmYTRiOWU5Yjk2OTMxZTMzZmYz
MDI0NGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KQEAgLTE5MSw5ICsxOTEsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdl
IExlZ2FjeVJlY2VpdmVyIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAjIERpY3Rpb25hcnkg
c3VwcG9ydC4KICAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oV2ViQ29yZTo6
RmxvYXRQb2ludCBwb2ludCkKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQogICAgIFBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4
IGVlMDgyYzRhOWY0YTQ0M2UzMGIyNmRlNmZkMDY0YjJmYWJkMWU1NjcuLjExZDBjNThiNTg1MzAz
MDFhYzNjNWY4MDA3MGZmOGFjMzRhMWVlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC00MTMsMjEgKzQxMyw2IEBAIHZv
aWQgV2ViUGFnZTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCwgY29uc3Qg
U3RyaW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwRm9yU2VsZWN0aW9uKEZyYW1lJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYs
IFJhbmdlJiwgTlNEaWN0aW9uYXJ5ICosIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9y
bU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6Oktl
eWJvYXJkRXZlbnQqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDQ3MzNiMWNi
ZjJmZTQ1Y2Q5ZDBjZWE3ZWVmOWJjN2MzOGFmYWY3ZTQuLmZhN2E2YWFmMWI2MGJkYTkwZGNkMDc5
YmExYTk0MzZmMTIxNmIwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0zODksMTAyICszODksNyBAQCB2b2lkIFdlYlBh
Z2U6OmZvbnRBdFNlbGVjdGlvbihDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpGb250QXRTZWxlY3Rpb25DYWxsYmFjayhmb250TmFtZSwgZm9u
dFNpemUsIHNlbGVjdGlvbkhhc011bHRpcGxlRm9udHMsIGNhbGxiYWNrSUQpKTsKIH0KICAgICAK
LXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIGZsb2F0UG9pbnQpCi17Ci0gICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVn
aW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7Ci0gICAgICAgIGlmIChwbHVn
aW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBv
aW50IGlzIG92ZXIuCi0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1l
KCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkp
OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOwot
ICAgIHN0ZDo6dGllKHJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRI
aXRUZXN0UmVzdWx0KHJlc3VsdCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1l
LCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpC
b3VuY2UpOwotfQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uKEZyYW1lJiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9u
KQotewotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkg
Km9wdGlvbnM7Ci0gICAgc3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9u
YXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIGlmIChzZWxlY3Rl
ZFJhbmdlKQotICAgICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAq
c2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci19CiAKLXZv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQot
ewotICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFt
ZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOwotfQotCi1EaWN0aW9uYXJ5UG9wdXBJ
bmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJh
bmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIEVkaXRvciYgZWRp
dG9yID0gZnJhbWUuZWRpdG9yKCk7Ci0gICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQ
b3B1cEluZm8odHJ1ZSk7Ci0KLSAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1
cEluZm87Ci0gICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2Up
OwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBWZWN0
b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7
Ci0gICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5n
RGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9w
dXBJbmZvOwotICAgIH0KLQotICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5j
b250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwotCi0gICAg
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJT
dHlsZSgpOwotICAgIGZsb2F0IHNjYWxlZEFzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkgKiBwYWdlU2NhbGVGYWN0b3IoKSA6IDA7Ci0gICAgZGljdGlvbmFyeVBv
cHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkg
KyBzY2FsZWRBc2NlbnQpOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlv
bnM7Ci0KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRp
bmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1
dGVkU3RyaW5nOjpObyk7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
Zz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5n
XV0pOwotCi0gICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBz
aGFyZWRGb250TWFuYWdlcl07Ci0KLSAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0
dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3Ro
XSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFu
Z2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5
XSk7Ci0KLSAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9y
S2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoZm9udCkKLSAgICAgICAgICAg
IGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNp
emUgKiBwYWdlU2NhbGVGYWN0b3IoKV07Ci0gICAgICAgIGlmIChmb250KQotICAgICAgICAgICAg
W3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5h
bWVdOwotCi0gICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpz
Y2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKLSAgICB9XTsKLQotICAgIFRleHRJ
bmRpY2F0b3JPcHRpb25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNl
Qm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlczsKLSAgICBpZiAo
cHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQotICAgICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRl
eHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0Owot
Ci0gICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9y
OjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRy
YW5zaXRpb24pOwotICAgIGlmICghdGV4dEluZGljYXRvcikgewotICAgICAgICBlZGl0b3Iuc2V0
SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0
aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dElu
ZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZv
LmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7Ci0KLSAgICBlZGl0
b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgcmV0dXJuIGRp
Y3Rpb25hcnlQb3B1cEluZm87Ci19CiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIApAQCAt
NTM5LDExICs0NDQsNiBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQ
b3B1cEluZm9Gb3JTZWxlY3Rpb25JblBERlBsdWdpbihQREZTZWxlYwogCiAjZW5kaWYKIAotdm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFtZSwg
UmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5
UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFu
c2l0aW9uKSkpOwotfQotCiBib29sIFdlYlBhZ2U6OnBlcmZvcm1Ob25FZGl0aW5nQmVoYXZpb3JG
b3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBLZXlib2FyZEV2ZW50KiBldmVudCkK
IHsKICAgICAvLyBGaXJzdCBnaXZlIGFjY2Vzc2liaWxpdHkgYSBjaGFuY2UgdG8gaGFuZGxlIHRo
ZSBldmVudC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355118</attachid>
            <date>2018-11-16 14:07:32 -0800</date>
            <delta_ts>2018-11-16 14:36:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116140731.patch</filename>
            <type>text/plain</type>
            <size>74691</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Mjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI0YjI4MTNlNmMwZTcw
MDY2MTU2NTA1NGY3ZTU4ZDZlOTg4Zjk1OS4uNWFmNGZlYjAxN2FiMWJiZWJiYzQ2NzMwODAxZGNk
ODk3ZDczYjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTYg
IFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBodG1s
e2NvbG9yOnRleHR9IHRvIHRoZSBzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0IG9uIG1hY09TLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggYzUyMjE2MTBmY2E2MzdmY2FmYWE4NTgyZjQ3MGE1OWQyMjAz
YzE5Mi4uZTM0ZWFkZTMyYWVkMTA4NmU0YjliN2UwMzdhNDQ3ZjNjZTVmOTEzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxt
ZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBi
ZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGFsL3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICog
cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6CisKIDIwMTgtMTEtMTYgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBSZWdyZXNzaW9uOiBXZWJDb250ZW50IHBy
b2Nlc3MncyBkaXNwbGF5IG5hbWUgaXMgbm8gbG9uZ2VyIHNldApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3MTgzOGJk
NjBiODRlMzI1MDJiZGM4MmY4Njc5ZDA0MWVkZmQxYjRmLi5kYzg2YjFmYzA5YjQyZWZjYzY0Zjk1
MjM4MTYzMzBkOTVmOTRhNzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE4LTExLTE1
ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMb29rdXAgaXMgYmVpbmcgcmVw
bGFjZWQgYnkgUmV2ZWFsLiBUaGlzIGZyYW1ld29yayBzaG91bGQgd29yayBvbiBhbGwgcGxhdGZv
cm1zLgorICAgICAgICBUaGUgcGF0Y2ggbW92ZXMgdGhlIGNvZGUgdGhhdCB3ZSBleHBlY3Qgd2ls
bCBiZSBuZWVkZWQgZm9yIGFsbCBwbGF0Zm9ybXMgdG8gdGhlIG1vcmUKKyAgICAgICAgZ2VuZXJh
bCBjb2NvYSBhcmVhLiBUaGlzIHBhdGNoIGNoYW5nZXMgbm8gZnVuY2F0aW9uYWxpdHksIGFuZCBz
aG91bGQgbm90IGNoYW5nZQorICAgICAgICBhbnl0aGluZyBjdXJyZW50bHkuIFRoaXMgd29yayB3
aWxsIGJlIGJ1aWxkIG9uIGxhdGVyIHdoZW4gUmV2ZWFsIGlzIHJlYWR5IHRvIHN1cHBvcnQKKyAg
ICAgICAgbXVsdGlwbGUgcGxhdGZvcm1zLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldHVw
SW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjbGVhbnVwSW50ZXJhY3Rp
b25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNv
Z25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hZGREZWZhdWx0R2VzdHVyZVJl
Y29nbml6ZXJzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJlY29nbml6ZXI6
c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yUmFuZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1
dG9tYXRpYyBwcm9jZXNzIHByZXdhcm1pbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBpZiBQU09OIGlz
IGVuYWJsZWQgdmlhIGV4cGVyaW1lbnRhbCBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
UEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIxNTUyZGY3Zjc1ZmM1Mzli
Yjg3NTZkMDg0OWI1NGQ2ODY5NTU0MDkuLjE4MjQ3ZDY0YzlkMzAyOTk2MzA1ZmNjNTQ3MjM1YzRj
YjU0MWJlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTQwMiw2ICs0MDIsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERC
QzMxNyAvKiBQYXNzS2l0U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8q
IHB0aHJlYWRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6
Q29yZVNQSS5oICovLAorCQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEku
aCAqLywKIAkJCQk1NzBBQjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJ
CTBDMkRBMTJCMUYzQkVCNDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00
NjcsNyArNDY4LDYgQEAKIAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEku
aCAqLywKIAkJCQlBMTAyNjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8s
CiAJCQkJMEM3Nzg1ODcxRjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAot
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3
NUI0ODFGNkFGRjhFMDBDNEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3
Nzg1ODgxRjQ1MTMwRjAwRjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmNmMjNm
NzAwODRmODk5MTYxZjZiOTBmYmIyNzU5OTYyZjIxY2ZmNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BS
SVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZl
YWxDb3JlKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitT
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50
ZXIuaD4KKyNpbXBvcnQgPFJldmVhbC9SZXZlYWwuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisjaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxDb3Jl
L1JldmVhbENvcmUuaD4KKworI2Vsc2UgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworQGlu
dGVyZmFjZSBSVkl0ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlz
ZWxlY3RlZFJhbmdlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7CitAZW5kCisKK0BpbnRlcmZh
Y2UgUlZTZWxlY3Rpb24gOiBOU09iamVjdAorKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6
KE5TVUludGVnZXIpY2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAq
PiAqKXNlbGVjdGVkUmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVw
ZGF0ZVNlbGVjdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBSVlByZXNlbnRpbmdDb250ZXh0IDog
TlNPYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzoo
TlNQb2ludClwb2ludGVyTG9jYXRpb25JblZpZXcgaW5WaWV3OihOU1ZpZXcgKil2aWV3IGhpZ2hs
aWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiloaWdobGlnaHRE
ZWxlZ2F0ZTsKK0BlbmQKKworQGludGVyZmFjZSBSVlByZXNlbnRlciA6IE5TT2JqZWN0CisjaWYg
UExBVEZPUk0oTUFDKQorLSAoaWQ8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVy
PilhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRl
eHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0
OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0
aW9uYXJ5ICopb3B0aW9uczsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCistIChCT09MKXJldmVh
bEl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAq
KWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAq
KXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7CitAZW5k
CisKKyNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaAppbmRleCBlYjdmOTUxZjcxYzc1YzgxMjE3YjIyZTc4
YWRhZDMwZTRkNmE1YzA0Li5lMGEzMzc1ZDMwY2M4ODlmMTM1ZWEyYTExZDQ3ZDBkYTk0Zjk4YTg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCkBAIC0yMywx
MiArMjMsMTMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKworI2lmIFBMQVRGT1JNKE1BQykK
KwogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVk
aWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtp
bmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKLQogU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JL
X09QVElPTkFMKExvb2t1cCkKIFNPRlRfTElOS19DTEFTU19PUFRJT05BTChMb29rdXAsIExVTG9v
a3VwRGVmaW5pdGlvbk1vZHVsZSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9zcGkvbWFjL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL1Jl
dmVhbFNQSS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmI4ZGE0MmM4NTk5MGFl
MzJlYTY3YTBhZjc3NTNmM2RiOTgyOGE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEku
aAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgPG9iamMvcnVudGltZS5oPgotI2ltcG9y
dCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgot
I2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0KLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09S
SyhSZXZlYWwpCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsQ29yZSkKLVNPRlRf
TElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGVyKQotU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50aW5nQ29udGV4dCkKLVNPRlRfTElOS19DTEFTU19P
UFRJT05BTChSZXZlYWxDb3JlLCBSVkl0ZW0pCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2
ZWFsQ29yZSwgUlZTZWxlY3Rpb24pCi0KLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotCi0j
aW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50ZXIuaD4KLSNpbXBvcnQgPFJldmVhbC9SZXZlYWwuaD4K
LSNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4KLSNpbXBvcnQgPFJldmVhbENvcmUv
UmV2ZWFsQ29yZS5oPgotCi0KLSNlbHNlCi0KLUBpbnRlcmZhY2UgUlZJdGVtIDogTlNPYmplY3Qg
PE5TU2VjdXJlQ29kaW5nPgotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4dDooTlNTdHJpbmcg
Kil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBOU19ERVNJR05BVEVE
X0lOSVRJQUxJWkVSOwotQGVuZAotCi1AaW50ZXJmYWNlIFJWU2VsZWN0aW9uIDogTlNPYmplY3QK
LSsgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNsaWNrSW5kZXggc2Vs
ZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJhbmdlcyBzaG91bGRV
cGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247Ci1AZW5kCi0KLUBp
bnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAotLSAoaWQ8TlNJbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyPilhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTooUlZJdGVtICop
aXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0
IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRl
eHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKLS0gKEJPT0wpcmV2ZWFsSXRlbToo
UlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1l
bnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2Vu
dGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKLUBlbmQKLQotI2Vu
ZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5k
ZXggY2I2ZGVjYjE3YzFlMGUyZWE1NzdkMjQyODZlNjYzNWRjNzJmNjk3Ny4uNDRhYWNiYTIxZDMz
MDQ4OWVjZDU0NjkxZDIzMTI0M2Q4MTU5MTgzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBA
IC04NCw2ICs4NCw3IEBAIGVkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNwcAogZWRpdGlu
Zy9TbWFydFJlcGxhY2VDRi5jcHAKIAogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCitl
ZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29j
b2EubW0KIGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbQogZWRpdGlu
Zy9jb2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCkBAIC05Nyw3ICs5OCw2IEBAIGVkaXRpbmcv
aW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KIAog
ZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tCi1lZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1t
CiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KIGVkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFj
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggODgwY2ZjNGY2MTFiOTQwMTI4MDFmNmRkZjgwNmI3MzRkNjkwNmI4ZC4uNmI0ZDYy
MDA0ZTc3NGQ1M2UxMGMxYzA4ZmNmNjU2ODczMmNhYjlmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjA0MTksNiArMjA0MTks
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQzUyMjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERh
dGFEZXRlY3Rpb24uaCAqLywKIAkJCQlDNTIyN0RGMDFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURl
dGVjdGlvbi5tbSAqLywKKwkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJBMzEgLyogRGljdGlvbmFy
eUxvb2t1cC5tbSAqLywKIAkJCQk5QjU1RUVFODFCM0U4ODk4MDA1MzQyQkMgLyogRWRpdG9yQ29j
b2EubW0gKi8sCiAJCQkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRDQTcyIC8qIEZvbnRBdHRyaWJ1dGVD
aGFuZ2VzQ29jb2EubW0gKi8sCiAJCQkJRjQ4RDJBNzUyMTU2RkU1NzAwQzY3NTJCIC8qIEZvbnRB
dHRyaWJ1dGVzQ29jb2EubW0gKi8sCkBAIC0yNjE0MCw3ICsyNjE0MSw2IEBACiAJCQkJQ0U3QjJE
QUYxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oICovLAog
CQkJCUNFN0IyREIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXIubW0gKi8sCiAJCQkJOTM3RkYzRDQxQTEwMTJENjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29r
dXAuaCAqLywKLQkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1
cC5tbSAqLywKIAkJCQk0NDI5NTZDQTIxOEE2RDMwMDA4MERCNTQgLyogRGljdGlvbmFyeUxvb2t1
cExlZ2FjeS5tbSAqLywKIAkJCQlFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFj
Lm1tICovLAogCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBGcmFtZVNlbGVjdGlvbk1h
Yy5tbSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlv
bmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxv
b2t1cC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NDVkMmVmZDk4NDljNDNkYjU1MjZkN2FkNmQzYzQ3ZDE5MzQ4
Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0
aW9uYXJ5TG9va3VwLm1tCkBAIC0wLDAgKzEsNDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3Rpb25hcnlMb29rdXAuaCIKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiRWRpdGluZy5oIgor
I2ltcG9ydCAiRm9jdXNDb250cm9sbGVyLmgiCisjaW1wb3J0ICJGcmFtZS5oIgorI2ltcG9ydCAi
RnJhbWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbXBvcnQgIkhp
dFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJQYWdl
LmgiCisjaW1wb3J0ICJSYW5nZS5oIgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0
ICJUZXh0SXRlcmF0b3IuaCIKKyNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgorI2ltcG9ydCAi
VmlzaWJsZVNlbGVjdGlvbi5oIgorI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCisjaW1wb3J0IDxQ
REZLaXQvUERGS2l0Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oPgorI2lt
cG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhj
ZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFJFVkVBTCkK
KworI2lmIFBMQVRGT1JNKE1BQykKKworQGludGVyZmFjZSBXZWJSZXZlYWxIaWdobGlnaHQgPFJW
UHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmplY3QgeworQHByaXZhdGUKKyAgICBG
dW5jdGlvbjx2b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7CisgICAgTlNSZWN0IF9oaWdobGln
aHRSZWN0OworICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGlnaHQ7CisgICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpfYXR0cmlidXRlZFN0cmluZzsKK30KKworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCB1c2VEZWZhdWx0SGlnaGxpZ2h0OworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURl
ZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5n
OihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZzsKKy0gKHZvaWQpc2V0Q2xl
YXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxIaWdobGlnaHQKKworQHN5bnRoZXNp
emUgaGlnaGxpZ2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKK0BzeW50aGVzaXplIHVzZURlZmF1bHRI
aWdobGlnaHQ9X3VzZURlZmF1bHRIaWdobGlnaHQ7CitAc3ludGhlc2l6ZSBhdHRyaWJ1dGVkU3Ry
aW5nPV9hdHRyaWJ1dGVkU3RyaW5nOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGln
aHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVz
ZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICop
IGF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfaGlnaGxpZ2h0UmVjdCA9IGhpZ2hsaWdodFJl
Y3Q7CisgICAgX3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VEZWZhdWx0SGlnaGxpZ2h0OworICAg
IF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZzsKKyAgICAKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQo
KT4mJiljbGVhclRleHRJbmRpY2F0b3IKK3sKKyAgICBfY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RG
TW92ZShjbGVhclRleHRJbmRpY2F0b3IpOworfQorCistIChOU0FycmF5PE5TVmFsdWUgKj4gKily
ZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCByZWN0c0Zvckl0ZW06
KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBAW1tOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c2VsZi5o
aWdobGlnaHRSZWN0XV07Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5n
Q29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQoreworICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICAKKyAgICBmb3IgKE5TVmFsdWUgKnJlY3RWYWwgaW4g
Y29udGV4dC5pdGVtUmVjdHNJblZpZXcpIHsKKyAgICAgICAgTlNSZWN0IHJlY3QgPSByZWN0VmFs
LnJlY3RWYWx1ZTsKKworICAgICAgICAvLyBHZXQgY3VycmVudCBmb250IGF0dHJpYnV0ZXMgZnJv
bSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBhZGQgcGFyYWdyYXBoIHN0eWxlIGF0
dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50ZXIgdGV4dC4KKyAgICAgICAgUmV0YWluUHRyPE5TTXV0
YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgZm9udEF0
dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgbGVu
Z3RoXSldXSk7CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFy
YWdyYXBoID0gYWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0XSk7
CisgICAgICAgIFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudENlbnRlcl07
CisgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJhZ3JhcGguZ2V0KCkgZm9yS2V5Ok5T
UGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKKyAgICAKKyAgICAgICAgUmV0YWluUHRyPE5T
QXR0cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGF0dHJp
YnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0pOworICAgICAgICBbc3RyaW5nIGRyYXdJblJlY3Q6cmVj
dF07CisgICAgfQorfQorCistIChCT09MKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRl
eHQgKiljb250ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGlnaHRGb3JJdGVtOihSVkl0ZW0gKilp
dGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJBTShpdGVt
KTsKKyAgICByZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxpZ2h0OworfQorCistICh2b2lkKXJl
dmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRp
bmdJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICBhdXRvIGJsb2NrID0gV1RGTW92ZShfY2xlYXJUZXh0
SW5kaWNhdG9yKTsKKyAgICBpZiAoYmxvY2spCisgICAgICAgIGJsb2NrKCk7Cit9CisKK0BlbmQK
KworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworI2VuZGlmIC8vIEVOQUJMRShSRVZFQUwpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShSRVZFQUwpCisKK3N0ZDo6dHVwbGU8
UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9y
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygp
KQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gU2lu
Y2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3Jh
YiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZp
c2libGVFbmQoKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhl
IHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0
ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhF
bmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworCisgICAgaW50IGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rp
b25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFr
ZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVu
Z3RoVG9TZWxlY3Rpb25TdGFydCk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFj
dGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAg
U3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsK
KyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5j
ZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsK
KyAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsK
KyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVy
UmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBu
aWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25z
dCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvKiBmcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRo
ZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgYXV0byBmcmFtZVBvaW50ID0g
aGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisKKyAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KGZyYW1lUG9pbnQpOworICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAg
cG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7CisKKyAgICBhdXRv
IHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIE5TUmFuZ2Ugc2VsZWN0aW9u
UmFuZ2U7CisgICAgaW50IGhpdEluZGV4OworICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3Rl
clJhbmdlOworICAgIAorICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2li
bGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uU3Rh
cnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5k
ID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzIGNvbnRl
eHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4
dC4KKyAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0
aW9uU3RhcnQpOworICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFy
dCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOworICAgICAgICBh
dXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVj
dGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAgICAgIAorICAgICAgICBzZWxl
Y3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VU
b1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsK
KyAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51
bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNj
b3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOworICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBh
cmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0
aGUgcG9pbnQuCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91
bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghZnVsbENoYXJhY3RlclJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07CisgICAgICAgIAorICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOworICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlv
bikuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0
UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJh
bmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBk
YXRlU2VsZWN0aW9uOm5pbF07CisgICAgCisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRl
eHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVt
ID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5n
IHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFu
Z2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworCisgICAgaWYgKGhpZ2hsaWdodFJhbmdl
LmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlv
biwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAK
K30KKworc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlv
biAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50
ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0Fk
ZGVkQWZ0ZXJFbmQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
c2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7CisgICAgW3Nl
bGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5k
XTsKKyAgICAKKyAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJp
bmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7CisgICAgCisgICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07CisgICAgY2hhcmFjdGVy
c0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3Ro
IC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworfQorCitzdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0
aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rp
b24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICgh
Z2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBv
aW50LgorICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKKworICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+
IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7CisKKyAgICAv
LyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQg
YmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCisgICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtz
ZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3Rl
cnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0
ZXJFbmQgPSAwOworICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JM
b29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNB
ZGRlZEFmdGVyRW5kKTsKKworICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rp
b25Gb3JMb29rdXAgc3RyaW5nXTsKKyAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2Uo
Y2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOworCisgICAgUmV0YWluUHRyPFJWSXRlbT4g
aXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBs
YWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBl
eHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgaWYg
KGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiB7
IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVm
b3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKKyAg
ICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiAr
IGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5h
bExlbmd0aCk7CisKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3Vw
QWRkZWRCZWZvcmVdOworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3Vw
QWRkZWRBZnRlcl07CisKKyAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3Ry
aW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5n
ZV1dKTsKKyAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4geyBAIiIsIG5pbCB9OworfQorCitz
dGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJv
bGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1
cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkgfHwgIWdl
dFJWUHJlc2VudGVyQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9u
cyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKKyAgICAgICAgW211dGFibGVP
cHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKKworICAgIGF1dG8gdGV4
dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRl
eHRJbmRpY2F0b3IpOworICAgIAorICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVy
ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOworICAgIAorICAg
IE5TUmVjdCBoaWdobGlnaHRSZWN0OworICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOworICAg
IAorICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7CisgICAgICAg
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsK
KworICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4
dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07
CisgICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
KTsKKyAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKCk7CisgICAgICAgIAorICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyk7CisgICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7CisgICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxl
Y3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKKyAgICAgICAgcG9pbnRlckxvY2F0
aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7CisgICAgICAg
IAorICAgIH0gZWxzZSB7CisgICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcmlnaW47CisgICAgICAgIAorICAgICAgICBoaWdobGlnaHRSZWN0
ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwor
ICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5l
T3JpZ2luIHRvVmlldzpuaWxdOworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8V2ViUmV2ZWFs
SGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBh
bGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmlu
ZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKKyAgICBSZXRh
aW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVz
ZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9p
bnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRl
ckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7CisgICAgCisgICAgUmV0
YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0
V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmlu
ZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7CisgICAgCisgICAgW3dlYkhpZ2hs
aWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGln
aGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3Ip
XSB7CisgICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCisgICAgICAgICAgICBjbGVhclRl
eHRJbmRpY2F0b3IoKTsKKyAgICB9XTsKKyAgICAKKyAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZv
ckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNv
bnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVt
LmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQo
KSBvcHRpb25zOm5pbF07CisgICAgcmV0dXJuIG5pbDsKKyAgICAKKyNlbHNlIC8vIFBMQVRGT1JN
KE1BQykKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik7
CisgICAgVU5VU0VEX1BBUkFNKGRpY3Rpb25hcnlQb3B1cEluZm8pOworICAgIFVOVVNFRF9QQVJB
TSh2aWV3KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxi
YWNrKTsKKyAgICBVTlVTRURfUEFSQU0ocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sp
OworICAgIFVOVVNFRF9QQVJBTShjbGVhclRleHRJbmRpY2F0b3IpOworICAgIAorICAgIHJldHVy
biBuaWw7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisgICAgCit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVw
KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAq
dmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3Qo
RmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgc2hvd1BvcHVwT3JDcmVh
dGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQorCit2b2lkIERpY3Rp
b25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
I2lmIFBMQVRGT1JNKE1BQykKKworV0tSZXZlYWxDb250cm9sbGVyIERpY3Rpb25hcnlMb29rdXA6
OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBk
aWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9p
ZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNv
bnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNh
dG9yKQoreworICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIo
dHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlv
bkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVh
clRleHRJbmRpY2F0b3IpKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworI2VsaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkgLy8gRU5BQkxFKFJFVkVBTCkKKworc3RkOjp0dXBsZTxSZWZQ
dHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCit7CisgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERp
Y3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQm
KQoreworICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFJFVkVBTCkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRl
bnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVu
dFJlYWRlckNvY29hLm1tCmluZGV4IGU0YjkwYmRmMjcwNTJiMDMyZjlhM2NlNDMzNTQzZDFmODc3
ODRmNjcuLjg1YzQyNzQxYWJhZDc1N2RkMTBmZTRhNmQ0M2YxYmJhNzNkZmY2OTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29h
Lm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRG9j
dW1lbnRGcmFnbWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbXBvcnQgIkVk
aXRvci5oIgorI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJGaWxlLmgiCiAjaW1w
b3J0ICJGaWxlU3lzdGVtLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCmluZGV4IGNiNmQ1M2ViOGY4YzRjZmQzODk0
NTdmNWJlYWUyODNhMzdkYTgxOTIuLmY4Zjc2MWNkYzgxYWViZDNkZjA4ODM3YTMyMzFjMDhmMzVh
NGZlYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlM
b29rdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
LmgKQEAgLTIzLDE1ICsyMywyNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZiBQTEFURk9STShNQUMpCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JN
KENPQ09BKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgotI2luY2x1ZGUgPHBh
bC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNpZiBQ
TEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyU1BJLmg+CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgogCiBPQkpDX0NMQVNTIE5TVmlldzsKIE9CSkNfQ0xBU1MgUERGU2VsZWN0
aW9uOwogCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBpZCA8TlNJbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyPiBXS1JldmVhbENvbnRyb2xsZXI7CisjZWxzZQordHlwZWRlZiBp
ZCBXS1JldmVhbENvbnRyb2xsZXI7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC00OCw4ICs1OCwxMSBAQCBw
dWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzaG93UG9wdXAoY29uc3Qg
RGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQo
VGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252
ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IgPSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBo
aWRlUG9wdXAoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpZCA8TlNJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29u
c3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZv
aWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdD
b252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVh
clRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBhbmltYXRpb25Db250cm9s
bGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBX
VEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxh
dGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCisgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2U5ZTQ0NzRhNDlmY2M5YjA5NWIyZjRiZGE2YzlhZTNmMzhjZmU0Ny4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyAvZGV2L251bGwKQEAgLTEs
Mzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiRGljdGlvbmFyeUxvb2t1cC5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVW
RUFMKQotCi0jaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRWRpdGluZy5oIgotI2ltcG9y
dCAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJhbWVT
ZWxlY3Rpb24uaCIKLSNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKLSNpbXBvcnQgIkhpdFRlc3RS
ZXN1bHQuaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlJhbmdlLmgiCi0jaW1wb3J0ICJS
ZW5kZXJPYmplY3QuaCIKLSNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgotI2ltcG9ydCAiVmlzaWJs
ZVBvc2l0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJWaXNp
YmxlVW5pdHMuaCIKLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkv
bWFjL0xvb2t1cFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25H
ZXN0dXJlUmVjb2duaXplclNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg+
Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1JlZlB0
ci5oPgotCi1AaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGln
aHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7Ci1AcHJpdmF0ZQotICAgIEZ1bmN0aW9uPHZvaWQoKT4g
X2NsZWFyVGV4dEluZGljYXRvcjsKLSAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7Ci0gICAgQk9P
TCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1
dGVkU3RyaW5nOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBo
aWdobGlnaHRSZWN0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURl
ZmF1bHRIaWdobGlnaHQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDoo
Qk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0
cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOwotLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6
KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAotCi1Ac3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0
PV9oaWdobGlnaHRSZWN0OwotQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVm
YXVsdEhpZ2hsaWdodDsKLUBzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRT
dHJpbmc7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdClo
aWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdo
dCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmlu
ZwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKLSAgICBfdXNlRGVm
YXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgX2F0dHJpYnV0ZWRTdHJp
bmcgPSBhdHRyaWJ1dGVkU3RyaW5nOwotICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dElu
ZGljYXRvcgotewotICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dElu
ZGljYXRvcik7Ci19Ci0KLS0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJW
UHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQot
ewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0g
ICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsK
LX0KLQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4
dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGl0
ZW0pOwotICAgIAotICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0
c0luVmlldykgewotICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOwotCi0g
ICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVk
IHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVy
IHRvIGNlbnRlciB0ZXh0LgotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4g
YXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKLSAgICAg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5T
KFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3BhcmFn
cmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKLSAgICAgICAgW2F0dHJp
YnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0
dHJpYnV0ZU5hbWVdOwotICAgIAotICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5n
PiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVz
LmdldCgpXSk7Ci0gICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKLSAgICB9Ci19Ci0K
LS0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hv
dWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVT
RURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIHJldHVybiBz
ZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQ
cmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAq
KWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0
ZW0pOwotICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOwotICAg
IGlmIChibG9jaykKLSAgICAgICAgYmxvY2soKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAg
aWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
LSAgICAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotCi0gICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50
LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KLSAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLQotICAgIC8vIEFzIGNvbnRleHQsIHdl
IGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAg
ICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7
Ci0gICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwot
Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLSAg
ICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7Ci0gICAgTlNSYW5n
ZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0
aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7Ci0gICAgCi0gICAgUmVm
UHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHBhcmFncmFwaEVuZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENo
YXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHRO
UyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVk
UmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5n
ZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdo
bGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotfQotCi1zdGQ6OnR1
cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQotewot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRl
bUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1
dG8qIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmls
IH07Ci0KLSAgICBhdXRvKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERv
bid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0g
ICAgYXV0byBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9k
ZUZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKLSAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICBhdXRvIHBvc2l0aW9uID0gZnJh
bWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwotICAgIGlmIChwb3NpdGlv
bi5pc051bGwoKSkKLSAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUobm9kZSk7Ci0KLSAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwot
ICAgIE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7Ci0gICAgaW50IGhpdEluZGV4OwotICAgIFJlZlB0
cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOwotICAgIAotICAgIGlmIChzZWxlY3Rpb24uc2Vs
ZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7Ci0gICAg
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAg
ICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5k
aW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHBhcmFncmFwaEVu
ZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAotICAgICAgICBhdXRv
IHJhbmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAotICAgICAgICBmdWxsQ2hh
cmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Ci0g
ICAgICAgIAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0
KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGlu
ZVJ1bGVzIHsgcG9zaXRpb24gfTsKLSAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVS
dWxlcy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7Ci0gICAgICAgIHBv
c2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOwotICAgICAg
ICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRl
eHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5n
ZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUw
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQotICAgICAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgICAgIAotICAgICAgICBzZWxlY3Rpb25S
YW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBOU1Jhbmdl
IHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRl
eDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVj
dGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07Ci0gICAgCi0gICAgU3RyaW5n
IGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICBS
ZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGlu
aXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOwotICAg
IE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotCi0g
ICAgaWYgKGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdo
dFJhbmdlLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0g
ICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBo
aWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0g
ICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKLSAgICAKLX0KLQotc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlD
aGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFy
YWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5T
SW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotCi0gICAgc2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0
cmluZy5sZW5ndGg7Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJl
ck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICAKLSAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVT
dGFydCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7Ci0gICAgCi0g
ICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4
cGFuZF07Ci0gICAgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxl
bmd0aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7Ci0KLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1zdGQ6OnR1cGxlPE5TU3RyaW5nICos
IE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24o
UERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBu
byBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgotICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rp
b24uc3RyaW5nLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKLQotICAgIFJl
dGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVj
dGlvbiBjb3B5XSk7Ci0KLSAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1
MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgYXV0
byBvcmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7Ci0g
ICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKLSAgICBOU0ludGVn
ZXIgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAwOwotICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hh
cmFjdGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVm
b3JlU3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsKLQotICAgIGF1dG8gZnVsbFBsYWlu
VGV4dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXTsKLSAgICBhdXRvIHJhbmdl
VG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOwotCi0g
ICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2Uo
KSBpbml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9Q
YXNzXSk7Ci0gICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0
UmFuZ2U7Ci0gICAgCi0gICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91
bmQpCi0gICAgICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgTlNJ
bnRlZ2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0
ZWRSYW5nZS5sb2NhdGlvbjsKLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRy
YWN0ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bh
c3MubG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7Ci0KLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNl
bGVjdGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZvcmVdOwotICAgIFtzZWxlY3Rpb24gZXh0ZW5k
U2VsZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRlcl07Ci0KLSAgICBBU1NFUlQoW3NlbGVjdGlv
bi5zdHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dp
dGhSYW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKLSAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5n
LCBuaWwgfTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4g
eyBAIiIsIG5pbCB9OwotfQotCi1zdGF0aWMgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3Jl
YXRlQW5pbWF0aW9uQ29udHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlv
bmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4
dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBX
VEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJz
aW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikK
LXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRS
Vkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgpKQotICAgICAgICBbbXV0YWJsZU9wdGlvbnMg
YWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlvbnNdOwotCi0gICAgYXV0byB0ZXh0SW5kaWNh
dG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGlj
YXRvcik7Ci0gICAgCi0gICAgUmV0YWluUHRyPFJWUHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9w
dE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgCi0gICAgTlNSZWN0
IGhpZ2hsaWdodFJlY3Q7Ci0gICAgTlNQb2ludCBwb2ludGVyTG9jYXRpb247Ci0gICAgCi0gICAg
aWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkpIHsKLSAgICAgICAgdGV4dElu
ZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRleHRJbmRpY2F0b3IuZ2V0KCkpOwotCi0gICAg
ICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNh
dG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKVswXTsKLSAgICAg
ICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRp
Y2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAg
ICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykg
ewotICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZp
ZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVz
ID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaXJzdFRl
eHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJv
dW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBm
aXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgCi0gICAg
fSBlbHNlIHsKLSAgICAgICAgTlNQb2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5
UG9wdXBJbmZvLm9yaWdpbjsKLSAgICAgICAgCi0gICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0
SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAg
IHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4g
dG9WaWV3Om5pbF07Ci0gICAgfQotICAgIAotICAgIFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGln
aHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBp
bml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDoh
dGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rp
b25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKV0pOwotICAgIFJldGFpblB0cjxS
VlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdD
b250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9j
YXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxp
Z2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8
UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4
dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVj
dGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsKLSAgICAKLSAgICBbd2ViSGlnaGxpZ2h0IHNl
dENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQp
LCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcildIHsKLSAg
ICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikKLSAgICAgICAgICAgIGNsZWFyVGV4dEluZGlj
YXRvcigpOwotICAgIH1dOwotICAgIAotICAgIGlmIChjcmVhdGVBbmltYXRpb25Db250cm9sbGVy
KQotICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTpp
dGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5n
ZXQoKSBvcHRpb25zOm5pbF07Ci0gICAgW3ByZXNlbnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkg
ZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlv
bnM6bmlsXTsKLSAgICByZXR1cm4gbmlsOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICByZXR1cm4gbmlsOwotfQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1
cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcg
KnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5k
aWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0
KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIHNob3dQb3B1cE9yQ3Jl
YXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNp
b25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKLX0KLQotdm9pZCBEaWN0
aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLQotICAgIGlmICghZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFtnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpIGhp
ZGVEZWZpbml0aW9uXTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLWlk
IDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IERpY3Rpb25hcnlMb29rdXA6
OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBk
aWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9p
ZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNv
bnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNh
dG9yKQotewotICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIo
dHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlv
bkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVh
clRleHRJbmRpY2F0b3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEku
aAppbmRleCA5ZWVmYjk3ODRmYmU2ODliMDkwYTViMDFmY2VlY2U3MGQ2NTQxMzJkLi4xOTU1ZDYy
ZDQwYjFkODZlNGRkNTEwZWIxNDg4NjFkNGJkYTY5NzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNzM1LDYgKzczNSw5IEBAIHN0cnVjdCBfVUlXZWJU
b3VjaEV2ZW50IHsKICAgICBib29sIGlzUG90ZW50aWFsVGFwOwogfTsKIAorQGludGVyZmFjZSBf
VUlMb29rdXBHZXN0dXJlUmVjb2duaXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIKK0BlbmQKKwog
QGNsYXNzIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplcjsKIAogQHByb3RvY29sIFVJ
V2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlIDxOU09iamVjdD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KaW5k
ZXggZjU2ODc1ZGZmM2ExY2M0NWViZWU2MTcyMTVjZTk1NzIzZjUzZGU0ZS4uNjVhZWNkOTIxOTJm
ZTY2NjFmMWJhYTQyZDM0MDc4NmNlNGQxZDUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNp
bXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1NQSS5oIgogI2ltcG9y
dCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgorI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0l0ZW0uaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTE4OSw1ICsxOTAsMjEgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtQ2xvbmVBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFj
aG1lbnQ+JiYgZnJvbUF0dGFjaG1lbnQKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5U
X0VMRU1FTlQpCisgICAgCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlm
ICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2lu
dCksIG1fcGFnZUlEKTsKK30KIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQ
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7CiB9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCmluZGV4IGM0OGMzOWQ2NmRjMTM5
NjQyMDU2NTRiOWQ1NDBmMGY2ODc4ODQyMGEuLjlkYzM5MDhjYjEwNzYwYmU4MjRhNTljY2ZiZTZm
OTMzYjc4ZmJmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTg3LDYgKzg3LDcgQEAgY2xhc3MgV2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KIAorQGNs
YXNzIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIF9VSUhpZ2hsaWdodFZpZXc7
CiBAY2xhc3MgX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xh
c3MgVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyOwpAQCAtMjE0LDYgKzIxNSw3IEBAIHN0cnVjdCBX
S0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgUmV0YWlu
UHRyPFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcj4gX2hvdmVyR2VzdHVyZVJlY29nbml6ZXI7Cisg
ICAgUmV0YWluUHRyPF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyPiBfbG9va3VwR2VzdHVyZVJl
Y29nbml6ZXI7CiAjZW5kaWYKIAogICAgIFJldGFpblB0cjxVSVdLVGV4dEludGVyYWN0aW9uQXNz
aXN0YW50PiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDIxZDMx
NzcwMDZiMWM2ZGYwMTZiYWJmM2UwYzM2YTczODg0MmEwOTIuLjI3Nzc1MDg0ZWU5MjRkYWZkMDU1
MDY5ZmY3ZWIzZDc3ZDQ5OTcxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMTEyLDYgKzExMiw3IEBA
CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogI2ltcG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgog
I2ltcG9ydCA8VUlLaXQvVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtp
dC9fVUlMb29rdXBHZXN0dXJlUmVjb2duaXplci5oPgogI2ltcG9ydCA8cGFsL3NwaS9pb3MvR3Jh
cGhpY3NTZXJ2aWNlc1NQSS5oPgogI2VuZGlmCiAKQEAgLTY0OSw2ICs2NTAsMTEgQEAgLSAodm9p
ZClzZXR1cEludGVyYWN0aW9uCiAgICAgX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5T
KFtbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFj
dGlvbjpAc2VsZWN0b3IoX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOildKTsKICAgICBb
X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CiAgICAgW3NlbGYgYWRk
R2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAor
ICAgIF9sb29rdXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tfVUlMb29rdXBHZXN0dXJl
UmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9s
b29rdXBHZXN0dXJlUmVjb2duaXplZDopXSk7CisgICAgW19sb29rdXBHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAogI2VuZGlmCiAKICAgICBfc2luZ2xl
VGFwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbV0tTeW50aGV0aWNDbGlja1RhcEdlc3R1
cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3Io
X3NpbmdsZVRhcENvbW1pdGVkOildKTsKQEAgLTc1Myw2ICs3NTksOSBAQCAtICh2b2lkKWNsZWFu
dXBJbnRlcmFjdGlvbgogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbX2hvdmVyR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2du
aXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCisgICAgW19sb29rdXBH
ZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtzZWxmIHJlbW92ZUdlc3R1
cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIAog
ICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKQEAgLTgz
Niw2ICs4NDUsNyBAQCAtICh2b2lkKV9yZW1vdmVEZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAg
ICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclNpbmdsZVRhcEdlc3R1
cmVSZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW3NlbGYgcmVt
b3ZlR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAg
IFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5n
ZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtODUwLDYgKzg2MCw3IEBAIC0gKHZvaWQpX2FkZERlZmF1
bHRHZXN0dXJlUmVjb2duaXplcnMKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfdHdv
RmluZ2VyU2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBMQVRGT1JNKElP
U01BQykKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2du
aXplci5nZXQoKV07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1
cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBAIC0xNDUwLDYgKzE0NjEsMTAgQEAg
LSAoQk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVS
ZWNvZ25pemVyIHNob3VsZFJlY29nbmkKIAogICAgIGlmIChbZ2VzdHVyZVJlY29nbml6ZXIgaXNL
aW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gfHwgW290aGVyR2Vz
dHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNs
YXNzXV0pCiAgICAgICAgIHJldHVybiBZRVM7CisgICAgCisgICAgaWYgKChbZ2VzdHVyZVJlY29n
bml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAm
JiBbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1
cmVSZWNvZ25pemVyIGNsYXNzXV0pIHx8IChbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRP
ZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gJiYgW2dlc3R1cmVS
ZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNsYXNz
XV0pKQorICAgICAgICByZXR1cm4gWUVTOworCiAjZW5kaWYKICAgICBpZiAoaXNTYW1lUGFpcihn
ZXN0dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXplciwgX2hpZ2hsaWdodExvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQo
KS5mb3JjZVByZXNzR2VzdHVyZSkpCiAgICAgICAgIHJldHVybiBZRVM7CkBAIC02MDMzLDYgKzYw
NDgsMTIgQEAgLSAoQk9PTClhbGxvd3NEaWN0YXRpb25JbnB1dEZvckxpc3RWaWV3Q29udHJvbGxl
cjooUFVJQ1F1aWNrYm9hcmRWaWV3Q29udHJvbGxlcgogI2VuZGlmIC8vIFBMQVRGT1JNKFdBVENI
T1MpCiAKICNpZiBQTEFURk9STShJT1NNQUMpCistICh2b2lkKV9sb29rdXBHZXN0dXJlUmVjb2du
aXplZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgTlNQ
b2ludCBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzID0gW2dlc3R1cmVSZWNvZ25pemVyIGxvY2F0
aW9uSW5WaWV3OnNlbGZdOworICAgIF9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9j
YXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludChsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzKSk7Cit9
CisKIC0gKHZvaWQpX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOihVSUdlc3R1cmVSZWNv
Z25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKICAgICBpZiAoIV9wYWdlLT5pc1ZhbGlkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRl
eCBkYzgwMjgzNmRkNjBlODQyZGFhMTNhZjQ0NGIyZjc5NzkyMjIwNDkwLi5kOTk4YmI1NjJlYTY3
MzQ2YzMxYjMzMDgzM2YyYmMyZmIwZjk2ZmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTEyMSwxMSArMTIxLDYgQEAgYm9vbCBXZWJQ
YWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZUNhbGxiYWNrKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQz
Ml90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
IHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxHZXN0dXJlQ2FsbGJhY2s+
KGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW0KaW5kZXggMTVjN2Q3NjE1MzYyMzRiNmJjY2JhMGZkZjNiZDdjNjBhOTZjM2VmMi4u
YmJkODc5OTk5MTI0MDAzNzQ5ZDAyZjNkNDM4OTM4NGQwZDI2MmNjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC0zMjMsMjIgKzMyMyw2
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94
eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHBvaW50KQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94
eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQotewotICAgIGlm
ICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24o
KSwgbV9wYWdlSUQpOwotfQotCiAvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1
Zy1pbnMuCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1
aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0
ZXh0SW5wdXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggM2U3OTQzMWY5MzcxMTRjNDFmOWQyZGZkNThl
MGI0ZjcyMTgxNTlhNi4uYTM4Y2QyYmY2Mzc5NGM4ZTlmMWQyMTJhM2U3OGIzZThjNGVmOGM2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbQpAQCAtMjYsOSArMjYsMjAgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2lt
cG9ydCAiV2ViUGFnZS5oIgogCisKICNpbXBvcnQgIkxvYWRQYXJhbWV0ZXJzLmgiCisjaW1wb3J0
ICJQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2ltcG9y
dCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9j
dXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob2RlUmVuZGVy
U3R5bGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyT2JqZWN0Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKIApAQCAtNTksNiArNzAsMTE0IEBA
IHZvaWQgV2ViUGFnZTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok5vd1Bs
YXlpbmdJbmZvQ2FsbGJhY2soaGFzQWN0aXZlU2Vzc2lvbiwgcmVnaXN0ZXJlZEFzTm93UGxheWlu
Z0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVsYXBzZWRUaW1lLCB1bmlxdWVJZGVudGlm
aWVyLCBjYWxsYmFja0lEKSk7CiB9CisgICAgCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQoreworICAg
IGlmIChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5G
cmFtZSgpKSkgeworICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGZsb2F0UG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KKyAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVz
dFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVu
dHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0aWUocmFuZ2UsIG9wdGlv
bnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKKyAg
ICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byogZnJhbWUgPSBy
ZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkt
PmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwgKnJhbmdlLCBvcHRpb25z
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKK30KKwordm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYgZnJh
bWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0
ZDo6dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VG
b3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAg
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2UsIG9w
dGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBhdXRvJiBmcmFt
ZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAg
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91
bmNlQW5kQ3Jvc3NmYWRlKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVy
Zm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKGZyYW1lLCBy
YW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsKK30KKworRGljdGlvbmFy
eVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZy
YW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBFZGl0
b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOworICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0
aW9uYXJ5UG9wdXBJbmZvKHRydWUpOworICAgIAorICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGlj
dGlvbmFyeVBvcHVwSW5mbzsKKyAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgp
LmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVw
SW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0K
KyAgICAKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICByYW5nZS5hYnNvbHV0ZVRl
eHRRdWFkcyhxdWFkcyk7CisgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0
b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVy
biBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBJbnRSZWN0IHJhbmdlUmVj
dCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKKyAgICAKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5z
dGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CisgICAgZmxvYXQgc2NhbGVkQXNjZW50ID0g
c3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3Rvcigp
IDogMDsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VS
ZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7CisgICAgZGljdGlvbmFyeVBv
cHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKKworI2lmIFBMQVRGT1JNKE1BQykKKworICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5v
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVk
TlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOworICAg
IAorICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVk
Rm9udE1hbmFnZXJdOworICAgIAorICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0
cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhd
KSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5n
ZSByYW5nZSwgQk9PTCAqc3RvcCkgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlv
bmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHld
KTsKKyAgICAgICAgCisgICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9i
amVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAg
ICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQu
cG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICBpZiAoZm9udCkKKyAgICAg
ICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRy
aWJ1dGVOYW1lXTsKKyAgICAgICAgCisgICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcg
YWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKKyAgICB9
XTsKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBUZXh0SW5kaWNhdG9yT3B0
aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVj
dEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXM7CisgICAgaWYgKHByZXNlbnRhdGlv
blRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5j
ZUFuZENyb3NzZmFkZSkKKyAgICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9y
T3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKKyAgICAKKyAgICBS
ZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlv
bik7CisgICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQ
b3B1cEluZm87CisgICAgfQorICAgIAorICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGlj
YXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgZGlj
dGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3Ry
aW5nOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1
cEluZm87Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCA0NmNkMDUw
ZDVlMDA0NmQwZmYwYTM3MWQwMzIxNDI1ZGY0MGJiYzBmLi41OTQ5YzVlMDBjNzlkYTFmYTRiOWU5
Yjk2OTMxZTMzZmYzMDI0NGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTE5MSw5ICsxOTEsNiBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAj
IERpY3Rpb25hcnkgc3VwcG9ydC4KICAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCkKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFD
KQogICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCmluZGV4IGVlMDgyYzRhOWY0YTQ0M2UzMGIyNmRlNmZkMDY0YjJmYWJkMWU1NjcuLjEx
ZDBjNThiNTg1MzAzMDFhYzNjNWY4MDA3MGZmOGFjMzRhMWVlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC00MTMsMjEg
KzQxMyw2IEBAIHZvaWQgV2ViUGFnZTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50
NjRfdCwgY29uc3QgU3RyaW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JS
YW5nZShGcmFtZSYsIFJhbmdlJiwgTlNEaWN0aW9uYXJ5ICosIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIGJvb2wgV2Vi
UGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYs
IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmlu
ZGV4IDQ3MzNiMWNiZjJmZTQ1Y2Q5ZDBjZWE3ZWVmOWJjN2MzOGFmYWY3ZTQuLmZhN2E2YWFmMWI2
MGJkYTkwZGNkMDc5YmExYTk0MzZmMTIxNmIwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0zODksMTAyICszODksNyBA
QCB2b2lkIFdlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbihDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGb250QXRTZWxlY3Rpb25DYWxsYmFjayhm
b250TmFtZSwgZm9udFNpemUsIHNlbGVjdGlvbkhhc011bHRpcGxlRm9udHMsIGNhbGxiYWNrSUQp
KTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCi17Ci0gICAgaWYgKGF1dG8qIHBsdWdp
blZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7Ci0gICAg
ICAgIGlmIChwbHVnaW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxv
YXRQb2ludCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRmluZCB0aGUg
ZnJhbWUgdGhlIHBvaW50IGlzIG92ZXIuCi0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChm
bG9hdFBvaW50KSkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zOwotICAgIHN0ZDo6dGllKHJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpCb3VuY2UpOwotfQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKQotewotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKLSAgICBO
U0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9u
cykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAg
IGlmIChzZWxlY3RlZFJhbmdlKQotICAgICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJh
bmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlv
bik7Ci19CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRT
ZWxlY3Rpb24oKQotewotICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNl
bGVjdGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOwotfQotCi1EaWN0
aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFt
ZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAg
IEVkaXRvciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7Ci0gICAgZWRpdG9yLnNldElzR2V0dGlu
Z0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7Ci0KLSAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRp
Y3Rpb25hcnlQb3B1cEluZm87Ci0gICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2Uo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1
cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9
Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICByYW5nZS5hYnNvbHV0ZVRleHRR
dWFkcyhxdWFkcyk7Ci0gICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0b3Iu
c2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBk
aWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJh
bWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCkpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWlu
ZXIoKS5yZW5kZXJTdHlsZSgpOwotICAgIGZsb2F0IHNjYWxlZEFzY2VudCA9IHN0eWxlID8gc3R5
bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKiBwYWdlU2NhbGVGYWN0b3IoKSA6IDA7Ci0gICAg
ZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50KHJhbmdlUmVjdC54KCksIHJh
bmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQpOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0
aW9ucyA9IG9wdGlvbnM7Ci0KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0
cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1h
Z2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRT
dHJpbmcgc3RyaW5nXV0pOwotCi0gICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0KLSAgICBbbnNBdHRyaWJ1dGVkU3RyaW5n
IGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRT
dHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJp
YnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKLSAgICAgICAgUmV0YWluUHRyPE5T
TXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVz
IG11dGFibGVDb3B5XSk7Ci0KLSAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0
ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoZm9udCkK
LSAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6
Zm9udC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3IoKV07Ci0gICAgICAgIGlmIChmb250KQot
ICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9u
dEF0dHJpYnV0ZU5hbWVdOwotCi0gICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRk
QXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKLSAgICB9XTsK
LQotICAgIFRleHRJbmRpY2F0b3JPcHRpb25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0SW5kaWNh
dG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdl
czsKLSAgICBpZiAocHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQotICAgICAgICBpbmRpY2F0b3JP
cHRpb25zIHw9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9u
SGlnaGxpZ2h0OwotCi0gICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBU
ZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pOwotICAgIGlmICghdGV4dEluZGljYXRvcikgewotICAgICAg
ICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAg
IHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIGRpY3Rpb25hcnlQb3B1
cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKLSAgICBkaWN0aW9u
YXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7
Ci0KLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0g
ICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci19CiAKICNpZiBFTkFCTEUoUERGS0lUX1BM
VUdJTikKIApAQCAtNTM5LDExICs0NDQsNiBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6
OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JTZWxlY3Rpb25JblBERlBsdWdpbihQREZTZWxlYwogCiAj
ZW5kaWYKIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZy
YW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1
cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBvcHRpb25zLCBwcmVz
ZW50YXRpb25UcmFuc2l0aW9uKSkpOwotfQotCiBib29sIFdlYlBhZ2U6OnBlcmZvcm1Ob25FZGl0
aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBLZXlib2FyZEV2
ZW50KiBldmVudCkKIHsKICAgICAvLyBGaXJzdCBnaXZlIGFjY2Vzc2liaWxpdHkgYSBjaGFuY2Ug
dG8gaGFuZGxlIHRoZSBldmVudC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355125</attachid>
            <date>2018-11-16 14:36:10 -0800</date>
            <delta_ts>2018-11-16 14:56:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116143609.patch</filename>
            <type>text/plain</type>
            <size>75062</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Mjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI0YjI4MTNlNmMwZTcw
MDY2MTU2NTA1NGY3ZTU4ZDZlOTg4Zjk1OS4uNWFmNGZlYjAxN2FiMWJiZWJiYzQ2NzMwODAxZGNk
ODk3ZDczYjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTYg
IFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBodG1s
e2NvbG9yOnRleHR9IHRvIHRoZSBzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0IG9uIG1hY09TLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggYzUyMjE2MTBmY2E2MzdmY2FmYWE4NTgyZjQ3MGE1OWQyMjAz
YzE5Mi4uZTM0ZWFkZTMyYWVkMTA4NmU0YjliN2UwMzdhNDQ3ZjNjZTVmOTEzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxt
ZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBi
ZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGFsL3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICog
cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6CisKIDIwMTgtMTEtMTYgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBSZWdyZXNzaW9uOiBXZWJDb250ZW50IHBy
b2Nlc3MncyBkaXNwbGF5IG5hbWUgaXMgbm8gbG9uZ2VyIHNldApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3MTgzOGJk
NjBiODRlMzI1MDJiZGM4MmY4Njc5ZDA0MWVkZmQxYjRmLi5kYzg2YjFmYzA5YjQyZWZjYzY0Zjk1
MjM4MTYzMzBkOTVmOTRhNzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE4LTExLTE1
ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMb29rdXAgaXMgYmVpbmcgcmVw
bGFjZWQgYnkgUmV2ZWFsLiBUaGlzIGZyYW1ld29yayBzaG91bGQgd29yayBvbiBhbGwgcGxhdGZv
cm1zLgorICAgICAgICBUaGUgcGF0Y2ggbW92ZXMgdGhlIGNvZGUgdGhhdCB3ZSBleHBlY3Qgd2ls
bCBiZSBuZWVkZWQgZm9yIGFsbCBwbGF0Zm9ybXMgdG8gdGhlIG1vcmUKKyAgICAgICAgZ2VuZXJh
bCBjb2NvYSBhcmVhLiBUaGlzIHBhdGNoIGNoYW5nZXMgbm8gZnVuY2F0aW9uYWxpdHksIGFuZCBz
aG91bGQgbm90IGNoYW5nZQorICAgICAgICBhbnl0aGluZyBjdXJyZW50bHkuIFRoaXMgd29yayB3
aWxsIGJlIGJ1aWxkIG9uIGxhdGVyIHdoZW4gUmV2ZWFsIGlzIHJlYWR5IHRvIHN1cHBvcnQKKyAg
ICAgICAgbXVsdGlwbGUgcGxhdGZvcm1zLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldHVw
SW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjbGVhbnVwSW50ZXJhY3Rp
b25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNv
Z25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hZGREZWZhdWx0R2VzdHVyZVJl
Y29nbml6ZXJzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJlY29nbml6ZXI6
c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yUmFuZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1
dG9tYXRpYyBwcm9jZXNzIHByZXdhcm1pbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBpZiBQU09OIGlz
IGVuYWJsZWQgdmlhIGV4cGVyaW1lbnRhbCBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
UEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIxNTUyZGY3Zjc1ZmM1Mzli
Yjg3NTZkMDg0OWI1NGQ2ODY5NTU0MDkuLjE4MjQ3ZDY0YzlkMzAyOTk2MzA1ZmNjNTQ3MjM1YzRj
YjU0MWJlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTQwMiw2ICs0MDIsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERC
QzMxNyAvKiBQYXNzS2l0U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8q
IHB0aHJlYWRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6
Q29yZVNQSS5oICovLAorCQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEku
aCAqLywKIAkJCQk1NzBBQjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJ
CTBDMkRBMTJCMUYzQkVCNDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00
NjcsNyArNDY4LDYgQEAKIAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEku
aCAqLywKIAkJCQlBMTAyNjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8s
CiAJCQkJMEM3Nzg1ODcxRjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAot
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3
NUI0ODFGNkFGRjhFMDBDNEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3
Nzg1ODgxRjQ1MTMwRjAwRjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg2ZDY5
MjkyYTdhYTMxN2JjOGQ0MTIyMTE2YTE5OGUzMjExNDM3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BS
SVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZl
YWxDb3JlKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitT
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50
ZXIuaD4KKyNpbXBvcnQgPFJldmVhbC9SZXZlYWwuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisjaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxDb3Jl
L1JldmVhbENvcmUuaD4KKworI2Vsc2UgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworCisK
K0BpbnRlcmZhY2UgUlZJdGVtIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFu
Z2Upc2VsZWN0ZWRSYW5nZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50
ZXJmYWNlIFJWU2VsZWN0aW9uIDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdElu
ZGV4OihOU1VJbnRlZ2VyKWNsaWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFs
dWUgKj4gKilzZWxlY3RlZFJhbmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91
bGRVcGRhdGVTZWxlY3Rpb247CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50aW5nQ29udGV4
dCA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZp
ZXc6KE5TUG9pbnQpcG9pbnRlckxvY2F0aW9uSW5WaWV3IGluVmlldzooTlNWaWV3ICopdmlldyBo
aWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4paGlnaGxp
Z2h0RGVsZWdhdGU7CitAZW5kCisKK0Bwcm90b2NvbCBSVlByZXNlbnRlckhpZ2hsaWdodERlbGVn
YXRlIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAobm9ubnVsbCBOU0FycmF5IDxOU1ZhbHVlICo+
ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNGb3JJ
dGVtOihSVkl0ZW0gKilpdGVtOworQG9wdGlvbmFsCistICh2b2lkKXJldmVhbENvbnRleHQ6KFJW
UHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihSVkl0ZW0g
KilpdGVtOworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29u
dGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtOworQGVuZAorCitAaW50ZXJmYWNl
IFJWUHJlc2VudGVyIDogTlNPYmplY3QKKyNpZiBQTEFURk9STShNQUMpCistIChpZDxOU0ltbWVk
aWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVt
OihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1
bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVz
ZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKKy0gKEJPT0wpcmV2ZWFsSXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVu
dENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdD
b250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczoo
TlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKK0BlbmQKKworI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xv
b2t1cFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCmlu
ZGV4IGViN2Y5NTFmNzFjNzVjODEyMTdiMjJlNzhhZGFkMzBlNGQ2YTVjMDQuLmUwYTMzNzVkMzBj
Yzg4OWYxMzVlYTJhMTFkNDdkMGRhOTRmOThhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmgKQEAgLTIzLDEyICsyMywxMyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAorCisjaWYgUExBVEZPUk0oTUFDKQorCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4K
ICNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJT
UEkuaD4KICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQot
CiBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTG9va3VwKQogU09GVF9MSU5L
X0NMQVNTX09QVElPTkFMKExvb2t1cCwgTFVMb29rdXBEZWZpbml0aW9uTW9kdWxlKQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ2YjhkYTQyYzg1OTkwYWUzMmVhNjdhMGFmNzc1M2YzZGI5ODI4YTUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lt
cG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFj
dGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4K
LQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKLVNPRlRfTElOS19QUklWQVRF
X0ZSQU1FV09SSyhSZXZlYWxDb3JlKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwg
UlZQcmVzZW50ZXIpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRp
bmdDb250ZXh0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkK
LVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKLQotI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0KLSNpbXBvcnQgPFJldmVhbC9SVlByZXNlbnRlci5o
PgotI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgotI2ltcG9ydCA8UmV2ZWFsQ29yZS9SVlNlbGVj
dGlvbi5oPgotI2ltcG9ydCA8UmV2ZWFsQ29yZS9SZXZlYWxDb3JlLmg+Ci0KLQotI2Vsc2UKLQot
QGludGVyZmFjZSBSVkl0ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5n
ZSlzZWxlY3RlZFJhbmdlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci1AZW5kCi0KLUBpbnRl
cmZhY2UgUlZTZWxlY3Rpb24gOiBOU09iamVjdAotKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5k
ZXg6KE5TVUludGVnZXIpY2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1
ZSAqPiAqKXNlbGVjdGVkUmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3Vs
ZFVwZGF0ZVNlbGVjdGlvbjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlByZXNlbnRlciA6IE5TT2Jq
ZWN0Ci0tIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlv
bkNvbnRyb2xsZXJGb3JJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1
bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2Vu
dGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilv
cHRpb25zOwotLSAoQk9PTClyZXZlYWxJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4
dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6
KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rp
b25hcnkgKilvcHRpb25zOwotQGVuZAotCi0jZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9T
REspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBjYjZkZWNiMTdjMWUwZTJlYTU3N2QyNDI4
NmU2NjM1ZGM3MmY2OTc3Li40NGFhY2JhMjFkMzMwNDg5ZWNkNTQ2OTFkMjMxMjQzZDgxNTkxODNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTg0LDYgKzg0LDcgQEAgZWRpdGluZy9TZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuY3BwCiBlZGl0aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcAogCiBlZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KK2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1
cC5tbQogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQogZWRpdGluZy9jb2NvYS9Gb250QXR0
cmlidXRlQ2hhbmdlc0NvY29hLm1tCiBlZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2Eu
bW0KQEAgLTk3LDcgKzk4LDYgQEAgZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAK
IGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQogCiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRV
SUNvbnRyb2xsZXIubW0KLWVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KIGVkaXRpbmcv
bWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQog
ZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ODBjZmM0ZjYxMWI5NDAxMjgw
MWY2ZGRmODA2YjczNGQ2OTA2YjhkLi42YjRkNjIwMDRlNzc0ZDUzZTEwYzFjMDhmY2Y2NTY4NzMy
Y2FiOWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yMDQxOSw2ICsyMDQxOSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlD
NTIyN0RFRjFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oICovLAogCQkJCUM1MjI3
REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovLAorCQkJCTkzN0ZGM0Q2
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTlCNTVFRUU4
MUIzRTg4OTgwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAqLywKIAkJCQlGNDJDRUI1NDIxNDAz
MUVFMDAyRENBNzIgLyogRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbSAqLywKIAkJCQlGNDhE
MkE3NTIxNTZGRTU3MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXNDb2NvYS5tbSAqLywKQEAgLTI2
MTQwLDcgKzI2MTQxLDYgQEAKIAkJCQlDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyLmggKi8sCiAJCQkJQ0U3QjJEQjAxNTg2QUJBRDAwOThCM0ZB
IC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSAqLywKIAkJCQk5MzdGRjNENDFBMTAx
MkQ2MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICovLAotCQkJCTkzN0ZGM0Q2MUExMDEz
MUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTQ0Mjk1NkNBMjE4QTZE
MzAwMDgwREI1NCAvKiBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tICovLAogCQkJCUVENTAxREM1
MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8sCiAJCQkJNEE4Qzk2RUEwQkU2OTAz
MjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9uTWFjLm1tICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0NWQyZWZk
OTg0OWM0M2RiNTUyNmQ3YWQ2ZDNjNDdkMTkzNDg3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTAsMCArMSw0
MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRGlj
dGlvbmFyeUxvb2t1cC5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQgIkRvY3Vt
ZW50LmgiCisjaW1wb3J0ICJFZGl0aW5nLmgiCisjaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIK
KyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgorI2ltcG9ydCAi
SFRNTENvbnZlcnRlci5oIgorI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJhbmdlLmgiCisjaW1w
b3J0ICJSZW5kZXJPYmplY3QuaCIKKyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgorI2ltcG9ydCAi
VmlzaWJsZVBvc2l0aW9uLmgiCisjaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW1wb3J0
ICJWaXNpYmxlVW5pdHMuaCIKKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPHBh
bC9zcGkvY29jb2EvUmV2ZWFsU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29rdXBTUEku
aD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvUmVm
UHRyLmg+CisKKyNpZiBFTkFCTEUoUkVWRUFMKQorCisjaWYgUExBVEZPUk0oTUFDKQorCitAaW50
ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4g
OiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFyVGV4dElu
ZGljYXRvcjsKKyAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7CisgICAgQk9PTCBfdXNlRGVmYXVs
dEhpZ2hsaWdodDsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3RyaW5nOwor
fQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBoaWdobGlnaHRSZWN0
OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURlZmF1bHRIaWdobGln
aHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVj
dDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZh
dWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRy
aWJ1dGVkU3RyaW5nOworLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZv
aWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YlJldmVhbEhpZ2hsaWdodAorCitAc3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdobGlnaHRS
ZWN0OworQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhpZ2hsaWdo
dDsKK0BzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0
IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVk
U3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZworeworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKKyAgICBfdXNlRGVmYXVsdEhpZ2hsaWdo
dCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7CisgICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1
dGVkU3RyaW5nOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENsZWFy
VGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcgorewor
ICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcik7Cit9
CisKKy0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0Nv
bnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNF
RF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJuIEBb
W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsKK30KKworLSAodm9p
ZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVjdHNG
b3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIAor
ICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0c0luVmlldykgewor
ICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOworCisgICAgICAgIC8vIEdl
dCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBhYm92
ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVyIHRvIGNlbnRlciB0
ZXh0LgorICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9
IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6
W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKKyAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNNdXRhYmxl
UGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3BhcmFncmFwaCBzZXRBbGln
bm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKKyAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2Jq
ZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVd
OworICAgIAorICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcgPSBh
ZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbc2VsZi5h
dHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVzLmdldCgpXSk7Cisg
ICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKKyAgICB9Cit9CisKKy0gKEJPT0wpcmV2
ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hvdWxkVXNlRGVmYXVs
dEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBzZWxmLnVzZURlZmF1
bHRIaWdobGlnaHQ7Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29u
dGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAg
ICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIGF1
dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOworICAgIGlmIChibG9jaykK
KyAgICAgICAgYmxvY2soKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQor
CisjZW5kaWYgLy8gRU5BQkxFKFJFVkVBTCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYg
RU5BQkxFKFJFVkVBTCkKKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkg
Kj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OworICAgIAorICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdl
IHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgorICAg
IGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0
byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworCisgICAgLy8gQXMgY29u
dGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0
ZXh0LgorICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
blN0YXJ0KTsKKyAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlv
bkVuZCk7CisKKyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0
KCkpOworICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKKyAg
ICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFy
dCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICAK
KyAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4
dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0g
PSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcg
c2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2Ug
PSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworICAgIAorICAgIHJldHVybiB7IFRleHRJdGVy
YXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRp
b24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAorICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisK
K3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1
bHQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICgh
Z2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAg
CisgICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Cisg
ICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4geyBudWxs
cHRyLCBuaWwgfTsKKworICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgp
OworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisg
ICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBw
b2ludC4KKyAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludElu
SW5uZXJOb2RlRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9p
bnQpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8gcG9zaXRp
b24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYg
KHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShub2RlKTsKKworICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKKyAgICBpbnQgaGl0SW5kZXg7Cisg
ICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7CisgICAgCisgICAgaWYgKHNlbGVj
dGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24p
IHsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KTsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUg
c3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAgICAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1dG8gcGFy
YWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAg
ICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAg
IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBo
RW5kKTsKKyAgICAgICAgCisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9u
RW5kKS5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRp
bmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OworICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5n
Rm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAg
ICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7
CisgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3Rl
cnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICAgICAgZnVsbENoYXJh
Y3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0
aW9uLCAyNTApOworICAgICAgICAKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCisg
ICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgCisgICAgICAgIHNl
bGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgICAgIGhpdElu
ZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfQorICAgIAorICAg
IE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFu
Z2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFu
Z2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKKyAgICAKKyAg
ICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkp
OworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3Rh
bmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdl
XSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFu
Z2U7CisKKyAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAh
aGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
KyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVy
UmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBu
aWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorfQorCitzdGF0aWMgdm9pZCBleHBhbmRTZWxl
Y3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1i
ZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVT
dGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKK3sKKyAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxl
Y3Rpb24uc3RyaW5nLmxlbmd0aDsKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3Rh
cnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOworICAgIAorICAgIGNoYXJhY3RlcnNBZGRl
ZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsK
KyAgICAKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFj
dGVyc1RvRXhwYW5kXTsKKyAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5z
dHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFy
dDsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3N0ZDo6dHVwbGU8TlNT
dHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNl
bGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQorICAgICAgICBy
ZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRo
ZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgaWYgKCFzZWxlY3Rpb24gfHwg
IXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBAIiIsIG5pbCB9Owor
CisgICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHRO
Uyhbc2VsZWN0aW9uIGNvcHldKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0
byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4K
KyAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxl
bmd0aDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAwOworICAg
IE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7CisgICAgZXhwYW5kU2VsZWN0
aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJz
QWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOworCisgICAgYXV0byBm
dWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOworICAgIGF1
dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwg
MCk7CisKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1J
bnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6
cmFuZ2VUb1Bhc3NdKTsKKyAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5o
aWdobGlnaHRSYW5nZTsKKyAgICAKKyAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0g
TlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07CisK
KyAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAt
IGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOworICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVy
ID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChy
YW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKKworICAgIFtzZWxlY3Rpb24g
ZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07CisgICAgW3NlbGVjdGlv
biBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKKworICAgIEFTU0VSVChb
c2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vi
c3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOworICAgIHJldHVybiB7IHNlbGVjdGlv
bi5zdHJpbmcsIG5pbCB9OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAg
IHJldHVybiB7IEAiIiwgbmlsIH07Cit9CisKK3N0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgc2hv
d1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywg
TlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZs
b2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIAorICAg
IGlmICghZ2V0UlZJdGVtQ2xhc3MoKSB8fCAhZ2V0UlZQcmVzZW50ZXJDbGFzcygpKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG11dGFi
bGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsK
KyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcHRp
b25zLmdldCgpKQorICAgICAgICBbbXV0YWJsZU9wdGlvbnMgYWRkRW50cmllc0Zyb21EaWN0aW9u
YXJ5Om9wdGlvbnNdOworCisgICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6
Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvcik7CisgICAgCisgICAgUmV0
YWluUHRyPFJWUHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGVy
SW5zdGFuY2UoKSBpbml0XSk7CisgICAgCisgICAgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CisgICAg
TlNQb2ludCBwb2ludGVyTG9jYXRpb247CisgICAgCisgICAgaWYgKHRleHRJbmRpY2F0b3IuZ2V0
KCkuY29udGVudEltYWdlKCkpIHsKKyAgICAgICAgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNh
bGxiYWNrKHRleHRJbmRpY2F0b3IuZ2V0KCkpOworCisgICAgICAgIEZsb2F0UmVjdCBmaXJzdFRl
eHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRSZWN0c0lu
Qm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKVswXTsKKyAgICAgICAgRmxvYXRSZWN0IHRleHRCb3Vu
ZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dEJvdW5k
aW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0
aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnNl
bGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykgeworICAgICAgICAgICAgdGV4dEJv
dW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2sodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgICAgIHNl
bGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252
ZXJzaW9uQ2FsbGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0
ZXMubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsK
KyAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3Jk
aW5hdGVzOworICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBmaXJzdFRleHRSZWN0SW5WaWV3Q29v
cmRpbmF0ZXMubG9jYXRpb24oKTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNQ
b2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbjsKKyAg
ICAgICAgCisgICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25S
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IFt2
aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07CisgICAgfQor
ICAgIAorICAgIFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+IHdlYkhpZ2hsaWdodCA9ICBh
ZG9wdE5TKFtbV2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aEhpZ2hsaWdodFJlY3Q6
IGhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4dEluZGljYXRvci5nZXQoKS5j
b250ZW50SW1hZ2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmli
dXRlZFN0cmluZy5nZXQoKV0pOworICAgIFJldGFpblB0cjxSVlByZXNlbnRpbmdDb250ZXh0PiBj
b250ZXh0ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdDb250ZXh0SW5zdGFuY2UoKSBpbml0
V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9jYXRpb24gaW5WaWV3OnZpZXcgaGln
aGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+KSB3ZWJIaWdo
bGlnaHQuZ2V0KCldKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHRO
UyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpkaWN0aW9uYXJ5UG9wdXBJbmZv
LmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgMCldKTsKKyAgICAKKyAgICBbd2ViSGlnaGxpZ2h0IHNldENsZWFyVGV4dEluZGljYXRvcjpb
d2ViSGlnaGxpZ2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBjbGVhclRleHRJbmRpY2F0b3Ig
PSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcildIHsKKyAgICAgICAgaWYgKGNsZWFyVGV4dElu
ZGljYXRvcikKKyAgICAgICAgICAgIGNsZWFyVGV4dEluZGljYXRvcigpOworICAgIH1dOworICAg
IAorICAgIGlmIChjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1cm4gW3By
ZXNlbnRlciBhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29u
dGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07Cisg
ICAgW3ByZXNlbnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBw
cmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICByZXR1cm4g
bmlsOworICAgIAorI2Vsc2UgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIFVOVVNFRF9QQVJB
TShjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZGljdGlvbmFy
eVBvcHVwSW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHZpZXcpOworICAgIFVOVVNFRF9QQVJBTSh0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2spOworICAgIFVOVVNFRF9QQVJBTShyb290
Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKGNsZWFyVGV4
dEluZGljYXRvcik7CisgICAgCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKK30KKwordm9p
ZCBEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYg
ZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZv
aWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdD
b252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGlj
YXRvcikKK3sKKyAgICBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoZmFsc2Us
IGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0
SW5kaWNhdG9yKSk7Cit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQorCitXS1JldmVh
bENvbnRyb2xsZXIgRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVw
KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAq
dmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3Qo
RmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgcmV0dXJuIHNob3dQb3B1
cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2
aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQorCisjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKSAvLyBFTkFC
TEUoUkVWRUFMKQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBE
aWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JikKK3sKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworc3RkOjp0dXBsZTxSZWZQ
dHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRl
c3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYpCit7CisgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVWRUFMKQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggZTRiOTBi
ZGYyNzA1MmIwMzJmOWEzY2U0MzM1NDNkMWY4Nzc4NGY2Ny4uODVjNDI3NDFhYmFkNzU3ZGQxMGZl
NGE2ZDQzZjFiYmE3M2RmZjY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBv
cnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW1wb3J0ICJE
b2N1bWVudExvYWRlci5oIgorI2ltcG9ydCAiRWRpdG9yLmgiCisjaW1wb3J0ICJFZGl0b3JDbGll
bnQuaCIKICNpbXBvcnQgIkZpbGUuaCIKICNpbXBvcnQgIkZpbGVTeXN0ZW0uaCIKICNpbXBvcnQg
IkZyYW1lLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9u
YXJ5TG9va3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
LmgKaW5kZXggY2I2ZDUzZWI4ZjhjNGNmZDM4OTQ1N2Y1YmVhZTI4M2EzN2RhODE5Mi4uZjhmNzYx
Y2RjODFhZWJkM2RmMDg4MzdhMzIzMWMwOGYzNWE0ZmViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaApAQCAtMjMsMTUgKzIzLDI1IEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmIFBMQVRGT1JNKE1BQykK
KyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCiAKICNpbmNsdWRlICJEaWN0aW9u
YXJ5UG9wdXBJbmZvLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25H
ZXN0dXJlUmVjb2duaXplclNQSS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAKIE9CSkNfQ0xBU1Mg
TlNWaWV3OwogT0JKQ19DTEFTUyBQREZTZWxlY3Rpb247CiAKKyNpZiBQTEFURk9STShNQUMpCit0
eXBlZGVmIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IFdLUmV2ZWFs
Q29udHJvbGxlcjsKKyNlbHNlCit0eXBlZGVmIGlkIFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSGl0VGVz
dFJlc3VsdDsKQEAgLTQ4LDggKzU4LDExIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIHNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3
ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNh
dG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZs
b2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGhpZGVQb3B1cCgpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IGFu
aW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNW
aWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5k
aWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0
KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOwor
ICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgV0tSZXZl
YWxDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5
UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNh
dG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVu
Y3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRv
ciA9IG51bGxwdHIpOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9u
YXJ5TG9va3VwLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTllNDQ3NGE0OWZj
YzliMDk1YjJmNGJkYTZjOWFlM2YzOGNmZTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlM
b29rdXAubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCi0KLSNp
ZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShSRVZFQUwpCi0KLSNpbXBvcnQgIkRvY3VtZW50Lmgi
Ci0jaW1wb3J0ICJFZGl0aW5nLmgiCi0jaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAiSFRNTENv
bnZlcnRlci5oIgotI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiUGFnZS5oIgot
I2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiVGV4
dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIlZpc2li
bGVTZWxlY3Rpb24uaCIKLSNpbXBvcnQgIlZpc2libGVVbml0cy5oIgotI2ltcG9ydCA8UERGS2l0
L1BERktpdC5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+Ci0jaW1wb3J0IDxw
YWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1w
b3J0IDxwYWwvc3BpL21hYy9SZXZlYWxTUEkuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNl
cHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0KLUBpbnRlcmZhY2UgV2ViUmV2ZWFs
SGlnaGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKLUBw
cml2YXRlCi0gICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOwotICAgIE5T
UmVjdCBfaGlnaGxpZ2h0UmVjdDsKLSAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
OwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxp
Z2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0
cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Ci0t
ICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4
dEluZGljYXRvcjsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0
Ci0KLUBzeW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7Ci1Ac3ludGhlc2l6
ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHN5bnRoZXNpemUg
YXR0cmlidXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hs
aWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmli
dXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX2hpZ2hsaWdodFJlY3Qg
PSBoaWdobGlnaHRSZWN0OwotICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhp
Z2hsaWdodDsKLSAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Ci0gICAg
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihG
dW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCi17Ci0gICAgX2NsZWFyVGV4dElu
ZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKLX0KLQotLSAoTlNBcnJheTxO
U1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQg
cmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdp
dGhSZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOwotfQotCi0tICh2b2lkKXJldmVhbENvbnRleHQ6
KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAq
KWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgCi0gICAgZm9yIChOU1ZhbHVl
ICpyZWN0VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7Ci0gICAgICAgIE5TUmVjdCBy
ZWN0ID0gcmVjdFZhbC5yZWN0VmFsdWU7Ci0KLSAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBh
dHRyaWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFn
cmFwaCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCi0gICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVk
U3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1
dGVkU3RyaW5nIGxlbmd0aF0pXV0pOwotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdy
YXBoU3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBh
bGxvY10gaW5pdF0pOwotICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGln
bm1lbnRDZW50ZXJdOwotICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdl
dCgpIGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAgCi0gICAgICAg
IFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcg
c3RyaW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKLSAgICAgICAgW3N0cmluZyBk
cmF3SW5SZWN0OnJlY3RdOwotICAgIH0KLX0KLQotLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlBy
ZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRl
bTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVT
RURfUEFSQU0oaXRlbSk7Ci0gICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKLX0K
LQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBz
dG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgYXV0byBibG9jayA9IFdURk1v
dmUoX2NsZWFyVGV4dEluZGljYXRvcik7Ci0gICAgaWYgKGJsb2NrKQotICAgICAgICBibG9jaygp
OwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp0dXBsZTxSZWZQdHI8
UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAg
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5n
ZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5n
ZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBTaW5jZSB3ZSBh
bHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSBy
ZXR1cm5lZCBvcHRpb25zLgotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91
bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFy
dE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVu
ZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0KLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25T
dGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxl
Y3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2Uo
bGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1Nl
bGVjdGlvblN0YXJ0KTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5n
ZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcg
aXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJl
dGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5T
UmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAot
ICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwg
aGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9Owot
ICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci19Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9u
YXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8qIGZyYW1lID0gbm9k
ZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMg
bm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0
UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5y
YW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKLQotICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQo
ZnJhbWVQb2ludCk7Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlv
biA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLQotICAgIGF1dG8gc2VsZWN0
aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsK
LSAgICBpbnQgaGl0SW5kZXg7Ci0gICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7
Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVj
dGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxl
Y3Rpb24udmlzaWJsZUVuZCgpOwotICAgICAgICAKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2Ug
YXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAg
ICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFy
dCk7Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
RW5kKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFu
Z2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5k
KTsKLSAgICAgICAgCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJh
Z3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJh
bmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0
aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxl
Y3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0
SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwotICAgICAg
ICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
V29yZEdyYW51bGFyaXR5KTsKLSAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5n
Rm9yTGluZVJ1bGVzLnN0YXJ0KCk7Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2lu
ZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2lu
dC4KLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0
aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFm
dWxsQ2hhcmFjdGVyUmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
LSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7Ci0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtl
UmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQo
KSk7Ci0gICAgfQotICAgIAotICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVj
dGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBb
W05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxl
Y3Rpb246bmlsXTsKLSAgICAKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxs
Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9w
dE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0
ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0
ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRp
b24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1
cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdo
bGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotfQotCi1z
dGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxl
Y3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBj
aGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRl
ckVuZCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBzaXplX3Qg
b3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKLSAgICBbc2VsZWN0aW9u
IGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAg
IAotICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5n
dGggLSBvcmlnaW5hbExlbmd0aDsKLSAgICAKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlv
bkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICBjaGFyYWN0ZXJzQWRkZWRB
ZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFy
YWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci19Ci0KLXN0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlM
b29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKLXsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0
ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERv
bid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0g
ICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQotICAgICAgICBy
ZXR1cm4geyBAIiIsIG5pbCB9OwotCi0gICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0
aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKLQotICAgIC8vIEFzIGNv
bnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUg
YW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlv
bkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVk
QmVmb3JlU3RhcnQgPSAwOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9
IDA7Ci0gICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5n
ZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0
ZXJFbmQpOwotCi0gICAgYXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxv
b2t1cCBzdHJpbmddOwotICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0
ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7Ci0KLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0g
YWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0
U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGV4dHJhY3Rl
ZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICBpZiAoZXh0cmFj
dGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHsgc2VsZWN0
aW9uLnN0cmluZywgbmlsIH07Ci0KLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSBy
YW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOwotICAgIE5TSW50
ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFj
dGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3Ro
KTsKLQotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJl
Zm9yZV07Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFm
dGVyXTsKLQotICAgIEFTU0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1
bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOwot
ICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLQotICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci19Ci0KLXN0YXRpYyBp
ZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBzaG93UG9wdXBPckNyZWF0
ZUFuaW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25z
dCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcs
IGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9y
SW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0
UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlv
bnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIGlm
IChOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0
KCkpCi0gICAgICAgIFttdXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0
aW9uc107Ci0KLSAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUo
ZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8
UlZQcmVzZW50ZXI+IHByZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5j
ZSgpIGluaXRdKTsKLSAgICAKLSAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKLSAgICBOU1BvaW50
IHBvaW50ZXJMb2NhdGlvbjsKLSAgICAKLSAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250
ZW50SW1hZ2UoKSkgewotICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2so
dGV4dEluZGljYXRvci5nZXQoKSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJ
blZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGlu
Z1JlY3RDb29yZGluYXRlcygpWzBdOwotICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVj
dEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3Vu
ZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9u
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJvb3RW
aWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB0ZXh0Qm91bmRpbmdS
ZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0
ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICAgICAgc2VsZWN0aW9u
Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25D
YWxsYmFjayhzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3Zl
QnkodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAg
ICBoaWdobGlnaHRSZWN0ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7
Ci0gICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRl
cy5sb2NhdGlvbigpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBOU1BvaW50IHRl
eHRCYXNlbGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOwotICAgICAgICAK
LSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29u
dmVydFBvaW50OnRleHRCYXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKLSAgICB9Ci0gICAgCi0g
ICAgUmV0YWluUHRyPFdlYlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMo
W1tXZWJSZXZlYWxIaWdobGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxp
Z2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJ
bWFnZSgpIGF0dHJpYnV0ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3Ry
aW5nLmdldCgpXSk7Ci0gICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9p
bnRlckxvY2F0aW9uSW5WaWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHRE
ZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5n
ZXQoKV0pOwotICAgIAotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxv
Y1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmli
dXRlZFN0cmluZy5nZXQoKS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0p
OwotICAgIAotICAgIFt3ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdo
bGlnaHQgPSBXVEZNb3ZlKHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1v
dmUoY2xlYXJUZXh0SW5kaWNhdG9yKV0gewotICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9y
KQotICAgICAgICAgICAgY2xlYXJUZXh0SW5kaWNhdG9yKCk7Ci0gICAgfV07Ci0gICAgCi0gICAg
aWYgKGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBbcHJlc2VudGVy
IGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5p
bCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAgICBbcHJl
c2VudGVyIHJldmVhbEl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRp
bmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIHJldHVybiBuaWw7Ci0K
LSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLXZv
aWQgRGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8m
IGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2
b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywg
Y29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3
Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRp
Y2F0b3IpCi17Ci0gICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNl
LCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2Fs
bGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4
dEluZGljYXRvcikpOwotfQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCi17
Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgaWYgKCFnZXRMVUxvb2t1
cERlZmluaXRpb25Nb2R1bGVDbGFzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgW2dldExVTG9v
a3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkgaGlkZURlZmluaXRpb25dOwotCi0gICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlcj4gRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVw
KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAq
dmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3Qo
RmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgcmV0dXJuIHNob3dQb3B1
cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2
aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDllZWZiOTc4NGZiZTY4OWIwOTBh
NWIwMWZjZWVjZTcwZDY1NDEzMmQuLjE5NTVkNjJkNDBiMWQ4NmU0ZGQ1MTBlYjE0ODg2MWQ0YmRh
Njk3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC03
MzUsNiArNzM1LDkgQEAgc3RydWN0IF9VSVdlYlRvdWNoRXZlbnQgewogICAgIGJvb2wgaXNQb3Rl
bnRpYWxUYXA7CiB9OwogCitAaW50ZXJmYWNlIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIDog
VUlHZXN0dXJlUmVjb2duaXplcgorQGVuZAorCiBAY2xhc3MgVUlXZWJUb3VjaEV2ZW50c0dlc3R1
cmVSZWNvZ25pemVyOwogCiBAcHJvdG9jb2wgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25p
emVyRGVsZWdhdGUgPE5TT2JqZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQppbmRleCBmNTY4NzVkZmYzYTFjYzQ1ZWJlZTYxNzIx
NWNlOTU3MjNmNTNkZTRlLi42NWFlY2Q5MjE5MmZlNjY2MWYxYmFhNDJkMzQwNzg2Y2U0ZDFkNTMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlD
b2NvYS5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9y
dCAiU2FmZUJyb3dzaW5nU1BJLmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCisj
aW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgog
I2ltcG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgpAQCAtMTg5LDUgKzE5MCwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1D
bG9uZUF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNobWVudD4mJiBmcm9tQXR0YWNobWVudAogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICAKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOworfQogCit2b2lkIFdl
YlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQor
eworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJy
ZW50U2VsZWN0aW9uKCksIG1fcGFnZUlEKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLmgKaW5kZXggYzQ4YzM5ZDY2ZGMxMzk2NDIwNTY1NGI5ZDU0MGYwZjY4Nzg4NDIwYS4u
OWRjMzkwOGNiMTA3NjBiZTgyNGE1OWNjZmJlNmY5MzNiNzhmYmY1MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApA
QCAtODcsNiArODcsNyBAQCBjbGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5Owog
Y2xhc3MgV2ViUGFnZVByb3h5OwogfQogCitAY2xhc3MgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6
ZXI7CiBAY2xhc3MgX1VJSGlnaGxpZ2h0VmlldzsKIEBjbGFzcyBfVUlXZWJIaWdobGlnaHRMb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI7
CkBAIC0yMTQsNiArMjE1LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIAogI2lm
IFBMQVRGT1JNKElPU01BQykKICAgICBSZXRhaW5QdHI8VUlIb3Zlckdlc3R1cmVSZWNvZ25pemVy
PiBfaG92ZXJHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8X1VJTG9va3VwR2VzdHVy
ZVJlY29nbml6ZXI+IF9sb29rdXBHZXN0dXJlUmVjb2duaXplcjsKICNlbmRpZgogCiAgICAgUmV0
YWluUHRyPFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQ+IF90ZXh0U2VsZWN0aW9uQXNzaXN0
YW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMjFkMzE3NzAwNmIxYzZkZjAxNmJhYmYzZTBjMzZhNzM4
ODQyYTA5Mi4uMjc3NzUwODRlZTkyNGRhZmQwNTUwNjlmZjdlYjNkNzdkNDk5NzFhOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCkBAIC0xMTIsNiArMTEyLDcgQEAKICNpZiBQTEFURk9STShJT1NNQUMpCiAjaW1w
b3J0ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW1wb3J0IDxVSUtpdC9VSUhvdmVyR2VzdHVy
ZVJlY29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJS2l0L19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVy
Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CiAjZW5kaWYK
IApAQCAtNjQ5LDYgKzY1MCwxMSBAQCAtICh2b2lkKXNldHVwSW50ZXJhY3Rpb24KICAgICBfaG92
ZXJHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIg
YWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfaG92ZXJHZXN0dXJl
UmVjb2duaXplckNoYW5nZWQ6KV0pOwogICAgIFtfaG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXRE
ZWxlZ2F0ZTpzZWxmXTsKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0
dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCisgICAgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVy
ID0gYWRvcHROUyhbW19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRh
cmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOildKTsK
KyAgICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtz
ZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07
CisgICAgCiAjZW5kaWYKIAogICAgIF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0
TlMoW1tXS1N5bnRoZXRpY0NsaWNrVGFwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRo
VGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2luZ2xlVGFwQ29tbWl0ZWQ6KV0pOwpAQCAt
NzUzLDYgKzc1OSw5IEBAIC0gKHZvaWQpY2xlYW51cEludGVyYWN0aW9uCiAjaWYgUExBVEZPUk0o
SU9TTUFDKQogICAgIFtfaG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwog
ICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKKyAgICAKKyAgICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRl
Om5pbF07CisgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogCiAgICAgW19zaW5nbGVUYXBHZXN0dXJlUmVjb2du
aXplciBzZXREZWxlZ2F0ZTpuaWxdOwpAQCAtODM2LDYgKzg0NSw3IEBAIC0gKHZvaWQpX3JlbW92
ZURlZmF1bHRHZXN0dXJlUmVjb2duaXplcnMKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2du
aXplcjpfdHdvRmluZ2VyU2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBM
QVRGT1JNKElPU01BQykKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJH
ZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6
ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBAIC04NTAs
NiArODYwLDcgQEAgLSAodm9pZClfYWRkRGVmYXVsdEdlc3R1cmVSZWNvZ25pemVycwogICAgIFtz
ZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl90d29GaW5nZXJTaW5nbGVUYXBHZXN0dXJlUmVjb2du
aXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtzZWxmIGFkZEdlc3R1cmVS
ZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICBbc2VsZiBhZGRH
ZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlm
CiB9CiAKQEAgLTE0NTAsNiArMTQ2MSwxMCBAQCAtIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihV
SUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaQogCiAg
ICAgaWYgKFtnZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJl
Y29nbml6ZXIgY2xhc3NdXSB8fCBbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNz
OltVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFlFUzsK
KyAgICAKKyAgICBpZiAoKFtnZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29r
dXBHZXN0dXJlUmVjb2duaXplciBjbGFzc11dICYmIFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlz
S2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkgfHwgKFtv
dGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIgY2xhc3NdXSAmJiBbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJ
TG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkpCisgICAgICAgIHJldHVybiBZRVM7CisK
ICNlbmRpZgogICAgIGlmIChpc1NhbWVQYWlyKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1
cmVSZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCks
IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50LmdldCgpLmZvcmNlUHJlc3NHZXN0dXJlKSkKICAgICAg
ICAgcmV0dXJuIFlFUzsKQEAgLTYwMzMsNiArNjA0OCwxMiBAQCAtIChCT09MKWFsbG93c0RpY3Rh
dGlvbklucHV0Rm9yTGlzdFZpZXdDb250cm9sbGVyOihQVUlDUXVpY2tib2FyZFZpZXdDb250cm9s
bGVyCiAjZW5kaWYgLy8gUExBVEZPUk0oV0FUQ0hPUykKIAogI2lmIFBMQVRGT1JNKElPU01BQykK
Ky0gKHZvaWQpX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOihVSUdlc3R1cmVSZWNvZ25pemVyICop
Z2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBOU1BvaW50IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0
ZXMgPSBbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRpb25JblZpZXc6c2VsZl07CisgICAgX3BhZ2Ut
PnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KGxv
Y2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKTsKK30KKwogLSAodm9pZClfaG92ZXJHZXN0dXJlUmVj
b2duaXplckNoYW5nZWQ6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgog
ewogICAgIGlmICghX3BhZ2UtPmlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IGRjODAyODM2ZGQ2MGU4NDJkYWExM2FmNDQ0
YjJmNzk3OTIyMjA0OTAuLmQ5OThiYjU2MmVhNjczNDZjMzFiMzMwODMzZjJiYzJmYjBmOTZmYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpA
QCAtMTIxLDExICsxMjEsNiBAQCBib29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21Q
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2Vi
UGFnZVByb3h5OjpnZXN0dXJlQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50
LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBm
bGFncywgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Nh
bGxiYWNrcy50YWtlPEdlc3R1cmVDYWxsYmFjaz4oY2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQppbmRleCAxNWM3ZDc2MTUzNjIz
NGI2YmNjYmEwZmRmM2JkN2M2MGE5NmMzZWYyLi5iYmQ4Nzk5OTkxMjQwMDM3NDlkMDJmM2Q0Mzg5
Mzg0ZDBkMjYyY2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2Vi
UGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0KQEAgLTMyMywyMiArMzIzLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBy
b21pc2VkRGF0YUZvckltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFMK
IAogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFp
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3Bh
Z2VJRCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9m
Q3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7Ci19Ci0KIC8vIENvbXBs
ZXggdGV4dCBpbnB1dCBzdXBwb3J0IGZvciBwbHVnLWlucy4KIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRl
eCAzZTc5NDMxZjkzNzExNGM0MWY5ZDJkZmQ1OGUwYjRmNzIxODE1OWE2Li5hMzhjZDJiZjYzNzk0
YzhlOWYxZDIxMmEzZTc4YjNlOGM0ZWY4YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC0yNiw5ICsyNiwy
MCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAKKwogI2ltcG9y
dCAiTG9hZFBhcmFtZXRlcnMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldl
YlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFu
ZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTENvbnZlcnRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL05vZGVSZW5kZXJTdHlsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Q
bGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxl
bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogCkBAIC01OSw2ICs3MCwxMTQgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QWN0aXZl
Tm93UGxheWluZ1Nlc3Npb25JbmZvKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIAogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Tm93UGxheWluZ0luZm9DYWxsYmFjayhoYXNBY3RpdmVT
ZXNzaW9uLCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlv
biwgZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKIH0KKyAgICAK
K3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIGZsb2F0UG9pbnQpCit7CisgICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVn
aW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChwbHVn
aW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRo
ZSBwb2ludCBpcyBvdmVyLgorICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWlu
RnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5G
cmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2lu
dCkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9u
czsKKyAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/
IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpCb3VuY2UpOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKQoreworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKKyAgICBO
U0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9u
cykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOworICAg
IGlmIChzZWxlY3RlZFJhbmdlKQorICAgICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJh
bmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlv
bik7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRT
ZWxlY3Rpb24oKQoreworICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNl
bGVjdGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworfQorICAgIAor
dm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFt
ZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9u
YXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25U
cmFuc2l0aW9uKSkpOworfQorCitEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9u
YXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50
YXRpb25UcmFuc2l0aW9uKQoreworICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7
CisgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CisgICAg
CisgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIGlmIChy
YW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRv
ci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
IGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOworICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBpZiAocXVh
ZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAg
fQorICAgIAorICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1Rv
V2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIAorICAgIGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUo
KTsKKyAgICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygp
LmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkgOiAwOworICAgIGRpY3Rpb25hcnlQb3B1cElu
Zm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2Nh
bGVkQXNjZW50KTsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOwor
CisjaWYgUExBVEZPUk0oTUFDKQorCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0
ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVk
ZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOworICAgIAorICAgIFJldGFpblB0cjxOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0
cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CisgICAgCisgICAgTlNGb250TWFuYWdlciAqZm9udE1h
bmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgCisgICAgW25z
QXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgw
LCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNE
aWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAg
ICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRv
cHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOworICAgICAgICAKKyAgICAgICAgTlNGb250
ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5h
bWVdOworICAgICAgICBpZiAoZm9udCkKKyAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIg
Y29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3Io
KV07CisgICAgICAgIGlmIChmb250KQorICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0
T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAKKyAgICAg
ICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0
ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOworICAgIH1dOworCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorICAgIAorICAgIFRleHRJbmRpY2F0b3JPcHRpb25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0
SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxl
eFJhbmdlczsKKyAgICBpZiAocHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQorICAgICAgICBpbmRp
Y2F0b3JPcHRpb25zIHw9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2Vs
ZWN0aW9uSGlnaGxpZ2h0OworICAgIAorICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5k
aWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JP
cHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKKyAgICBpZiAoIXRleHRJbmRpY2F0b3Ip
IHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2Up
OworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAg
ZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgp
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRT
dHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorICAgIAorICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNl
KTsKKyAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCmluZGV4IDQ2Y2QwNTBkNWUwMDQ2ZDBmZjBhMzcxZDAzMjE0MjVkZjQw
YmJjMGYuLjU5NDljNWUwMGM3OWRhMWZhNGI5ZTliOTY5MzFlMzNmZjMwMjQ0YzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgpAQCAtMTkxLDkgKzE5MSw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIg
ewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICMgRGljdGlvbmFyeSBzdXBwb3J0LgogICAgIFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50
KQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24oKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZWUwODJjNGE5ZjRhNDQz
ZTMwYjI2ZGU2ZmQwNjRiMmZhYmQxZTU2Ny4uMTFkMGM1OGI1ODUzMDMwMWFjM2M1ZjgwMDcwZmY4
YWMzNGExZWU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxMywyMSArNDEzLDYgQEAgdm9pZCBXZWJQYWdlOjpzZW5k
Q29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24o
RnJhbWUmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdl
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiwgUmFuZ2UmLCBOU0RpY3Rp
b25hcnkgKiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2
aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNDczM2IxY2JmMmZlNDVjZDlkMGNlYTdl
ZWY5YmM3YzM4YWZhZjdlNC4uZmE3YTZhYWYxYjYwYmRhOTBkY2QwNzliYTFhOTQzNmYxMjE2YjBk
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KQEAgLTM4OSwxMDIgKzM4OSw3IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2VsZWN0
aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxiYWNrKGZvbnROYW1lLCBmb250U2l6ZSwgc2VsZWN0aW9u
SGFzTXVsdGlwbGVGb250cywgY2FsbGJhY2tJRCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQ
b2ludCkKLXsKLSAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgm
bV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KLSAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRv
d1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUocmFu
Z2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVz
dWx0KTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBmcmFt
ZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0aW9u
cywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Ci19Ci0KLXZv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZy
YW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAgICBz
dGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBv
cHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLX0KIAotdm9pZCBXZWJQYWdlOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgYXV0byYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJv
dW5jZUFuZENyb3NzZmFkZSk7Ci19Ci0KLURpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGlj
dGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0
b3IoKTsKLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsK
LQotICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBpZiAo
cmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0
b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVy
biBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1
YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBpZiAocXVhZHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJ
bmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQot
Ci0gICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
cXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0KLSAgICBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7Ci0gICAgZmxv
YXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAq
IHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9
IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7
Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKLQotICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsK
LQotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJp
YnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7Ci0KLSAgICBOU0Zv
bnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2Vy
XTsKLQotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNp
bmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAq
c3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0
cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLQotICAgICAgICBO
U0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGlmIChmb250KQotICAgICAgICAgICAgZm9udCA9IFtmb250TWFu
YWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZh
Y3RvcigpXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRl
cyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAg
W3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMu
Z2V0KCkgcmFuZ2U6cmFuZ2VdOwotICAgIH1dOwotCi0gICAgVGV4dEluZGljYXRvck9wdGlvbnMg
aW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQ
YWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOwotICAgIGlmIChwcmVzZW50YXRpb25UcmFu
c2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRD
cm9zc2ZhZGUpCi0gICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9wdGlv
bkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7Ci0KLSAgICBSZWZQdHI8VGV4
dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5n
ZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAg
aWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9u
YXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87
Ci0gICAgfQotCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dElu
ZGljYXRvci0+ZGF0YSgpOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmlu
ZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZzsKLQotICAgIGVkaXRvci5zZXRJc0dldHRpbmdE
aWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5m
bzsKLX0KIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCkBAIC01MzksMTEgKzQ0NCw2IEBA
IERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclNlbGVj
dGlvbkluUERGUGx1Z2luKFBERlNlbGVjCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5T
RGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24g
cHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5n
ZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Ci19Ci0K
IGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIC8vIEZpcnN0
IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5jZSB0byBoYW5kbGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355134</attachid>
            <date>2018-11-16 14:56:38 -0800</date>
            <delta_ts>2018-11-16 15:13:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116145637.patch</filename>
            <type>text/plain</type>
            <size>75054</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Mjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI0YjI4MTNlNmMwZTcw
MDY2MTU2NTA1NGY3ZTU4ZDZlOTg4Zjk1OS4uNWFmNGZlYjAxN2FiMWJiZWJiYzQ2NzMwODAxZGNk
ODk3ZDczYjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTYg
IFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBodG1s
e2NvbG9yOnRleHR9IHRvIHRoZSBzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0IG9uIG1hY09TLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggYzUyMjE2MTBmY2E2MzdmY2FmYWE4NTgyZjQ3MGE1OWQyMjAz
YzE5Mi4uZTM0ZWFkZTMyYWVkMTA4NmU0YjliN2UwMzdhNDQ3ZjNjZTVmOTEzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxt
ZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBi
ZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGFsL3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICog
cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6CisKIDIwMTgtMTEtMTYgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBSZWdyZXNzaW9uOiBXZWJDb250ZW50IHBy
b2Nlc3MncyBkaXNwbGF5IG5hbWUgaXMgbm8gbG9uZ2VyIHNldApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3MTgzOGJk
NjBiODRlMzI1MDJiZGM4MmY4Njc5ZDA0MWVkZmQxYjRmLi5kYzg2YjFmYzA5YjQyZWZjYzY0Zjk1
MjM4MTYzMzBkOTVmOTRhNzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE4LTExLTE1
ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMb29rdXAgaXMgYmVpbmcgcmVw
bGFjZWQgYnkgUmV2ZWFsLiBUaGlzIGZyYW1ld29yayBzaG91bGQgd29yayBvbiBhbGwgcGxhdGZv
cm1zLgorICAgICAgICBUaGUgcGF0Y2ggbW92ZXMgdGhlIGNvZGUgdGhhdCB3ZSBleHBlY3Qgd2ls
bCBiZSBuZWVkZWQgZm9yIGFsbCBwbGF0Zm9ybXMgdG8gdGhlIG1vcmUKKyAgICAgICAgZ2VuZXJh
bCBjb2NvYSBhcmVhLiBUaGlzIHBhdGNoIGNoYW5nZXMgbm8gZnVuY2F0aW9uYWxpdHksIGFuZCBz
aG91bGQgbm90IGNoYW5nZQorICAgICAgICBhbnl0aGluZyBjdXJyZW50bHkuIFRoaXMgd29yayB3
aWxsIGJlIGJ1aWxkIG9uIGxhdGVyIHdoZW4gUmV2ZWFsIGlzIHJlYWR5IHRvIHN1cHBvcnQKKyAg
ICAgICAgbXVsdGlwbGUgcGxhdGZvcm1zLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldHVw
SW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjbGVhbnVwSW50ZXJhY3Rp
b25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNv
Z25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hZGREZWZhdWx0R2VzdHVyZVJl
Y29nbml6ZXJzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJlY29nbml6ZXI6
c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yUmFuZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1
dG9tYXRpYyBwcm9jZXNzIHByZXdhcm1pbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBpZiBQU09OIGlz
IGVuYWJsZWQgdmlhIGV4cGVyaW1lbnRhbCBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
UEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIxNTUyZGY3Zjc1ZmM1Mzli
Yjg3NTZkMDg0OWI1NGQ2ODY5NTU0MDkuLjE4MjQ3ZDY0YzlkMzAyOTk2MzA1ZmNjNTQ3MjM1YzRj
YjU0MWJlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTQwMiw2ICs0MDIsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERC
QzMxNyAvKiBQYXNzS2l0U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8q
IHB0aHJlYWRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6
Q29yZVNQSS5oICovLAorCQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEku
aCAqLywKIAkJCQk1NzBBQjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJ
CTBDMkRBMTJCMUYzQkVCNDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00
NjcsNyArNDY4LDYgQEAKIAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEku
aCAqLywKIAkJCQlBMTAyNjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8s
CiAJCQkJMEM3Nzg1ODcxRjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAot
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3
NUI0ODFGNkFGRjhFMDBDNEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3
Nzg1ODgxRjQ1MTMwRjAwRjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU1ZWY0
YWI2NWZiZTQ0YmI2MTQ4ZmY5ZDE5MjQ0YzczMTRlMWY0MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BS
SVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZl
YWxDb3JlKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitT
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50
ZXIuaD4KKyNpbXBvcnQgPFJldmVhbC9SZXZlYWwuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisjaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxDb3Jl
L1JldmVhbENvcmUuaD4KKworI2Vsc2UgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworCisK
K0BpbnRlcmZhY2UgUlZJdGVtIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFu
Z2Upc2VsZWN0ZWRSYW5nZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50
ZXJmYWNlIFJWU2VsZWN0aW9uIDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdElu
ZGV4OihOU1VJbnRlZ2VyKWNsaWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFs
dWUgKj4gKilzZWxlY3RlZFJhbmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91
bGRVcGRhdGVTZWxlY3Rpb247CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50aW5nQ29udGV4
dCA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZp
ZXc6KE5TUG9pbnQpcG9pbnRlckxvY2F0aW9uSW5WaWV3IGluVmlldzooTlNWaWV3ICopdmlldyBo
aWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4paGlnaGxp
Z2h0RGVsZWdhdGU7CitAZW5kCisKK0Bwcm90b2NvbCBSVlByZXNlbnRlckhpZ2hsaWdodERlbGVn
YXRlIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAoTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXJldmVh
bENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJ
dGVtICopaXRlbTsKK0BvcHRpb25hbAorLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRp
bmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbTsK
Ky0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgZHJh
d1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKK0BlbmQKKworQGludGVyZmFjZSBSVlByZXNl
bnRlciA6IE5TT2JqZWN0CisjaWYgUExBVEZPUk0oTUFDKQorLSAoaWQ8TlNJbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyPilhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTooUlZJdGVt
ICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250
ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0Nv
bnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCistIChCT09MKXJldmVhbEl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0
OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDoo
UlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlv
bmFyeSAqKW9wdGlvbnM7CitAZW5kCisKKyNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEku
aCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaAppbmRleCBlYjdm
OTUxZjcxYzc1YzgxMjE3YjIyZTc4YWRhZDMwZTRkNmE1YzA0Li5lMGEzMzc1ZDMwY2M4ODlmMTM1
ZWEyYTExZDQ3ZDBkYTk0Zjk4YTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFj
L0xvb2t1cFNQSS5oCkBAIC0yMywxMiArMjMsMTMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
KworI2lmIFBMQVRGT1JNKE1BQykKKwogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0
IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKLQogU09GVF9M
SU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKExvb2t1cCkKIFNPRlRfTElOS19DTEFTU19P
UFRJT05BTChMb29rdXAsIExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZSkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkNmI4ZGE0MmM4NTk5MGFlMzJlYTY3YTBhZjc3NTNmM2RiOTgyOGE1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL21hYy9SZXZlYWxTUEkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgPG9i
amMvcnVudGltZS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0
dXJlUmVjb2duaXplclNQSS5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0KLVNPRlRf
TElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWwpCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdP
UksoUmV2ZWFsQ29yZSkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2Vu
dGVyKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50aW5nQ29udGV4
dCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVkl0ZW0pCi1TT0ZUX0xJ
TktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZTZWxlY3Rpb24pCi0KLSNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQotCi0jaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50ZXIuaD4KLSNpbXBv
cnQgPFJldmVhbC9SZXZlYWwuaD4KLSNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4K
LSNpbXBvcnQgPFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgotCi0KLSNlbHNlCi0KLUBpbnRlcmZh
Y2UgUlZJdGVtIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0
ZWRSYW5nZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotQGVuZAotCi1AaW50ZXJmYWNlIFJW
U2VsZWN0aW9uIDogTlNPYmplY3QKLSsgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJ
bnRlZ2VyKWNsaWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilz
ZWxlY3RlZFJhbmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVT
ZWxlY3Rpb247Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAotLSAo
aWQ8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilhbmltYXRpb25Db250cm9s
bGVyRm9ySXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250
ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250
ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsK
LS0gKEJPT0wpcmV2ZWFsSXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9j
dW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNl
bnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICop
b3B0aW9uczsKLUBlbmQKLQotI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggY2I2ZGVjYjE3YzFlMGUyZWE1NzdkMjQyODZlNjYzNWRj
NzJmNjk3Ny4uNDRhYWNiYTIxZDMzMDQ4OWVjZDU0NjkxZDIzMTI0M2Q4MTU5MTgzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC04NCw2ICs4NCw3IEBAIGVkaXRpbmcvU2VsZWN0aW9uUmVj
dEdhdGhlcmVyLmNwcAogZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKIAogZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCitlZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KIGVk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KIGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZUNo
YW5nZXNDb2NvYS5tbQogZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCkBAIC05
Nyw3ICs5OCw2IEBAIGVkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCiBlZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KIAogZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9s
bGVyLm1tCi1lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KIGVkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODgwY2ZjNGY2MTFiOTQwMTI4MDFmNmRkZjgw
NmI3MzRkNjkwNmI4ZC4uNmI0ZDYyMDA0ZTc3NGQ1M2UxMGMxYzA4ZmNmNjU2ODczMmNhYjlmYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjA0MTksNiArMjA0MTksNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQzUyMjdERUYx
QzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKIAkJCQlDNTIyN0RGMDFDM0M2
REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSAqLywKKwkJCQk5MzdGRjNENjFBMTAxMzFC
MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk5QjU1RUVFODFCM0U4ODk4
MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRD
QTcyIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0gKi8sCiAJCQkJRjQ4RDJBNzUyMTU2
RkU1NzAwQzY3NTJCIC8qIEZvbnRBdHRyaWJ1dGVzQ29jb2EubW0gKi8sCkBAIC0yNjE0MCw3ICsy
NjE0MSw2IEBACiAJCQkJQ0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4
dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNFN0IyREIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTM3RkYzRDQxQTEwMTJENjAwOEVC
QTMxIC8qIERpY3Rpb25hcnlMb29rdXAuaCAqLywKLQkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJB
MzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk0NDI5NTZDQTIxOEE2RDMwMDA4MERC
NTQgLyogRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSAqLywKIAkJCQlFRDUwMURDNTBCMjQ5RjI5
MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovLAogCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZG
MCAvKiBGcmFtZVNlbGVjdGlvbk1hYy5tbSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDVkMmVmZDk4NDljNDNk
YjU1MjZkN2FkNmQzYzQ3ZDE5MzQ4Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0wLDAgKzEsNDI0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3Rpb25hcnlM
b29rdXAuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaW1wb3J0ICJEb2N1bWVudC5oIgor
I2ltcG9ydCAiRWRpdGluZy5oIgorI2ltcG9ydCAiRm9jdXNDb250cm9sbGVyLmgiCisjaW1wb3J0
ICJGcmFtZS5oIgorI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxDb252
ZXJ0ZXIuaCIKKyNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJSYW5nZS5oIgorI2ltcG9ydCAiUmVu
ZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKKyNpbXBvcnQgIlZpc2libGVQ
b3NpdGlvbi5oIgorI2ltcG9ydCAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2ltcG9ydCAiVmlzaWJs
ZVVuaXRzLmgiCisjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2Nv
Y29hL1JldmVhbFNQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+CisjaW1w
b3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgor
CisjaWYgRU5BQkxFKFJFVkVBTCkKKworI2lmIFBMQVRGT1JNKE1BQykKKworQGludGVyZmFjZSBX
ZWJSZXZlYWxIaWdobGlnaHQgPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmpl
Y3QgeworQHByaXZhdGUKKyAgICBGdW5jdGlvbjx2b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7
CisgICAgTlNSZWN0IF9oaWdobGlnaHRSZWN0OworICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGln
aHQ7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpfYXR0cmlidXRlZFN0cmluZzsKK30KKworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCB1c2VEZWZhdWx0SGlnaGxpZ2h0OworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmc7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVj
dCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hs
aWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0
cmluZzsKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYp
Y2xlYXJUZXh0SW5kaWNhdG9yOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxI
aWdobGlnaHQKKworQHN5bnRoZXNpemUgaGlnaGxpZ2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKK0Bz
eW50aGVzaXplIHVzZURlZmF1bHRIaWdobGlnaHQ9X3VzZURlZmF1bHRIaWdobGlnaHQ7CitAc3lu
dGhlc2l6ZSBhdHRyaWJ1dGVkU3RyaW5nPV9hdHRyaWJ1dGVkU3RyaW5nOworCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZh
dWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzoo
TlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfaGlnaGxp
Z2h0UmVjdCA9IGhpZ2hsaWdodFJlY3Q7CisgICAgX3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VE
ZWZhdWx0SGlnaGxpZ2h0OworICAgIF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmlu
ZzsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDbGVhclRleHRJbmRp
Y2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3IKK3sKKyAgICBfY2xl
YXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpOworfQorCistIChO
U0FycmF5PE5TVmFsdWUgKj4gKilyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICop
Y29udGV4dCByZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBAW1tOU1ZhbHVl
IHZhbHVlV2l0aFJlY3Q6c2VsZi5oaWdobGlnaHRSZWN0XV07Cit9CisKKy0gKHZvaWQpcmV2ZWFs
Q29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbToo
UlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICAKKyAgICBmb3Ig
KE5TVmFsdWUgKnJlY3RWYWwgaW4gY29udGV4dC5pdGVtUmVjdHNJblZpZXcpIHsKKyAgICAgICAg
TlNSZWN0IHJlY3QgPSByZWN0VmFsLnJlY3RWYWx1ZTsKKworICAgICAgICAvLyBHZXQgY3VycmVu
dCBmb250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBh
ZGQgcGFyYWdyYXBoIHN0eWxlIGF0dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50ZXIgdGV4dC4KKyAg
ICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0
dHJpYnV0ZWRTdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxm
LmF0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSldXSk7CisgICAgICAgIFJldGFpblB0cjxOU011dGFi
bGVQYXJhZ3JhcGhTdHlsZT4gcGFyYWdyYXBoID0gYWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFw
aFN0eWxlIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5T
VGV4dEFsaWdubWVudENlbnRlcl07CisgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJh
Z3JhcGguZ2V0KCkgZm9yS2V5Ok5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKKyAgICAK
KyAgICAgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRl
ZFN0cmluZyBzdHJpbmddIGF0dHJpYnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0pOworICAgICAgICBb
c3RyaW5nIGRyYXdJblJlY3Q6cmVjdF07CisgICAgfQorfQorCistIChCT09MKXJldmVhbENvbnRl
eHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGln
aHRGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwor
ICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICByZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxp
Z2h0OworfQorCistICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilj
b250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICBhdXRvIGJsb2Nr
ID0gV1RGTW92ZShfY2xlYXJUZXh0SW5kaWNhdG9yKTsKKyAgICBpZiAoYmxvY2spCisgICAgICAg
IGJsb2NrKCk7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworI2VuZGlm
IC8vIEVOQUJMRShSRVZFQUwpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShS
RVZFQUwpCisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAg
aWYgKCFnZXRSVkl0ZW1DbGFzcygpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
KyAgICAKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OworCisgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50
LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KKyAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdl
IGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KKyAg
ICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7
CisgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwor
CisgICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAg
ICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7CisgICAgTlNSYW5n
ZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0
aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7CisgICAgCisgICAgUmVm
UHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHBhcmFncmFwaEVuZCk7CisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENo
YXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHRO
UyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVk
UmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKKyAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5n
ZXQoKS5oaWdobGlnaHRSYW5nZTsKKyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdo
bGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworICAgIAorICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1
cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQorewor
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRl
bUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1
dG8qIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmls
IH07CisKKyAgICBhdXRvKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERv
bid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisg
ICAgYXV0byBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9k
ZUZyYW1lKCk7CisgICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKKyAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvIHBvc2l0aW9uID0gZnJh
bWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOworICAgIGlmIChwb3NpdGlv
bi5pc051bGwoKSkKKyAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUobm9kZSk7CisKKyAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7CisgICAgaW50IGhpdEluZGV4OworICAgIFJlZlB0
cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOworICAgIAorICAgIGlmIChzZWxlY3Rpb24uc2Vs
ZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7CisgICAg
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAg
ICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5k
aW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KKyAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOworICAgICAgICBhdXRvIHBhcmFncmFwaEVu
ZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBhdXRv
IHJhbmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uU3RhcnQpOworICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBmdWxsQ2hh
cmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Cisg
ICAgICAgIAorICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0
KCkpKTsKKyAgICAgICAgCisgICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGlu
ZVJ1bGVzIHsgcG9zaXRpb24gfTsKKyAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVS
dWxlcy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgIHBv
c2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOworICAgICAg
ICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRl
eHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5n
ZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUw
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQorICAgICAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIAorICAgICAgICBzZWxlY3Rpb25S
YW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgICAgICBoaXRJbmRleCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBOU1Jhbmdl
IHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRl
eDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVj
dGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07CisgICAgCisgICAgU3RyaW5n
IGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICBS
ZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGlu
aXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOworICAg
IE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworCisg
ICAgaWYgKGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdo
dFJhbmdlLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisg
ICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBo
aWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Cisg
ICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKKyAgICAKK30KKworc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlD
aGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFy
YWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5T
SW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworCisgICAgc2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0
cmluZy5sZW5ndGg7CisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJl
ck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKKyAgICAKKyAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVT
dGFydCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7CisgICAgCisg
ICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4
cGFuZF07CisgICAgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxl
bmd0aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7CisKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitzdGQ6OnR1cGxlPE5TU3RyaW5nICos
IE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24o
UERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBu
byBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rp
b24uc3RyaW5nLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKKworICAgIFJl
dGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVj
dGlvbiBjb3B5XSk7CisKKyAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1
MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCisgICAgYXV0
byBvcmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7Cisg
ICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKKyAgICBOU0ludGVn
ZXIgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAwOworICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hh
cmFjdGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVm
b3JlU3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsKKworICAgIGF1dG8gZnVsbFBsYWlu
VGV4dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXTsKKyAgICBhdXRvIHJhbmdl
VG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOworCisg
ICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2Uo
KSBpbml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9Q
YXNzXSk7CisgICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0
UmFuZ2U7CisgICAgCisgICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91
bmQpCisgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgTlNJ
bnRlZ2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0
ZWRSYW5nZS5sb2NhdGlvbjsKKyAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRy
YWN0ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bh
c3MubG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7CisKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNl
bGVjdGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZvcmVdOworICAgIFtzZWxlY3Rpb24gZXh0ZW5k
U2VsZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRlcl07CisKKyAgICBBU1NFUlQoW3NlbGVjdGlv
bi5zdHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dp
dGhSYW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKKyAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5n
LCBuaWwgfTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4g
eyBAIiIsIG5pbCB9OworfQorCitzdGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9y
Q3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIs
IGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAq
dmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3Qo
RmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBpZiAoIWdl
dFJWSXRlbUNsYXNzKCkgfHwgIWdldFJWUHJlc2VudGVyQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9u
cyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgaWYg
KE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQo
KSkKKyAgICAgICAgW211dGFibGVPcHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRp
b25zXTsKKworICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShk
aWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IpOworICAgIAorICAgIFJldGFpblB0cjxS
VlByZXNlbnRlcj4gcHJlc2VudGVyID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNl
KCkgaW5pdF0pOworICAgIAorICAgIE5TUmVjdCBoaWdobGlnaHRSZWN0OworICAgIE5TUG9pbnQg
cG9pbnRlckxvY2F0aW9uOworICAgIAorICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRl
bnRJbWFnZSgpKSB7CisgICAgICAgIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0
ZXh0SW5kaWNhdG9yLmdldCgpKTsKKworICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdElu
Vmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzKClbMF07CisgICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25S
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIAorICAgICAgICBpZiAocm9vdFZp
ZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2spIHsKKyAgICAgICAgICAgIHRleHRCb3VuZGluZ1Jl
Y3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRl
eHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAgICAgICAgICBzZWxlY3Rpb25C
b3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrKHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVC
eSh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7CisgICAgICAg
IGhpZ2hsaWdodFJlY3QgPSBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsK
KyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVz
LmxvY2F0aW9uKCk7CisgICAgICAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIE5TUG9pbnQgdGV4
dEJhc2VsaW5lT3JpZ2luID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW47CisgICAgICAgIAor
ICAgICAgICBoaWdobGlnaHRSZWN0ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9v
dFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252
ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5lT3JpZ2luIHRvVmlldzpuaWxdOworICAgIH0KKyAgICAKKyAg
ICBSZXRhaW5QdHI8V2ViUmV2ZWFsSGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhb
W1dlYlJldmVhbEhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGln
aHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudElt
YWdlKCkgYXR0cmlidXRlZFN0cmluZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJp
bmcuZ2V0KCldKTsKKyAgICBSZXRhaW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9
IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2lu
dGVyTG9jYXRpb25JblZpZXc6cG9pbnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERl
bGVnYXRlOihpZDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0Lmdl
dCgpXSk7CisgICAgCisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9j
UlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1
dGVkU3RyaW5nLmdldCgpLnN0cmluZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7
CisgICAgCisgICAgW3dlYkhpZ2hsaWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hs
aWdodCA9IFdURk1vdmUod2ViSGlnaGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92
ZShjbGVhclRleHRJbmRpY2F0b3IpXSB7CisgICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3Ip
CisgICAgICAgICAgICBjbGVhclRleHRJbmRpY2F0b3IoKTsKKyAgICB9XTsKKyAgICAKKyAgICBp
ZiAoY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIg
YW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmls
IHByZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIFtwcmVz
ZW50ZXIgcmV2ZWFsSXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGlu
Z0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07CisgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyNlbHNlIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oY3JlYXRl
QW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgVU5VU0VEX1BBUkFNKGRpY3Rpb25hcnlQb3B1cElu
Zm8pOworICAgIFVOVVNFRF9QQVJBTSh2aWV3KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dEluZGlj
YXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKTsKKyAgICBVTlVTRURfUEFSQU0ocm9vdFZpZXdUb1Zp
ZXdDb252ZXJzaW9uQ2FsbGJhY2spOworICAgIFVOVVNFRF9QQVJBTShjbGVhclRleHRJbmRpY2F0
b3IpOworICAgIAorICAgIHJldHVybiBuaWw7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAg
IAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCit9CisKK3ZvaWQgRGljdGlv
bmFyeUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25h
cnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJ
bmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RG
OjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7
CisgICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9u
YXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJv
b3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRv
cikpOworfQorCit2b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKworV0tSZXZlYWxDb250cm9s
bGVyIERpY3Rpb25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNv
bnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5z
dGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVj
dCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0
ZUFuaW1hdGlvbkNvbnRyb2xsZXIodHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4
dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25D
YWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKworI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgLy8gRU5BQkxFKFJFVkVB
TCkKKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCit7Cisg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdl
PiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0
KGNvbnN0IEhpdFRlc3RSZXN1bHQmKQoreworICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFJFVkVBTCkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCmluZGV4IGU0YjkwYmRmMjcwNTJi
MDMyZjlhM2NlNDMzNTQzZDFmODc3ODRmNjcuLjg1YzQyNzQxYWJhZDc1N2RkMTBmZTRhNmQ0M2Yx
YmJhNzNkZmY2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2Vi
Q29udGVudFJlYWRlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
V2ViQ29udGVudFJlYWRlckNvY29hLm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJEb2N1
bWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRM
b2FkZXIuaCIKKyNpbXBvcnQgIkVkaXRvci5oIgorI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCiAj
aW1wb3J0ICJGaWxlLmgiCiAjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCiAjaW1wb3J0ICJGcmFtZS5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCmluZGV4
IGNiNmQ1M2ViOGY4YzRjZmQzODk0NTdmNWJlYWUyODNhMzdkYTgxOTIuLmY4Zjc2MWNkYzgxYWVi
ZDNkZjA4ODM3YTMyMzFjMDhmMzVhNGZlYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKQEAgLTIzLDE1ICsyMywyNSBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZiBQTEFURk9STShNQUMpCisjcHJhZ21h
IG9uY2UKKworI2lmIFBMQVRGT1JNKENPQ09BKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeVBvcHVw
SW5mby5oIgotI2luY2x1ZGUgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXJTUEkuaD4KKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL21hYy9O
U0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogCiBPQkpDX0NMQVNTIE5TVmlldzsK
IE9CSkNfQ0xBU1MgUERGU2VsZWN0aW9uOwogCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBp
ZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBXS1JldmVhbENvbnRyb2xs
ZXI7CisjZWxzZQordHlwZWRlZiBpZCBXS1JldmVhbENvbnRyb2xsZXI7CisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CkBAIC00OCw4ICs1OCwxMSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3Rh
bGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3Qp
PiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBoaWRlUG9wdXAoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25D
b250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvcklu
c3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJl
Y3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyAgICAKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFdLUmV2ZWFsQ29udHJv
bGxlciBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5m
byYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZs
b2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBu
dWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxs
cHRyKTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9u
YXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U5ZTQ0NzRhNDlmY2M5YjA5NWIy
ZjRiZGE2YzlhZTNmMzhjZmU0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1t
CisrKyAvZGV2L251bGwKQEAgLTEsMzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRGljdGlvbmFyeUxvb2t1cC5oIgotCi0jaWYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoUkVWRUFMKQotCi0jaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9y
dCAiRWRpdGluZy5oIgotI2ltcG9ydCAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJGcmFt
ZS5oIgotI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKLSNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIu
aCIKLSNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQg
IlJhbmdlLmgiCi0jaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKLSNpbXBvcnQgIlRleHRJdGVyYXRv
ci5oIgotI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlU2VsZWN0
aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKLSNpbXBvcnQgPFBERktpdC9QREZLaXQu
aD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9t
YWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgotI2ltcG9ydCA8cGFs
L3NwaS9tYWMvUmV2ZWFsU1BJLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgotCi1AaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdo
dCA8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7Ci1AcHJpdmF0ZQot
ICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFyVGV4dEluZGljYXRvcjsKLSAgICBOU1JlY3QgX2hp
Z2hsaWdodFJlY3Q7Ci0gICAgQk9PTCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3RyaW5nOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TUmVjdCBoaWdobGlnaHRSZWN0OwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIHVzZURlZmF1bHRIaWdobGlnaHQ7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3Qg
dXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRT
dHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOwotLSAodm9pZClz
ZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0
b3I7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAotCi1Ac3lu
dGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdobGlnaHRSZWN0OwotQHN5bnRoZXNpemUgdXNlRGVm
YXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBzeW50aGVzaXplIGF0dHJpYnV0
ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhp
Z2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJP
T0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJp
bmcgKikgYXR0cmlidXRlZFN0cmluZwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxp
Z2h0UmVjdDsKLSAgICBfdXNlRGVmYXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7
Ci0gICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nOwotICAgIAotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248
dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcgotewotICAgIF9jbGVhclRleHRJbmRpY2F0b3Ig
PSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcik7Ci19Ci0KLS0gKE5TQXJyYXk8TlNWYWx1ZSAq
PiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9y
SXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBV
TlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpz
ZWxmLmhpZ2hsaWdodFJlY3RdXTsKLX0KLQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNl
bnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIAotICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZh
bCBpbiBjb250ZXh0Lml0ZW1SZWN0c0luVmlldykgewotICAgICAgICBOU1JlY3QgcmVjdCA9IHJl
Y3RWYWwucmVjdFZhbHVlOwotCi0gICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRl
cyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5
bGUgYXR0cmlidXRlIGluIG9yZGVyIHRvIGNlbnRlciB0ZXh0LgotICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBm
b250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmlu
ZyBsZW5ndGhdKV1dKTsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxl
PiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGlu
aXRdKTsKLSAgICAgICAgW3BhcmFncmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2Vu
dGVyXTsKLSAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JL
ZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgIAotICAgICAgICBSZXRhaW5Q
dHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10g
YXR0cmlidXRlczphdHRyaWJ1dGVzLmdldCgpXSk7Ci0gICAgICAgIFtzdHJpbmcgZHJhd0luUmVj
dDpyZWN0XTsKLSAgICB9Ci19Ci0KLS0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5n
Q29udGV4dCAqKWNvbnRleHQgc2hvdWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRl
bSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGl0ZW0pOwotICAgIHJldHVybiBzZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Ci19Ci0KLS0gKHZv
aWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hs
aWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVh
clRleHRJbmRpY2F0b3IpOwotICAgIGlmIChibG9jaykKLSAgICAgICAgYmxvY2soKTsKLX0KLQot
QGVuZAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwg
TlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1
cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAg
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBo
YXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQg
b3B0aW9ucy4KLSAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpOwotICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLQot
ICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBh
cmFncmFwaHMgb2YgdGV4dC4KLSAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFn
cmFwaChzZWxlY3Rpb25FbmQpOwotCi0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uU3RhcnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5k
KS5nZXQoKSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25T
dGFydCk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtl
UmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJp
bmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8
UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4
dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGhp
Z2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICByZXR1
cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdo
dFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotfQotCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBE
aWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0
JiBoaXRUZXN0UmVzdWx0KQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotICAgIAotICAgIGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAg
cmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICBhdXRvKiBmcmFtZSA9IG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKLQotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJh
Y3RlciBhdCB0aGUgcG9pbnQuCi0gICAgYXV0byBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5y
b3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQ
b2ludChmcmFtZVBvaW50KSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAg
ICBhdXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9p
bnQpOwotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcG9zaXRpb24gPSBmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7Ci0KLSAgICBhdXRvIHNlbGVjdGlvbiA9IGZy
YW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwotICAgIE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7Ci0gICAgaW50
IGhpdEluZGV4OwotICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOwotICAgIAot
ICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJh
bmdlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZp
c2libGVFbmQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2lu
ZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAgYXV0
byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAg
ICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0g
ICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHJhbmdlVG9TZWxl
Y3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0gICAg
ICAgIAotICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHBhcmFncmFwaEVuZCk7Ci0gICAgICAgIAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5T
TWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlvblN0YXJ0
LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0aW9uU3Rh
cnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGhpdEluZGV4ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0
aW9uKS5nZXQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsKLSAgICAgICAgc2VsZWN0
aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFu
dWxhcml0eSk7Ci0gICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVS
dWxlcy5zdGFydCgpOwotICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNl
IDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAg
ICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hh
cmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZnVsbENoYXJh
Y3RlclJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgICAg
IAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwot
ICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1
bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOwotICAg
IH0KLSAgICAKLSAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFz
cygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVl
IHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5p
bF07Ci0gICAgCi0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3Rl
clJhbmdlLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxs
b2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6
c2VsZWN0ZWRSYW5nZV0pOwotICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgp
LmhpZ2hsaWdodFJhbmdlOwotCi0gICAgaWYgKGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uID09IE5T
Tm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgbnVs
bHB0ciwgbmlsIH07Ci0gICAgCi0gICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgq
ZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFu
Z2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICAKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLX0KLQotc3RhdGljIHZv
aWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBO
U0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVy
c0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCi17
Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgc2l6ZV90IG9yaWdpbmFs
TGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICAKLSAgICBj
aGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3Jp
Z2luYWxMZW5ndGg7Ci0gICAgCi0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpu
dW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07Ci0gICAgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQg
PSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0Fk
ZGVkQmVmb3JlU3RhcnQ7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1z
dGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpz
dHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCi17Ci0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3Mo
KSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBEb24ndCBkbyBh
bnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgotICAgIGlmICgh
c2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsg
QCIiLCBuaWwgfTsKLQotICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxv
b2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7Ci0KLSAgICAvLyBBcyBjb250ZXh0LCB3
ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRl
ciB0aGUgcG9pbnQuCi0gICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29r
dXAgc3RyaW5nXS5sZW5ndGg7Ci0gICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0ID0gMDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAwOwotICAg
IGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1
MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsK
LQotICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3Ry
aW5nXTsKLSAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVk
QmVmb3JlU3RhcnQsIDApOwotCi0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMo
W2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBz
ZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7Ci0gICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9
IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0gICAgCi0gICAgaWYgKGV4dHJhY3RlZFJhbmdl
LmxvY2F0aW9uID09IE5TTm90Rm91bmQpCi0gICAgICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJp
bmcsIG5pbCB9OwotCi0gICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bh
c3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKLSAgICBOU0ludGVnZXIgbG9v
a3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3RlZFJhbmdl
Lmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7Ci0KLSAg
ICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZvcmVdOwot
ICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRlcl07Ci0K
LSAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxsUGxhaW5U
ZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKLSAgICByZXR1
cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0KLSAgICByZXR1cm4geyBAIiIsIG5pbCB9OwotfQotCi1zdGF0aWMgaWQgPE5TSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRp
b25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlciwgY29uc3QgRGljdGlv
bmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBX
VEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxh
dGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
IGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25zID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBpZiAoTlNEaWN0
aW9uYXJ5ICpvcHRpb25zID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgpKQotICAg
ICAgICBbbXV0YWJsZU9wdGlvbnMgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlvbnNdOwot
Ci0gICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25h
cnlQb3B1cEluZm8udGV4dEluZGljYXRvcik7Ci0gICAgCi0gICAgUmV0YWluUHRyPFJWUHJlc2Vu
dGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2UoKSBpbml0
XSk7Ci0gICAgCi0gICAgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7Ci0gICAgTlNQb2ludCBwb2ludGVy
TG9jYXRpb247Ci0gICAgCi0gICAgaWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdl
KCkpIHsKLSAgICAgICAgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRleHRJbmRp
Y2F0b3IuZ2V0KCkpOwotCi0gICAgICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5WaWV3Q29v
cmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMoKVswXTsKLSAgICAgICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcygpOwotICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyb290Vmlld1RvVmll
d0NvbnZlcnNpb25DYWxsYmFjaykgewotICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluVmll
d0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbkJvdW5kaW5n
UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2so
c2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRC
b3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgaGlnaGxp
Z2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOwotICAgICAg
ICBwb2ludGVyTG9jYXRpb24gPSBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRp
b24oKTsKLSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNQb2ludCB0ZXh0QmFzZWxp
bmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbjsKLSAgICAgICAgCi0gICAgICAg
IGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzKCk7Ci0gICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZlcnRQb2lu
dDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07Ci0gICAgfQotICAgIAotICAgIFJldGFp
blB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2
ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdodFJlY3Qg
dXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSBh
dHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQo
KV0pOwotICAgIFJldGFpblB0cjxSVlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRO
UyhbYWxsb2NSVlByZXNlbnRpbmdDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50ZXJMb2Nh
dGlvbkluVmlldzpwb2ludGVyTG9jYXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6
KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsK
LSAgICAKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1J
bnN0YW5jZSgpIGluaXRXaXRoVGV4dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJp
bmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsKLSAgICAK
LSAgICBbd2ViSGlnaGxpZ2h0IHNldENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0g
V1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFy
VGV4dEluZGljYXRvcildIHsKLSAgICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikKLSAgICAg
ICAgICAgIGNsZWFyVGV4dEluZGljYXRvcigpOwotICAgIH1dOwotICAgIAotICAgIGlmIChjcmVh
dGVBbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBhbmltYXRp
b25Db250cm9sbGVyRm9ySXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2Vu
dGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07Ci0gICAgW3ByZXNlbnRlciBy
ZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4
dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAgICByZXR1cm4gbmlsOwotCi0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gbmlsOwotfQotCi12b2lkIERpY3Rp
b25hcnlMb29rdXA6OnNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9u
YXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0
SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdU
Rjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNp
b25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQot
ewotICAgIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlv
bmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBy
b290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0
b3IpKTsKLX0KLQotdm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQotewotICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIGlmICghZ2V0TFVMb29rdXBEZWZpbml0
aW9uTW9kdWxlQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtnZXRMVUxvb2t1cERlZmlu
aXRpb25Nb2R1bGVDbGFzcygpIGhpZGVEZWZpbml0aW9uXTsKLQotICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci19Ci0KLWlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xs
ZXI+IERpY3Rpb25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNv
bnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5z
dGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVj
dCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0
ZUFuaW1hdGlvbkNvbnRyb2xsZXIodHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4
dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25D
YWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCA5ZWVmYjk3ODRmYmU2ODliMDkwYTViMDFmY2Vl
Y2U3MGQ2NTQxMzJkLi4xOTU1ZDYyZDQwYjFkODZlNGRkNTEwZWIxNDg4NjFkNGJkYTY5NzhiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNzM1LDYgKzcz
NSw5IEBAIHN0cnVjdCBfVUlXZWJUb3VjaEV2ZW50IHsKICAgICBib29sIGlzUG90ZW50aWFsVGFw
OwogfTsKIAorQGludGVyZmFjZSBfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciA6IFVJR2VzdHVy
ZVJlY29nbml6ZXIKK0BlbmQKKwogQGNsYXNzIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2du
aXplcjsKIAogQHByb3RvY29sIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVn
YXRlIDxOU09iamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlBhZ2VQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFnZVByb3h5Q29jb2EubW0KaW5kZXggZjU2ODc1ZGZmM2ExY2M0NWViZWU2MTcyMTVjZTk1NzIz
ZjUzZGU0ZS4uNjVhZWNkOTIxOTJmZTY2NjFmMWJhYTQyZDM0MDc4NmNlNGQxZDUzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0K
QEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlNhZmVC
cm93c2luZ1NQSS5oIgogI2ltcG9ydCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgorI2ltcG9ydCAi
V2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQg
PFdlYkNvcmUvRHJhZ0l0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
QEAgLTE4OSw1ICsxOTAsMjEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtQ2xvbmVBdHRh
Y2htZW50KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYgZnJvbUF0dGFjaG1lbnQKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgCit2b2lkIFdlYlBhZ2VQcm94eTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHBvaW50KQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKK30KIAordm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBp
ZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVj
dGlvbigpLCBtX3BhZ2VJRCk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5o
CmluZGV4IGM0OGMzOWQ2NmRjMTM5NjQyMDU2NTRiOWQ1NDBmMGY2ODc4ODQyMGEuLjlkYzM5MDhj
YjEwNzYwYmU4MjRhNTljY2ZiZTZmOTMzYjc4ZmJmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTg3LDYg
Kzg3LDcgQEAgY2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdl
YlBhZ2VQcm94eTsKIH0KIAorQGNsYXNzIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwogQGNs
YXNzIF9VSUhpZ2hsaWdodFZpZXc7CiBAY2xhc3MgX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXI7CiBAY2xhc3MgVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyOwpAQCAtMjE0
LDYgKzIxNSw3IEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAKICNpZiBQTEFURk9S
TShJT1NNQUMpCiAgICAgUmV0YWluUHRyPFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcj4gX2hvdmVy
R2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25p
emVyPiBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXI7CiAjZW5kaWYKIAogICAgIFJldGFpblB0cjxV
SVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50PiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCmluZGV4IDIxZDMxNzcwMDZiMWM2ZGYwMTZiYWJmM2UwYzM2YTczODg0MmEwOTIu
LjI3Nzc1MDg0ZWU5MjRkYWZkMDU1MDY5ZmY3ZWIzZDc3ZDQ5OTcxYTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQpAQCAtMTEyLDYgKzExMiw3IEBACiAjaWYgUExBVEZPUk0oSU9TTUFDKQogI2ltcG9ydCAiTmF0
aXZlV2ViTW91c2VFdmVudC5oIgogI2ltcG9ydCA8VUlLaXQvVUlIb3Zlckdlc3R1cmVSZWNvZ25p
emVyLmg+CisjaW1wb3J0IDxVSUtpdC9fVUlMb29rdXBHZXN0dXJlUmVjb2duaXplci5oPgogI2lt
cG9ydCA8cGFsL3NwaS9pb3MvR3JhcGhpY3NTZXJ2aWNlc1NQSS5oPgogI2VuZGlmCiAKQEAgLTY0
OSw2ICs2NTAsMTEgQEAgLSAodm9pZClzZXR1cEludGVyYWN0aW9uCiAgICAgX2hvdmVyR2VzdHVy
ZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBp
bml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2hvdmVyR2VzdHVyZVJlY29nbml6
ZXJDaGFuZ2VkOildKTsKICAgICBbX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6
c2VsZl07CiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29n
bml6ZXIuZ2V0KCldOworICAgIAorICAgIF9sb29rdXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0
TlMoW1tfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2Vs
ZiBhY3Rpb246QHNlbGVjdG9yKF9sb29rdXBHZXN0dXJlUmVjb2duaXplZDopXSk7CisgICAgW19s
b29rdXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBhZGRH
ZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAog
I2VuZGlmCiAKICAgICBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbV0tT
eW50aGV0aWNDbGlja1RhcEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpz
ZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NpbmdsZVRhcENvbW1pdGVkOildKTsKQEAgLTc1Myw2ICs3
NTksOSBAQCAtICh2b2lkKWNsZWFudXBJbnRlcmFjdGlvbgogI2lmIFBMQVRGT1JNKElPU01BQykK
ICAgICBbX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKICAgICBbc2Vs
ZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07
CisgICAgCisgICAgW19sb29rdXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwor
ICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CiAjZW5kaWYKIAogICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0
RGVsZWdhdGU6bmlsXTsKQEAgLTgzNiw2ICs4NDUsNyBAQCAtICh2b2lkKV9yZW1vdmVEZWZhdWx0
R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X3R3
b0ZpbmdlclNpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFURk9STShJ
T1NNQUMpCiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJl
Y29nbml6ZXIuZ2V0KCldOworICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9sb29r
dXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtODUwLDYgKzg2MCw3
IEBAIC0gKHZvaWQpX2FkZERlZmF1bHRHZXN0dXJlUmVjb2duaXplcnMKICAgICBbc2VsZiBhZGRH
ZXN0dXJlUmVjb2duaXplcjpfdHdvRmluZ2VyU2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0
KCldOwogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXpl
cjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJl
Y29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBA
IC0xNDUwLDYgKzE0NjEsMTAgQEAgLSAoQk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJl
UmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyIHNob3VsZFJlY29nbmkKIAogICAgIGlmIChb
Z2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVy
IGNsYXNzXV0gfHwgW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zl
ckdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBZRVM7CisgICAgCisg
ICAgaWYgKChbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVy
ZVJlY29nbml6ZXIgY2xhc3NdXSAmJiBbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNs
YXNzOltVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0pIHx8IChbb3RoZXJHZXN0
dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
IGNsYXNzXV0gJiYgW2dlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdl
c3R1cmVSZWNvZ25pemVyIGNsYXNzXV0pKQorICAgICAgICByZXR1cm4gWUVTOworCiAjZW5kaWYK
ICAgICBpZiAoaXNTYW1lUGFpcihnZXN0dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2du
aXplciwgX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfdGV4dFNl
bGVjdGlvbkFzc2lzdGFudC5nZXQoKS5mb3JjZVByZXNzR2VzdHVyZSkpCiAgICAgICAgIHJldHVy
biBZRVM7CkBAIC02MDMzLDYgKzYwNDgsMTIgQEAgLSAoQk9PTClhbGxvd3NEaWN0YXRpb25JbnB1
dEZvckxpc3RWaWV3Q29udHJvbGxlcjooUFVJQ1F1aWNrYm9hcmRWaWV3Q29udHJvbGxlcgogI2Vu
ZGlmIC8vIFBMQVRGT1JNKFdBVENIT1MpCiAKICNpZiBQTEFURk9STShJT1NNQUMpCistICh2b2lk
KV9sb29rdXBHZXN0dXJlUmVjb2duaXplZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVS
ZWNvZ25pemVyCit7CisgICAgTlNQb2ludCBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzID0gW2dl
c3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uSW5WaWV3OnNlbGZdOworICAgIF9wYWdlLT5wZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludChsb2NhdGlvbklu
Vmlld0Nvb3JkaW5hdGVzKSk7Cit9CisKIC0gKHZvaWQpX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJD
aGFuZ2VkOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKICAgICBp
ZiAoIV9wYWdlLT5pc1ZhbGlkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQppbmRleCBkYzgwMjgzNmRkNjBlODQyZGFhMTNhZjQ0NGIyZjc5Nzky
MjIwNDkwLi5kOTk4YmI1NjJlYTY3MzQ2YzMxYjMzMDgzM2YyYmMyZmIwZjk2ZmE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTEyMSwx
MSArMTIxLDYgQEAgYm9vbCBXZWJQYWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2Fy
ZChjb25zdCBTdHJpbmcmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94
eTo6Z2VzdHVyZUNhbGxiYWNrKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMy
X3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MsIENh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3Mu
dGFrZTxHZXN0dXJlQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggMTVjN2Q3NjE1MzYyMzRiNmJjY2Jh
MGZkZjNiZDdjNjBhOTZjM2VmMi4uYmJkODc5OTk5MTI0MDAzNzQ5ZDAyZjNkNDM4OTM4NGQwZDI2
MmNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94
eU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFj
Lm1tCkBAIC0zMjMsMjIgKzMyMyw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQcm9taXNlZERh
dGFGb3JJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTCiAKICNlbmRp
ZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGlmICghaXNWYWxpZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOwot
fQotCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRT
ZWxlY3Rpb24oKQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24oKSwgbV9wYWdlSUQpOwotfQotCiAvLyBDb21wbGV4IHRleHQg
aW5wdXQgc3VwcG9ydCBmb3IgcGx1Zy1pbnMuCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZENvbXBs
ZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggM2U3OTQz
MWY5MzcxMTRjNDFmOWQyZGZkNThlMGI0ZjcyMTgxNTlhNi4uYTM4Y2QyYmY2Mzc5NGM4ZTlmMWQy
MTJhM2U3OGIzZThjNGVmOGM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMjYsOSArMjYsMjAgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgogCisKICNpbXBvcnQgIkxvYWRQ
YXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0VkaXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hU
TUxDb252ZXJ0ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Ob2RlUmVuZGVyU3R5bGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1N
ZWRpYVNlc3Npb25NYW5hZ2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkK
IApAQCAtNTksNiArNzAsMTE0IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlp
bmdTZXNzaW9uSW5mbyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAKICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6Ok5vd1BsYXlpbmdJbmZvQ2FsbGJhY2soaGFzQWN0aXZlU2Vzc2lvbiwg
cmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVsYXBz
ZWRUaW1lLCB1bmlxdWVJZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiB9CisgICAgCit2b2lkIFdl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50
JiBmbG9hdFBvaW50KQoreworICAgIGlmIChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0Zv
ckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAocGx1Z2luVmlldy0+
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGZsb2F0UG9pbnQpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQg
aXMgb3Zlci4KKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCku
ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52
aWV3KCktPndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAg
c3RkOjp0aWUocmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRl
c3RSZXN1bHQocmVzdWx0KTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgYXV0byogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpm
cmFtZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlKTsKK30KKwordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZv
clNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKK3sKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7CisgICAgTlNEaWN0aW9u
YXJ5ICpvcHRpb25zOworICAgIHN0ZDo6dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGlj
dGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBpZiAoc2Vs
ZWN0ZWRSYW5nZSkKKyAgICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFt
ZSwgKnNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOworfQor
Cit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9u
KCkKK3sKKyAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24o
ZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKK30KKyAgICAKK3ZvaWQgV2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdl
JiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVw
SW5mb0ZvclJhbmdlKGZyYW1lLCByYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlv
bikpKTsKK30KKworRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0
aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJh
bnNpdGlvbikKK3sKKyAgICBFZGl0b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOworICAgIGVk
aXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKHRydWUpOworICAgIAorICAgIERp
Y3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICBpZiAocmFuZ2UudGV4
dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0b3Iuc2V0SXNH
ZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9u
YXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsK
KyAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7CisgICAgaWYgKHF1YWRzLmlzRW1w
dHkoKSkgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhm
YWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAK
KyAgICBJbnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhx
dWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICAKKyAgICBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CisgICAg
ZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQo
KSAqIHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdp
biA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2Vu
dCk7CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKKworI2lmIFBM
QVRGT1JNKE1BQykKKworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5n
ID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJ
bkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRT
dHJpbmcgc3RyaW5nXV0pOworICAgIAorICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0g
W05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgIAorICAgIFtuc0F0dHJpYnV0
ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0
cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFy
eSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgeworICAgICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0
dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKKyAgICAgICAgCisgICAgICAgIE5TRm9udCAqZm9udCA9
IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAg
ICAgICAgaWYgKGZvbnQpCisgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRG
b250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOworICAg
ICAgICBpZiAoZm9udCkKKyAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpm
b250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgCisgICAgICAgIFtzY2Fs
ZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgp
IHJhbmdlOnJhbmdlXTsKKyAgICB9XTsKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAK
KyAgICBUZXh0SW5kaWNhdG9yT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRv
ck9wdGlvblVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXM7
CisgICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKKyAgICAgICAgaW5kaWNhdG9yT3B0
aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhp
Z2hsaWdodDsKKyAgICAKKyAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9
IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywg
cHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7CisgICAg
ICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAg
ICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIGRpY3Rpb25h
cnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0g
c2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAK
KyAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAg
cmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgppbmRleCA0NmNkMDUwZDVlMDA0NmQwZmYwYTM3MWQwMzIxNDI1ZGY0MGJiYzBmLi41
OTQ5YzVlMDBjNzlkYTFmYTRiOWU5Yjk2OTMxZTMzZmYzMDI0NGMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTE5
MSw5ICsxOTEsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICAjIERpY3Rpb25hcnkgc3VwcG9ydC4KICAgICBQZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCkKLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oTUFDKQogICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJy
ZW50U2VsZWN0aW9uKCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGVlMDgyYzRhOWY0YTQ0M2UzMGIyNmRl
NmZkMDY0YjJmYWJkMWU1NjcuLjExZDBjNThiNTg1MzAzMDFhYzNjNWY4MDA3MGZmOGFjMzRhMWVl
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCkBAIC00MTMsMjEgKzQxMyw2IEBAIHZvaWQgV2ViUGFnZTo6c2VuZENvbXBsZXhU
ZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCwgY29uc3QgU3RyaW5nJikKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihjb25zdCBGbG9hdFBvaW50JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYsIFJhbmdlJiwgTlNEaWN0aW9uYXJ5ICos
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNl
bGVjdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDQ3MzNiMWNiZjJmZTQ1Y2Q5ZDBjZWE3ZWVmOWJjN2Mz
OGFmYWY3ZTQuLmZhN2E2YWFmMWI2MGJkYTkwZGNkMDc5YmExYTk0MzZmMTIxNmIwZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CkBAIC0zODksMTAyICszODksNyBAQCB2b2lkIFdlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbihDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGb250
QXRTZWxlY3Rpb25DYWxsYmFjayhmb250TmFtZSwgZm9udFNpemUsIHNlbGVjdGlvbkhhc011bHRp
cGxlRm9udHMsIGNhbGxiYWNrSUQpKTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCi17
Ci0gICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+
bWFpbkZyYW1lKCkpKSB7Ci0gICAgICAgIGlmIChwbHVnaW5WaWV3LT5wZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlzIG92ZXIuCi0gICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRl
c3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2U7Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOwotICAgIHN0ZDo6dGllKHJhbmdlLCBvcHRp
b25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7Ci0g
ICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogZnJhbWUgPSByZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRv
Y3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOwotfQotCi12b2lkIFdlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIFJlZlB0cjxSYW5nZT4g
c2VsZWN0ZWRSYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUo
c2VsZWN0ZWRSYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVj
dGlvbihzZWxlY3Rpb24pOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKQotICAgICAgICBwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywg
cHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci19CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQotewotICAgIGF1dG8mIGZyYW1lID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRD
cm9zc2ZhZGUpOwotfQotCi1EaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQ
b3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKQotewotICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7Ci0g
ICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7Ci0KLSAgICBE
aWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgaWYgKHJhbmdlLnRl
eHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWRpdG9yLnNldElz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlv
bmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAg
ICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7Ci0gICAgaWYgKHF1YWRzLmlzRW1wdHko
KSkgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxz
ZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIElu
dFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBd
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOwotICAgIGZsb2F0IHNjYWxl
ZEFzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKiBwYWdlU2Nh
bGVGYWN0b3IoKSA6IDA7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBv
aW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQpOwotICAgIGRp
Y3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7Ci0KLSAgICBOU0F0dHJpYnV0ZWRT
dHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3Ry
aW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwotCi0gICAgTlNGb250TWFuYWdl
ciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0KLSAg
ICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJh
bmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6
XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsK
LSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMg
PSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0KLSAgICAgICAgTlNGb250ICpm
b250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVd
OwotICAgICAgICBpZiAoZm9udCkKLSAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29u
dmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3IoKV07
Ci0gICAgICAgIGlmIChmb250KQotICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2Jq
ZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotCi0gICAgICAgIFtzY2FsZWRO
U0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJh
bmdlOnJhbmdlXTsKLSAgICB9XTsKLQotICAgIFRleHRJbmRpY2F0b3JPcHRpb25zIGluZGljYXRv
ck9wdGlvbnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxD
b250ZW50Rm9yQ29tcGxleFJhbmdlczsKLSAgICBpZiAocHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9
PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRl
KQotICAgICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRl
U25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OwotCi0gICAgUmVmUHRyPFRleHRJbmRpY2F0
b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2Us
IGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwotICAgIGlmICghdGV4
dEluZGljYXRvcikgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVw
SW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0K
LQotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3It
PmRhdGEoKTsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2Fs
ZWROU0F0dHJpYnV0ZWRTdHJpbmc7Ci0KLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFy
eVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci19CiAK
ICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIApAQCAtNTM5LDExICs0NDQsNiBAQCBEaWN0aW9u
YXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JTZWxlY3Rpb25JblBE
RlBsdWdpbihQREZTZWxlYwogCiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25h
cnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRh
dGlvblRyYW5zaXRpb24pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQ
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUs
IHJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkpOwotfQotCiBib29sIFdl
YlBhZ2U6OnBlcmZvcm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcm
IHNlbGVjdG9yLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBGaXJzdCBnaXZlIGFj
Y2Vzc2liaWxpdHkgYSBjaGFuY2UgdG8gaGFuZGxlIHRoZSBldmVudC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355138</attachid>
            <date>2018-11-16 15:13:55 -0800</date>
            <delta_ts>2018-11-16 16:20:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116151355.patch</filename>
            <type>text/plain</type>
            <size>75163</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Mjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI0YjI4MTNlNmMwZTcw
MDY2MTU2NTA1NGY3ZTU4ZDZlOTg4Zjk1OS4uNWFmNGZlYjAxN2FiMWJiZWJiYzQ2NzMwODAxZGNk
ODk3ZDczYjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3QgY3VycmVubHR5IHRlc3RhYmxlCisK
KyAgICAgICAgRGljdGlvbmFyeUxvb2t1cCB1c2VzIFJldmVhbCBub3csIHdoaWNoIGlzIHNsYXRl
ZCB0byBiZSBjcm9zcy1wbGF0Zm9ybS4KKyAgICAgICAgVGhhdCBwYXRjaCBnYXRlcyB0aGUgcGFy
dHMgb2YgRGljdGlvbmFyeUxvb2t1cCB0aGF0IGN1cnJlbnRseSBkbyBub3QgaGF2ZQorICAgICAg
ICBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24gb24gaU9TLiBPbmNlIFJldmVhbCBpcyByZWFk
eSwgdGhpcyBjb2RlIHdpbGwgYmUKKyAgICAgICAgcmVwbGFjZWQgb3IgZXhwYW5kZWQgdXBvbiwg
YXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cCk6CisKIDIwMTgtMTEtMTYg
IFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBodG1s
e2NvbG9yOnRleHR9IHRvIHRoZSBzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0IG9uIG1hY09TLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggYzUyMjE2MTBmY2E2MzdmY2FmYWE4NTgyZjQ3MGE1OWQyMjAz
YzE5Mi4uZTM0ZWFkZTMyYWVkMTA4NmU0YjliN2UwMzdhNDQ3ZjNjZTVmOTEzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMTUgIE1lZ2FuIEdhcmRuZXIgIDxt
ZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBi
ZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGFsL3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICog
cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6CisKIDIwMTgtMTEtMTYgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBSZWdyZXNzaW9uOiBXZWJDb250ZW50IHBy
b2Nlc3MncyBkaXNwbGF5IG5hbWUgaXMgbm8gbG9uZ2VyIHNldApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3MTgzOGJk
NjBiODRlMzI1MDJiZGM4MmY4Njc5ZDA0MWVkZmQxYjRmLi5kYzg2YjFmYzA5YjQyZWZjYzY0Zjk1
MjM4MTYzMzBkOTVmOTRhNzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE4LTExLTE1
ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMb29rdXAgaXMgYmVpbmcgcmVw
bGFjZWQgYnkgUmV2ZWFsLiBUaGlzIGZyYW1ld29yayBzaG91bGQgd29yayBvbiBhbGwgcGxhdGZv
cm1zLgorICAgICAgICBUaGUgcGF0Y2ggbW92ZXMgdGhlIGNvZGUgdGhhdCB3ZSBleHBlY3Qgd2ls
bCBiZSBuZWVkZWQgZm9yIGFsbCBwbGF0Zm9ybXMgdG8gdGhlIG1vcmUKKyAgICAgICAgZ2VuZXJh
bCBjb2NvYSBhcmVhLiBUaGlzIHBhdGNoIGNoYW5nZXMgbm8gZnVuY2F0aW9uYWxpdHksIGFuZCBz
aG91bGQgbm90IGNoYW5nZQorICAgICAgICBhbnl0aGluZyBjdXJyZW50bHkuIFRoaXMgd29yayB3
aWxsIGJlIGJ1aWxkIG9uIGxhdGVyIHdoZW4gUmV2ZWFsIGlzIHJlYWR5IHRvIHN1cHBvcnQKKyAg
ICAgICAgbXVsdGlwbGUgcGxhdGZvcm1zLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldHVw
SW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjbGVhbnVwSW50ZXJhY3Rp
b25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNv
Z25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hZGREZWZhdWx0R2VzdHVyZVJl
Y29nbml6ZXJzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJlY29nbml6ZXI6
c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yUmFuZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1
dG9tYXRpYyBwcm9jZXNzIHByZXdhcm1pbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBpZiBQU09OIGlz
IGVuYWJsZWQgdmlhIGV4cGVyaW1lbnRhbCBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
UEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIxNTUyZGY3Zjc1ZmM1Mzli
Yjg3NTZkMDg0OWI1NGQ2ODY5NTU0MDkuLjE4MjQ3ZDY0YzlkMzAyOTk2MzA1ZmNjNTQ3MjM1YzRj
YjU0MWJlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTQwMiw2ICs0MDIsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERC
QzMxNyAvKiBQYXNzS2l0U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8q
IHB0aHJlYWRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6
Q29yZVNQSS5oICovLAorCQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEku
aCAqLywKIAkJCQk1NzBBQjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJ
CTBDMkRBMTJCMUYzQkVCNDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00
NjcsNyArNDY4LDYgQEAKIAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEku
aCAqLywKIAkJCQlBMTAyNjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8s
CiAJCQkJMEM3Nzg1ODcxRjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAot
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3
NUI0ODFGNkFGRjhFMDBDNEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3
Nzg1ODgxRjQ1MTMwRjAwRjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNkNTVk
MTUyZTYwODI0MmQ4MDdkNjliOTMxY2Q1YTU5Y2VkMzk2ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BS
SVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZl
YWxDb3JlKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitT
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50
ZXIuaD4KKyNpbXBvcnQgPFJldmVhbC9SZXZlYWwuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisjaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxDb3Jl
L1JldmVhbENvcmUuaD4KKworI2Vsc2UgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworCitA
cHJvdG9jb2wgUlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZTsKKworQGludGVyZmFjZSBSVkl0
ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhU
ZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdl
IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7CitAZW5kCisKK0BpbnRlcmZhY2UgUlZTZWxlY3Rp
b24gOiBOU09iamVjdAorKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6KE5TVUludGVnZXIp
Y2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXNlbGVjdGVk
UmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVwZGF0ZVNlbGVjdGlv
bjsKK0BlbmQKKworQGludGVyZmFjZSBSVlByZXNlbnRpbmdDb250ZXh0IDogTlNPYmplY3QKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzooTlNQb2ludClwb2lu
dGVyTG9jYXRpb25JblZpZXcgaW5WaWV3OihOU1ZpZXcgKil2aWV3IGhpZ2hsaWdodERlbGVnYXRl
OihpZDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiloaWdobGlnaHREZWxlZ2F0ZTsKK0Bl
bmQKKworQHByb3RvY29sIFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGUgPE5TT2JqZWN0Pgor
QHJlcXVpcmVkCistIChOU0FycmF5IDxOU1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVz
ZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtOworQG9w
dGlvbmFsCistICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250
ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihSVkl0ZW0gKilpdGVtOworLSAodm9pZClyZXZlYWxD
b250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihS
Vkl0ZW0gKilpdGVtOworQGVuZAorCitAaW50ZXJmYWNlIFJWRG9jdW1lbnRDb250ZXh0IDogTlNP
YmplY3QgPCBOU1NlY3VyZUNvZGluZyA+CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50ZXIg
OiBOU09iamVjdAorI2lmIFBMQVRGT1JNKE1BQykKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0
ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBw
cmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0
IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorLSAoQk9PTClyZXZlYWxJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZE
b2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJl
c2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkg
KilvcHRpb25zOworQGVuZAorCisjZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmggYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmgKaW5kZXggZWI3Zjk1MWY3
MWM3NWM4MTIxN2IyMmU3OGFkYWQzMGU0ZDZhNWMwNC4uZTBhMzM3NWQzMGNjODg5ZjEzNWVhMmEx
MWQ0N2QwZGE5NGY5OGE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkv
bWFjL0xvb2t1cFNQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29r
dXBTUEkuaApAQCAtMjMsMTIgKzIzLDEzIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisKKyNp
ZiBQTEFURk9STShNQUMpCisKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFs
L3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2ltcG9y
dCA8d3RmL1NvZnRMaW5raW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCi0KIFNPRlRfTElOS19Q
UklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChMb29rdXApCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9O
QUwoTG9va3VwLCBMVUxvb2t1cERlZmluaXRpb25Nb2R1bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL21hYy9SZXZlYWxTUEkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDZiOGRhNDJjODU5OTBhZTMyZWE2N2EwYWY3NzUzZjNkYjk4MjhhNS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9tYWMvUmV2ZWFsU1BJLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1
bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXJTUEkuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktf
UFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJl
dmVhbENvcmUpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikK
LVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1T
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NM
QVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKLQotI2ltcG9ydCA8UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxS
ZXZlYWwvUmV2ZWFsLmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1w
b3J0IDxSZXZlYWxDb3JlL1JldmVhbENvcmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJW
SXRlbSA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFu
Z2UgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVj
dGlvbiA6IE5TT2JqZWN0Ci0rIChOU1JhbmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdl
ciljbGlja0luZGV4IHNlbGVjdGVkUmFuZ2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0
ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2VsZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0
aW9uOwotQGVuZAotCi1AaW50ZXJmYWNlIFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5T
SW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZv
ckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAq
KWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAq
KXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChC
T09MKXJldmVhbEl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50
Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5n
Q29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlv
bnM7Ci1AZW5kCi0KLSNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzQ29jb2EudHh0CmluZGV4IGNiNmRlY2IxN2MxZTBlMmVhNTc3ZDI0Mjg2ZTY2MzVkYzcyZjY5
NzcuLjQ0YWFjYmEyMWQzMzA0ODllY2Q1NDY5MWQyMzEyNDNkODE1OTE4M2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dApAQCAtODQsNiArODQsNyBAQCBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRo
ZXJlci5jcHAKIGVkaXRpbmcvU21hcnRSZXBsYWNlQ0YuY3BwCiAKIGVkaXRpbmcvY29jb2EvRGF0
YURldGVjdGlvbi5tbQorZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5n
L2NvY29hL0VkaXRvckNvY29hLm1tCiBlZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVDaGFuZ2Vz
Q29jb2EubW0KIGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtOTcsNyAr
OTgsNiBAQCBlZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAogZWRpdGluZy9pb3Mv
RWRpdG9ySU9TLm1tCiAKIGVkaXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5t
bQotZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQogZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cExlZ2FjeS5tbQogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCiBlZGl0aW5nL21hYy9G
cmFtZVNlbGVjdGlvbk1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg4MGNmYzRmNjExYjk0MDEyODAxZjZkZGY4MDZiNzM0
ZDY5MDZiOGQuLjZiNGQ2MjAwNGU3NzRkNTNlMTBjMWMwOGZjZjY1Njg3MzJjYWI5ZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTIwNDE5LDYgKzIwNDE5LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUM1MjI3REVGMUMzQzZE
RDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi8sCiAJCQkJQzUyMjdERjAxQzNDNkRENzAw
RjVFRDU0IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8sCisJCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVC
QTMxIC8qIERpY3Rpb25hcnlMb29rdXAubW0gKi8sCiAJCQkJOUI1NUVFRTgxQjNFODg5ODAwNTM0
MkJDIC8qIEVkaXRvckNvY29hLm1tICovLAogCQkJCUY0MkNFQjU0MjE0MDMxRUUwMDJEQ0E3MiAv
KiBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tICovLAogCQkJCUY0OEQyQTc1MjE1NkZFNTcw
MEM2NzUyQiAvKiBGb250QXR0cmlidXRlc0NvY29hLm1tICovLApAQCAtMjYxNDAsNyArMjYxNDEs
NiBAQAogCQkJCUNFN0IyREFGMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXIuaCAqLywKIAkJCQlDRTdCMkRCMDE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRp
dmVUZXh0VUlDb250cm9sbGVyLm1tICovLAogCQkJCTkzN0ZGM0Q0MUExMDEyRDYwMDhFQkEzMSAv
KiBEaWN0aW9uYXJ5TG9va3VwLmggKi8sCi0JCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8q
IERpY3Rpb25hcnlMb29rdXAubW0gKi8sCiAJCQkJNDQyOTU2Q0EyMThBNkQzMDAwODBEQjU0IC8q
IERpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gKi8sCiAJCQkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUx
OEQ5IC8qIEVkaXRvck1hYy5tbSAqLywKIAkJCQk0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyog
RnJhbWVTZWxlY3Rpb25NYWMubW0gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RpY3Rpb25hcnlMb29rdXAubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ1ZDJlZmQ5ODQ5YzQzZGI1NTI2
ZDdhZDZkM2M0N2QxOTM0ODc3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3Vw
LmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBv
cnQgIkVkaXRpbmcuaCIKKyNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJh
bWUuaCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJIVE1MQ29udmVydGVy
LmgiCisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5o
IgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlJlbmRlck9i
amVjdC5oIgorI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJWaXNpYmxlUG9zaXRp
b24uaCIKKyNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlZpc2libGVVbml0
cy5oIgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9S
ZXZlYWxTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgorI2ltcG9ydCA8
d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKworI2lm
IEVOQUJMRShSRVZFQUwpCisKKyNpZiBQTEFURk9STShNQUMpCisKK0BpbnRlcmZhY2UgV2ViUmV2
ZWFsSGlnaGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsK
K0Bwcml2YXRlCisgICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOworICAg
IE5TUmVjdCBfaGlnaGxpZ2h0UmVjdDsKKyAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0Owor
ICAgIE5TQXR0cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Cit9CisKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGln
aGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQg
YXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7
CistICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFy
VGV4dEluZGljYXRvcjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxp
Z2h0CisKK0BzeW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7CitAc3ludGhl
c2l6ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OworQHN5bnRoZXNp
emUgYXR0cmlidXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhp
Z2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0
cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2hpZ2hsaWdodFJl
Y3QgPSBoaWdobGlnaHRSZWN0OworICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVs
dEhpZ2hsaWdodDsKKyAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Cisg
ICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9y
OihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCit7CisgICAgX2NsZWFyVGV4
dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKK30KKworLSAoTlNBcnJh
eTxOU1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRl
eHQgcmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1
ZVdpdGhSZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOworfQorCistICh2b2lkKXJldmVhbENvbnRl
eHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRl
bSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgCisgICAgZm9yIChOU1Zh
bHVlICpyZWN0VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7CisgICAgICAgIE5TUmVj
dCByZWN0ID0gcmVjdFZhbC5yZWN0VmFsdWU7CisKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9u
dCBhdHRyaWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBh
cmFncmFwaCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCisgICAgICAg
IFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1
dGVkU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRy
aWJ1dGVkU3RyaW5nIGxlbmd0aF0pXV0pOworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFy
YWdyYXBoU3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHls
ZSBhbGxvY10gaW5pdF0pOworICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRB
bGlnbm1lbnRDZW50ZXJdOworICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBo
LmdldCgpIGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07CisgICAgCisgICAg
ICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJp
bmcgc3RyaW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKKyAgICAgICAgW3N0cmlu
ZyBkcmF3SW5SZWN0OnJlY3RdOworICAgIH0KK30KKworLSAoQk9PTClyZXZlYWxDb250ZXh0OihS
VlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9y
SXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBV
TlVTRURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsK
K30KKworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4
dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJB
TShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgYXV0byBibG9jayA9IFdU
Rk1vdmUoX2NsZWFyVGV4dEluZGljYXRvcik7CisgICAgaWYgKGJsb2NrKQorICAgICAgICBibG9j
aygpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyBF
TkFCTEUoUkVWRUFMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoUkVWRUFM
KQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5
TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICgh
Z2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAg
CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKKworICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2Ug
anVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCisgICAgYXV0byBzZWxlY3Rp
b25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvbkVu
ZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisKKyAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUg
Z29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCisgICAgYXV0
byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOworICAg
IGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKworICAg
IGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCht
YWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7CisgICAgaW50
IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOworICAgIE5TUmFuZ2UgcmFu
Z2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1Nl
bGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOworICAgIAorICAgIFJlZlB0cjxS
YW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJh
Z3JhcGhFbmQpOworICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0
ZXJSYW5nZS5nZXQoKSk7CisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2Fs
bG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdl
OnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCku
aGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5n
ZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0
UmFuZ2UubGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFz
cygpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvKiBu
b2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUg
fHwgIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
CisgICAgYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBEb24ndCBk
byBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAgIGF1
dG8gZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFt
ZSgpOworICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCisgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBpZiAocG9zaXRpb24uaXNO
dWxsKCkpCisgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5v
ZGUpOworCisgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBO
U1JhbmdlIHNlbGVjdGlvblJhbmdlOworICAgIGludCBoaXRJbmRleDsKKyAgICBSZWZQdHI8UmFu
Z2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKKyAgICAKKyAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikgeworICAgICAgICBh
dXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgICAgICBh
dXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisgICAgICAgIAorICAg
ICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBw
YXJhZ3JhcGhzIG9mIHRleHQuCisgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9m
UGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBl
bmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAgYXV0byByYW5n
ZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0
YXJ0KTsKKyAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFrZVJhbmdlKHBhcmFn
cmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAgZnVsbENoYXJhY3Rl
clJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOworICAgICAg
ICAKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSk7
CisgICAgICAgIAorICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxl
cyB7IHBvc2l0aW9uIH07CisgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMu
ZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOworICAgICAgICBwb3NpdGlv
biA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsKKyAgICAgICAgLy8g
QXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJl
Zm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBy
YW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICAKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2Ug
PSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgTlNSYW5nZSBzZWxl
Y3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0
SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25S
YW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOworICAgIAorICAgIFN0cmluZyBpdGVt
U3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgUmV0YWlu
UHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0
aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2VdKTsKKyAgICBOU1Jh
bmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKKworICAgIGlm
IChoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFoaWdobGlnaHRSYW5n
ZS5sZW5ndGgpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIHJl
dHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxp
Z2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisgICAgCit9CisKK3N0YXRpYyB2b2lkIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFj
dGVycyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbiwgTlNJbnRlZ2VyIG51bWJlck9mQ2hhcmFjdGVy
c1RvRXhwYW5kLCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBOU0ludGVn
ZXImIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKworICAgIHNpemVfdCBvcmlnaW5hbExlbmd0aCA9IHNlbGVjdGlvbi5zdHJpbmcu
bGVuZ3RoOworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpudW1iZXJPZkNo
YXJhY3RlcnNUb0V4cGFuZF07CisgICAgCisgICAgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQg
PSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoOworICAgIAorICAgIFtz
ZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRd
OworICAgIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGgg
LSBvcmlnaW5hbExlbmd0aCAtIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0OworCisgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworc3RkOjp0dXBsZTxOU1N0cmluZyAqLCBOU0Rp
Y3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6c3RyaW5nRm9yUERGU2VsZWN0aW9uKFBERlNl
bGVjdGlvbiAqc2VsZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxw
dHIsIG5pbCB9OworCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hh
cmFjdGVyIGF0IHRoZSBwb2ludC4KKyAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLnN0
cmluZy5sZW5ndGgpCisgICAgICAgIHJldHVybiB7IEAiIiwgbmlsIH07CisKKyAgICBSZXRhaW5Q
dHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JMb29rdXAgPSBhZG9wdE5TKFtzZWxlY3Rpb24g
Y29weV0pOworCisgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hh
cmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgorICAgIGF1dG8gb3Jp
Z2luYWxMZW5ndGggPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ10ubGVuZ3RoOworICAgIE5T
SW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IDA7CisgICAgTlNJbnRlZ2VyIGNo
YXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gMDsKKyAgICBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3Rl
cnMoc2VsZWN0aW9uRm9yTG9va3VwLmdldCgpLCAyNTAsIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0LCBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCk7CisKKyAgICBhdXRvIGZ1bGxQbGFpblRleHRT
dHJpbmcgPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ107CisgICAgYXV0byByYW5nZVRvUGFz
cyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCAwKTsKKworICAgIFJl
dGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhUZXh0OmZ1bGxQbGFpblRleHRTdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10p
OworICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdl
OworICAgIAorICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQor
ICAgICAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIE5TSW50ZWdl
ciBsb29rdXBBZGRlZEJlZm9yZSA9IHJhbmdlVG9QYXNzLmxvY2F0aW9uIC0gZXh0cmFjdGVkUmFu
Z2UubG9jYXRpb247CisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQWZ0ZXIgPSAoZXh0cmFjdGVk
UmFuZ2UubG9jYXRpb24gKyBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpIC0gKHJhbmdlVG9QYXNzLmxv
Y2F0aW9uICsgb3JpZ2luYWxMZW5ndGgpOworCisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rp
b25BdFN0YXJ0Omxvb2t1cEFkZGVkQmVmb3JlXTsKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVj
dGlvbkF0RW5kOmxvb2t1cEFkZGVkQWZ0ZXJdOworCisgICAgQVNTRVJUKFtzZWxlY3Rpb24uc3Ry
aW5nIGlzRXF1YWxUb1N0cmluZzpbZnVsbFBsYWluVGV4dFN0cmluZyBzdWJzdHJpbmdXaXRoUmFu
Z2U6ZXh0cmFjdGVkUmFuZ2VdXSk7CisgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmls
IH07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuIHsgQCIi
LCBuaWwgfTsKK30KKworc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBzaG93UG9wdXBPckNyZWF0
ZUFuaW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25z
dCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcs
IGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9y
SW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0
UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgCisgICAgaWYgKCFnZXRSVkl0
ZW1DbGFzcygpIHx8ICFnZXRSVlByZXNlbnRlckNsYXNzKCkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIGlmIChOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkpCisg
ICAgICAgIFttdXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9uc107
CisKKyAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlv
bmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8UlZQcmVz
ZW50ZXI+IHByZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgpIGlu
aXRdKTsKKyAgICAKKyAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKKyAgICBOU1BvaW50IHBvaW50
ZXJMb2NhdGlvbjsKKyAgICAKKyAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1h
Z2UoKSkgeworICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4dElu
ZGljYXRvci5nZXQoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZpZXdD
b29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RD
b29yZGluYXRlcygpWzBdOworICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluVmll
d0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGluZ1Jl
Y3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVjdElu
Um9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICAKKyAgICAgICAgaWYgKHJvb3RWaWV3VG9W
aWV3Q29udmVyc2lvbkNhbGxiYWNrKSB7CisgICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0Qm91
bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgc2VsZWN0aW9uQm91bmRp
bmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFj
ayhzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnkodGV4
dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOworICAgICAgICBoaWdo
bGlnaHRSZWN0ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7CisgICAg
ICAgIHBvaW50ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5sb2Nh
dGlvbigpOworICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBOU1BvaW50IHRleHRCYXNl
bGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOworICAgICAgICAKKyAgICAg
ICAgaGlnaGxpZ2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBv
aW50OnRleHRCYXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKKyAgICB9CisgICAgCisgICAgUmV0
YWluUHRyPFdlYlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tXZWJS
ZXZlYWxIaWdobGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0UmVj
dCB1c2VEZWZhdWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgp
IGF0dHJpYnV0ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdl
dCgpXSk7CisgICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9w
dE5TKFthbGxvY1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRlckxv
Y2F0aW9uSW5WaWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxlZ2F0
ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQoKV0p
OworICAgIAorICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRl
bUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0
cmluZy5nZXQoKS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOworICAg
IAorICAgIFt3ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGlnaHQg
PSBXVEZNb3ZlKHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xl
YXJUZXh0SW5kaWNhdG9yKV0geworICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQorICAg
ICAgICAgICAgY2xlYXJUZXh0SW5kaWNhdG9yKCk7CisgICAgfV07CisgICAgCisgICAgaWYgKGNy
ZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFuaW1h
dGlvbkNvbnRyb2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVz
ZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICBbcHJlc2VudGVy
IHJldmVhbEl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250
ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIHJldHVybiBuaWw7CisgICAgCisj
ZWxzZSAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAgVU5VU0VEX1BBUkFNKGNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIpOworICAgIFVOVVNFRF9QQVJBTShkaWN0aW9uYXJ5UG9wdXBJbmZvKTsK
KyAgICBVTlVTRURfUEFSQU0odmlldyk7CisgICAgVU5VU0VEX1BBUkFNKHRleHRJbmRpY2F0b3JJ
bnN0YWxsYXRpb25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrKTsKKyAgICBVTlVTRURfUEFSQU0oY2xlYXJUZXh0SW5kaWNhdG9yKTsK
KyAgICAKKyAgICByZXR1cm4gbmlsOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorfQorCit2b2lkIERpY3Rpb25hcnlM
b29rdXA6OnNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9w
dXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNh
dG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVu
Y3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAg
IHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBv
cHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmll
d1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsK
K30KKwordm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCisKK1dLUmV2ZWFsQ29udHJvbGxlciBE
aWN0aW9uYXJ5TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlv
bmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBX
VEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxh
dGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
IGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmlt
YXRpb25Db250cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJh
Y2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCisKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpIC8vIEVOQUJMRShSRVZFQUwpCisK
K3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKQoreworICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25z
dCBIaXRUZXN0UmVzdWx0JikKK3sKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShSRVZFQUwpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCBlNGI5MGJkZjI3MDUyYjAzMmY5
YTNjZTQzMzU0M2QxZjg3Nzg0ZjY3Li44NWM0Mjc0MWFiYWQ3NTdkZDEwZmU0YTZkNDNmMWJiYTcz
ZGZmNjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRl
bnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNv
bnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9ydCAiRG9jdW1lbnQu
aCIKICNpbXBvcnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVy
LmgiCisjaW1wb3J0ICJFZGl0b3IuaCIKKyNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgogI2ltcG9y
dCAiRmlsZS5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaAppbmRleCBjYjZk
NTNlYjhmOGM0Y2ZkMzg5NDU3ZjViZWFlMjgzYTM3ZGE4MTkyLi5mOGY3NjFjZGM4MWFlYmQzZGYw
ODgzN2EzMjMxYzA4ZjM1YTRmZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cC5oCkBAIC0yMywxNSArMjMsMjUgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWYgUExBVEZPUk0oTUFDKQorI3ByYWdtYSBvbmNl
CisKKyNpZiBQTEFURk9STShDT0NPQSkKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQb3B1cEluZm8u
aCIKLSNpbmNsdWRlIDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25p
emVyU1BJLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1l
ZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgorI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KIAogT0JKQ19DTEFTUyBOU1ZpZXc7CiBPQkpD
X0NMQVNTIFBERlNlbGVjdGlvbjsKIAorI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVkZWYgaWQgPE5T
SW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gV0tSZXZlYWxDb250cm9sbGVyOwor
I2Vsc2UKK3R5cGVkZWYgaWQgV0tSZXZlYWxDb250cm9sbGVyOworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAt
NDgsOCArNTgsMTEgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQg
c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RG
OjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRp
b25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJv
b3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgaGlkZVBvcHVwKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
aWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJv
bGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3Qg
V1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxs
YXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4m
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CisgICAgCisjaWYgUExB
VEZPUk0oTUFDKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIg
YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBO
U1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJ
bmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJl
Y3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0
ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlOWU0NDc0YTQ5ZmNjOWIwOTViMmY0YmRh
NmM5YWUzZjM4Y2ZlNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDM4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIkRpY3Rpb25hcnlMb29rdXAuaCIKLQotI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFJFVkVBTCkKLQotI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkVk
aXRpbmcuaCIKLSNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgotI2ltcG9ydCAiRnJhbWUuaCIK
LSNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCi0j
aW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJSYW5n
ZS5oIgotI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCi0jaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIK
LSNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVNlbGVjdGlvbi5o
IgotI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCi0jaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+Ci0j
aW1wb3J0IDxwYWwvc3BpL21hYy9Mb29rdXBTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05T
SW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkv
bWFjL1JldmVhbFNQSS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9SZWZQdHIuaD4KLQotQGludGVyZmFjZSBXZWJSZXZlYWxIaWdobGlnaHQgPFJW
UHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmplY3QgewotQHByaXZhdGUKLSAgICBG
dW5jdGlvbjx2b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7Ci0gICAgTlNSZWN0IF9oaWdobGln
aHRSZWN0OwotICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpfYXR0cmlidXRlZFN0cmluZzsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCB1c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURl
ZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5n
OihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZzsKLS0gKHZvaWQpc2V0Q2xl
YXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yOwot
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxIaWdobGlnaHQKLQotQHN5bnRoZXNp
emUgaGlnaGxpZ2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKLUBzeW50aGVzaXplIHVzZURlZmF1bHRI
aWdobGlnaHQ9X3VzZURlZmF1bHRIaWdobGlnaHQ7Ci1Ac3ludGhlc2l6ZSBhdHRyaWJ1dGVkU3Ry
aW5nPV9hdHRyaWJ1dGVkU3RyaW5nOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGln
aHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVz
ZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICop
IGF0dHJpYnV0ZWRTdHJpbmcKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfaGlnaGxpZ2h0UmVjdCA9IGhpZ2hsaWdodFJl
Y3Q7Ci0gICAgX3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAg
IF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZzsKLSAgICAKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQo
KT4mJiljbGVhclRleHRJbmRpY2F0b3IKLXsKLSAgICBfY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RG
TW92ZShjbGVhclRleHRJbmRpY2F0b3IpOwotfQotCi0tIChOU0FycmF5PE5TVmFsdWUgKj4gKily
ZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCByZWN0c0Zvckl0ZW06
KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOwotICAgIHJldHVybiBAW1tOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c2VsZi5o
aWdobGlnaHRSZWN0XV07Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5n
Q29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQotewotICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICAKLSAgICBmb3IgKE5TVmFsdWUgKnJlY3RWYWwgaW4g
Y29udGV4dC5pdGVtUmVjdHNJblZpZXcpIHsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSByZWN0VmFs
LnJlY3RWYWx1ZTsKLQotICAgICAgICAvLyBHZXQgY3VycmVudCBmb250IGF0dHJpYnV0ZXMgZnJv
bSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBhZGQgcGFyYWdyYXBoIHN0eWxlIGF0
dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50ZXIgdGV4dC4KLSAgICAgICAgUmV0YWluUHRyPE5TTXV0
YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgZm9udEF0
dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgbGVu
Z3RoXSldXSk7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFy
YWdyYXBoID0gYWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgIFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudENlbnRlcl07
Ci0gICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJhZ3JhcGguZ2V0KCkgZm9yS2V5Ok5T
UGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAKLSAgICAgICAgUmV0YWluUHRyPE5T
QXR0cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGF0dHJp
YnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0pOwotICAgICAgICBbc3RyaW5nIGRyYXdJblJlY3Q6cmVj
dF07Ci0gICAgfQotfQotCi0tIChCT09MKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRl
eHQgKiljb250ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGlnaHRGb3JJdGVtOihSVkl0ZW0gKilp
dGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVt
KTsKLSAgICByZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxpZ2h0OwotfQotCi0tICh2b2lkKXJl
dmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRp
bmdJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICBhdXRvIGJsb2NrID0gV1RGTW92ZShfY2xlYXJUZXh0
SW5kaWNhdG9yKTsKLSAgICBpZiAoYmxvY2spCi0gICAgICAgIGJsb2NrKCk7Ci19Ci0KLUBlbmQK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGlj
dGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQotICAgICAgICBy
ZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0
aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlv
bnMuCi0gICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsK
LSAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0KLSAgICAv
LyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3Jh
cGhzIG9mIHRleHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uRW5kKTsKLQotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0
YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0
KCkpOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVj
dGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQp
OwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdl
KHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAgIFN0cmluZyBpdGVtU3RyaW5nID0g
cGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPFJWSXRl
bT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRl
bVN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7Ci0gICAgTlNSYW5nZSBoaWdobGln
aHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0gICAgCi0gICAgcmV0dXJuIHsg
VGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5n
ZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCi0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKLX0KLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0
VGVzdFJlc3VsdCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0g
ICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKLSAgICAKLSAgICBhdXRvKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgp
LmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmls
IH07Ci0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIg
YXQgdGhlIHBvaW50LgotICAgIGF1dG8gZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRl
ZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOwotICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQo
ZnJhbWVQb2ludCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgYXV0
byBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsK
LSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwotCi0gICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+
cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKLSAgICBOU1JhbmdlIHNlbGVjdGlvblJhbmdlOwotICAgIGludCBoaXRJ
bmRleDsKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKLSAgICAKLSAgICBp
ZiAoc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNl
bGVjdGlvbikgewotICAgICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpOwotICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxl
RW5kKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8g
dXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgICAgIGF1dG8gcGFy
YWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAg
YXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwotICAgICAg
ICAKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9u
RW5kID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgICAgICAK
LSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBw
YXJhZ3JhcGhFbmQpOwotICAgICAgICAKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VS
YW5nZShUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQo
KSksIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBz
ZWxlY3Rpb25FbmQpLmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBoaXRJbmRleCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbiku
Z2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
QWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7IHBvc2l0aW9uIH07Ci0gICAgICAgIHNlbGVjdGlvbkFj
Y291bnRpbmdGb3JMaW5lUnVsZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJp
dHkpOwotICAgICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMu
c3RhcnQoKTsKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAg
Y2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgotICAgICAgICBm
dWxsQ2hhcmFjdGVyUmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3Rl
cnMocG9zaXRpb24sIDI1MCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJS
YW5nZSkKLSAgICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgICAgICAKLSAg
ICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICAg
ICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hh
cmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSBy
ZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1
ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwot
ICAgIAotICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5n
ZS5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJ
dGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVj
dGVkUmFuZ2VdKTsKLSAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdo
bGlnaHRSYW5nZTsKLQotICAgIGlmIChoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZv
dW5kIHx8ICFoaWdobGlnaHRSYW5nZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotICAgIAotICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxD
aGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxl
bmd0aCksIG5pbCB9OwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAg
Ci0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi19Ci0KLXN0YXRpYyB2b2lkIGV4
cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbiwgTlNJbnRl
Z2VyIG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRl
ZEJlZm9yZVN0YXJ0LCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKQotewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHNpemVfdCBvcmlnaW5hbExlbmd0
aCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoOwotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0
aW9uQXRTdGFydDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07Ci0gICAgCi0gICAgY2hhcmFj
dGVyc0FkZGVkQmVmb3JlU3RhcnQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFs
TGVuZ3RoOwotICAgIAotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bnVtYmVy
T2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAgIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gc2Vs
ZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aCAtIGNoYXJhY3RlcnNBZGRlZEJl
Zm9yZVN0YXJ0OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotc3RkOjp0
dXBsZTxOU1N0cmluZyAqLCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6c3RyaW5n
Rm9yUERGU2VsZWN0aW9uKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0g
ICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhp
bmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBpZiAoIXNlbGVj
dGlvbiB8fCAhc2VsZWN0aW9uLnN0cmluZy5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7IEAiIiwg
bmlsIH07Ci0KLSAgICBSZXRhaW5QdHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JMb29rdXAg
PSBhZG9wdE5TKFtzZWxlY3Rpb24gY29weV0pOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJl
IGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhl
IHBvaW50LgotICAgIGF1dG8gb3JpZ2luYWxMZW5ndGggPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0
cmluZ10ubGVuZ3RoOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9
IDA7Ci0gICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gMDsKLSAgICBleHBh
bmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoc2VsZWN0aW9uRm9yTG9va3VwLmdldCgpLCAyNTAsIGNo
YXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCk7Ci0KLSAg
ICBhdXRvIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ107
Ci0gICAgYXV0byByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlcnNBZGRlZEJlZm9y
ZVN0YXJ0LCAwKTsKLQotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxv
Y1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmZ1bGxQbGFpblRleHRTdHJpbmcgc2VsZWN0
ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBpdGVt
LmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAotICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2Nh
dGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBu
aWwgfTsKLQotICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEJlZm9yZSA9IHJhbmdlVG9QYXNzLmxv
Y2F0aW9uIC0gZXh0cmFjdGVkUmFuZ2UubG9jYXRpb247Ci0gICAgTlNJbnRlZ2VyIGxvb2t1cEFk
ZGVkQWZ0ZXIgPSAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gKyBleHRyYWN0ZWRSYW5nZS5sZW5n
dGgpIC0gKHJhbmdlVG9QYXNzLmxvY2F0aW9uICsgb3JpZ2luYWxMZW5ndGgpOwotCi0gICAgW3Nl
bGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Omxvb2t1cEFkZGVkQmVmb3JlXTsKLSAgICBb
c2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOmxvb2t1cEFkZGVkQWZ0ZXJdOwotCi0gICAg
QVNTRVJUKFtzZWxlY3Rpb24uc3RyaW5nIGlzRXF1YWxUb1N0cmluZzpbZnVsbFBsYWluVGV4dFN0
cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6ZXh0cmFjdGVkUmFuZ2VdXSk7Ci0gICAgcmV0dXJuIHsg
c2VsZWN0aW9uLnN0cmluZywgbmlsIH07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotCi0gICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKLX0KLQotc3RhdGljIGlkIDxOU0ltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQ
b3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpG
dW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25D
YWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RW
aWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVh
clRleHRJbmRpY2F0b3IpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAg
IAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMo
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgaWYgKE5TRGljdGlvbmFy
eSAqb3B0aW9ucyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKLSAgICAgICAg
W211dGFibGVPcHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKLQotICAg
IGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9w
dXBJbmZvLnRleHRJbmRpY2F0b3IpOwotICAgIAotICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4g
cHJlc2VudGVyID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOwot
ICAgIAotICAgIE5TUmVjdCBoaWdobGlnaHRSZWN0OwotICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0
aW9uOwotICAgIAotICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7
Ci0gICAgICAgIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9y
LmdldCgpKTsKLQotICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzKClbMF07Ci0gICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRp
bmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29v
cmRpbmF0ZXMoKTsKLSAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmll
d0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmll
d0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252
ZXJzaW9uQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1Jl
Y3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJ
blZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVj
dGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRp
bmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgIGhpZ2hsaWdodFJl
Y3QgPSBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKLSAgICAgICAgcG9p
bnRlckxvY2F0aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7
Ci0gICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3Jp
Z2luID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW47Ci0gICAgICAgIAotICAgICAgICBoaWdo
bGlnaHRSZWN0ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGlu
YXRlcygpOwotICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4
dEJhc2VsaW5lT3JpZ2luIHRvVmlldzpuaWxdOwotICAgIH0KLSAgICAKLSAgICBSZXRhaW5QdHI8
V2ViUmV2ZWFsSGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhp
Z2hsaWdodCBhbGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURl
ZmF1bHRIaWdobGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmli
dXRlZFN0cmluZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsK
LSAgICBSZXRhaW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2Fs
bG9jUlZQcmVzZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25J
blZpZXc6cG9pbnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxS
VlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7Ci0gICAg
Ci0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFu
Y2UoKSBpbml0V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdl
dCgpLnN0cmluZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7Ci0gICAgCi0gICAg
W3dlYkhpZ2hsaWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1v
dmUod2ViSGlnaGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJ
bmRpY2F0b3IpXSB7Ci0gICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCi0gICAgICAgICAg
ICBjbGVhclRleHRJbmRpY2F0b3IoKTsKLSAgICB9XTsKLSAgICAKLSAgICBpZiAoY3JlYXRlQW5p
bWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29u
dHJvbGxlckZvckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdD
b250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIFtwcmVzZW50ZXIgcmV2ZWFs
SXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29u
dGV4dC5nZXQoKSBvcHRpb25zOm5pbF07Ci0gICAgcmV0dXJuIG5pbDsKLQotICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotdm9pZCBEaWN0aW9uYXJ5
TG9va3VwOjpzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBv
cHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGlj
YXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAg
ICBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25hcnlQ
b3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZp
ZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7
Ci19Ci0KLXZvaWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKCkKLXsKLSAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBpZiAoIWdldExVTG9va3VwRGVmaW5pdGlvbk1v
ZHVsZUNsYXNzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBbZ2V0TFVMb29rdXBEZWZpbml0aW9u
TW9kdWxlQ2xhc3MoKSBoaWRlRGVmaW5pdGlvbl07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotfQotCi1pZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBE
aWN0aW9uYXJ5TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlv
bmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBX
VEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxh
dGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
IGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmlt
YXRpb25Db250cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJh
Y2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9z
cGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggOWVlZmI5Nzg0ZmJlNjg5YjA5MGE1YjAxZmNlZWNlNzBk
NjU0MTMyZC4uMTk1NWQ2MmQ0MGIxZDg2ZTRkZDUxMGViMTQ4ODYxZDRiZGE2OTc4YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTczNSw2ICs3MzUsOSBA
QCBzdHJ1Y3QgX1VJV2ViVG91Y2hFdmVudCB7CiAgICAgYm9vbCBpc1BvdGVudGlhbFRhcDsKIH07
CiAKK0BpbnRlcmZhY2UgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNv
Z25pemVyCitAZW5kCisKIEBjbGFzcyBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXI7
CiAKIEBwcm90b2NvbCBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSA8
TlNPYmplY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
YWdlUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQ
cm94eUNvY29hLm1tCmluZGV4IGY1Njg3NWRmZjNhMWNjNDVlYmVlNjE3MjE1Y2U5NTcyM2Y1M2Rl
NGUuLjY1YWVjZDkyMTkyZmU2NjYxZjFiYWE0MmQzNDA3ODZjZTRkMWQ1MzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC0z
Myw2ICszMyw3IEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3Np
bmdTUEkuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKKyNpbXBvcnQgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJD
b3JlL0RyYWdJdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0x
ODksNSArMTkwLDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUNsb25lQXR0YWNobWVu
dChSZWY8QVBJOjpBdHRhY2htZW50PiYmIGZyb21BdHRhY2htZW50CiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
b2ludCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Cit9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24o
KSwgbV9wYWdlSUQpOwogfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRl
eCBjNDhjMzlkNjZkYzEzOTY0MjA1NjU0YjlkNTQwZjBmNjg3ODg0MjBhLi45ZGMzOTA4Y2IxMDc2
MGJlODI0YTU5Y2NmYmU2ZjkzM2I3OGZiZjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC04Nyw2ICs4Nyw3
IEBAIGNsYXNzIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdl
UHJveHk7CiB9CiAKK0BjbGFzcyBfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBf
VUlIaWdobGlnaHRWaWV3OwogQGNsYXNzIF9VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyOwogQGNsYXNzIFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcjsKQEAgLTIxNCw2ICsy
MTUsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogCiAjaWYgUExBVEZPUk0oSU9T
TUFDKQogICAgIFJldGFpblB0cjxVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI+IF9ob3Zlckdlc3R1
cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcj4g
X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwogI2VuZGlmCiAKICAgICBSZXRhaW5QdHI8VUlXS1Rl
eHRJbnRlcmFjdGlvbkFzc2lzdGFudD4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQppbmRleCAyMWQzMTc3MDA2YjFjNmRmMDE2YmFiZjNlMGMzNmE3Mzg4NDJhMDkyLi4yNzc3
NTA4NGVlOTI0ZGFmZDA1NTA2OWZmN2ViM2Q3N2Q0OTk3MWE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAg
LTExMiw2ICsxMTIsNyBAQAogI2lmIFBMQVRGT1JNKElPU01BQykKICNpbXBvcnQgIk5hdGl2ZVdl
Yk1vdXNlRXZlbnQuaCIKICNpbXBvcnQgPFVJS2l0L1VJSG92ZXJHZXN0dXJlUmVjb2duaXplci5o
PgorI2ltcG9ydCA8VUlLaXQvX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQg
PHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNlbmRpZgogCkBAIC02NDksNiAr
NjUwLDExIEBAIC0gKHZvaWQpc2V0dXBJbnRlcmFjdGlvbgogICAgIF9ob3Zlckdlc3R1cmVSZWNv
Z25pemVyID0gYWRvcHROUyhbW1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdp
dGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hh
bmdlZDopXSk7CiAgICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZd
OwogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKKyAgICAKKyAgICBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtb
X1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0
aW9uOkBzZWxlY3RvcihfbG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6KV0pOworICAgIFtfbG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3NlbGYgYWRkR2VzdHVy
ZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKICNlbmRp
ZgogCiAgICAgX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1dLU3ludGhl
dGljQ2xpY2tUYXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBh
Y3Rpb246QHNlbGVjdG9yKF9zaW5nbGVUYXBDb21taXRlZDopXSk7CkBAIC03NTMsNiArNzU5LDkg
QEAgLSAodm9pZCljbGVhbnVwSW50ZXJhY3Rpb24KICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAg
W19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW3NlbGYgcmVt
b3ZlR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAg
IAorICAgIFtfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBb
c2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0
KCldOwogI2VuZGlmCiAKICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVn
YXRlOm5pbF07CkBAIC04MzYsNiArODQ1LDcgQEAgLSAodm9pZClfcmVtb3ZlRGVmYXVsdEdlc3R1
cmVSZWNvZ25pemVycwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl90d29GaW5n
ZXJTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9TTUFD
KQogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25p
emVyLmdldCgpXTsKKyAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2Vz
dHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTg1MCw2ICs4NjAsNyBAQCAt
ICh2b2lkKV9hZGREZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgYWRkR2VzdHVy
ZVJlY29nbml6ZXI6X3R3b0ZpbmdlclNpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsK
ICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hv
dmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25p
emVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtMTQ1
MCw2ICsxNDYxLDEwIEBAIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29n
bml6ZXIgKilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pCiAKICAgICBpZiAoW2dlc3R1
cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBjbGFz
c11dIHx8IFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0
dXJlUmVjb2duaXplciBjbGFzc11dKQogICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAgIGlm
ICgoW2dlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNv
Z25pemVyIGNsYXNzXV0gJiYgW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpb
VUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBjbGFzc11dKSB8fCAoW290aGVyR2VzdHVyZVJl
Y29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBjbGFz
c11dICYmIFtnZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJl
UmVjb2duaXplciBjbGFzc11dKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKwogI2VuZGlmCiAgICAg
aWYgKGlzU2FtZVBhaXIoZ2VzdHVyZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6ZXIs
IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSwgX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQuZ2V0KCkuZm9yY2VQcmVzc0dlc3R1cmUpKQogICAgICAgICByZXR1cm4gWUVT
OwpAQCAtNjAzMyw2ICs2MDQ4LDEyIEBAIC0gKEJPT0wpYWxsb3dzRGljdGF0aW9uSW5wdXRGb3JM
aXN0Vmlld0NvbnRyb2xsZXI6KFBVSUNRdWlja2JvYXJkVmlld0NvbnRyb2xsZXIKICNlbmRpZiAv
LyBQTEFURk9STShXQVRDSE9TKQogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQorLSAodm9pZClfbG9v
a3VwR2VzdHVyZVJlY29nbml6ZWQ6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2du
aXplcgoreworICAgIE5TUG9pbnQgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcyA9IFtnZXN0dXJl
UmVjb2duaXplciBsb2NhdGlvbkluVmlldzpzZWxmXTsKKyAgICBfcGFnZS0+cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQobG9jYXRpb25JblZpZXdD
b29yZGluYXRlcykpOworfQorCiAtICh2b2lkKV9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdl
ZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiB7CiAgICAgaWYgKCFf
cGFnZS0+aXNWYWxpZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0KaW5kZXggZGM4MDI4MzZkZDYwZTg0MmRhYTEzYWY0NDRiMmY3OTc5MjIyMDQ5
MC4uZDk5OGJiNTYyZWE2NzM0NmMzMWIzMzA4MzNmMmJjMmZiMGY5NmZhNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC0xMjEsMTEgKzEy
MSw2IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29u
c3QgU3RyaW5nJikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6Omdl
c3R1cmVDYWxsYmFjayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdl
c3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzLCBDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2U8
R2VzdHVyZUNhbGxiYWNrPihjYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IDE1YzdkNzYxNTM2MjM0YjZiY2NiYTBmZGYz
YmQ3YzYwYTk2YzNlZjIuLmJiZDg3OTk5OTEyNDAwMzc0OWQwMmYzZDQzODkzODRkMGQyNjJjY2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpA
QCAtMzIzLDIyICszMjMsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UHJvbWlzZWREYXRhRm9y
SW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgUwogCiAjZW5kaWYKIAot
dm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKLX0KLQot
dm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZD
dXJyZW50U2VsZWN0aW9uKCksIG1fcGFnZUlEKTsKLX0KLQogLy8gQ29tcGxleCB0ZXh0IGlucHV0
IHN1cHBvcnQgZm9yIHBsdWctaW5zLgogdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRDb21wbGV4VGV4
dElucHV0VG9QbHVnaW4odWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgdGV4dElucHV0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDNlNzk0MzFmOTM3
MTE0YzQxZjlkMmRmZDU4ZTBiNGY3MjE4MTU5YTYuLmEzOGNkMmJmNjM3OTRjOGU5ZjFkMjEyYTNl
NzhiM2U4YzRlZjhjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTI2LDkgKzI2LDIwIEBACiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIldlYlBhZ2UuaCIKIAorCiAjaW1wb3J0ICJMb2FkUGFyYW1l
dGVycy5oIgorI2ltcG9ydCAiUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVz
c2FnZXMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1cC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9FZGl0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29u
dmVydGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvTm9kZVJlbmRlclN0eWxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTWVkaWFT
ZXNzaW9uTWFuYWdlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJFbGVtZW50Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1JlbmRlck9iamVjdC5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAKQEAg
LTU5LDYgKzcwLDExNCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vz
c2lvbkluZm8oQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogCiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpOb3dQbGF5aW5nSW5mb0NhbGxiYWNrKGhhc0FjdGl2ZVNlc3Npb24sIHJlZ2lz
dGVyZWRBc05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgdGl0bGUsIGR1cmF0aW9uLCBlbGFwc2VkVGlt
ZSwgdW5pcXVlSWRlbnRpZmllciwgY2FsbGJhY2tJRCkpOwogfQorICAgIAordm9pZCBXZWJQYWdl
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxv
YXRQb2ludCkKK3sKKyAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFt
ZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlzIG92
ZXIuCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50
SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygp
LT53aW5kb3dUb0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOworICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0ZDo6
dGllKHJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVz
dWx0KHJlc3VsdCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGF1dG8qIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUs
ICpyYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJv
dW5jZSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxl
Y3Rpb24oRnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRl
eHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24p
Cit7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOworICAgIE5TRGljdGlvbmFyeSAq
b3B0aW9uczsKKyAgICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgaWYgKHNlbGVjdGVk
UmFuZ2UpCisgICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpz
ZWxlY3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKK30KKwordm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7
CisgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1l
LCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7Cit9CisgICAgCit2b2lkIFdlYlBhZ2U6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFu
Z2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9G
b3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7
Cit9CisKK0RpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0Zv
clJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMs
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pCit7CisgICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKKyAgICBlZGl0b3Iu
c2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKKyAgICAKKyAgICBEaWN0aW9u
YXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgaWYgKHJhbmdlLnRleHQoKS5z
dHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGlu
Z0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBv
cHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAg
cmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGlmIChxdWFkcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2Up
OworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAg
SW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNb
MF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgCisgICAgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGZsb2F0
IHNjYWxlZEFzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKiBw
YWdlU2NhbGVGYWN0b3IoKSA6IDA7CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBG
bG9hdFBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQpOwor
ICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7CisKKyNpZiBQTEFURk9S
TShNQUMpCisKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRy
aWJ1dGVkU3RyaW5nOjpObyk7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5n
IHN0cmluZ11dKTsKKyAgICAKKyAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0Zv
bnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKyAgICAKKyAgICBbbnNBdHRyaWJ1dGVkU3Ry
aW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0
ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0
dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1
dGVzIG11dGFibGVDb3B5XSk7CisgICAgICAgIAorICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2Nh
bGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAg
IGlmIChmb250KQorICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpm
b250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKKyAgICAgICAg
aWYgKGZvbnQpCisgICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIAorICAgICAgICBbc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5n
ZTpyYW5nZV07CisgICAgfV07CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAg
VGV4dEluZGljYXRvck9wdGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRp
b25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOworICAg
IGlmIChwcmVzZW50YXRpb25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpCisgICAgICAgIGluZGljYXRvck9wdGlvbnMg
fD0gVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGln
aHQ7CisgICAgCisgICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0
SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNl
bnRhdGlvblRyYW5zaXRpb24pOworICAgIGlmICghdGV4dEluZGljYXRvcikgeworICAgICAgICBl
ZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJl
dHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBkaWN0aW9uYXJ5UG9w
dXBJbmZvLnRleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxl
ZE5TQXR0cmlidXRlZFN0cmluZzsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAg
ZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgIHJldHVy
biBkaWN0aW9uYXJ5UG9wdXBJbmZvOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KaW5kZXggNDZjZDA1MGQ1ZTAwNDZkMGZmMGEzNzFkMDMyMTQyNWRmNDBiYmMwZi4uNTk0OWM1
ZTAwYzc5ZGExZmE0YjllOWI5NjkzMWUzM2ZmMzAyNDRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0xOTEsOSAr
MTkxLDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgIyBEaWN0aW9uYXJ5IHN1cHBvcnQuCiAgICAgUGVyZm9ybURpY3Rpb25h
cnlMb29rdXBBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKE1BQykKICAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNl
bGVjdGlvbigpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBlZTA4MmM0YTlmNGE0NDNlMzBiMjZkZTZmZDA2
NGIyZmFiZDFlNTY3Li4xMWQwYzU4YjU4NTMwMzAxYWMzYzVmODAwNzBmZjhhYzM0YTFlZTkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQpAQCAtNDEzLDIxICs0MTMsNiBAQCB2b2lkIFdlYlBhZ2U6OnNlbmRDb21wbGV4VGV4dElu
cHV0VG9QbHVnaW4odWludDY0X3QsIGNvbnN0IFN0cmluZyYpCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmLCBSYW5nZSYsIE5TRGljdGlvbmFyeSAqLCBUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCiBib29sIFdlYlBhZ2U6OnBlcmZvcm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rv
cihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50KikKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQppbmRleCA0NzMzYjFjYmYyZmU0NWNkOWQwY2VhN2VlZjliYzdjMzhhZmFm
N2U0Li5mYTdhNmFhZjFiNjBiZGE5MGRjZDA3OWJhMWE5NDM2ZjEyMTZiMGRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAt
Mzg5LDEwMiArMzg5LDcgQEAgdm9pZCBXZWJQYWdlOjpmb250QXRTZWxlY3Rpb24oQ2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9udEF0U2Vs
ZWN0aW9uQ2FsbGJhY2soZm9udE5hbWUsIGZvbnRTaXplLCBzZWxlY3Rpb25IYXNNdWx0aXBsZUZv
bnRzLCBjYWxsYmFja0lEKSk7CiB9CiAgICAgCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQotewotICAg
IGlmIChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5G
cmFtZSgpKSkgewotICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGZsb2F0UG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgotICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVz
dWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhy
b3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwot
ICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9ucykg
PSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOwotICAgIGlm
ICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGZyYW1lID0gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVu
dCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVj
dGVkUmFuZ2U7Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOwotICAgIHN0ZDo6dGllKHNlbGVj
dGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24o
c2VsZWN0aW9uKTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMsIHByZXNl
bnRhdGlvblRyYW5zaXRpb24pOwotfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLXsKLSAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgcGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3Nm
YWRlKTsKLX0KLQotRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0
aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJh
bnNpdGlvbikKLXsKLSAgICBFZGl0b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOwotICAgIGVk
aXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKHRydWUpOwotCi0gICAgRGljdGlv
bmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIGlmIChyYW5nZS50ZXh0KCku
c3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQ
b3B1cEluZm87Ci0gICAgfQotCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFu
Z2UuYWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOwotICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwot
ICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBJbnRSZWN0
IHJhbmdlUmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpKTsKLQotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJh
bmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKLSAgICBmbG9hdCBzY2FsZWRBc2Nl
bnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFj
dG9yKCkgOiAwOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luID0gRmxvYXRQb2ludChy
YW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkQXNjZW50KTsKLSAgICBkaWN0aW9u
YXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOwotCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShy
YW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOwotCi0gICAgUmV0YWlu
UHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9
IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmlu
ZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKLQotICAgIE5TRm9udE1hbmFnZXIgKmZv
bnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotCi0gICAgW25z
QXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgw
LCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNE
aWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7Ci0gICAg
ICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRv
cHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOwotCi0gICAgICAgIE5TRm9udCAqZm9udCA9
IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAg
ICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRG
b250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOwotICAg
ICAgICBpZiAoZm9udCkKLSAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpm
b250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLQotICAgICAgICBbc2NhbGVkTlNBdHRy
aWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpy
YW5nZV07Ci0gICAgfV07Ci0KLSAgICBUZXh0SW5kaWNhdG9yT3B0aW9ucyBpbmRpY2F0b3JPcHRp
b25zID0gVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVu
dEZvckNvbXBsZXhSYW5nZXM7Ci0gICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKLSAg
ICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBz
aG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKLQotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0
ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRp
Y2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLSAgICBpZiAoIXRleHRJbmRp
Y2F0b3IpIHsKLSAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8o
ZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAg
ICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRh
KCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nOwotCi0gICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1
cEluZm8oZmFsc2UpOwotICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotfQogCiAjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pCiAKQEAgLTUzOSwxMSArNDQ0LDYgQEAgRGljdGlvbmFyeVBv
cHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yU2VsZWN0aW9uSW5QREZQbHVn
aW4oUERGU2VsZWMKIAogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpv
cHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25U
cmFuc2l0aW9uKQotewotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9y
bURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKGZyYW1lLCByYW5n
ZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsKLX0KLQogYm9vbCBXZWJQYWdl
OjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gRmlyc3QgZ2l2ZSBhY2Nlc3Np
YmlsaXR5IGEgY2hhbmNlIHRvIGhhbmRsZSB0aGUgZXZlbnQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355156</attachid>
            <date>2018-11-16 16:20:20 -0800</date>
            <delta_ts>2018-11-28 13:20:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191732-20181116162019.patch</filename>
            <type>text/plain</type>
            <size>73715</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzODE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE2ICBNZWdhbiBH
YXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29rdXAg
Q29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE5vdCBjdXJyZW5sdHkgdGVzdGFibGUKKwor
ICAgICAgICBEaWN0aW9uYXJ5TG9va3VwIHVzZXMgUmV2ZWFsIG5vdywgd2hpY2ggaXMgc2xhdGVk
IHRvIGJlIGNyb3NzLXBsYXRmb3JtLgorICAgICAgICBUaGF0IHBhdGNoIGdhdGVzIHRoZSBwYXJ0
cyBvZiBEaWN0aW9uYXJ5TG9va3VwIHRoYXQgY3VycmVudGx5IGRvIG5vdCBoYXZlCisgICAgICAg
IGFuIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbiBvbiBpT1MuIE9uY2UgUmV2ZWFsIGlzIHJlYWR5
LCB0aGlzIGNvZGUgd2lsbCBiZQorICAgICAgICByZXBsYWNlZCBvciBleHBhbmRlZCB1cG9uLCBh
cyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAu
aDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAgICAo
V2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKToKKwogMjAxOC0xMS0xNCAg
UGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lP
TiAoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpOiByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUgU3RvcHMgQ29tcGxldGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CShyZXZpc2lv
biAyMzgxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC04Miw2ICs4Miw3IEBAIGVkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNwcAog
ZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKIAogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCitlZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KIGVkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW0KIGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbQog
ZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCkBAIC05NSw3ICs5Niw2IEBAIGVk
aXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCiBlZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KIAogZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tCi1lZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVn
YWN5Lm1tCiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KIGVkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0
aW9uTWFjLm1tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzODE4OCkKKysrIFNv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAxOC0xMS0xNiAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1vdmUgTG9va3VwIENvZGUgZm9yIGJldHRlciBjcm9zcyBwbGF0Zm9ybSB1c2Fn
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNzMy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIHBh
bC9zcGkvbWFjL0xvb2t1cFNQSS5oOgorICAgICAgICAqIHBhbC9zcGkvbWFjL1JldmVhbFNQSS5o
OgorCiAyMDE4LTExLTExICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbaU9TXSBEcmF3IGNhcHMgbG9jayBpbmRpY2F0b3IgaW4gcGFzc3dvcmQgZmllbGRzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMzgxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQAogCQkJ
CTBDMkRBMTM5MUYzQkVCNDkwMERCQzMxNyAvKiBQYXNzS2l0U1BJLmggKi8sCiAJCQkJMEMyREEx
M0ExRjNCRUI0OTAwREJDMzE3IC8qIHB0aHJlYWRTUEkuaCAqLywKIAkJCQkwQzJEQTEzQjFGM0JF
QjQ5MDBEQkMzMTcgLyogUXVhcnR6Q29yZVNQSS5oICovLAorCQkJCTQ0Mjk1NkNDMjE4QTcyREUw
MDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQk1NzBBQjhGMDIwQUUyRThEMDBCOEJFODcg
LyogU2VjS2V5UHJveHlTUEkuaCAqLywKIAkJCQkwQzJEQTEzQzFGM0JFQjQ5MDBEQkMzMTcgLyog
U2VydmVyc1NQSS5oICovLAogCQkJCTBDMkRBMTJCMUYzQkVCNDkwMERCQzMxNyAvKiBVUkxGb3Jt
YXR0aW5nU1BJLmggKi8sCkBAIC00NjcsNyArNDY4LDYgQEAKIAkJCQkwQzc3ODU4NjFGNDUxMzBG
MDBGNEVCQjYgLyogUVRLaXRTUEkuaCAqLywKIAkJCQlBMTAyNjU4QTFGNTY3NDhDMDBCNEM4NDQg
LyogUXVpY2tEcmF3U1BJLmggKi8sCiAJCQkJMEM3Nzg1ODcxRjQ1MTMwRjAwRjRFQkI2IC8qIFF1
aWNrTG9va01hY1NQSS5oICovLAotCQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZl
YWxTUEkuaCAqLywKIAkJCQlBMTE3NUI0ODFGNkFGRjhFMDBDNEI5RjAgLyogU3BlZWNoU3ludGhl
c2lzU1BJLmggKi8sCiAJCQkJMEM3Nzg1ODgxRjQ1MTMwRjAwRjRFQkI2IC8qIFRVQ2FsbFNQSS5o
ICovLAogCQkJKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVh
bFNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1Jl
dmVhbFNQSS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2Nv
Y29hL1JldmVhbFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPG9iamMvcnVu
dGltZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRp
YXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVX
T1JLKFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWxDb3JlKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitTT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChS
ZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisK
KyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50ZXIuaD4KKyNpbXBv
cnQgPFJldmVhbC9SZXZlYWwuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisjaW1wb3J0IDxS
ZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxDb3JlL1JldmVhbENvcmUu
aD4KKworI2Vsc2UgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworCitAcHJvdG9jb2wgUlZQ
cmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZTsKKworQGludGVyZmFjZSBSVkl0ZW0gOiBOU09iamVj
dCA8TlNTZWN1cmVDb2Rpbmc+CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUZXh0OihOU1N0cmlu
ZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlIE5TX0RFU0lHTkFU
RURfSU5JVElBTElaRVI7CitAZW5kCisKK0BpbnRlcmZhY2UgUlZTZWxlY3Rpb24gOiBOU09iamVj
dAorKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6KE5TVUludGVnZXIpY2xpY2tJbmRleCBz
ZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXNlbGVjdGVkUmFuZ2VzIHNob3Vs
ZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVwZGF0ZVNlbGVjdGlvbjsKK0BlbmQKKwor
I2lmIFBMQVRGT1JNKE1BQykKK0BpbnRlcmZhY2UgUlZQcmVzZW50aW5nQ29udGV4dCA6IE5TT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6KE5TUG9p
bnQpcG9pbnRlckxvY2F0aW9uSW5WaWV3IGluVmlldzooTlNWaWV3ICopdmlldyBoaWdobGlnaHRE
ZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4paGlnaGxpZ2h0RGVsZWdh
dGU7CitAZW5kCisjZW5kaWYKKworQHByb3RvY29sIFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdh
dGUgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistIChOU0FycmF5IDxOU1ZhbHVlICo+ICopcmV2ZWFs
Q29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNGb3JJdGVtOihSVkl0
ZW0gKilpdGVtOworQG9wdGlvbmFsCistICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGlu
Z0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihSVkl0ZW0gKilpdGVtOwor
LSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3
UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtOworQGVuZAorCitAaW50ZXJmYWNlIFJWRG9jdW1l
bnRDb250ZXh0IDogTlNPYmplY3QgPCBOU1NlY3VyZUNvZGluZyA+CitAZW5kCisKK0BpbnRlcmZh
Y2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAorI2lmIFBMQVRGT1JNKE1BQykKKy0gKGlkPE5TSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0
ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRv
Y3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXBy
ZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7CisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQorLSAoQk9PTClyZXZlYWxJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3Vt
ZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGlu
Z0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25z
OihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworQGVuZAorCisjZW5kaWYgLy8gIVVTRShBUFBMRV9J
TlRFUk5BTF9TREspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3Vw
U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1
cFNQSS5oCShyZXZpc2lvbiAyMzgxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9t
YWMvTG9va3VwU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsyMywxMyBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAorCisjaWYgUExBVEZPUk0oTUFDKQorCiAjaW1wb3J0IDxvYmpjL3J1
bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZP
Uk0oTUFDKQotCiBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTG9va3VwKQog
U09GVF9MSU5LX0NMQVNTX09QVElPTkFMKExvb2t1cCwgTFVMb29rdXBEZWZpbml0aW9uTW9kdWxl
KQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oCShy
ZXZpc2lvbiAyMzgxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFs
U1BJLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNp
bXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEku
aD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFN
RVdPUksoUmV2ZWFsKQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUpCi1T
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKLVNPRlRfTElOS19D
TEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1TT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFM
KFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
LQotI2ltcG9ydCA8UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwvUmV2ZWFs
Lmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1wb3J0IDxSZXZlYWxD
b3JlL1JldmVhbENvcmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2Jq
ZWN0IDxOU1NlY3VyZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3Ry
aW5nICopdGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdO
QVRFRF9JTklUSUFMSVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2Jq
ZWN0Ci0rIChOU1JhbmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4
IHNlbGVjdGVkUmFuZ2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hv
dWxkVXBkYXRlU2VsZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOwotQGVuZAot
Ci1AaW50ZXJmYWNlIFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5TSW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRl
bSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29u
dGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdD
b250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChCT09MKXJldmVhbEl0
ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRv
Y3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXBy
ZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci1AZW5kCi0K
LSNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIzODE4
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjA0MTQsNiArMjA0MTQsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQzUyMjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKIAkJCQlD
NTIyN0RGMDFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSAqLywKKwkJCQk5MzdG
RjNENjFBMTAxMzFCMDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk5QjU1
RUVFODFCM0U4ODk4MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJRjQyQ0VCNTQy
MTQwMzFFRTAwMkRDQTcyIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0gKi8sCiAJCQkJ
RjQ4RDJBNzUyMTU2RkU1NzAwQzY3NTJCIC8qIEZvbnRBdHRyaWJ1dGVzQ29jb2EubW0gKi8sCkBA
IC0yNjEyOSw3ICsyNjEzMCw2IEBACiAJCQkJQ0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8qIEFs
dGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNFN0IyREIwMTU4NkFCQUQwMDk4
QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTM3RkYzRDQx
QTEwMTJENjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAuaCAqLywKLQkJCQk5MzdGRjNENjFB
MTAxMzFCMDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk0NDI5NTZDQTIx
OEE2RDMwMDA4MERCNTQgLyogRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSAqLywKIAkJCQlFRDUw
MURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovLAogCQkJCTRBOEM5NkVBMEJF
NjkwMzIwMDRFRUZGMCAvKiBGcmFtZVNlbGVjdGlvbk1hYy5tbSAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0JKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3Rpb25hcnlMb29rdXAuaCIKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiRWRpdGluZy5oIgor
I2ltcG9ydCAiRm9jdXNDb250cm9sbGVyLmgiCisjaW1wb3J0ICJGcmFtZS5oIgorI2ltcG9ydCAi
RnJhbWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbXBvcnQgIkhp
dFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJQYWdl
LmgiCisjaW1wb3J0ICJSYW5nZS5oIgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0
ICJUZXh0SXRlcmF0b3IuaCIKKyNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgorI2ltcG9ydCAi
VmlzaWJsZVNlbGVjdGlvbi5oIgorI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCisjaW1wb3J0IDxQ
REZLaXQvUERGS2l0Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oPgorI2lt
cG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhj
ZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFJFVkVBTCkK
KworI2lmIFBMQVRGT1JNKE1BQykKKworQGludGVyZmFjZSBXZWJSZXZlYWxIaWdobGlnaHQgPFJW
UHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmplY3QgeworQHByaXZhdGUKKyAgICBG
dW5jdGlvbjx2b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7CisgICAgTlNSZWN0IF9oaWdobGln
aHRSZWN0OworICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGlnaHQ7CisgICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpfYXR0cmlidXRlZFN0cmluZzsKK30KKworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCB1c2VEZWZhdWx0SGlnaGxpZ2h0OworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURl
ZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5n
OihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZzsKKy0gKHZvaWQpc2V0Q2xl
YXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxIaWdobGlnaHQKKworQHN5bnRoZXNp
emUgaGlnaGxpZ2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKK0BzeW50aGVzaXplIHVzZURlZmF1bHRI
aWdobGlnaHQ9X3VzZURlZmF1bHRIaWdobGlnaHQ7CitAc3ludGhlc2l6ZSBhdHRyaWJ1dGVkU3Ry
aW5nPV9hdHRyaWJ1dGVkU3RyaW5nOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGln
aHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVz
ZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICop
IGF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfaGlnaGxpZ2h0UmVjdCA9IGhpZ2hsaWdodFJl
Y3Q7CisgICAgX3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VEZWZhdWx0SGlnaGxpZ2h0OworICAg
IF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZzsKKyAgICAKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQo
KT4mJiljbGVhclRleHRJbmRpY2F0b3IKK3sKKyAgICBfY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RG
TW92ZShjbGVhclRleHRJbmRpY2F0b3IpOworfQorCistIChOU0FycmF5PE5TVmFsdWUgKj4gKily
ZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCByZWN0c0Zvckl0ZW06
KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBAW1tOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c2VsZi5o
aWdobGlnaHRSZWN0XV07Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5n
Q29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQoreworICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICAKKyAgICBmb3IgKE5TVmFsdWUgKnJlY3RWYWwgaW4g
Y29udGV4dC5pdGVtUmVjdHNJblZpZXcpIHsKKyAgICAgICAgTlNSZWN0IHJlY3QgPSByZWN0VmFs
LnJlY3RWYWx1ZTsKKworICAgICAgICAvLyBHZXQgY3VycmVudCBmb250IGF0dHJpYnV0ZXMgZnJv
bSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBhZGQgcGFyYWdyYXBoIHN0eWxlIGF0
dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50ZXIgdGV4dC4KKyAgICAgICAgUmV0YWluUHRyPE5TTXV0
YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgZm9udEF0
dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgbGVu
Z3RoXSldXSk7CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFy
YWdyYXBoID0gYWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0XSk7
CisgICAgICAgIFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudENlbnRlcl07
CisgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJhZ3JhcGguZ2V0KCkgZm9yS2V5Ok5T
UGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKKyAgICAKKyAgICAgICAgUmV0YWluUHRyPE5T
QXR0cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGF0dHJp
YnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0pOworICAgICAgICBbc3RyaW5nIGRyYXdJblJlY3Q6cmVj
dF07CisgICAgfQorfQorCistIChCT09MKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRl
eHQgKiljb250ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGlnaHRGb3JJdGVtOihSVkl0ZW0gKilp
dGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJBTShpdGVt
KTsKKyAgICByZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxpZ2h0OworfQorCistICh2b2lkKXJl
dmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRp
bmdJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICBhdXRvIGJsb2NrID0gV1RGTW92ZShfY2xlYXJUZXh0
SW5kaWNhdG9yKTsKKyAgICBpZiAoYmxvY2spCisgICAgICAgIGJsb2NrKCk7Cit9CisKK0BlbmQK
KworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworI2VuZGlmIC8vIEVOQUJMRShSRVZFQUwpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShSRVZFQUwpCisKK3N0ZDo6dHVwbGU8
UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9y
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygp
KQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gU2lu
Y2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3Jh
YiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZp
c2libGVFbmQoKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhl
IHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0
ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhF
bmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworCisgICAgaW50IGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rp
b25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFr
ZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVu
Z3RoVG9TZWxlY3Rpb25TdGFydCk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFj
dGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAg
U3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsK
KyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5j
ZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsK
KyAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsK
KyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVy
UmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBu
aWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25z
dCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvKiBmcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRo
ZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgYXV0byBmcmFtZVBvaW50ID0g
aGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisKKyAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KGZyYW1lUG9pbnQpOworICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAg
cG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7CisKKyAgICBhdXRv
IHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIE5TUmFuZ2Ugc2VsZWN0aW9u
UmFuZ2U7CisgICAgaW50IGhpdEluZGV4OworICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3Rl
clJhbmdlOworICAgIAorICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2li
bGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uU3Rh
cnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5k
ID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzIGNvbnRl
eHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4
dC4KKyAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0
aW9uU3RhcnQpOworICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFy
dCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOworICAgICAgICBh
dXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVj
dGlvbkVuZCk7CisgICAgICAgIAorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CisgICAgICAgIAorICAgICAgICBzZWxl
Y3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VU
b1NlbGVjdGlvblN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsK
KyAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51
bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNj
b3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOworICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBh
cmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0
aGUgcG9pbnQuCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91
bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghZnVsbENoYXJhY3RlclJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07CisgICAgICAgIAorICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOworICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlv
bikuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0
UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJh
bmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBk
YXRlU2VsZWN0aW9uOm5pbF07CisgICAgCisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRl
eHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVt
ID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5n
IHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFu
Z2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworCisgICAgaWYgKGhpZ2hsaWdodFJhbmdl
LmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlv
biwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAK
K30KKworc3RhdGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlv
biAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50
ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0Fk
ZGVkQWZ0ZXJFbmQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
c2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7CisgICAgW3Nl
bGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5k
XTsKKyAgICAKKyAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJp
bmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7CisgICAgCisgICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07CisgICAgY2hhcmFjdGVy
c0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3Ro
IC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQ7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworfQorCitzdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0
aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rp
b24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICgh
Z2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBv
aW50LgorICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKKworICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+
IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7CisKKyAgICAv
LyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQg
YmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCisgICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtz
ZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3Rl
cnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0
ZXJFbmQgPSAwOworICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JM
b29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNB
ZGRlZEFmdGVyRW5kKTsKKworICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rp
b25Gb3JMb29rdXAgc3RyaW5nXTsKKyAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2Uo
Y2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIDApOworCisgICAgUmV0YWluUHRyPFJWSXRlbT4g
aXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBs
YWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBl
eHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgaWYg
KGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiB7
IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVm
b3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKKyAg
ICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiAr
IGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5h
bExlbmd0aCk7CisKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3Vw
QWRkZWRCZWZvcmVdOworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3Vw
QWRkZWRBZnRlcl07CisKKyAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3Ry
aW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5n
ZV1dKTsKKyAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4geyBAIiIsIG5pbCB9OworfQorCitz
dGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJv
bGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1
cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkgfHwgIWdl
dFJWUHJlc2VudGVyQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9u
cyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKKyAgICAgICAgW211dGFibGVP
cHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKKworICAgIGF1dG8gdGV4
dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRl
eHRJbmRpY2F0b3IpOworICAgIAorICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVy
ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOworICAgIAorICAg
IE5TUmVjdCBoaWdobGlnaHRSZWN0OworICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOworICAg
IAorICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7CisgICAgICAg
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsK
KworICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4
dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07
CisgICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
KTsKKyAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKCk7CisgICAgICAgIAorICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyk7CisgICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7CisgICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxl
Y3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKKyAgICAgICAgcG9pbnRlckxvY2F0
aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7CisgICAgICAg
IAorICAgIH0gZWxzZSB7CisgICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcmlnaW47CisgICAgICAgIAorICAgICAgICBoaWdobGlnaHRSZWN0
ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwor
ICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5l
T3JpZ2luIHRvVmlldzpuaWxdOworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8V2ViUmV2ZWFs
SGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBh
bGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmlu
ZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKKyAgICBSZXRh
aW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVz
ZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9p
bnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRl
ckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7CisgICAgCisgICAgUmV0
YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0
V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmlu
ZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7CisgICAgCisgICAgW3dlYkhpZ2hs
aWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGln
aGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3Ip
XSB7CisgICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCisgICAgICAgICAgICBjbGVhclRl
eHRJbmRpY2F0b3IoKTsKKyAgICB9XTsKKyAgICAKKyAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZv
ckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNv
bnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVt
LmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQo
KSBvcHRpb25zOm5pbF07CisgICAgcmV0dXJuIG5pbDsKKyAgICAKKyNlbHNlIC8vIFBMQVRGT1JN
KE1BQykKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcik7
CisgICAgVU5VU0VEX1BBUkFNKGRpY3Rpb25hcnlQb3B1cEluZm8pOworICAgIFVOVVNFRF9QQVJB
TSh2aWV3KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxi
YWNrKTsKKyAgICBVTlVTRURfUEFSQU0ocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sp
OworICAgIFVOVVNFRF9QQVJBTShjbGVhclRleHRJbmRpY2F0b3IpOworICAgIAorICAgIHJldHVy
biBuaWw7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisgICAgCit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVw
KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAq
dmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3Qo
RmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgc2hvd1BvcHVwT3JDcmVh
dGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQorCit2b2lkIERpY3Rp
b25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
I2lmIFBMQVRGT1JNKE1BQykKKworV0tSZXZlYWxDb250cm9sbGVyIERpY3Rpb25hcnlMb29rdXA6
OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBk
aWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9p
ZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNv
bnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNh
dG9yKQoreworICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIo
dHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlv
bkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVh
clRleHRJbmRpY2F0b3IpKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworI2VsaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkgLy8gRU5BQkxFKFJFVkVBTCkKKworc3RkOjp0dXBsZTxSZWZQ
dHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCit7CisgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERp
Y3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQm
KQoreworICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFJFVkVBTCkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFk
ZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dl
YkNvbnRlbnRSZWFkZXJDb2NvYS5tbQkocmV2aXNpb24gMjM4MTg4KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgorI2ltcG9ydCAiRWRpdG9y
LmgiCisjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNpbXBvcnQgIkZpbGUuaCIKICNpbXBvcnQg
IkZpbGVTeXN0ZW0uaCIKICNpbXBvcnQgIkZyYW1lLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCShyZXZpc2lvbiAyMzgxODgpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDE1ICsyMywyNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZiBQTEFURk9STShNQUMpCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JN
KENPQ09BKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgotI2luY2x1ZGUgPHBh
bC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNpZiBQ
TEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyU1BJLmg+CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgogCiBPQkpDX0NMQVNTIE5TVmlldzsKIE9CSkNfQ0xBU1MgUERGU2VsZWN0
aW9uOwogCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBpZCA8TlNJbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyPiBXS1JldmVhbENvbnRyb2xsZXI7CisjZWxzZQordHlwZWRlZiBp
ZCBXS1JldmVhbENvbnRyb2xsZXI7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC00OCw4ICs1OCwxMSBAQCBw
dWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzaG93UG9wdXAoY29uc3Qg
RGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQo
VGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252
ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IgPSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBo
aWRlUG9wdXAoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpZCA8TlNJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29u
c3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZv
aWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdD
b252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVh
clRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBhbmltYXRpb25Db250cm9s
bGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25zdCBX
VEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxh
dGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCisgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0JKHJldmlzaW9u
IDIzODE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAu
bW0JKG5vbmV4aXN0ZW50KQpAQCAtMSwzODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCi0KLSNpZiBQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShSRVZFQUwpCi0KLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1w
b3J0ICJFZGl0aW5nLmgiCi0jaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZy
YW1lLmgiCi0jaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAiSFRNTENvbnZlcnRl
ci5oIgotI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9y
dCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiVGV4dEl0ZXJh
dG9yLmgiCi0jaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIlZpc2libGVTZWxl
Y3Rpb24uaCIKLSNpbXBvcnQgIlZpc2libGVVbml0cy5oIgotI2ltcG9ydCA8UERGS2l0L1BERktp
dC5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3Bp
L21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDxw
YWwvc3BpL21hYy9SZXZlYWxTUEkuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25z
Lmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0KLUBpbnRlcmZhY2UgV2ViUmV2ZWFsSGlnaGxp
Z2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKLUBwcml2YXRl
Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOwotICAgIE5TUmVjdCBf
aGlnaGxpZ2h0UmVjdDsKLSAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVj
dCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRl
ZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Ci0tICh2b2lk
KXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGlj
YXRvcjsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0Ci0KLUBz
eW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7Ci1Ac3ludGhlc2l6ZSB1c2VE
ZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHN5bnRoZXNpemUgYXR0cmli
dXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDoo
Qk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0
cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX2hpZ2hsaWdodFJlY3QgPSBoaWdo
bGlnaHRSZWN0OwotICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhpZ2hsaWdo
dDsKLSAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Ci0gICAgCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlv
bjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCi17Ci0gICAgX2NsZWFyVGV4dEluZGljYXRv
ciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKLX0KLQotLSAoTlNBcnJheTxOU1ZhbHVl
ICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNG
b3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOwotfQotCi0tICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJl
c2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0K
LXsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgCi0gICAgZm9yIChOU1ZhbHVlICpyZWN0
VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0g
cmVjdFZhbC5yZWN0VmFsdWU7Ci0KLSAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBhdHRyaWJ1
dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFncmFwaCBz
dHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCi0gICAgICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5n
IGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1dGVkU3Ry
aW5nIGxlbmd0aF0pXV0pOwotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5
bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10g
aW5pdF0pOwotICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRD
ZW50ZXJdOwotICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdldCgpIGZv
cktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAgCi0gICAgICAgIFJldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgc3RyaW5n
XSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKLSAgICAgICAgW3N0cmluZyBkcmF3SW5S
ZWN0OnJlY3RdOwotICAgIH0KLX0KLQotLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRp
bmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRlbTooUlZJ
dGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFS
QU0oaXRlbSk7Ci0gICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKLX0KLQotLSAo
dm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGln
aGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0
KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgYXV0byBibG9jayA9IFdURk1vdmUoX2Ns
ZWFyVGV4dEluZGljYXRvcik7Ci0gICAgaWYgKGJsb2NrKQotICAgICAgICBibG9jaygpOwotfQot
Ci1AZW5kCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+
LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKLSAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5
IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5l
ZCBvcHRpb25zLgotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwot
Ci0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcg
cGFyYWdyYXBocyBvZiB0ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFy
YWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0KLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxl
Y3Rpb25TdGFydCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25F
bmQpLmdldCgpKTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3Ro
VG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlv
blN0YXJ0KTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRlbVN0
cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0
cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhU
ZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2Ug
aGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAotICAgIHJl
dHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxp
Z2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07Ci19Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+
IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIGhpdFRlc3RSZXN1bHQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
ICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07Ci0gICAgCi0gICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9j
dW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7IG51bGxw
dHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hh
cmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0
LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5yYW5nZUZv
clBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQot
ICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQ
b2ludCk7Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9IGZp
cnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLQotICAgIGF1dG8gc2VsZWN0aW9uID0g
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKLSAgICBp
bnQgaGl0SW5kZXg7Ci0gICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7Ci0gICAg
Ci0gICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6
UmFuZ2VTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24u
dmlzaWJsZUVuZCgpOwotICAgICAgICAKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdv
aW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgICAgICBh
dXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0g
ICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsK
LSAgICAgICAgCi0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdl
KHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFuZ2VUb1Nl
bGVjdGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAg
ICAgICAgCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhT
dGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0g
TlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3Rh
cnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25T
dGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0SW5kZXgg
PSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9z
aXRpb24pLmdldCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwotICAgICAgICBzZWxl
Y3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdy
YW51bGFyaXR5KTsKLSAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGlu
ZVJ1bGVzLnN0YXJ0KCk7Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1
c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAg
ICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlD
aGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmdWxsQ2hh
cmFjdGVyUmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAg
ICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7
Ci0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uo
ZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7Ci0g
ICAgfQotICAgIAotICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNs
YXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFs
dWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246
bmlsXTsKLSAgICAKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFj
dGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFth
bGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5n
ZTpzZWxlY3RlZFJhbmdlXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0
KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0g
TlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdl
KCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRS
YW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotfQotCi1zdGF0aWMg
dm9pZCBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24s
IE5TSW50ZWdlciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0
ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkK
LXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBzaXplX3Qgb3JpZ2lu
YWxMZW5ndGggPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKLSAgICBbc2VsZWN0aW9uIGV4dGVu
ZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAgIAotICAg
IGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBv
cmlnaW5hbExlbmd0aDsKLSAgICAKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5k
Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVu
ZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJz
QWRkZWRCZWZvcmVTdGFydDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0K
LXN0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6
OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKLXsKLSAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFz
cygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERvbid0IGRv
IGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0gICAgaWYg
KCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQotICAgICAgICByZXR1cm4g
eyBAIiIsIG5pbCB9OwotCi0gICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9y
TG9va3VwID0gYWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKLQotICAgIC8vIEFzIGNvbnRleHQs
IHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFm
dGVyIHRoZSBwb2ludC4KLSAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxv
b2t1cCBzdHJpbmddLmxlbmd0aDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3Jl
U3RhcnQgPSAwOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7Ci0g
ICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwg
MjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQp
OwotCi0gICAgYXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBz
dHJpbmddOwotICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRk
ZWRCZWZvcmVTdGFydCwgMCk7Ci0KLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHRO
UyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5n
IHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdl
ID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICBpZiAoZXh0cmFjdGVkUmFu
Z2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0
cmluZywgbmlsIH07Ci0KLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRv
UGFzcy5sb2NhdGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOwotICAgIE5TSW50ZWdlciBs
b29rdXBBZGRlZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFu
Z2UubGVuZ3RoKSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKLQot
ICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07
Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsK
LQotICAgIEFTU0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFp
blRleHRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOwotICAgIHJl
dHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKLQotICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci19Ci0KLXN0YXRpYyBpZCA8TlNJ
bW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBzaG93UG9wdXBPckNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0
IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFs
bGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+
JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIGlmIChOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkpCi0g
ICAgICAgIFttdXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9uc107
Ci0KLSAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlv
bmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UlZQcmVz
ZW50ZXI+IHByZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgpIGlu
aXRdKTsKLSAgICAKLSAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKLSAgICBOU1BvaW50IHBvaW50
ZXJMb2NhdGlvbjsKLSAgICAKLSAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1h
Z2UoKSkgewotICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4dElu
ZGljYXRvci5nZXQoKSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZpZXdD
b29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RD
b29yZGluYXRlcygpWzBdOwotICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluVmll
d0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGluZ1Jl
Y3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVjdElu
Um9vdFZpZXdDb29yZGluYXRlcygpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJvb3RWaWV3VG9W
aWV3Q29udmVyc2lvbkNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0Qm91
bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICAgICAgc2VsZWN0aW9uQm91bmRp
bmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFj
ayhzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnkodGV4
dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICBoaWdo
bGlnaHRSZWN0ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7Ci0gICAg
ICAgIHBvaW50ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5sb2Nh
dGlvbigpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBOU1BvaW50IHRleHRCYXNl
bGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOwotICAgICAgICAKLSAgICAg
ICAgaGlnaGxpZ2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBv
aW50OnRleHRCYXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKLSAgICB9Ci0gICAgCi0gICAgUmV0
YWluUHRyPFdlYlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tXZWJS
ZXZlYWxIaWdobGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0UmVj
dCB1c2VEZWZhdWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgp
IGF0dHJpYnV0ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdl
dCgpXSk7Ci0gICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9w
dE5TKFthbGxvY1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRlckxv
Y2F0aW9uSW5WaWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxlZ2F0
ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQoKV0p
OwotICAgIAotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRl
bUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0
cmluZy5nZXQoKS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOwotICAg
IAotICAgIFt3ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGlnaHQg
PSBXVEZNb3ZlKHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xl
YXJUZXh0SW5kaWNhdG9yKV0gewotICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQotICAg
ICAgICAgICAgY2xlYXJUZXh0SW5kaWNhdG9yKCk7Ci0gICAgfV07Ci0gICAgCi0gICAgaWYgKGNy
ZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFuaW1h
dGlvbkNvbnRyb2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVz
ZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAgICBbcHJlc2VudGVy
IHJldmVhbEl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250
ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIHJldHVybiBuaWw7Ci0KLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLXZvaWQgRGlj
dGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rp
b25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRl
eHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3Qg
V1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVy
c2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3Ip
Ci17Ci0gICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0
aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ss
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGlj
YXRvcikpOwotfQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCi17Ci0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgaWYgKCFnZXRMVUxvb2t1cERlZmlu
aXRpb25Nb2R1bGVDbGFzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgW2dldExVTG9va3VwRGVm
aW5pdGlvbk1vZHVsZUNsYXNzKCkgaGlkZURlZmluaXRpb25dOwotCi0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLX0KLQotaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJv
bGxlcj4gRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0
IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywg
Y29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJ
bnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRS
ZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgcmV0dXJuIHNob3dQb3B1cE9yQ3Jl
YXRlQW5pbWF0aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2
aXNpb24gMjM4MjkzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1MSBAQAorMjAxOC0xMS0xNiAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRu
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgTG9va3VwIENvZGUgZm9yIGJldHRlciBjcm9z
cyBwbGF0Zm9ybSB1c2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkxNzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4K
KworICAgICAgICBMb29rdXAgaXMgYmVpbmcgcmVwbGFjZWQgYnkgUmV2ZWFsLiBUaGlzIGZyYW1l
d29yayBzaG91bGQgd29yayBvbiBhbGwgcGxhdGZvcm1zLgorICAgICAgICBUaGUgcGF0Y2ggbW92
ZXMgdGhlIGNvZGUgdGhhdCB3ZSBleHBlY3Qgd2lsbCBiZSBuZWVkZWQgZm9yIGFsbCBwbGF0Zm9y
bXMgdG8gdGhlIG1vcmUKKyAgICAgICAgZ2VuZXJhbCBjb2NvYSBhcmVhLiBUaGlzIHBhdGNoIGNo
YW5nZXMgbm8gZnVuY2F0aW9uYWxpdHksIGFuZCBzaG91bGQgbm90IGNoYW5nZQorICAgICAgICBh
bnl0aGluZyBjdXJyZW50bHkuIFRoaXMgd29yayB3aWxsIGJlIGJ1aWxkIG9uIGxhdGVyIHdoZW4g
UmV2ZWFsIGlzIHJlYWR5IHRvIHN1cHBvcnQKKyAgICAgICAgbXVsdGlwbGUgcGxhdGZvcm1zLgor
CisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldHVwSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBjbGVhbnVwSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNvZ25pemVyc10pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IF9hZGREZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgZ2VzdHVyZVJlY29nbml6ZXI6c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3Vz
bHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xv
b2t1cEdlc3R1cmVSZWNvZ25pemVkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlv
bik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VD
b2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJh
bmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
QXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFu
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKwogMjAxOC0xMS0xNiAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBBUEkgdG8gZGlzYWJs
ZSBzYWZlIGJyb3dzaW5nIGNoZWNrcwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmgJKHJldmlzaW9uIDIzODE4OCkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vc3BpL2lvcy9VSUtpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzMsNiArNzMzLDkgQEAg
c3RydWN0IF9VSVdlYlRvdWNoRXZlbnQgewogICAgIGJvb2wgaXNQb3RlbnRpYWxUYXA7CiB9Owog
CitAaW50ZXJmYWNlIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2du
aXplcgorQGVuZAorCiBAY2xhc3MgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyOwog
CiBAcHJvdG9jb2wgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUgPE5T
T2JqZWN0PgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFnZVByb3h5Q29jb2EubW0JKHJldmlzaW9uIDIzODE5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdT
UEkuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKKyNpbXBvcnQgIldlYlBhZ2VN
ZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3Jl
L0RyYWdJdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0xODks
NSArMTkwLDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUNsb25lQXR0YWNobWUKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgCit2b2lkIFdlYlBh
Z2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKK30KIAordm9pZCBX
ZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkK
K3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3Vy
cmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24uaAkocmV2aXNpb24gMjM4MTg4KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw2ICs4Nyw3IEBAIGNsYXNzIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFz
cyBXZWJQYWdlUHJveHk7CiB9CiAKK0BjbGFzcyBfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcjsK
IEBjbGFzcyBfVUlIaWdobGlnaHRWaWV3OwogQGNsYXNzIF9VSVdlYkhpZ2hsaWdodExvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcjsKQEAg
LTIxMiw2ICsyMTMsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogCiAjaWYgUExB
VEZPUk0oSU9TTUFDKQogICAgIFJldGFpblB0cjxVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI+IF9o
b3Zlckdlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxfVUlMb29rdXBHZXN0dXJlUmVj
b2duaXplcj4gX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwogI2VuZGlmCiAKICAgICBSZXRhaW5Q
dHI8VUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudD4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlzaW9uIDIzODE4OCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTExMiw2ICsxMTIsNyBAQAogI2lmIFBMQVRGT1JNKElPU01BQykKICNpbXBvcnQgIk5hdGl2
ZVdlYk1vdXNlRXZlbnQuaCIKICNpbXBvcnQgPFVJS2l0L1VJSG92ZXJHZXN0dXJlUmVjb2duaXpl
ci5oPgorI2ltcG9ydCA8VUlLaXQvX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBv
cnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNlbmRpZgogCkBAIC02NDks
NiArNjUwLDExIEBAIC0gKHZvaWQpc2V0dXBJbnRlcmFjdGlvbgogICAgIF9ob3Zlckdlc3R1cmVS
ZWNvZ25pemVyID0gYWRvcHROUyhbW1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5p
dFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9ob3Zlckdlc3R1cmVSZWNvZ25pemVy
Q2hhbmdlZDopXSk7CiAgICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNl
bGZdOwogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25p
emVyLmdldCgpXTsKKyAgICAKKyAgICBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5T
KFtbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYg
YWN0aW9uOkBzZWxlY3RvcihfbG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6KV0pOworICAgIFtfbG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3NlbGYgYWRkR2Vz
dHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKICNl
bmRpZgogCiAgICAgX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1dLU3lu
dGhldGljQ2xpY2tUYXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2Vs
ZiBhY3Rpb246QHNlbGVjdG9yKF9zaW5nbGVUYXBDb21taXRlZDopXSk7CkBAIC03NTMsNiArNzU5
LDkgQEAgLSAodm9pZCljbGVhbnVwSW50ZXJhY3Rpb24KICNpZiBQTEFURk9STShJT1NNQUMpCiAg
ICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW3NlbGYg
cmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwor
ICAgIAorICAgIFtfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAg
ICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIu
Z2V0KCldOwogI2VuZGlmCiAKICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERl
bGVnYXRlOm5pbF07CkBAIC04MzYsNiArODQ1LDcgQEAgLSAodm9pZClfcmVtb3ZlRGVmYXVsdEdl
c3R1cmVSZWNvZ25pemVycwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl90d29G
aW5nZXJTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9T
TUFDKQogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNv
Z25pemVyLmdldCgpXTsKKyAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTg1MCw2ICs4NjAsNyBA
QCAtICh2b2lkKV9hZGREZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgYWRkR2Vz
dHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclNpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgp
XTsKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6
X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNv
Z25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAt
MTQ1MCw2ICsxNDYxLDEwIEBAIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJl
Y28KIAogICAgIGlmIChbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zlckdl
c3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gfHwgW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5k
T2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0pCiAgICAgICAgIHJldHVy
biBZRVM7CisgICAgCisgICAgaWYgKChbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpb
X1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAmJiBbb3RoZXJHZXN0dXJlUmVjb2du
aXplciBpc0tpbmRPZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0p
IHx8IChbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUxvbmdQcmVzc0dl
c3R1cmVSZWNvZ25pemVyIGNsYXNzXV0gJiYgW2dlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xh
c3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0pKQorICAgICAgICByZXR1cm4g
WUVTOworCiAjZW5kaWYKICAgICBpZiAoaXNTYW1lUGFpcihnZXN0dXJlUmVjb2duaXplciwgb3Ro
ZXJHZXN0dXJlUmVjb2duaXplciwgX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
LmdldCgpLCBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKS5mb3JjZVByZXNzR2VzdHVyZSkp
CiAgICAgICAgIHJldHVybiBZRVM7CkBAIC02MDI4LDYgKzYwNDMsMTIgQEAgLSAoQk9PTClhbGxv
d3NEaWN0YXRpb25JbnB1dEZvckxpc3RWaWV3QwogI2VuZGlmIC8vIFBMQVRGT1JNKFdBVENIT1Mp
CiAKICNpZiBQTEFURk9STShJT1NNQUMpCistICh2b2lkKV9sb29rdXBHZXN0dXJlUmVjb2duaXpl
ZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgTlNQb2lu
dCBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzID0gW2dlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9u
SW5WaWV3OnNlbGZdOworICAgIF9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oV2ViQ29yZTo6RmxvYXRQb2ludChsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzKSk7Cit9CisK
IC0gKHZvaWQpX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOihVSUdlc3R1cmVSZWNvZ25p
emVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKICAgICBpZiAoIV9wYWdlLT5pc1ZhbGlkKCkpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0J
KHJldmlzaW9uIDIzODE4OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMSArMTIxLDYgQEAgYm9vbCBXZWJQ
YWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZUNhbGxiYWNrKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWlu
dDMyX3QgZmxhZ3MsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBhdXRvIGNhbGxiYWNr
ID0gbV9jYWxsYmFja3MudGFrZTxHZXN0dXJlQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZp
c2lvbiAyMzgxODgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsMjIgKzMyMyw2IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRQcm9taXNlZERhdGFGb3JJbWEKIAogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYg
KCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigp
LCBtX3BhZ2VJRCk7Ci19Ci0KIC8vIENvbXBsZXggdGV4dCBpbnB1dCBzdXBwb3J0IGZvciBwbHVn
LWlucy4KIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVp
bnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRl
eHRJbnB1dCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjM4MTg4KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtMTg4LDkgKzE4OCw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIg
ewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICMgRGljdGlvbmFyeSBzdXBwb3J0LgogICAgIFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50
KQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24oKQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0JKHJldmlz
aW9uIDIzODE4OCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMjAgQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgogCisKICNpbXBvcnQgIkxvYWRQYXJhbWV0
ZXJzLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNz
YWdlcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0VkaXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252
ZXJ0ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9Ob2RlUmVuZGVyU3R5bGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNl
c3Npb25NYW5hZ2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKIApAQCAt
NTksNiArNzAsMTE0IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXMK
IAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Tm93UGxheWluZ0luZm9DYWxsYmFj
ayhoYXNBY3RpdmVTZXNzaW9uLCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIHRp
dGxlLCBkdXJhdGlvbiwgZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50aWZpZXIsIGNhbGxiYWNrSUQp
KTsKIH0KKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCit7CisgICAgaWYgKGF1dG8qIHBsdWdp
blZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAg
ICAgIGlmIChwbHVnaW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxv
YXRQb2ludCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIEZpbmQg
dGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgorICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0g
bV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCht
X3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9p
bnQoZmxvYXRQb2ludCkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE5TRGljdGlv
bmFyeSAqb3B0aW9uczsKKyAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5
TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOworICAgIGlmICghcmFuZ2UpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFt
ZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
biBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRS
YW5nZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0aWUoc2VsZWN0ZWRS
YW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihzZWxl
Y3Rpb24pOworICAgIGlmIChzZWxlY3RlZFJhbmdlKQorICAgICAgICBwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0
aW9uVHJhbnNpdGlvbik7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24oKQoreworICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUp
OworfQorICAgIAordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdl
KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxv
b2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBvcHRpb25zLCBw
cmVzZW50YXRpb25UcmFuc2l0aW9uKSkpOworfQorCitEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBh
Z2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5n
ZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIEVkaXRvciYgZWRpdG9yID0gZnJh
bWUuZWRpdG9yKCk7CisgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8o
dHJ1ZSk7CisgICAgCisgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZv
OworICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIFZlY3Rv
cjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsK
KyAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdE
aWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1
cEluZm87CisgICAgfQorICAgIAorICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygp
LT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAg
IAorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCku
cmVuZGVyU3R5bGUoKTsKKyAgICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5m
b250TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkgOiAwOworICAgIGRpY3Rp
b25hcnlQb3B1cEluZm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJl
Y3QueSgpICsgc2NhbGVkQXNjZW50KTsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMg
PSBvcHRpb25zOworCisjaWYgUExBVEZPUk0oTUFDKQorCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShy
YW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOworICAgIAorICAgIFJl
dGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJp
bmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CisgICAgCisgICAgTlNGb250TWFu
YWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Cisg
ICAgCisgICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpO
U01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2lu
Z0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpz
dG9wKSB7CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRy
aWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOworICAgICAgICAKKyAg
ICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9u
dEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoZm9udCkKKyAgICAgICAgICAgIGZvbnQgPSBb
Zm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdl
U2NhbGVGYWN0b3IoKV07CisgICAgICAgIGlmIChmb250KQorICAgICAgICAgICAgW3NjYWxlZEF0
dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAg
ICAgICAKKyAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNj
YWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOworICAgIH1dOworCisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQorICAgIAorICAgIFRleHRJbmRpY2F0b3JPcHRpb25zIGluZGljYXRvck9w
dGlvbnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250
ZW50Rm9yQ29tcGxleFJhbmdlczsKKyAgICBpZiAocHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9PSBU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQor
ICAgICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25h
cHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OworICAgIAorICAgIFJlZlB0cjxUZXh0SW5kaWNh
dG9yPiB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdl
LCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKKyAgICBpZiAoIXRl
eHRJbmRpY2F0b3IpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1
cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9
CisgICAgCisgICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGlj
YXRvci0+ZGF0YSgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZv
LmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7CisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQorICAgIAorICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvKGZhbHNlKTsKKyAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAyMzgxODgpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDEzLDIxICs0MTMsNiBAQCB2b2lkIFdlYlBhZ2U6OnNlbmRDb21wbGV4VGV4dElu
cHV0VG9QbHVnCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclNlbGVjdGlvbihGcmFtZSYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUm
LCBSYW5nZSYsIE5TRGljdGlvbmFyeSAqLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiBib29sIFdlYlBhZ2U6OnBlcmZv
cm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpL
ZXlib2FyZEV2ZW50KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlz
aW9uIDIzODE4OCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zODksMTAyICszODksNyBAQCB2b2lkIFdlYlBh
Z2U6OmZvbnRBdFNlbGVjdGlvbihDYWxsYmFja0lECiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpGb250QXRTZWxlY3Rpb25DYWxsYmFjayhmb250TmFtZSwgZm9udFNpemUsIHNlbGVj
dGlvbkhhc011bHRpcGxlRm9udHMsIGNhbGxiYWNrSUQpKTsKIH0KICAgICAKLXZvaWQgV2ViUGFn
ZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZs
b2F0UG9pbnQpCi17Ci0gICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJh
bWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7Ci0gICAgICAgIGlmIChwbHVnaW5WaWV3LT5wZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlzIG92ZXIu
Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOwotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2U7Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOwotICAgIHN0ZDo6dGll
KHJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0
KHJlc3VsdCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byog
ZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9w
dGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOwotfQot
Ci12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1l
JiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0g
ICAgc3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpy
YW5nZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKQotICAg
ICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5n
ZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQotewotICAgIGF1dG8m
IGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
LSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpCb3VuY2VBbmRDcm9zc2ZhZGUpOwotfQotCi1EaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6
OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwg
TlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
biBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUu
ZWRpdG9yKCk7Ci0gICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1
ZSk7Ci0KLSAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAg
aWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICBy
ZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFk
PiBxdWFkczsKLSAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7Ci0gICAgaWYgKHF1
YWRzLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBv
cHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAg
IH0KLQotICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2lu
ZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogCi0gICAgY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOwotICAg
IGZsb2F0IHNjYWxlZEFzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkgKiBwYWdlU2NhbGVGYWN0b3IoKSA6IDA7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmln
aW4gPSBGbG9hdFBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2Nl
bnQpOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7Ci0KLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpO
byk7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwotCi0gICAg
TlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFu
YWdlcl07Ci0KLSAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJh
bmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczow
IHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJP
T0wgKnN0b3ApIHsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxl
ZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0KLSAgICAg
ICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0
dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoZm9udCkKLSAgICAgICAgICAgIGZvbnQgPSBbZm9u
dE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2Nh
bGVGYWN0b3IoKV07Ci0gICAgICAgIGlmIChmb250KQotICAgICAgICAgICAgW3NjYWxlZEF0dHJp
YnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotCi0gICAg
ICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1
dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKLSAgICB9XTsKLQotICAgIFRleHRJbmRpY2F0b3JPcHRp
b25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0
QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlczsKLSAgICBpZiAocHJlc2VudGF0aW9u
VHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNl
QW5kQ3Jvc3NmYWRlKQotICAgICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRleHRJbmRpY2F0b3JP
cHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OwotCi0gICAgUmVmUHRy
PFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRo
UmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwot
ICAgIGlmICghdGV4dEluZGljYXRvcikgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGlj
dGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJ
bmZvOwotICAgIH0KLQotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRl
eHRJbmRpY2F0b3ItPmRhdGEoKTsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRT
dHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7Ci0KLSAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1
cEluZm87Ci19CiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIApAQCAtNTM5LDExICs0NDQs
NiBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQCiAKICNlbmRpZgog
Ci12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZy
YW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rp
b25hcnlQb3B1cEluZm9Gb3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlv
blRyYW5zaXRpb24pKSk7Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhh
dmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJkRXZlbnQqIGV2
ZW50KQogewogICAgIC8vIEZpcnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5jZSB0byBoYW5k
bGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355911</attachid>
            <date>2018-11-28 13:20:50 -0800</date>
            <delta_ts>2018-11-29 10:16:33 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191732-20181128132050.patch</filename>
            <type>text/plain</type>
            <size>74561</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmZhMjhhNWNlNzdlZTVh
NGI0NmE5NmJmYjAwNzM4MjAzZDAzMTIwZS4uNzM2ZTE0ZDIzMTg1ZjMxMzc2Yjc2ZmU3MDJjZjM4
MjhiNTU4ZDljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTE1ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE5vdCBjdXJyZW5sdHkgdGVzdGFibGUK
KworICAgICAgICBEaWN0aW9uYXJ5TG9va3VwIHVzZXMgUmV2ZWFsIG5vdywgd2hpY2ggaXMgc2xh
dGVkIHRvIGJlIGNyb3NzLXBsYXRmb3JtLgorICAgICAgICBUaGF0IHBhdGNoIGdhdGVzIHRoZSBw
YXJ0cyBvZiBEaWN0aW9uYXJ5TG9va3VwIHRoYXQgY3VycmVudGx5IGRvIG5vdCBoYXZlCisgICAg
ICAgIGFuIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbiBvbiBpT1MuIE9uY2UgUmV2ZWFsIGlzIHJl
YWR5LCB0aGlzIGNvZGUgd2lsbCBiZQorICAgICAgICByZXBsYWNlZCBvciBleHBhbmRlZCB1cG9u
LCBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cCk6CisgICAgICAgIChXZWJD
b3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKToKKwogMjAxOC0xMS0y
OCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJlbW92ZSBkZWFkIGNvZGUgZnJvbSBhbiBlYXJsaWVyIGF0dGVtcHQgYXQgaW1wbGVtZW50aW5n
IHNhZmUgYnJvd3NpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDNlMGE0NDQxOGNkMDczYmMxNjg3
MDA3ODZhMWYwZTU4ZDQ4ZTc2NmMuLjM5N2E0MWYwYjQxYzRhYTQyZThmMGI5ZmU2NjViMmVjODk2
MGQ4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE4LTExLTE1ICBN
ZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBM
b29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICogcGFsL3NwaS9tYWMvTG9va3Vw
U1BJLmg6CisgICAgICAgICogcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmg6CisKIDIwMTgtMTEtMjgg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXpl
IHZlcnNpb24gY2hlY2tzIGZvciBzYW1lIHNpdGUgY29va2llIHN1cHBvcnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
YTU3MjJhZjYxNjJkMDlmNDI5NzJjMjUwOTA1ZmI3NjhmMmNiNjM2MS4uMTE5MTkyNzMxZDkyYjY3
YmM0NzM5NDMyNjY1M2ExNTk4NTgyZGFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAx
OC0xMS0xNSAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgTG9va3VwIENvZGUgZm9yIGJldHRlciBjcm9zcyBwbGF0Zm9ybSB1c2FnZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNzMyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBMb29rdXAgaXMg
YmVpbmcgcmVwbGFjZWQgYnkgUmV2ZWFsLiBUaGlzIGZyYW1ld29yayBzaG91bGQgd29yayBvbiBh
bGwgcGxhdGZvcm1zLgorICAgICAgICBUaGUgcGF0Y2ggbW92ZXMgdGhlIGNvZGUgdGhhdCB3ZSBl
eHBlY3Qgd2lsbCBiZSBuZWVkZWQgZm9yIGFsbCBwbGF0Zm9ybXMgdG8gdGhlIG1vcmUKKyAgICAg
ICAgZ2VuZXJhbCBjb2NvYSBhcmVhLiBUaGlzIHBhdGNoIGNoYW5nZXMgbm8gZnVuY2F0aW9uYWxp
dHksIGFuZCBzaG91bGQgbm90IGNoYW5nZQorICAgICAgICBhbnl0aGluZyBjdXJyZW50bHkuIFRo
aXMgd29yayB3aWxsIGJlIGJ1aWxkIG9uIGxhdGVyIHdoZW4gUmV2ZWFsIGlzIHJlYWR5IHRvIHN1
cHBvcnQKKyAgICAgICAgbXVsdGlwbGUgcGxhdGZvcm1zLgorCisgICAgICAgICogUGxhdGZvcm0v
c3BpL2lvcy9VSUtpdFNQSS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IHNldHVwSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjbGVhbnVw
SW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVtb3ZlRGVmYXVsdEdl
c3R1cmVSZWNvZ25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hZGREZWZhdWx0
R2VzdHVyZVJlY29nbml6ZXJzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJl
Y29nbml6ZXI6c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6
ZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVk
Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3Vy
cmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5
UG9wdXBJbmZvRm9yUmFuZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKTogRGVs
ZXRlZC4KKwogMjAxOC0xMS0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBkZWFkIGNvZGUgZnJvbSBhbiBlYXJsaWVyIGF0dGVt
cHQgYXQgaW1wbGVtZW50aW5nIHNhZmUgYnJvd3NpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3N2YyNDY3M2U1MTczNjk3ZjVj
YmNlN2VjM2E0NTIxNmNmNDgzMTEzLi5iOGNjMzU4NjNjYmQyZWQ1NWNlZGE3YzU2YWMxODIxOTgz
ZTQ3MzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC00MDYsNiArNDA2LDcgQEAKIAkJCQkwQzJEQTEzOTFGM0JFQjQ5MDBEQkMz
MTcgLyogUGFzc0tpdFNQSS5oICovLAogCQkJCTBDMkRBMTNBMUYzQkVCNDkwMERCQzMxNyAvKiBw
dGhyZWFkU1BJLmggKi8sCiAJCQkJMEMyREExM0IxRjNCRUI0OTAwREJDMzE3IC8qIFF1YXJ0ekNv
cmVTUEkuaCAqLywKKwkJCQk0NDI5NTZDQzIxOEE3MkRFMDA4MERCNTQgLyogUmV2ZWFsU1BJLmgg
Ki8sCiAJCQkJNTcwQUI4RjAyMEFFMkU4RDAwQjhCRTg3IC8qIFNlY0tleVByb3h5U1BJLmggKi8s
CiAJCQkJMEMyREExM0MxRjNCRUI0OTAwREJDMzE3IC8qIFNlcnZlcnNTUEkuaCAqLywKIAkJCQkw
QzJEQTEyQjFGM0JFQjQ5MDBEQkMzMTcgLyogVVJMRm9ybWF0dGluZ1NQSS5oICovLApAQCAtNDcx
LDcgKzQ3Miw2IEBACiAJCQkJMEM3Nzg1ODYxRjQ1MTMwRjAwRjRFQkI2IC8qIFFUS2l0U1BJLmgg
Ki8sCiAJCQkJQTEwMjY1OEExRjU2NzQ4QzAwQjRDODQ0IC8qIFF1aWNrRHJhd1NQSS5oICovLAog
CQkJCTBDNzc4NTg3MUY0NTEzMEYwMEY0RUJCNiAvKiBRdWlja0xvb2tNYWNTUEkuaCAqLywKLQkJ
CQk0NDI5NTZDQzIxOEE3MkRFMDA4MERCNTQgLyogUmV2ZWFsU1BJLmggKi8sCiAJCQkJQTExNzVC
NDgxRjZBRkY4RTAwQzRCOUYwIC8qIFNwZWVjaFN5bnRoZXNpc1NQSS5oICovLAogCQkJCTBDNzc4
NTg4MUY0NTEzMEYwMEY0RUJCNiAvKiBUVUNhbGxTUEkuaCAqLywKIAkJCSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzZDU1ZDE1
MmU2MDgyNDJkODA3ZDY5YjkzMWNkNWE1OWNlZDM5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApAQCAtMCwwICsxLDgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxvYmpjL3J1bnRpbWUuaD4KKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL21h
Yy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19QUklW
QVRFX0ZSQU1FV09SSyhSZXZlYWwpCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFs
Q29yZSkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGVyKQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50aW5nQ29udGV4dCkKK1NPRlRf
TElOS19DTEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVkl0ZW0pCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZTZWxlY3Rpb24pCisKKyNpZiBVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQorCisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8UmV2ZWFsL1JWUHJlc2VudGVy
Lmg+CisjaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQor
I2ltcG9ydCA8UmV2ZWFsQ29yZS9SVlNlbGVjdGlvbi5oPgorI2ltcG9ydCA8UmV2ZWFsQ29yZS9S
ZXZlYWxDb3JlLmg+CisKKyNlbHNlIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKworQHBy
b3RvY29sIFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU7CisKK0BpbnRlcmZhY2UgUlZJdGVt
IDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBO
U19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJWU2VsZWN0aW9u
IDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNs
aWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJh
bmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247
CitAZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50aW5nQ29udGV4dCA6IE5TT2JqZWN0CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6KE5TUG9pbnQpcG9pbnRl
ckxvY2F0aW9uSW5WaWV3IGluVmlldzooTlNWaWV3ICopdmlldyBoaWdobGlnaHREZWxlZ2F0ZToo
aWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4paGlnaGxpZ2h0RGVsZWdhdGU7CitAZW5k
CisKK0Bwcm90b2NvbCBSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlIDxOU09iamVjdD4KK0By
ZXF1aXJlZAorLSAoTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2Vu
dGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKK0BvcHRp
b25hbAorLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4
dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbTsKKy0gKHZvaWQpcmV2ZWFsQ29u
dGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJ
dGVtICopaXRlbTsKK0BlbmQKKworQGludGVyZmFjZSBSVkRvY3VtZW50Q29udGV4dCA6IE5TT2Jq
ZWN0IDwgTlNTZWN1cmVDb2RpbmcgPgorQGVuZAorCitAaW50ZXJmYWNlIFJWUHJlc2VudGVyIDog
TlNPYmplY3QKKyNpZiBQTEFURk9STShNQUMpCistIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOihSVkl0ZW0gKilpdGVt
IGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJl
c2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBv
cHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
Ky0gKEJPT0wpcmV2ZWFsSXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9j
dW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNl
bnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICop
b3B0aW9uczsKK0BlbmQKKworI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oCmluZGV4IGViN2Y5NTFmNzFj
NzVjODEyMTdiMjJlNzhhZGFkMzBlNGQ2YTVjMDQuLmUwYTMzNzVkMzBjYzg4OWYxMzVlYTJhMTFk
NDdkMGRhOTRmOThhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21h
Yy9Mb29rdXBTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3Vw
U1BJLmgKQEAgLTIzLDEyICsyMywxMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorCisjaWYg
UExBVEZPUk0oTUFDKQorCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KICNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQotCiBTT0ZUX0xJTktfUFJJ
VkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTG9va3VwKQogU09GVF9MSU5LX0NMQVNTX09QVElPTkFM
KExvb2t1cCwgTFVMb29rdXBEZWZpbml0aW9uTW9kdWxlKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2
YjhkYTQyYzg1OTkwYWUzMmVhNjdhMGFmNzc1M2YzZGI5ODI4YTUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkv
bWFjL1JldmVhbFNQSS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyU1BJLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotU09GVF9MSU5LX1BS
SVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZl
YWxDb3JlKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCi1T
T0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQotU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKLVNPRlRfTElOS19DTEFT
U19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikKLQotI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCi0KLSNpbXBvcnQgPFJldmVhbC9SVlByZXNlbnRlci5oPgotI2ltcG9ydCA8UmV2
ZWFsL1JldmVhbC5oPgotI2ltcG9ydCA8UmV2ZWFsQ29yZS9SVlNlbGVjdGlvbi5oPgotI2ltcG9y
dCA8UmV2ZWFsQ29yZS9SZXZlYWxDb3JlLmg+Ci0KLQotI2Vsc2UKLQotQGludGVyZmFjZSBSVkl0
ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhU
ZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdl
IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUlZTZWxlY3Rp
b24gOiBOU09iamVjdAotKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6KE5TVUludGVnZXIp
Y2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXNlbGVjdGVk
UmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVwZGF0ZVNlbGVjdGlv
bjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlByZXNlbnRlciA6IE5TT2JqZWN0Ci0tIChpZDxOU0lt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJ
dGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilk
b2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilw
cmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOwotLSAoQk9P
TClyZXZlYWxJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENv
bnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0Nv
bnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25z
OwotQGVuZAotCi0jZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dAppbmRleCAwNjNkZmRjMjI4OTYzZmJhZTU5NjBlMDI0Y2I4ZjI0ZmQzN2E1ZWRh
Li4wNjJjZGQ3ZjA3ZDcwZTMwZDlmMDZmMzA1NzNkNjk3ZmJmZjE1YjZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQKQEAgLTc3LDYgKzc3LDcgQEAgZWRpdGluZy9TZWxlY3Rpb25SZWN0R2F0aGVy
ZXIuY3BwCiBlZGl0aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcAogCiBlZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0KK2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQogZWRpdGluZy9j
b2NvYS9FZGl0b3JDb2NvYS5tbQogZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlQ2hhbmdlc0Nv
Y29hLm1tCiBlZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2EubW0KQEAgLTkwLDcgKzkx
LDYgQEAgZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKIGVkaXRpbmcvaW9zL0Vk
aXRvcklPUy5tbQogCiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0K
LWVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlM
b29rdXBMZWdhY3kubW0KIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQogZWRpdGluZy9tYWMvRnJh
bWVTZWxlY3Rpb25NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBiNDFhMzk2N2U1MDRiMWVmM2NmZWU1ZWZmMjVjNzExNzA5
YTE3MDRkLi43ODc2NWYzYmI1MTRhNjM1NDg4Njk2NzM1YjFmNmQwZDgzMzgyNTBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
MDUxOSw2ICsyMDUxOSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDNTIyN0RFRjFDM0M2REQ3
MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oICovLAogCQkJCUM1MjI3REYwMUMzQzZERDcwMEY1
RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovLAorCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEz
MSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTlCNTVFRUU4MUIzRTg4OTgwMDUzNDJC
QyAvKiBFZGl0b3JDb2NvYS5tbSAqLywKIAkJCQlGNDJDRUI1NDIxNDAzMUVFMDAyRENBNzIgLyog
Rm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbSAqLywKIAkJCQlGNDhEMkE3NTIxNTZGRTU3MDBD
Njc1MkIgLyogRm9udEF0dHJpYnV0ZXNDb2NvYS5tbSAqLywKQEAgLTI2MjI1LDcgKzI2MjI2LDYg
QEAKIAkJCQlDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250
cm9sbGVyLmggKi8sCiAJCQkJQ0U3QjJEQjAxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZl
VGV4dFVJQ29udHJvbGxlci5tbSAqLywKIAkJCQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEgLyog
RGljdGlvbmFyeUxvb2t1cC5oICovLAotCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBE
aWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTQ0Mjk1NkNBMjE4QTZEMzAwMDgwREI1NCAvKiBE
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tICovLAogCQkJCUVENTAxREM1MEIyNDlGMjkwMEFFMThE
OSAvKiBFZGl0b3JNYWMubW0gKi8sCiAJCQkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIEZy
YW1lU2VsZWN0aW9uTWFjLm1tICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EaWN0aW9uYXJ5TG9va3VwLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0NWQyZWZkOTg0OWM0M2RiNTUyNmQ3
YWQ2ZDNjNDdkMTkzNDg3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTAsMCArMSw0MjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRGljdGlvbmFyeUxvb2t1cC5o
IgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0
ICJFZGl0aW5nLmgiCisjaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIkZyYW1l
LmgiCisjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgorI2ltcG9ydCAiSFRNTENvbnZlcnRlci5o
IgorI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJhbmdlLmgiCisjaW1wb3J0ICJSZW5kZXJPYmpl
Y3QuaCIKKyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgorI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9u
LmgiCisjaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJWaXNpYmxlVW5pdHMu
aCIKKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUmV2
ZWFsU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29rdXBTUEkuaD4KKyNpbXBvcnQgPHd0
Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKKyNpZiBF
TkFCTEUoUkVWRUFMKQorCisjaWYgUExBVEZPUk0oTUFDKQorCitAaW50ZXJmYWNlIFdlYlJldmVh
bEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7CitA
cHJpdmF0ZQorICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFyVGV4dEluZGljYXRvcjsKKyAgICBO
U1JlY3QgX2hpZ2hsaWdodFJlY3Q7CisgICAgQk9PTCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKKyAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3RyaW5nOworfQorCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBoaWdobGlnaHRSZWN0OworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURlZmF1bHRIaWdobGlnaHQ7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmlu
ZzsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hs
aWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0
dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOwor
LSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRl
eHRJbmRpY2F0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdo
dAorCitAc3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdobGlnaHRSZWN0OworQHN5bnRoZXNp
emUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0BzeW50aGVzaXpl
IGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZworeworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9oaWdobGlnaHRSZWN0
ID0gaGlnaGxpZ2h0UmVjdDsKKyAgICBfdXNlRGVmYXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRI
aWdobGlnaHQ7CisgICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nOworICAg
IAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjoo
RnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcgoreworICAgIF9jbGVhclRleHRJ
bmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcik7Cit9CisKKy0gKE5TQXJyYXk8
TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0
IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0
KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVX
aXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsKK30KKworLSAodm9pZClyZXZlYWxDb250ZXh0
OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0g
KilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIAorICAgIGZvciAoTlNWYWx1
ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0c0luVmlldykgeworICAgICAgICBOU1JlY3Qg
cmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOworCisgICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQg
YXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJh
Z3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVyIHRvIGNlbnRlciB0ZXh0LgorICAgICAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011
dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRl
ZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmli
dXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFn
cmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUg
YWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3BhcmFncmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxp
Z25tZW50Q2VudGVyXTsKKyAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5n
ZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdOworICAgIAorICAgICAg
ICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5n
IHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVzLmdldCgpXSk7CisgICAgICAgIFtzdHJpbmcg
ZHJhd0luUmVjdDpyZWN0XTsKKyAgICB9Cit9CisKKy0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQ
cmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hvdWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0
ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5V
U0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBzZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Cit9
CisKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQg
c3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIGF1dG8gYmxvY2sgPSBXVEZN
b3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOworICAgIGlmIChibG9jaykKKyAgICAgICAgYmxvY2so
KTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjZW5kaWYgLy8gRU5B
QkxFKFJFVkVBTCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFJFVkVBTCkK
Kworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdl
dFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAor
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
CisKKyAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1
c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgorICAgIGF1dG8gc2VsZWN0aW9u
U3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQg
PSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworCisgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdv
aW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAgIGF1dG8g
cGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICBh
dXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisKKyAgICBp
bnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworICAgIGludCBs
ZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdl
KHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKKyAgICBOU1JhbmdlIHJhbmdl
VG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxl
Y3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICAKKyAgICBSZWZQdHI8UmFu
Z2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdy
YXBoRW5kKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVy
UmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxv
Y1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpy
YW5nZVRvUGFzc10pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhp
Z2hsaWdodFJhbmdlOworICAgIAorICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uo
KmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJh
bmdlLmxlbmd0aCksIG5pbCB9OworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKK3N0ZDo6dHVwbGU8UmVm
UHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRU
ZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3Mo
KSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgYXV0byogbm9k
ZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlIHx8
ICFub2RlLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKwor
ICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gRG9uJ3QgZG8g
YW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KKyAgICBhdXRv
IGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQorICAgICAgICBy
ZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS0+dmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVs
bCgpKQorICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2Rl
KTsKKworICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgTlNS
YW5nZSBzZWxlY3Rpb25SYW5nZTsKKyAgICBpbnQgaGl0SW5kZXg7CisgICAgUmVmUHRyPFJhbmdl
PiBmdWxsQ2hhcmFjdGVyUmFuZ2U7CisgICAgCisgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25U
eXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKKyAgICAgICAgYXV0
byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICAgICAgYXV0
byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworICAgICAgICAKKyAgICAg
ICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFy
YWdyYXBocyBvZiB0ZXh0LgorICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBh
cmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5k
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gcmFuZ2VU
b1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFy
dCk7CisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJS
YW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAgICAgICAg
CisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOwor
ICAgICAgICAKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMg
eyBwb3NpdGlvbiB9OworICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4
cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAgICAgICAgcG9zaXRpb24g
PSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7CisgICAgICAgIC8vIEFz
IGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZv
cmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFu
Z2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCisgICAgICAgICAgICByZXR1
cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgCisgICAgICAgIHNlbGVjdGlvblJhbmdlID0g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0
aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfQorICAgIAorICAgIE5TUmFuZ2Ugc2VsZWN0
ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdElu
ZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFu
Z2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKKyAgICAKKyAgICBTdHJpbmcgaXRlbVN0
cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0
cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhU
ZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7CisgICAgTlNSYW5n
ZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisKKyAgICBpZiAo
aGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0UmFuZ2Uu
bGVuZ3RoKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICByZXR1
cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdo
dFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKKyAgICAKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OworICAgIAorfQorCitzdGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3Rl
cnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJhY3RlcnNU
b0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJbnRlZ2Vy
JiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisKKyAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3RyaW5nLmxl
bmd0aDsKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVyT2ZDaGFy
YWN0ZXJzVG9FeHBhbmRdOworICAgIAorICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0g
c2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsKKyAgICAKKyAgICBbc2Vs
ZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsK
KyAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0g
b3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKKworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3N0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0
aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQREZTZWxl
Y3Rpb24gKnNlbGVjdGlvbikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQorICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJh
Y3RlciBhdCB0aGUgcG9pbnQuCisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5zdHJp
bmcubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBAIiIsIG5pbCB9OworCisgICAgUmV0YWluUHRy
PFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0aW9uIGNv
cHldKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJh
Y3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICBhdXRvIG9yaWdp
bmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKKyAgICBOU0lu
dGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAwOworICAgIE5TSW50ZWdlciBjaGFy
YWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7CisgICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJz
KHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFy
dCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOworCisgICAgYXV0byBmdWxsUGxhaW5UZXh0U3Ry
aW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOworICAgIGF1dG8gcmFuZ2VUb1Bhc3Mg
PSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7CisKKyAgICBSZXRh
aW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRX
aXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsK
KyAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsK
KyAgICAKKyAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAg
ICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07CisKKyAgICBOU0ludGVnZXIg
bG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3RlZFJhbmdl
LmxvY2F0aW9uOworICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJhY3RlZFJh
bmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFzcy5sb2Nh
dGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKKworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9u
QXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07CisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rp
b25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKKworICAgIEFTU0VSVChbc2VsZWN0aW9uLnN0cmlu
ZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdl
OmV4dHJhY3RlZFJhbmdlXV0pOworICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9
OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiB7IEAiIiwg
bmlsIH07Cit9CisKK3N0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgc2hvd1BvcHVwT3JDcmVhdGVB
bmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlciwgY29uc3Qg
RGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvcklu
c3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJl
Y3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIAorICAgIGlmICghZ2V0UlZJdGVt
Q2xhc3MoKSB8fCAhZ2V0UlZQcmVzZW50ZXJDbGFzcygpKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25zID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBpZiAoTlNEaWN0
aW9uYXJ5ICpvcHRpb25zID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgpKQorICAg
ICAgICBbbXV0YWJsZU9wdGlvbnMgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlvbnNdOwor
CisgICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25h
cnlQb3B1cEluZm8udGV4dEluZGljYXRvcik7CisgICAgCisgICAgUmV0YWluUHRyPFJWUHJlc2Vu
dGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2UoKSBpbml0
XSk7CisgICAgCisgICAgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CisgICAgTlNQb2ludCBwb2ludGVy
TG9jYXRpb247CisgICAgCisgICAgaWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdl
KCkpIHsKKyAgICAgICAgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRleHRJbmRp
Y2F0b3IuZ2V0KCkpOworCisgICAgICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5WaWV3Q29v
cmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMoKVswXTsKKyAgICAgICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcygpOworICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyb290Vmlld1RvVmll
d0NvbnZlcnNpb25DYWxsYmFjaykgeworICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluVmll
d0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbkJvdW5kaW5n
UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2so
c2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRC
b3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKKyAgICAgICAgaGlnaGxp
Z2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOworICAgICAg
ICBwb2ludGVyTG9jYXRpb24gPSBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRp
b24oKTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNQb2ludCB0ZXh0QmFzZWxp
bmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbjsKKyAgICAgICAgCisgICAgICAg
IGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzKCk7CisgICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZlcnRQb2lu
dDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07CisgICAgfQorICAgIAorICAgIFJldGFp
blB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2
ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdodFJlY3Qg
dXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSBh
dHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQo
KV0pOworICAgIFJldGFpblB0cjxSVlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRO
UyhbYWxsb2NSVlByZXNlbnRpbmdDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50ZXJMb2Nh
dGlvbkluVmlldzpwb2ludGVyTG9jYXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6
KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsK
KyAgICAKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1J
bnN0YW5jZSgpIGluaXRXaXRoVGV4dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJp
bmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsKKyAgICAK
KyAgICBbd2ViSGlnaGxpZ2h0IHNldENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0g
V1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFy
VGV4dEluZGljYXRvcildIHsKKyAgICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikKKyAgICAg
ICAgICAgIGNsZWFyVGV4dEluZGljYXRvcigpOworICAgIH1dOworICAgIAorICAgIGlmIChjcmVh
dGVBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBhbmltYXRp
b25Db250cm9sbGVyRm9ySXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2Vu
dGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07CisgICAgW3ByZXNlbnRlciBy
ZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4
dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICByZXR1cm4gbmlsOworICAgIAorI2Vs
c2UgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIFVOVVNFRF9QQVJBTShjcmVhdGVBbmltYXRp
b25Db250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZGljdGlvbmFyeVBvcHVwSW5mbyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHZpZXcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0SW5kaWNhdG9ySW5z
dGFsbGF0aW9uQ2FsbGJhY2spOworICAgIFVOVVNFRF9QQVJBTShyb290Vmlld1RvVmlld0NvbnZl
cnNpb25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKGNsZWFyVGV4dEluZGljYXRvcik7Cisg
ICAgCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKK30KKwordm9pZCBEaWN0aW9uYXJ5TG9v
a3VwOjpzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVw
SW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRv
ciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0
aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJh
Y2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICBz
aG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25hcnlQb3B1
cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Cit9
CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQorCitXS1JldmVhbENvbnRyb2xsZXIgRGlj
dGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25h
cnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RG
OjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRp
b25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJv
b3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBj
bGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgcmV0dXJuIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0
aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNh
dG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNr
LCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorCisjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKSAvLyBFTkFCTEUoUkVWRUFMKQorCitz
dGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKK3sKKyAgICByZXR1
cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0Rp
Y3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYpCit7CisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoUkVWRUFMKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggZTRiOTBiZGYyNzA1MmIwMzJmOWEz
Y2U0MzM1NDNkMWY4Nzc4NGY2Ny4uODVjNDI3NDFhYmFkNzU3ZGQxMGZlNGE2ZDQzZjFiYmE3M2Rm
ZjY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50
UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250
ZW50UmVhZGVyQ29jb2EubW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIkRvY3VtZW50Lmgi
CiAjaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5o
IgorI2ltcG9ydCAiRWRpdG9yLmgiCisjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNpbXBvcnQg
IkZpbGUuaCIKICNpbXBvcnQgIkZpbGVTeXN0ZW0uaCIKICNpbXBvcnQgIkZyYW1lLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKaW5kZXggY2I2ZDUz
ZWI4ZjhjNGNmZDM4OTQ1N2Y1YmVhZTI4M2EzN2RhODE5Mi4uZjhmNzYxY2RjODFhZWJkM2RmMDg4
MzdhMzIzMWMwOGYzNWE0ZmViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRGljdGlvbmFyeUxvb2t1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXAuaApAQCAtMjMsMTUgKzIzLDI1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNwcmFnbWEgb25jZQor
CisjaWYgUExBVEZPUk0oQ09DT0EpCiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgi
Ci0jaW5jbHVkZSA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXpl
clNQSS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRp
YXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAKIE9CSkNfQ0xBU1MgTlNWaWV3OwogT0JKQ19D
TEFTUyBQREZTZWxlY3Rpb247CiAKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVmIGlkIDxOU0lt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNl
bHNlCit0eXBlZGVmIGlkIFdLUmV2ZWFsQ29udHJvbGxlcjsKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTQ4
LDggKzU4LDExIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNo
b3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6
RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9u
Q2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290
Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIGhpZGVQb3B1cCgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGlk
IDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1hdGlvbkNvbnRyb2xs
ZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdU
Rjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0
aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiBy
b290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOworICAgIAorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIGFu
aW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgTlNW
aWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5k
aWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0
KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxwdHIs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIpOwor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTllNDQ3NGE0OWZjYzliMDk1YjJmNGJkYTZj
OWFlM2YzOGNmZTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIC9k
ZXYvbnVsbApAQCAtMSwzODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCi0KLSNpZiBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShSRVZFQUwpCi0KLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJFZGl0
aW5nLmgiCi0jaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0j
aW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgotI2lt
cG9ydCAiSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUmFuZ2Uu
aCIKLSNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCi0j
aW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIK
LSNpbXBvcnQgIlZpc2libGVVbml0cy5oIgotI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgotI2lt
cG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0lt
bWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0jaW1w
b3J0IDx3dGYvUmVmUHRyLmg+Ci0KLUBpbnRlcmZhY2UgV2ViUmV2ZWFsSGlnaGxpZ2h0IDxSVlBy
ZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKLUBwcml2YXRlCi0gICAgRnVu
Y3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOwotICAgIE5TUmVjdCBfaGlnaGxpZ2h0
UmVjdDsKLSAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZh
dWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzoo
TlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7Ci0tICh2b2lkKXNldENsZWFy
VGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcjsKLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0Ci0KLUBzeW50aGVzaXpl
IGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7Ci1Ac3ludGhlc2l6ZSB1c2VEZWZhdWx0SGln
aGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHN5bnRoZXNpemUgYXR0cmlidXRlZFN0cmlu
Zz1fYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0
UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VE
ZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBh
dHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX2hpZ2hsaWdodFJlY3QgPSBoaWdobGlnaHRSZWN0
OwotICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBf
YXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Ci0gICAgCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+
JiYpY2xlYXJUZXh0SW5kaWNhdG9yCi17Ci0gICAgX2NsZWFyVGV4dEluZGljYXRvciA9IFdURk1v
dmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKLX0KLQotLSAoTlNBcnJheTxOU1ZhbHVlICo+ICopcmV2
ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNGb3JJdGVtOihS
Vkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9Q
QVJBTShpdGVtKTsKLSAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnNlbGYuaGln
aGxpZ2h0UmVjdF1dOwotfQotCi0tICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0Nv
bnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBV
TlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgCi0gICAgZm9yIChOU1ZhbHVlICpyZWN0VmFsIGluIGNv
bnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gcmVjdFZhbC5y
ZWN0VmFsdWU7Ci0KLSAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBhdHRyaWJ1dGVzIGZyb20g
dGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFncmFwaCBzdHlsZSBhdHRy
aWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCi0gICAgICAgIFJldGFpblB0cjxOU011dGFi
bGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGZvbnRBdHRy
aWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIGxlbmd0
aF0pXV0pOwotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFn
cmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10gaW5pdF0pOwot
ICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRDZW50ZXJdOwot
ICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdldCgpIGZvcktleTpOU1Bh
cmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAgCi0gICAgICAgIFJldGFpblB0cjxOU0F0
dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBhdHRyaWJ1
dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKLSAgICAgICAgW3N0cmluZyBkcmF3SW5SZWN0OnJlY3Rd
OwotICAgIH0KLX0KLQotLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0
ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRlbTooUlZJdGVtICopaXRl
bQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7
Ci0gICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKLX0KLQotLSAodm9pZClyZXZl
YWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5n
SXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBV
TlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgYXV0byBibG9jayA9IFdURk1vdmUoX2NsZWFyVGV4dElu
ZGljYXRvcik7Ci0gICAgaWYgKGJsb2NrKQotICAgICAgICBibG9jaygpOwotfQotCi1AZW5kCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rp
b25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhl
IHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25z
LgotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0g
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotCi0gICAgLy8g
QXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBo
cyBvZiB0ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNl
bGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbkVuZCk7Ci0KLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFy
dCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgp
KTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rp
b25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsK
LSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBs
YWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+
IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1T
dHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2UgaGlnaGxpZ2h0
UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAotICAgIHJldHVybiB7IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2Uu
bG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAotICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
Ci19Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRl
c3RSZXN1bHQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAg
IGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
Ci0gICAgCi0gICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4g
eyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5m
cmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9
OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0
IHRoZSBwb2ludC4KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQ
b2ludEluSW5uZXJOb2RlRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZy
YW1lUG9pbnQpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8g
cG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0g
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLQotICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7Ci0gICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKLSAgICBpbnQgaGl0SW5k
ZXg7Ci0gICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7Ci0gICAgCi0gICAgaWYg
KHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxl
Y3Rpb24pIHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpOwotICAgICAgICAKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVz
ZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgICAgICBhdXRvIHBhcmFn
cmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1
dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKLSAgICAgICAg
Ci0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVu
ZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgCi0g
ICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFy
YWdyYXBoRW5kKTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFu
Z2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkp
LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2Vs
ZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdl
dCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFj
Y291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwotICAgICAgICBzZWxlY3Rpb25BY2Nv
dW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5
KTsKLSAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0
YXJ0KCk7Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNo
YXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICAgICAgZnVs
bENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJz
KHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFu
Z2UpCi0gICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAgICAgCi0gICAg
ICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgICAg
IGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJh
Y3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgfQotICAg
IAotICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2
ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVX
aXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKLSAg
ICAKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2Uu
Z2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRl
bUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3Rl
ZFJhbmdlXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxp
Z2h0UmFuZ2U7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3Vu
ZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBu
aWwgfTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hh
cmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5n
dGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAot
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotfQotCi1zdGF0aWMgdm9pZCBleHBh
bmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdl
ciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRC
ZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKLXsKLSAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGgg
PSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlv
bkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAgIAotICAgIGNoYXJhY3Rl
cnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExl
bmd0aDsKLSAgICAKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9m
Q2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVj
dGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZv
cmVTdGFydDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXN0ZDo6dHVw
bGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0Zv
clBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKLXsKLSAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERvbid0IGRvIGFueXRoaW5n
IGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0gICAgaWYgKCFzZWxlY3Rp
b24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBAIiIsIG5p
bCB9OwotCi0gICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0g
YWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKLQotICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBn
b2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBw
b2ludC4KLSAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJp
bmddLmxlbmd0aDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAw
OwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7Ci0gICAgZXhwYW5k
U2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFy
YWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOwotCi0gICAg
YXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOwot
ICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVT
dGFydCwgMCk7Ci0KLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NS
Vkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVk
UmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5n
ZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRp
b24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmls
IH07Ci0KLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2Nh
dGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOwotICAgIE5TSW50ZWdlciBsb29rdXBBZGRl
ZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3Ro
KSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKLQotICAgIFtzZWxl
Y3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07Ci0gICAgW3Nl
bGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKLQotICAgIEFT
U0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJp
bmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOwotICAgIHJldHVybiB7IHNl
bGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LQotICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci19Ci0KLXN0YXRpYyBpZCA8TlNJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRy
b2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBEaWN0aW9uYXJ5UG9w
dXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVu
Y3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2Fs
bGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmll
d1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJU
ZXh0SW5kaWNhdG9yKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAK
LSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIGlmIChOU0RpY3Rpb25hcnkg
Km9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkpCi0gICAgICAgIFtt
dXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9uc107Ci0KLSAgICBh
dXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlvbmFyeVBvcHVw
SW5mby50ZXh0SW5kaWNhdG9yKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UlZQcmVzZW50ZXI+IHBy
ZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAg
ICAKLSAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKLSAgICBOU1BvaW50IHBvaW50ZXJMb2NhdGlv
bjsKLSAgICAKLSAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSkgewot
ICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4dEluZGljYXRvci5n
ZXQoKSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRl
cyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cygpWzBdOwotICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzKCk7Ci0gICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcygpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJvb3RWaWV3VG9WaWV3Q29udmVy
c2lvbkNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRp
bmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0Qm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICAgICAgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayhzZWxlY3Rp
b25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnkodGV4dEJvdW5kaW5n
UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICBoaWdobGlnaHRSZWN0
ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIHBvaW50
ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwot
ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBOU1BvaW50IHRleHRCYXNlbGluZU9yaWdp
biA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOwotICAgICAgICAKLSAgICAgICAgaGlnaGxp
Z2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoKTsKLSAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBvaW50OnRleHRC
YXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKLSAgICB9Ci0gICAgCi0gICAgUmV0YWluUHRyPFdl
YlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tXZWJSZXZlYWxIaWdo
bGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0UmVjdCB1c2VEZWZh
dWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpIGF0dHJpYnV0
ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpXSk7Ci0g
ICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdE5TKFthbGxv
Y1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRlckxvY2F0aW9uSW5W
aWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQ
cmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQoKV0pOwotICAgIAot
ICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNl
KCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQo
KS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOwotICAgIAotICAgIFt3
ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGlnaHQgPSBXVEZNb3Zl
KHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5k
aWNhdG9yKV0gewotICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQotICAgICAgICAgICAg
Y2xlYXJUZXh0SW5kaWNhdG9yKCk7Ci0gICAgfV07Ci0gICAgCi0gICAgaWYgKGNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFuaW1hdGlvbkNvbnRy
b2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29u
dGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAgICBbcHJlc2VudGVyIHJldmVhbEl0
ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRl
eHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIHJldHVybiBuaWw7Ci0KLSAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLXZvaWQgRGljdGlvbmFyeUxv
b2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1
cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0
b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5j
dGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxi
YWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAg
c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9uYXJ5UG9w
dXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwot
fQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCi17Ci0gICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgaWYgKCFnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1
bGVDbGFzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgW2dldExVTG9va3VwRGVmaW5pdGlvbk1v
ZHVsZUNsYXNzKCkgaGlkZURlZmluaXRpb25dOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLX0KLQotaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gRGlj
dGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25h
cnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RG
OjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRp
b25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJv
b3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBj
bGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgcmV0dXJuIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0
aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNh
dG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNr
LCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3Bp
L2lvcy9VSUtpdFNQSS5oCmluZGV4IDE0M2YxNmM5OTJmNjM3OTAyNTI5NGJjNjcyZjQxZWRmYTM0
MGE0NDQuLjIzMjM3OTY5ZmQzNTQyNmZlZWU5M2UwMDg1ZWVkOTc3ZjQ0MGQ5OTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC03MzMsNiArNzMzLDkgQEAg
c3RydWN0IF9VSVdlYlRvdWNoRXZlbnQgewogICAgIGJvb2wgaXNQb3RlbnRpYWxUYXA7CiB9Owog
CitAaW50ZXJmYWNlIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2du
aXplcgorQGVuZAorCiBAY2xhc3MgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyOwog
CiBAcHJvdG9jb2wgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUgPE5T
T2JqZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFn
ZVByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJv
eHlDb2NvYS5tbQppbmRleCBmNTY4NzVkZmYzYTFjYzQ1ZWJlZTYxNzIxNWNlOTU3MjNmNTNkZTRl
Li42NWFlY2Q5MjE5MmZlNjY2MWYxYmFhNDJkMzQwNzg2Y2U0ZDFkNTMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtMzMs
NiArMzMsNyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiU2FmZUJyb3dzaW5n
U1BJLmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCisjaW1wb3J0ICJXZWJQYWdl
TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29y
ZS9EcmFnSXRlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtMTg5
LDUgKzE5MCwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1DbG9uZUF0dGFjaG1lbnQo
UmVmPEFQSTo6QXR0YWNobWVudD4mJiBmcm9tQXR0YWNobWVudAogfQogCiAjZW5kaWYgLy8gRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9p
bnQpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBw
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOworfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCks
IG1fcGFnZUlEKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXgg
YTgwN2NjZDJmYWNmZTc4Y2Y5MTRiZGY0M2VkMjQ5N2FkY2M4ZmM4Yy4uZGEyNjMzMjIxNDY3OWZk
OTFjYzU0ZDBmYzg0ZWM4MjMwNzdlNGQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtODcsNiArODcsNyBA
QCBjbGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5OwogY2xhc3MgV2ViUGFnZVBy
b3h5OwogfQogCitAY2xhc3MgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xhc3MgX1VJ
SGlnaGxpZ2h0VmlldzsKIEBjbGFzcyBfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVj
b2duaXplcjsKIEBjbGFzcyBVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI7CkBAIC0yMTUsNiArMjE2
LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIAogI2lmIFBMQVRGT1JNKElPU01B
QykKICAgICBSZXRhaW5QdHI8VUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyPiBfaG92ZXJHZXN0dXJl
UmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8X1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXI+IF9s
b29rdXBHZXN0dXJlUmVjb2duaXplcjsKICNlbmRpZgogCiAgICAgUmV0YWluUHRyPFVJV0tUZXh0
SW50ZXJhY3Rpb25Bc3Npc3RhbnQ+IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0KaW5kZXggM2I2YTE4NjUwYWYyMTI5OTcwYmIxNGM1NjBjYjRiOTViY2JlMDNlOC4uYjZkYTE3
MGJmNDI3Zjg3ZTFjYTVjOGE4YzBlY2EzNjVmNDFkMTdmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0x
MTIsNiArMTEyLDcgQEAKICNpZiBQTEFURk9STShJT1NNQUMpCiAjaW1wb3J0ICJOYXRpdmVXZWJN
b3VzZUV2ZW50LmgiCiAjaW1wb3J0IDxVSUtpdC9VSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIuaD4K
KyNpbXBvcnQgPFVJS2l0L19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmg+CiAjaW1wb3J0IDxw
YWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CiAjZW5kaWYKIApAQCAtNjQ5LDYgKzY1
MCwxMSBAQCAtICh2b2lkKXNldHVwSW50ZXJhY3Rpb24KICAgICBfaG92ZXJHZXN0dXJlUmVjb2du
aXplciA9IGFkb3B0TlMoW1tVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRo
VGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfaG92ZXJHZXN0dXJlUmVjb2duaXplckNoYW5n
ZWQ6KV0pOwogICAgIFtfaG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsK
ICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5n
ZXQoKV07CisgICAgCisgICAgX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW19V
SUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlv
bjpAc2VsZWN0b3IoX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOildKTsKKyAgICBbX2xvb2t1cEdl
c3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtzZWxmIGFkZEdlc3R1cmVS
ZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCiAjZW5kaWYK
IAogICAgIF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tXS1N5bnRoZXRp
Y0NsaWNrVGFwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0
aW9uOkBzZWxlY3Rvcihfc2luZ2xlVGFwQ29tbWl0ZWQ6KV0pOwpAQCAtNzU5LDYgKzc2NSw5IEBA
IC0gKHZvaWQpY2xlYW51cEludGVyYWN0aW9uCiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtf
aG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwogICAgIFtzZWxmIHJlbW92
ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAK
KyAgICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW3Nl
bGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgp
XTsKICNlbmRpZgogCiAgICAgW19zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0
ZTpuaWxdOwpAQCAtODQ2LDYgKzg1NSw3IEBAIC0gKHZvaWQpX3JlbW92ZURlZmF1bHRHZXN0dXJl
UmVjb2duaXplcnMKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfc3R5bHVzU2lu
Z2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lmIFBMQVRGT1JNKElPU01BQykKICAg
ICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5n
ZXQoKV07CisgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBAIC04NjEsNiArODcxLDcgQEAgLSAodm9p
ZClfYWRkRGVmYXVsdEdlc3R1cmVSZWNvZ25pemVycwogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNv
Z25pemVyOl9zdHlsdXNTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExB
VEZPUk0oSU9TTUFDKQogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1
cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTE0NjEsNiArMTQ3
MiwxMCBAQCAtIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICop
Z2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaQogCiAgICAgaWYgKFtnZXN0dXJlUmVjb2du
aXplciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSB8fCBb
b3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29n
bml6ZXIgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBpZiAoKFtnZXN0
dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBj
bGFzc11dICYmIFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJTG9uZ1By
ZXNzR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkgfHwgKFtvdGhlckdlc3R1cmVSZWNvZ25pemVy
IGlzS2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAmJiBb
Z2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6
ZXIgY2xhc3NdXSkpCisgICAgICAgIHJldHVybiBZRVM7CisKICNlbmRpZgogICAgIGlmIChpc1Nh
bWVQYWlyKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBfaGlnaGxp
Z2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF90ZXh0U2VsZWN0aW9uQXNzaXN0
YW50LmdldCgpLmZvcmNlUHJlc3NHZXN0dXJlKSkKICAgICAgICAgcmV0dXJuIFlFUzsKQEAgLTYw
NTEsNiArNjA2NiwxMiBAQCAtIChCT09MKWFsbG93c0RpY3RhdGlvbklucHV0Rm9yTGlzdFZpZXdD
b250cm9sbGVyOihQVUlDUXVpY2tib2FyZFZpZXdDb250cm9sbGVyCiAjZW5kaWYgLy8gUExBVEZP
Uk0oV0FUQ0hPUykKIAogI2lmIFBMQVRGT1JNKElPU01BQykKKy0gKHZvaWQpX2xvb2t1cEdlc3R1
cmVSZWNvZ25pemVkOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sK
KyAgICBOU1BvaW50IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMgPSBbZ2VzdHVyZVJlY29nbml6
ZXIgbG9jYXRpb25JblZpZXc6c2VsZl07CisgICAgX3BhZ2UtPnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwQXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0
ZXMpKTsKK30KKwogLSAodm9pZClfaG92ZXJHZXN0dXJlUmVjb2duaXplckNoYW5nZWQ6KFVJR2Vz
dHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgogewogICAgIGlmICghX3BhZ2UtPmlz
VmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCmluZGV4IGI0NzNmMDgxYTUwNzVlNDQzY2NlMzliNWRjMzc4NTRiZDY4ZDg2ZjIuLjI3OTVm
NzMwYmJmZWM2MmU0NGY1NGY2YTgwOWM4MmJhYjYzM2QzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtMTIxLDExICsxMjEsNiBAQCBi
b29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmlu
ZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpnZXN0dXJlQ2Fs
bGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgQ2FsbGJhY2tJRCBjYWxs
YmFja0lEKQogewogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlPEdlc3R1cmVD
YWxsYmFjaz4oY2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbQppbmRleCBmZmZjNWUwOGExNjcwYTBjYWYxNTNlYzcwZmE3MjAyMTcy
MGU1YjdhLi5lMmFiMjljMmI1YzY3MTc1ODQ2MzdiM2I3YWVjYzIwOGI3NjM2ODY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTMyMywy
MiArMzIzLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFByb21pc2VkRGF0YUZvckltYWdlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFMKIAogI2VuZGlmCiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Ci19Ci0KLXZvaWQgV2Vi
UGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17
Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNl
bGVjdGlvbigpLCBtX3BhZ2VJRCk7Ci19Ci0KIC8vIENvbXBsZXggdGV4dCBpbnB1dCBzdXBwb3J0
IGZvciBwbHVnLWlucy4KIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQ29tcGxleFRleHRJbnB1dFRv
UGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHRleHRJbnB1dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAzZTc5NDMxZjkzNzExNGM0MWY5
ZDJkZmQ1OGUwYjRmNzIxODE1OWE2Li5hMzhjZDJiZjYzNzk0YzhlOWYxZDIxMmEzZTc4YjNlOGM0
ZWY4YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC0yNiw5ICsyNiwyMCBAQAogI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAKKwogI2ltcG9ydCAiTG9hZFBhcmFtZXRlcnMuaCIK
KyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgi
CisjaW1wb3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RWRpdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL05v
ZGVSZW5kZXJTdHlsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1lZGlhU2Vzc2lvbk1h
bmFnZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxlbWVudC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJPYmplY3QuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogCkBAIC01OSw2ICs3
MCwxMTQgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZv
KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6Tm93UGxheWluZ0luZm9DYWxsYmFjayhoYXNBY3RpdmVTZXNzaW9uLCByZWdpc3RlcmVkQXNO
b3dQbGF5aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlvbiwgZWxhcHNlZFRpbWUsIHVuaXF1
ZUlkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKIH0KKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQp
Cit7CisgICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFn
ZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChwbHVnaW5WaWV3LT5wZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgorICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93
VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkpKTsKKyAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKKyAgICBzdGQ6OnRpZShyYW5n
ZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChyZXN1
bHQpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvKiBm
cmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAqcmFuZ2Us
IG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOwor
fQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZy
YW1lJiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7
CisgICAgc3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIGlmIChzZWxlY3RlZFJhbmdlKQor
ICAgICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2VsZWN0ZWRS
YW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQoreworICAgIGF1
dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworfQorICAgIAordm9pZCBXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2Uo
ZnJhbWUsIHJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkpOworfQorCitE
aWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShG
cmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQorewor
ICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7CisgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CisgICAgCisgICAgRGljdGlvbmFyeVBvcHVw
SW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0
ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9u
YXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87
CisgICAgfQorICAgIAorICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHJhbmdlLmFi
c29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAg
ICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIEludFJlY3Qg
cmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCkpOworICAgIAorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKKyAgICBmbG9hdCBzY2FsZWRB
c2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxl
RmFjdG9yKCkgOiAwOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luID0gRmxvYXRQb2lu
dChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkQXNjZW50KTsKKyAgICBkaWN0
aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOworCisjaWYgUExBVEZPUk0oTUFDKQor
CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0
cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0
cmluZzo6Tm8pOworICAgIAorICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
PiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmdd
XSk7CisgICAgCisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdl
ciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgCisgICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVt
ZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5n
IGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVz
LCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgICAgIFJldGFpblB0cjxOU011dGFi
bGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRh
YmxlQ29weV0pOworICAgICAgICAKKyAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJp
YnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoZm9u
dCkKKyAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1Np
emU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3IoKV07CisgICAgICAgIGlmIChmb250
KQorICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5T
Rm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAKKyAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRl
ZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2Vd
OworICAgIH1dOworCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIFRleHRJbmRp
Y2F0b3JPcHRpb25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91
bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlczsKKyAgICBpZiAocHJl
c2VudGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQorICAgICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRleHRJ
bmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OworICAg
IAorICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRv
cjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25U
cmFuc2l0aW9uKTsKKyAgICBpZiAoIXRleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgZWRpdG9yLnNl
dElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGlj
dGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgZGljdGlvbmFyeVBvcHVwSW5mby50
ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJp
YnV0ZWRTdHJpbmc7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIGVkaXRvci5z
ZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICByZXR1cm4gZGljdGlv
bmFyeVBvcHVwSW5mbzsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZWFj
NGY0ZmFhMzVkMWJjMmZmYmQ5M2E1OWNmOGM3YjZkNDZlZjkyYi4uNmU1YTZkMTg4NWQ1ZDRiZjJl
MzAyNDZhMDVlMmE4YjYzNmYyOGI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxNywyMSArNDE3LDYgQEAgdm9pZCBX
ZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90LCBjb25zdCBTdHJp
bmcmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBG
b3JTZWxlY3Rpb24oRnJhbWUmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiwgUmFu
Z2UmLCBOU0RpY3Rpb25hcnkgKiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24p
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9u
RWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6S2V5Ym9h
cmRFdmVudCopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNDczM2IxY2JmMmZl
NDVjZDlkMGNlYTdlZWY5YmM3YzM4YWZhZjdlNC4uZmE3YTZhYWYxYjYwYmRhOTBkY2QwNzliYTFh
OTQzNmYxMjE2YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTM4OSwxMDIgKzM4OSw3IEBAIHZvaWQgV2ViUGFnZTo6
Zm9udEF0U2VsZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxiYWNrKGZvbnROYW1lLCBmb250U2l6
ZSwgc2VsZWN0aW9uSGFzTXVsdGlwbGVGb250cywgY2FsbGJhY2tJRCkpOwogfQogICAgIAotdm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgZmxvYXRQb2ludCkKLXsKLSAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZp
ZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAgICAgICAgaWYgKHBsdWdpblZp
ZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQg
aXMgb3Zlci4KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCku
ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52
aWV3KCktPndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAg
c3RkOjp0aWUocmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRl
c3RSZXN1bHQocmVzdWx0KTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpy
YW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5j
ZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rp
b24oRnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17
Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOwotICAgIE5TRGljdGlvbmFyeSAqb3B0
aW9uczsKLSAgICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlM
b29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgaWYgKHNlbGVjdGVkUmFu
Z2UpCi0gICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxl
Y3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLX0KIAotdm9pZCBX
ZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17Ci0g
ICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7Ci19Ci0KLURpY3Rpb25hcnlQb3B1cEluZm8g
V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2Um
IHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgRWRpdG9yJiBlZGl0b3Ig
PSBmcmFtZS5lZGl0b3IoKTsKLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVw
SW5mbyh0cnVlKTsKLQotICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5m
bzsKLSAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgewot
ICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0g
ICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIFZlY3RvcjxG
bG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAg
ICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0
aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cElu
Zm87Ci0gICAgfQotCi0gICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0KLSAgICBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxl
KCk7Ci0gICAgZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJ
bmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNj
YWxlZEFzY2VudCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsK
LQotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRT
dHJpbmc6Ok5vKTsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBz
Y2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7
Ci0KLSAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJl
ZEZvbnRNYW5hZ2VyXTsKLQotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmli
dXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBv
cHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSBy
YW5nZSwgQk9PTCAqc3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFy
eT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsK
LQotICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChmb250KQotICAgICAgICAgICAgZm9u
dCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAq
IHBhZ2VTY2FsZUZhY3RvcigpXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAgICBbc2Nh
bGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07
Ci0KLSAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxl
ZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwotICAgIH1dOwotCi0gICAgVGV4dEluZGlj
YXRvck9wdGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3Vu
ZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOwotICAgIGlmIChwcmVz
ZW50YXRpb25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpCb3VuY2VBbmRDcm9zc2ZhZGUpCi0gICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dElu
ZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7Ci0KLSAg
ICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNp
dGlvbik7Ci0gICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dl
dHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25h
cnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNh
dG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0
cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZzsKLQotICAgIGVkaXRvci5z
ZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICByZXR1cm4gZGljdGlv
bmFyeVBvcHVwSW5mbzsKLX0KIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCkBAIC01Mzks
MTEgKzQ0NCw2IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVw
SW5mb0ZvclNlbGVjdGlvbkluUERGUGx1Z2luKFBERlNlbGVjCiAKICNlbmRpZgogCi12b2lkIFdl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5n
ZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1
cEluZm9Gb3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pKSk7Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNl
bGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewog
ICAgIC8vIEZpcnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5jZSB0byBoYW5kbGUgdGhlIGV2
ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356017</attachid>
            <date>2018-11-29 10:16:35 -0800</date>
            <delta_ts>2018-11-29 13:11:55 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191732-20181129101634.patch</filename>
            <type>text/plain</type>
            <size>75632</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTgxZGRlMzQ1YjgwNjg1
MWRlYmExMWU1N2RmN2QzMjUzMjQzNWJkMi4uNGJkZTZiNDIwNzRlNzI3NWJkYTg1NDgyZGYyNTlm
NjM1OTlkNmYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTI5ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE5vdCBjdXJyZW5sdHkgdGVzdGFibGUK
KworICAgICAgICBEaWN0aW9uYXJ5TG9va3VwIHVzZXMgUmV2ZWFsIG5vdywgd2hpY2ggaXMgc2xh
dGVkIHRvIGJlIGNyb3NzLXBsYXRmb3JtLgorICAgICAgICBUaGF0IHBhdGNoIGdhdGVzIHRoZSBw
YXJ0cyBvZiBEaWN0aW9uYXJ5TG9va3VwIHRoYXQgY3VycmVudGx5IGRvIG5vdCBoYXZlCisgICAg
ICAgIGFuIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbiBvbiBpT1MuIE9uY2UgUmV2ZWFsIGlzIHJl
YWR5LCB0aGlzIGNvZGUgd2lsbCBiZQorICAgICAgICByZXBsYWNlZCBvciBleHBhbmRlZCB1cG9u
LCBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cCk6CisgICAgICAgIChXZWJD
b3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKToKKwogMjAxOC0xMS0y
OSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0JGQ11b
UXVpcmtdIFdpZHRoIGRvZXMgbm90IG5lZWQgc3RyZXRjaGluZyBxdWlyay4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nCmluZGV4IDJhZTQxMGMxOWNiNDU3YzFjMTRkYWZmYjNlNTk5NmM0YmE4ZTQxMTEuLjAxMDlk
MDNkNjM0NzRlMzY5ZDM1OGE3ZjM1ZGYzYzQ5YWNkMzhiNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTExLTI5ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5l
ckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3Nz
IHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgor
CisgICAgICAgICogcGFsL3NwaS9tYWMvTG9va3VwU1BJLmg6CisgICAgICAgICogcGFsL3NwaS9t
YWMvUmV2ZWFsU1BJLmg6CisKIDIwMTgtMTEtMjggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1
ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMzg2NTMg
YW5kIHIyMzg2NTYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhiNmNjNzA5ZjM3NTg5NzgzYWM2NDgxNGI2ZTJiNmUw
MjBkNmIwYzkuLjFmNGQyZDM0Njk3NmZkZTQ4Y2QwOTU5YmZjOGIxN2U2Y2ViN2VhZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMjkgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9n
YXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIg
Y3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5z
ZW4uCisKKyAgICAgICAgTG9va3VwIGlzIGJlaW5nIHJlcGxhY2VkIGJ5IFJldmVhbC4gVGhpcyBm
cmFtZXdvcmsgc2hvdWxkIHdvcmsgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICAgICAgVGhlIHBhdGNo
IG1vdmVzIHRoZSBjb2RlIHRoYXQgd2UgZXhwZWN0IHdpbGwgYmUgbmVlZGVkIGZvciBhbGwgcGxh
dGZvcm1zIHRvIHRoZSBtb3JlCisgICAgICAgIGdlbmVyYWwgY29jb2EgYXJlYS4gVGhpcyBwYXRj
aCBjaGFuZ2VzIG5vIGZ1bmNhdGlvbmFsaXR5LCBhbmQgc2hvdWxkIG5vdCBjaGFuZ2UKKyAgICAg
ICAgYW55dGhpbmcgY3VycmVudGx5LiBUaGlzIHdvcmsgd2lsbCBiZSBidWlsZCBvbiBsYXRlciB3
aGVuIFJldmVhbCBpcyByZWFkeSB0byBzdXBwb3J0CisgICAgICAgIG11bHRpcGxlIHBsYXRmb3Jt
cy4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNl
bGVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1cEludGVyYWN0aW9uXSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgY2xlYW51cEludGVyYWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3JlbW92ZURlZmF1bHRHZXN0dXJlUmVjb2duaXplcnNdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBfYWRkRGVmYXVsdEdlc3R1cmVSZWNvZ25pemVyc10pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFu
ZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF9sb29rdXBHZXN0dXJlUmVjb2duaXplZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBG
b3JSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0Zv
clJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisKIDIwMTgtMTEtMjkgIFRvbWFzIFBvcGVs
YSAgPHRwb3BlbGFAcmVkaGF0LmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEZpeCBCdWJibGV3
cmFwTGF1bmNoZXIgY2xhbmcgd2FybmluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3N2YyNDY3M2U1MTczNjk3ZjVjYmNlN2Vj
M2E0NTIxNmNmNDgzMTEzLi5iOGNjMzU4NjNjYmQyZWQ1NWNlZGE3YzU2YWMxODIxOTgzZTQ3Mzhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC00MDYsNiArNDA2LDcgQEAKIAkJCQkwQzJEQTEzOTFGM0JFQjQ5MDBEQkMzMTcgLyog
UGFzc0tpdFNQSS5oICovLAogCQkJCTBDMkRBMTNBMUYzQkVCNDkwMERCQzMxNyAvKiBwdGhyZWFk
U1BJLmggKi8sCiAJCQkJMEMyREExM0IxRjNCRUI0OTAwREJDMzE3IC8qIFF1YXJ0ekNvcmVTUEku
aCAqLywKKwkJCQk0NDI5NTZDQzIxOEE3MkRFMDA4MERCNTQgLyogUmV2ZWFsU1BJLmggKi8sCiAJ
CQkJNTcwQUI4RjAyMEFFMkU4RDAwQjhCRTg3IC8qIFNlY0tleVByb3h5U1BJLmggKi8sCiAJCQkJ
MEMyREExM0MxRjNCRUI0OTAwREJDMzE3IC8qIFNlcnZlcnNTUEkuaCAqLywKIAkJCQkwQzJEQTEy
QjFGM0JFQjQ5MDBEQkMzMTcgLyogVVJMRm9ybWF0dGluZ1NQSS5oICovLApAQCAtNDcxLDcgKzQ3
Miw2IEBACiAJCQkJMEM3Nzg1ODYxRjQ1MTMwRjAwRjRFQkI2IC8qIFFUS2l0U1BJLmggKi8sCiAJ
CQkJQTEwMjY1OEExRjU2NzQ4QzAwQjRDODQ0IC8qIFF1aWNrRHJhd1NQSS5oICovLAogCQkJCTBD
Nzc4NTg3MUY0NTEzMEYwMEY0RUJCNiAvKiBRdWlja0xvb2tNYWNTUEkuaCAqLywKLQkJCQk0NDI5
NTZDQzIxOEE3MkRFMDA4MERCNTQgLyogUmV2ZWFsU1BJLmggKi8sCiAJCQkJQTExNzVCNDgxRjZB
RkY4RTAwQzRCOUYwIC8qIFNwZWVjaFN5bnRoZXNpc1NQSS5oICovLAogCQkJCTBDNzc4NTg4MUY0
NTEzMEYwMEY0RUJCNiAvKiBUVUNhbGxTUEkuaCAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhMzVkZTAxMTk4ZjJh
OGM0MDUyNzcwMTU5NWE1NWRkNzNkNDI4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaApAQCAtMCwwICsxLDg1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxvYmpj
L3J1bnRpbWUuaD4KKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0lt
bWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19QUklWQVRFX0ZS
QU1FV09SSyhSZXZlYWwpCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsQ29yZSkK
K1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGVyKQorU09GVF9MSU5L
X0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50aW5nQ29udGV4dCkKK1NPRlRfTElOS19D
TEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVkl0ZW0pCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9O
QUwoUmV2ZWFsQ29yZSwgUlZTZWxlY3Rpb24pCisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RL
KQorCisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8UmV2ZWFsL1JWUHJlc2VudGVyLmg+Cisj
aW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8UmV2ZWFsQ29yZS9SVlNlbGVjdGlvbi5oPgorI2ltcG9ydCA8UmV2ZWFsQ29yZS9SZXZlYWxD
b3JlLmg+CisKKyNlbHNlIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKworQHByb3RvY29s
IFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU7CisKK0BpbnRlcmZhY2UgUlZJdGVtIDogTlNP
YmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4dDooTlNT
dHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBOU19ERVNJ
R05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJWU2VsZWN0aW9uIDogTlNP
YmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNsaWNrSW5k
ZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJhbmdlcyBz
aG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247CitAZW5k
CisKKyNpZiBQTEFURk9STShNQUMpCitAaW50ZXJmYWNlIFJWUHJlc2VudGluZ0NvbnRleHQgOiBO
U09iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUG9pbnRlckxvY2F0aW9uSW5WaWV3OihO
U1BvaW50KXBvaW50ZXJMb2NhdGlvbkluVmlldyBpblZpZXc6KE5TVmlldyAqKXZpZXcgaGlnaGxp
Z2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+KWhpZ2hsaWdodERl
bGVnYXRlOworQGVuZAorI2VuZGlmCisKK0Bwcm90b2NvbCBSVlByZXNlbnRlckhpZ2hsaWdodERl
bGVnYXRlIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAoTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXJl
dmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbToo
UlZJdGVtICopaXRlbTsKK0BvcHRpb25hbAorLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNl
bnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRl
bTsKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQg
ZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKK0BlbmQKKworQGludGVyZmFjZSBSVkRv
Y3VtZW50Q29udGV4dCA6IE5TT2JqZWN0IDwgTlNTZWN1cmVDb2RpbmcgPgorQGVuZAorCitAaW50
ZXJmYWNlIFJWUHJlc2VudGVyIDogTlNPYmplY3QKKyNpZiBQTEFURk9STShNQUMpCistIChpZDxO
U0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1hdGlvbkNvbnRyb2xsZXJG
b3JJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQg
Kilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQg
KilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKKy0gKEJPT0wpcmV2ZWFsSXRlbTooUlZJdGVtICopaXRlbSBk
b2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNl
bnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0
aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKK0BlbmQKKworI2VuZGlmIC8vICFVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkv
bWFjL0xvb2t1cFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQ
SS5oCmluZGV4IGViN2Y5NTFmNzFjNzVjODEyMTdiMjJlNzhhZGFkMzBlNGQ2YTVjMDQuLmUwYTMz
NzVkMzBjYzg4OWYxMzVlYTJhMTFkNDdkMGRhOTRmOThhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmgKQEAgLTIzLDEyICsyMywxMyBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAorCisjaWYgUExBVEZPUk0oTUFDKQorCiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KICNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZPUk0o
TUFDKQotCiBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTG9va3VwKQogU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKExvb2t1cCwgTFVMb29rdXBEZWZpbml0aW9uTW9kdWxlKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ2YjhkYTQyYzg1OTkwYWUzMmVhNjdhMGFmNzc1M2YzZGI5ODI4
YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVk
aWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtp
bmcuaD4KLQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbCkKLVNPRlRfTElOS19Q
UklWQVRFX0ZSQU1FV09SSyhSZXZlYWxDb3JlKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJl
dmVhbCwgUlZQcmVzZW50ZXIpCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlBy
ZXNlbnRpbmdDb250ZXh0KQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJW
SXRlbSkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVlNlbGVjdGlvbikK
LQotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0KLSNpbXBvcnQgPFJldmVhbC9SVlByZXNl
bnRlci5oPgotI2ltcG9ydCA8UmV2ZWFsL1JldmVhbC5oPgotI2ltcG9ydCA8UmV2ZWFsQ29yZS9S
VlNlbGVjdGlvbi5oPgotI2ltcG9ydCA8UmV2ZWFsQ29yZS9SZXZlYWxDb3JlLmg+Ci0KLQotI2Vs
c2UKLQotQGludGVyZmFjZSBSVkl0ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZToo
TlNSYW5nZSlzZWxlY3RlZFJhbmdlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci1AZW5kCi0K
LUBpbnRlcmZhY2UgUlZTZWxlY3Rpb24gOiBOU09iamVjdAotKyAoTlNSYW5nZSlyZXZlYWxSYW5n
ZUF0SW5kZXg6KE5TVUludGVnZXIpY2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8
TlNWYWx1ZSAqPiAqKXNlbGVjdGVkUmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAq
KXNob3VsZFVwZGF0ZVNlbGVjdGlvbjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlByZXNlbnRlciA6
IE5TT2JqZWN0Ci0tIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFu
aW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDoo
UlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJW
UHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25h
cnkgKilvcHRpb25zOwotLSAoQk9PTClyZXZlYWxJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50
Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0Nv
bnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihO
U0RpY3Rpb25hcnkgKilvcHRpb25zOwotQGVuZAotCi0jZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCAwNjNkZmRjMjI4OTYzZmJhZTU5
NjBlMDI0Y2I4ZjI0ZmQzN2E1ZWRhLi4wNjJjZGQ3ZjA3ZDcwZTMwZDlmMDZmMzA1NzNkNjk3ZmJm
ZjE1YjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTc3LDYgKzc3LDcgQEAgZWRpdGlu
Zy9TZWxlY3Rpb25SZWN0R2F0aGVyZXIuY3BwCiBlZGl0aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcAog
CiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KK2VkaXRpbmcvY29jb2EvRGljdGlvbmFy
eUxvb2t1cC5tbQogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQogZWRpdGluZy9jb2NvYS9G
b250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tCiBlZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVz
Q29jb2EubW0KQEAgLTkwLDcgKzkxLDYgQEAgZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElP
Uy5jcHAKIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQogCiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXIubW0KLWVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KIGVk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KIGVkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQogZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMTZkMzI2YjVlOTE3
ZWMzZWRlN2UwYWEzNTNiMmVmNzMwMjZmMmJlLi5kMThjZTYwYjE3OGMxY2IxZGVmMWQzOWFhZGZj
ZTc3OGIzODg4OWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yMDUyMyw2ICsyMDUyMyw3IEBACiAJCQljaGlsZHJlbiA9ICgK
IAkJCQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oICovLAogCQkJ
CUM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovLAorCQkJCTkz
N0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTlC
NTVFRUU4MUIzRTg4OTgwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAqLywKIAkJCQlGNDJDRUI1
NDIxNDAzMUVFMDAyRENBNzIgLyogRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbSAqLywKIAkJ
CQlGNDhEMkE3NTIxNTZGRTU3MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXNDb2NvYS5tbSAqLywK
QEAgLTI2MjI5LDcgKzI2MjMwLDYgQEAKIAkJCQlDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyog
QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggKi8sCiAJCQkJQ0U3QjJEQjAxNTg2QUJBRDAw
OThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSAqLywKIAkJCQk5MzdGRjNE
NDFBMTAxMkQ2MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICovLAotCQkJCTkzN0ZGM0Q2
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCTQ0Mjk1NkNB
MjE4QTZEMzAwMDgwREI1NCAvKiBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tICovLAogCQkJCUVE
NTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8sCiAJCQkJNEE4Qzk2RUEw
QkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9uTWFjLm1tICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0
NWQyZWZkOTg0OWM0M2RiNTUyNmQ3YWQ2ZDNjNDdkMTkzNDg3NzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTAs
MCArMSw0MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiRGljdGlvbmFyeUxvb2t1cC5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQg
IkRvY3VtZW50LmgiCisjaW1wb3J0ICJFZGl0aW5nLmgiCisjaW1wb3J0ICJGb2N1c0NvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgorI2lt
cG9ydCAiSFRNTENvbnZlcnRlci5oIgorI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9y
dCAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJhbmdlLmgi
CisjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKKyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgorI2lt
cG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW1wb3J0ICJWaXNpYmxlU2VsZWN0aW9uLmgiCisj
aW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBv
cnQgPHBhbC9zcGkvY29jb2EvUmV2ZWFsU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29r
dXBTUEkuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3
dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoUkVWRUFMKQorCisjaWYgUExBVEZPUk0oTUFDKQor
CitAaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxl
Z2F0ZT4gOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFy
VGV4dEluZGljYXRvcjsKKyAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7CisgICAgQk9PTCBfdXNl
RGVmYXVsdEhpZ2hsaWdodDsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3Ry
aW5nOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBoaWdobGln
aHRSZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURlZmF1bHRI
aWdobGlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxp
Z2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1
c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAq
KSBhdHRyaWJ1dGVkU3RyaW5nOworLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0
aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYlJldmVhbEhpZ2hsaWdodAorCitAc3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdo
bGlnaHRSZWN0OworQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhp
Z2hsaWdodDsKK0BzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGln
aHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRy
aWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZworewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IAorICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKKyAgICBfdXNlRGVmYXVsdEhp
Z2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7CisgICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBh
dHRyaWJ1dGVkU3RyaW5nOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNl
dENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRv
cgoreworICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRv
cik7Cit9CisKKy0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2Vu
dGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQoreworICAg
IFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgcmV0
dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsKK30KKwor
LSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3
UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwor
ICAgIAorICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0c0luVmll
dykgeworICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOworCisgICAgICAg
IC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmlu
ZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVyIHRvIGNl
bnRlciB0ZXh0LgorICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmli
dXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rp
b25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKKyAgICAgICAgUmV0
YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNN
dXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3BhcmFncmFwaCBz
ZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKKyAgICAgICAgW2F0dHJpYnV0ZXMg
c2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0
ZU5hbWVdOworICAgIAorICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJp
bmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpb
c2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVzLmdldCgp
XSk7CisgICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKKyAgICB9Cit9CisKKy0gKEJP
T0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hvdWxkVXNl
RGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBzZWxmLnVz
ZURlZmF1bHRIaWdobGlnaHQ7Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50
aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0K
K3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwor
ICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOworICAgIGlmIChi
bG9jaykKKyAgICAgICAgYmxvY2soKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorCisjZW5kaWYgLy8gRU5BQkxFKFJFVkVBTCkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgRU5BQkxFKFJFVkVBTCkKKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rp
b25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhl
IHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25z
LgorICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Cisg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworCisgICAgLy8g
QXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBo
cyBvZiB0ZXh0LgorICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNl
bGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbkVuZCk7CisKKyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFy
dCkuZ2V0KCkpOworICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgp
KTsKKyAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rp
b25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsK
KyAgICAKKyAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBs
YWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+
IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1T
dHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0
UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworICAgIAorICAgIHJldHVybiB7IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2Uu
bG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAorICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRl
c3RSZXN1bHQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAg
IGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
CisgICAgCisgICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4g
eyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9
OworCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0
IHRoZSBwb2ludC4KKyAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQ
b2ludEluSW5uZXJOb2RlRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZy
YW1lUG9pbnQpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8g
cG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Cisg
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShub2RlKTsKKworICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKKyAgICBpbnQgaGl0SW5k
ZXg7CisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7CisgICAgCisgICAgaWYg
KHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxl
Y3Rpb24pIHsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVz
ZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAgICAgICBhdXRvIHBhcmFn
cmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1
dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICAgICAg
CisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVu
ZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisg
ICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFy
YWdyYXBoRW5kKTsKKyAgICAgICAgCisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFu
Z2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkp
LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2Vs
ZWN0aW9uRW5kKS5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdl
dCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFj
Y291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OworICAgICAgICBzZWxlY3Rpb25BY2Nv
dW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5
KTsKKyAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0
YXJ0KCk7CisgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNo
YXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICAgICAgZnVs
bENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJz
KHBvc2l0aW9uLCAyNTApOworICAgICAgICAKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFu
Z2UpCisgICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgCisgICAg
ICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgICAg
IGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJh
Y3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfQorICAg
IAorICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2
ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVX
aXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKKyAg
ICAKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2Uu
Z2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRl
bUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3Rl
ZFJhbmdlXSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxp
Z2h0UmFuZ2U7CisKKyAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3Vu
ZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBu
aWwgfTsKKyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hh
cmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5n
dGgpLCBuaWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAor
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorfQorCitzdGF0aWMgdm9pZCBleHBh
bmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24sIE5TSW50ZWdl
ciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRC
ZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBzaXplX3Qgb3JpZ2luYWxMZW5ndGgg
PSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlv
bkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOworICAgIAorICAgIGNoYXJhY3Rl
cnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExl
bmd0aDsKKyAgICAKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOm51bWJlck9m
Q2hhcmFjdGVyc1RvRXhwYW5kXTsKKyAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IHNlbGVj
dGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJzQWRkZWRCZWZv
cmVTdGFydDsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3N0ZDo6dHVw
bGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0Zv
clBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKK3sKKyAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQorICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5n
IGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgaWYgKCFzZWxlY3Rp
b24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBAIiIsIG5p
bCB9OworCisgICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9yTG9va3VwID0g
YWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKKworICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBn
b2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBw
b2ludC4KKyAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJp
bmddLmxlbmd0aDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSAw
OworICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7CisgICAgZXhwYW5k
U2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwgMjUwLCBjaGFy
YWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpOworCisgICAg
YXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBzdHJpbmddOwor
ICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRkZWRCZWZvcmVT
dGFydCwgMCk7CisKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NS
Vkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5nIHNlbGVjdGVk
UmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKKyAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gaXRlbS5n
ZXQoKS5oaWdobGlnaHRSYW5nZTsKKyAgICAKKyAgICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRp
b24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmls
IH07CisKKyAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRvUGFzcy5sb2Nh
dGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOworICAgIE5TSW50ZWdlciBsb29rdXBBZGRl
ZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFuZ2UubGVuZ3Ro
KSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKKworICAgIFtzZWxl
Y3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07CisgICAgW3Nl
bGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsKKworICAgIEFT
U0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFpblRleHRTdHJp
bmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOworICAgIHJldHVybiB7IHNl
bGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIHJldHVybiB7IEAiIiwgbmlsIH07Cit9CisKK3N0YXRpYyBXS1JldmVhbENvbnRyb2xs
ZXIgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0
aW9uQ29udHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVw
SW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRv
ciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0
aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJh
Y2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSB8fCAhZ2V0UlZQcmVzZW50ZXJDbGFzcygpKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+
IG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGlu
aXRdKTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGljdGlvbmFyeVBvcHVwSW5m
by5vcHRpb25zLmdldCgpKQorICAgICAgICBbbXV0YWJsZU9wdGlvbnMgYWRkRW50cmllc0Zyb21E
aWN0aW9uYXJ5Om9wdGlvbnNdOworCisgICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvcik7CisgICAgCisg
ICAgUmV0YWluUHRyPFJWUHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY1JWUHJl
c2VudGVySW5zdGFuY2UoKSBpbml0XSk7CisgICAgCisgICAgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7
CisgICAgTlNQb2ludCBwb2ludGVyTG9jYXRpb247CisgICAgCisgICAgaWYgKHRleHRJbmRpY2F0
b3IuZ2V0KCkuY29udGVudEltYWdlKCkpIHsKKyAgICAgICAgdGV4dEluZGljYXRvckluc3RhbGxh
dGlvbkNhbGxiYWNrKHRleHRJbmRpY2F0b3IuZ2V0KCkpOworCisgICAgICAgIEZsb2F0UmVjdCBm
aXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRS
ZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKVswXTsKKyAgICAgICAgRmxvYXRSZWN0IHRl
eHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4
dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBGbG9hdFJlY3Qg
c2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdl
dCgpLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykgeworICAgICAgICAgICAg
dGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJz
aW9uQ2FsbGJhY2sodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAg
ICAgIHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1Zp
ZXdDb252ZXJzaW9uQ2FsbGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0
ZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmaXJzdFRleHRSZWN0SW5WaWV3Q29v
cmRpbmF0ZXMubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlv
bigpKTsKKyAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmll
d0Nvb3JkaW5hdGVzOworICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBmaXJzdFRleHRSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgTlNQb2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdp
bjsKKyAgICAgICAgCisgICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5kaWNhdG9yLT5zZWxl
Y3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIHBvaW50ZXJMb2NhdGlv
biA9IFt2aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07Cisg
ICAgfQorICAgIAorICAgIFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+IHdlYkhpZ2hsaWdo
dCA9ICBhZG9wdE5TKFtbV2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aEhpZ2hsaWdo
dFJlY3Q6IGhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4dEluZGljYXRvci5n
ZXQoKS5jb250ZW50SW1hZ2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25hcnlQb3B1cEluZm8u
YXR0cmlidXRlZFN0cmluZy5nZXQoKV0pOworICAgIFJldGFpblB0cjxSVlByZXNlbnRpbmdDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdDb250ZXh0SW5zdGFuY2Uo
KSBpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9jYXRpb24gaW5WaWV3OnZp
ZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+KSB3
ZWJIaWdobGlnaHQuZ2V0KCldKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0g
YWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpkaWN0aW9uYXJ5UG9w
dXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVkUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgMCldKTsKKyAgICAKKyAgICBbd2ViSGlnaGxpZ2h0IHNldENsZWFyVGV4dEluZGlj
YXRvcjpbd2ViSGlnaGxpZ2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBjbGVhclRleHRJbmRp
Y2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcildIHsKKyAgICAgICAgaWYgKGNsZWFy
VGV4dEluZGljYXRvcikKKyAgICAgICAgICAgIGNsZWFyVGV4dEluZGljYXRvcigpOworICAgIH1d
OworICAgIAorICAgIGlmIChjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1
cm4gW3ByZXNlbnRlciBhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTppdGVtLmdldCgpIGRvY3Vt
ZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5p
bF07CisgICAgW3ByZXNlbnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0
Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICBy
ZXR1cm4gbmlsOworICAgIAorI2Vsc2UgLy8gUExBVEZPUk0oTUFDKQorICAgIAorICAgIFVOVVNF
RF9QQVJBTShjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZGlj
dGlvbmFyeVBvcHVwSW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHZpZXcpOworICAgIFVOVVNFRF9Q
QVJBTSh0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2spOworICAgIFVOVVNFRF9QQVJB
TShyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKGNs
ZWFyVGV4dEluZGljYXRvcik7CisgICAgCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKK30K
Kwordm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxi
YWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4
dEluZGljYXRvcikKK3sKKyAgICBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIo
ZmFsc2UsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRp
b25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xl
YXJUZXh0SW5kaWNhdG9yKSk7Cit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVw
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQorCitX
S1JldmVhbENvbnRyb2xsZXIgRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZv
clBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5T
VmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRl
eHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9h
dFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgcmV0dXJuIHNo
b3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJ
bmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9W
aWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOworfQor
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKSAv
LyBFTkFCTEUoUkVWRUFMKQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFy
eSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikKK3sKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworc3RkOjp0dXBs
ZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VB
dEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYpCit7CisgICAgcmV0dXJuIHsgbnVs
bHB0ciwgbmlsIH07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVWRUFMKQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXgg
NTEzOWJiNjY3N2YxNTNkODRiMzBlYmQwMjBhNjhlYmE4MGI1NjQxNS4uYWJmYWQ4ZTczODc4NWFj
MTk1Yzg1YWVhYmQ1YTk2MTkzMWE1ZTY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KQEAgLTM0LDYgKzM0LDggQEAK
ICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW1w
b3J0ICJEb2N1bWVudExvYWRlci5oIgorI2ltcG9ydCAiRWRpdG9yLmgiCisjaW1wb3J0ICJFZGl0
b3JDbGllbnQuaCIKICNpbXBvcnQgIkZpbGUuaCIKICNpbXBvcnQgIkZpbGVTeXN0ZW0uaCIKICNp
bXBvcnQgIkZyYW1lLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5
TG9va3VwLmgKaW5kZXggY2I2ZDUzZWI4ZjhjNGNmZDM4OTQ1N2Y1YmVhZTI4M2EzN2RhODE5Mi4u
ZjhmNzYxY2RjODFhZWJkM2RmMDg4MzdhMzIzMWMwOGYzNWE0ZmViOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaApAQCAtMjMsMTUgKzIzLDI1IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCiAKICNpbmNsdWRlICJE
aWN0aW9uYXJ5UG9wdXBJbmZvLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVB
Y3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQg
PHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAKIE9CSkNf
Q0xBU1MgTlNWaWV3OwogT0JKQ19DTEFTUyBQREZTZWxlY3Rpb247CiAKKyNpZiBQTEFURk9STShN
QUMpCit0eXBlZGVmIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IFdL
UmV2ZWFsQ29udHJvbGxlcjsKKyNlbHNlCit0eXBlZGVmIGlkIFdLUmV2ZWFsQ29udHJvbGxlcjsK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SGl0VGVzdFJlc3VsdDsKQEAgLTQ4LDggKzU4LDExIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwg
TlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0
SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRS
ZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51bGxw
dHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxwdHIp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGhpZGVQb3B1cCgpOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xs
ZXI+IGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZv
JiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248Rmxv
YXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayA9IG51
bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvciA9IG51bGxw
dHIpOworICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
V0tSZXZlYWxDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0
SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdU
Rjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNp
b25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dElu
ZGljYXRvciA9IG51bGxwdHIpOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTllNDQ3
NGE0OWZjYzliMDk1YjJmNGJkYTZjOWFlM2YzOGNmZTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rp
b25hcnlMb29rdXAubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzODggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgi
Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShSRVZFQUwpCi0KLSNpbXBvcnQgIkRvY3Vt
ZW50LmgiCi0jaW1wb3J0ICJFZGl0aW5nLmgiCi0jaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIK
LSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAi
SFRNTENvbnZlcnRlci5oIgotI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiUGFn
ZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9y
dCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQg
IlZpc2libGVTZWxlY3Rpb24uaCIKLSNpbXBvcnQgIlZpc2libGVVbml0cy5oIgotI2ltcG9ydCA8
UERGS2l0L1BERktpdC5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+Ci0jaW1w
b3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+
Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9SZXZlYWxTUEkuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09i
akNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0KLUBpbnRlcmZhY2UgV2Vi
UmV2ZWFsSGlnaGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0
IHsKLUBwcml2YXRlCi0gICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOwot
ICAgIE5TUmVjdCBfaGlnaGxpZ2h0UmVjdDsKLSAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0
OwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7Ci1AcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
U3RyaW5nOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3Qp
aGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGln
aHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJp
bmc7Ci0tICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNs
ZWFyVGV4dEluZGljYXRvcjsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGln
aGxpZ2h0Ci0KLUBzeW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7Ci1Ac3lu
dGhlc2l6ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHN5bnRo
ZXNpemUgYXR0cmlidXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVs
dEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5T
QXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX2hpZ2hsaWdo
dFJlY3QgPSBoaWdobGlnaHRSZWN0OwotICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVm
YXVsdEhpZ2hsaWdodDsKLSAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7
Ci0gICAgCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNh
dG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCi17Ci0gICAgX2NsZWFy
VGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKLX0KLQotLSAoTlNB
cnJheTxOU1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNv
bnRleHQgcmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNv
bnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICByZXR1cm4gQFtbTlNWYWx1ZSB2
YWx1ZVdpdGhSZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOwotfQotCi0tICh2b2lkKXJldmVhbENv
bnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJW
SXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgCi0gICAgZm9yIChO
U1ZhbHVlICpyZWN0VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7Ci0gICAgICAgIE5T
UmVjdCByZWN0ID0gcmVjdFZhbC5yZWN0VmFsdWU7Ci0KLSAgICAgICAgLy8gR2V0IGN1cnJlbnQg
Zm9udCBhdHRyaWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRk
IHBhcmFncmFwaCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCi0gICAg
ICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRy
aWJ1dGVkU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5h
dHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pXV0pOwotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
UGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhT
dHlsZSBhbGxvY10gaW5pdF0pOwotICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1Rl
eHRBbGlnbm1lbnRDZW50ZXJdOwotICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdy
YXBoLmdldCgpIGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAgCi0g
ICAgICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRT
dHJpbmcgc3RyaW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKLSAgICAgICAgW3N0
cmluZyBkcmF3SW5SZWN0OnJlY3RdOwotICAgIH0KLX0KLQotLSAoQk9PTClyZXZlYWxDb250ZXh0
OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0
Rm9ySXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAg
ICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdo
dDsKLX0KLQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29u
dGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9Q
QVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgYXV0byBibG9jayA9
IFdURk1vdmUoX2NsZWFyVGV4dEluZGljYXRvcik7Ci0gICAgaWYgKGJsb2NrKQotICAgICAgICBi
bG9jaygpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkp
Ci0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0
ZWRSYW5nZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBTaW5j
ZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFi
IHRoZSByZXR1cm5lZCBvcHRpb25zLgotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rp
b24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlz
aWJsZUVuZCgpOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUg
c3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQg
PSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaEVu
ZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0KLSAgICBpbnQgbGVuZ3RoVG9TZWxl
Y3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlv
bkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtl
UmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5n
dGhUb1NlbGVjdGlvblN0YXJ0KTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0
ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBT
dHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwot
ICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNl
KCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwot
ICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwot
ICAgIAotICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJS
YW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5p
bCB9OwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci19Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNE
aWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJl
cigpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8qIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhl
cmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBo
aXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKLQotICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9y
UG9pbnQoZnJhbWVQb2ludCk7Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBw
b3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLQotICAgIGF1dG8g
c2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgTlNSYW5nZSBzZWxlY3Rpb25S
YW5nZTsKLSAgICBpbnQgaGl0SW5kZXg7Ci0gICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVy
UmFuZ2U7Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJs
ZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQg
PSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotICAgICAgICAKLSAgICAgICAgLy8gQXMgY29udGV4
dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0
LgotICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rp
b25TdGFydCk7Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2Vs
ZWN0aW9uRW5kKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0
ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1
dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uRW5kKTsKLSAgICAgICAgCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5n
ZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVj
dGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRv
U2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5n
ZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAg
ICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9Owot
ICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVs
YXJpdHkoV29yZEdyYW51bGFyaXR5KTsKLSAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2Nv
dW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFy
ZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRo
ZSBwb2ludC4KLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3Vu
ZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBu
aWwgfTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7Ci0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9u
KS5nZXQoKSk7Ci0gICAgfQotICAgIAotICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRS
VlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFu
Z2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRh
dGVTZWxlY3Rpb246bmlsXTsKLSAgICAKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4
dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0g
PSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcg
c2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5n
ZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0UmFuZ2Uu
bG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQotICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0
b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9u
LCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAot
fQotCi1zdGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9u
ICpzZWxlY3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRl
Z2VyJiBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRk
ZWRBZnRlckVuZCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBz
aXplX3Qgb3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKLSAgICBbc2Vs
ZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRd
OwotICAgIAotICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmlu
Zy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aDsKLSAgICAKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNl
bGVjdGlvbkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICBjaGFyYWN0ZXJz
QWRkZWRBZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGgg
LSBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci19Ci0KLXN0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlv
bikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFn
ZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAg
IC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9p
bnQuCi0gICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQotICAg
ICAgICByZXR1cm4geyBAIiIsIG5pbCB9OwotCi0gICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4g
c2VsZWN0aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKLQotICAgIC8v
IEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBi
ZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3Nl
bGVjdGlvbkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVy
c0FkZGVkQmVmb3JlU3RhcnQgPSAwOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRl
ckVuZCA9IDA7Ci0gICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxv
b2t1cC5nZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0Fk
ZGVkQWZ0ZXJFbmQpOwotCi0gICAgYXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlv
bkZvckxvb2t1cCBzdHJpbmddOwotICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShj
aGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7Ci0KLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBp
dGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxh
aW5UZXh0U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGV4
dHJhY3RlZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICBpZiAo
ZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHsg
c2VsZWN0aW9uLnN0cmluZywgbmlsIH07Ci0KLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZv
cmUgPSByYW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOwotICAg
IE5TSW50ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsg
ZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFs
TGVuZ3RoKTsKLQotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBB
ZGRlZEJlZm9yZV07Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBB
ZGRlZEFmdGVyXTsKLQotICAgIEFTU0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJp
bmc6W2Z1bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdl
XV0pOwotICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci19Ci0KLXN0
YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBzaG93UG9wdXBP
ckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVy
LCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcg
KnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5k
aWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0
KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJs
ZU9wdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwot
ICAgIGlmIChOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlv
bnMuZ2V0KCkpCi0gICAgICAgIFttdXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25h
cnk6b3B0aW9uc107Ci0KLSAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpj
cmVhdGUoZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKTsKLSAgICAKLSAgICBSZXRh
aW5QdHI8UlZQcmVzZW50ZXI+IHByZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJ
bnN0YW5jZSgpIGluaXRdKTsKLSAgICAKLSAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKLSAgICBO
U1BvaW50IHBvaW50ZXJMb2NhdGlvbjsKLSAgICAKLSAgICBpZiAodGV4dEluZGljYXRvci5nZXQo
KS5jb250ZW50SW1hZ2UoKSkgewotICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2Fs
bGJhY2sodGV4dEluZGljYXRvci5nZXQoKSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4
dFJlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcygpWzBdOwotICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRp
bmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rp
b25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2Vs
ZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAgICAgICAKLSAgICAgICAgaWYg
KHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB0ZXh0Qm91
bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxs
YmFjayh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICAgICAgc2Vs
ZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZl
cnNpb25DYWxsYmFjayhzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRl
cy5tb3ZlQnkodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwot
ICAgICAgICBoaWdobGlnaHRSZWN0ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRp
bmF0ZXM7Ci0gICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29y
ZGluYXRlcy5sb2NhdGlvbigpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBOU1Bv
aW50IHRleHRCYXNlbGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOwotICAg
ICAgICAKLSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3Zp
ZXcgY29udmVydFBvaW50OnRleHRCYXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKLSAgICB9Ci0g
ICAgCi0gICAgUmV0YWluUHRyPFdlYlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFk
b3B0TlMoW1tXZWJSZXZlYWxIaWdobGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDog
aGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNv
bnRlbnRJbWFnZSgpIGF0dHJpYnV0ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1
dGVkU3RyaW5nLmdldCgpXSk7Ci0gICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNv
bnRleHQgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRX
aXRoUG9pbnRlckxvY2F0aW9uSW5WaWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdo
bGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hs
aWdodC5nZXQoKV0pOwotICAgIAotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5T
KFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8u
YXR0cmlidXRlZFN0cmluZy5nZXQoKS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgw
LCAwKV0pOwotICAgIAotICAgIFt3ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3
ZWJIaWdobGlnaHQgPSBXVEZNb3ZlKHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9
IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKV0gewotICAgICAgICBpZiAoY2xlYXJUZXh0SW5k
aWNhdG9yKQotICAgICAgICAgICAgY2xlYXJUZXh0SW5kaWNhdG9yKCk7Ci0gICAgfV07Ci0gICAg
Ci0gICAgaWYgKGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBbcHJl
c2VudGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250
ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAg
ICBbcHJlc2VudGVyIHJldmVhbEl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHBy
ZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIHJldHVybiBu
aWw7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBuaWw7Ci19
Ci0KLXZvaWQgRGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1
cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRl
eHRJbmRpY2F0b3IpCi17Ci0gICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVy
KGZhbHNlLCBkaWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0
aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNs
ZWFyVGV4dEluZGljYXRvcikpOwotfQotCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1
cCgpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgaWYgKCFnZXRM
VUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgW2dl
dExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkgaGlkZURlZmluaXRpb25dOwotCi0gICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlcj4gRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZv
clBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5T
VmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRl
eHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9h
dFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgcmV0dXJuIHNo
b3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcih0cnVlLCBkaWN0aW9uYXJ5UG9wdXBJ
bmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJvb3RWaWV3VG9W
aWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcikpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDE0M2YxNmM5OTJmNjM3
OTAyNTI5NGJjNjcyZjQxZWRmYTM0MGE0NDQuLjIzMjM3OTY5ZmQzNTQyNmZlZWU5M2UwMDg1ZWVk
OTc3ZjQ0MGQ5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5o
CkBAIC03MzMsNiArNzMzLDkgQEAgc3RydWN0IF9VSVdlYlRvdWNoRXZlbnQgewogICAgIGJvb2wg
aXNQb3RlbnRpYWxUYXA7CiB9OwogCitAaW50ZXJmYWNlIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25p
emVyIDogVUlHZXN0dXJlUmVjb2duaXplcgorQGVuZAorCiBAY2xhc3MgVUlXZWJUb3VjaEV2ZW50
c0dlc3R1cmVSZWNvZ25pemVyOwogCiBAcHJvdG9jb2wgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVS
ZWNvZ25pemVyRGVsZWdhdGUgPE5TT2JqZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQppbmRleCBmNTY4NzVkZmYzYTFjYzQ1ZWJl
ZTYxNzIxNWNlOTU3MjNmNTNkZTRlLi42NWFlY2Q5MjE5MmZlNjY2MWYxYmFhNDJkMzQwNzg2Y2U0
ZDFkNTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdl
UHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdl
UHJveHlDb2NvYS5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgog
I2ltcG9ydCAiU2FmZUJyb3dzaW5nU1BJLmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdXYXJuaW5n
LmgiCisjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94
eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgpAQCAtMTg5LDUgKzE5MCwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxh
dGZvcm1DbG9uZUF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNobWVudD4mJiBmcm9tQXR0YWNobWVu
dAogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICAKK3ZvaWQg
V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOworfQogCit2
b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rp
b24oKQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
T2ZDdXJyZW50U2VsZWN0aW9uKCksIG1fcGFnZUlEKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLmgKaW5kZXggYTgwN2NjZDJmYWNmZTc4Y2Y5MTRiZGY0M2VkMjQ5N2FkY2M4
ZmM4Yy4uZGEyNjMzMjIxNDY3OWZkOTFjYzU0ZDBmYzg0ZWM4MjMwNzdlNGQ4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaApAQCAtODcsNiArODcsNyBAQCBjbGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclBy
b3h5OwogY2xhc3MgV2ViUGFnZVByb3h5OwogfQogCitAY2xhc3MgX1VJTG9va3VwR2VzdHVyZVJl
Y29nbml6ZXI7CiBAY2xhc3MgX1VJSGlnaGxpZ2h0VmlldzsKIEBjbGFzcyBfVUlXZWJIaWdobGln
aHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBVSUhvdmVyR2VzdHVyZVJlY29n
bml6ZXI7CkBAIC0yMTUsNiArMjE2LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsK
IAogI2lmIFBMQVRGT1JNKElPU01BQykKICAgICBSZXRhaW5QdHI8VUlIb3Zlckdlc3R1cmVSZWNv
Z25pemVyPiBfaG92ZXJHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8X1VJTG9va3Vw
R2VzdHVyZVJlY29nbml6ZXI+IF9sb29rdXBHZXN0dXJlUmVjb2duaXplcjsKICNlbmRpZgogCiAg
ICAgUmV0YWluUHRyPFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQ+IF90ZXh0U2VsZWN0aW9u
QXNzaXN0YW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggNjBjZmI4ZjI0ZDljNjBhM2UzMjIwOTlkMjhm
MjVmNTAwY2NlNDM2ZC4uYWJiMDRhNGRhN2VkMWY0MTU0MDBmMWNiYmZlMzgyY2EzYjVmYTg5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLm1tCkBAIC0xMTIsNiArMTEyLDcgQEAKICNpZiBQTEFURk9STShJT1NNQUMp
CiAjaW1wb3J0ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW1wb3J0IDxVSUtpdC9VSUhvdmVy
R2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJS2l0L19VSUxvb2t1cEdlc3R1cmVSZWNv
Z25pemVyLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CiAj
ZW5kaWYKIApAQCAtNjQ5LDYgKzY1MCwxMSBAQCAtICh2b2lkKXNldHVwSW50ZXJhY3Rpb24KICAg
ICBfaG92ZXJHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSUhvdmVyR2VzdHVyZVJlY29n
bml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfaG92ZXJH
ZXN0dXJlUmVjb2duaXplckNoYW5nZWQ6KV0pOwogICAgIFtfaG92ZXJHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpzZWxmXTsKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92
ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgCisgICAgX2xvb2t1cEdlc3R1cmVSZWNv
Z25pemVyID0gYWRvcHROUyhbW19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0
V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVk
OildKTsKKyAgICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwor
ICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5n
ZXQoKV07CisgICAgCiAjZW5kaWYKIAogICAgIF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciA9
IGFkb3B0TlMoW1tXS1N5bnRoZXRpY0NsaWNrVGFwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGlu
aXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2luZ2xlVGFwQ29tbWl0ZWQ6KV0p
OwpAQCAtNzU5LDYgKzc2NSw5IEBAIC0gKHZvaWQpY2xlYW51cEludGVyYWN0aW9uCiAjaWYgUExB
VEZPUk0oSU9TTUFDKQogICAgIFtfaG92ZXJHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpu
aWxdOwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNv
Z25pemVyLmdldCgpXTsKKyAgICAKKyAgICBbX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyIHNldERl
bGVnYXRlOm5pbF07CisgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdl
c3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogCiAgICAgW19zaW5nbGVUYXBHZXN0dXJl
UmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwpAQCAtODQ2LDYgKzg1NSw3IEBAIC0gKHZvaWQp
X3JlbW92ZURlZmF1bHRHZXN0dXJlUmVjb2duaXplcnMKICAgICBbc2VsZiByZW1vdmVHZXN0dXJl
UmVjb2duaXplcjpfc3R5bHVzU2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2lm
IFBMQVRGT1JNKElPU01BQykKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92
ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29n
bml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBAIC04
NjEsNiArODcxLDcgQEAgLSAodm9pZClfYWRkRGVmYXVsdEdlc3R1cmVSZWNvZ25pemVycwogICAg
IFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9zdHlsdXNTaW5nbGVUYXBHZXN0dXJlUmVjb2du
aXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtzZWxmIGFkZEdlc3R1cmVS
ZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICBbc2VsZiBhZGRH
ZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlm
CiB9CiAKQEAgLTE0NjcsNiArMTQ3OCwxMCBAQCAtIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihV
SUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaQogCiAg
ICAgaWYgKFtnZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJl
Y29nbml6ZXIgY2xhc3NdXSB8fCBbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNz
OltVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFlFUzsK
KyAgICAKKyAgICBpZiAoKFtnZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29r
dXBHZXN0dXJlUmVjb2duaXplciBjbGFzc11dICYmIFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlz
S2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkgfHwgKFtv
dGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIgY2xhc3NdXSAmJiBbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJ
TG9va3VwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkpCisgICAgICAgIHJldHVybiBZRVM7CisK
ICNlbmRpZgogICAgIGlmIChpc1NhbWVQYWlyKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1
cmVSZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCks
IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50LmdldCgpLmZvcmNlUHJlc3NHZXN0dXJlKSkKICAgICAg
ICAgcmV0dXJuIFlFUzsKQEAgLTYwNTcsNiArNjA3MiwxMiBAQCAtIChCT09MKWFsbG93c0RpY3Rh
dGlvbklucHV0Rm9yTGlzdFZpZXdDb250cm9sbGVyOihQVUlDUXVpY2tib2FyZFZpZXdDb250cm9s
bGVyCiAjZW5kaWYgLy8gUExBVEZPUk0oV0FUQ0hPUykKIAogI2lmIFBMQVRGT1JNKElPU01BQykK
Ky0gKHZvaWQpX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVkOihVSUdlc3R1cmVSZWNvZ25pemVyICop
Z2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBOU1BvaW50IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0
ZXMgPSBbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRpb25JblZpZXc6c2VsZl07CisgICAgX3BhZ2Ut
PnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KGxv
Y2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKTsKK30KKwogLSAodm9pZClfaG92ZXJHZXN0dXJlUmVj
b2duaXplckNoYW5nZWQ6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgog
ewogICAgIGlmICghX3BhZ2UtPmlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IGI0NzNmMDgxYTUwNzVlNDQzY2NlMzliNWRj
Mzc4NTRiZDY4ZDg2ZjIuLjI3OTVmNzMwYmJmZWM2MmU0NGY1NGY2YTgwOWM4MmJhYjYzM2QzNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpA
QCAtMTIxLDExICsxMjEsNiBAQCBib29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21Q
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2Vi
UGFnZVByb3h5OjpnZXN0dXJlQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50
LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBm
bGFncywgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Nh
bGxiYWNrcy50YWtlPEdlc3R1cmVDYWxsYmFjaz4oY2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQppbmRleCBmZmZjNWUwOGExNjcw
YTBjYWYxNTNlYzcwZmE3MjAyMTcyMGU1YjdhLi5lMmFiMjljMmI1YzY3MTc1ODQ2MzdiM2I3YWVj
YzIwOGI3NjM2ODY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2Vi
UGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0KQEAgLTMyMywyMiArMzIzLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBy
b21pc2VkRGF0YUZvckltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFMK
IAogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFp
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3Bh
Z2VJRCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9m
Q3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7Ci19Ci0KIC8vIENvbXBs
ZXggdGV4dCBpbnB1dCBzdXBwb3J0IGZvciBwbHVnLWlucy4KIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRl
eCAzZTc5NDMxZjkzNzExNGM0MWY5ZDJkZmQ1OGUwYjRmNzIxODE1OWE2Li5hMzhjZDJiZjYzNzk0
YzhlOWYxZDIxMmEzZTc4YjNlOGM0ZWY4YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC0yNiw5ICsyNiwy
MCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAKKwogI2ltcG9y
dCAiTG9hZFBhcmFtZXRlcnMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldl
YlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFu
ZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTENvbnZlcnRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL05vZGVSZW5kZXJTdHlsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Q
bGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxl
bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogCkBAIC01OSw2ICs3MCwxMTQgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QWN0aXZl
Tm93UGxheWluZ1Nlc3Npb25JbmZvKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIAogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Tm93UGxheWluZ0luZm9DYWxsYmFjayhoYXNBY3RpdmVT
ZXNzaW9uLCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlv
biwgZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKIH0KKyAgICAK
K3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIGZsb2F0UG9pbnQpCit7CisgICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVn
aW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChwbHVn
aW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRo
ZSBwb2ludCBpcyBvdmVyLgorICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWlu
RnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5G
cmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2lu
dCkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9u
czsKKyAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/
IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UoKmZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpCb3VuY2UpOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRp
b25UcmFuc2l0aW9uKQoreworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKKyAgICBO
U0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9u
cykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOworICAg
IGlmIChzZWxlY3RlZFJhbmdlKQorICAgICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJh
bmdlKGZyYW1lLCAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlv
bik7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRT
ZWxlY3Rpb24oKQoreworICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNl
bGVjdGlvbihmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworfQorICAgIAor
dm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFt
ZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9u
YXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25U
cmFuc2l0aW9uKSkpOworfQorCitEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9u
YXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50
YXRpb25UcmFuc2l0aW9uKQoreworICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7
CisgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CisgICAg
CisgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIGlmIChy
YW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRv
ci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
IGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOworICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBpZiAocXVh
ZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAg
fQorICAgIAorICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1Rv
V2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIAorICAgIGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUo
KTsKKyAgICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygp
LmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkgOiAwOworICAgIGRpY3Rpb25hcnlQb3B1cElu
Zm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2Nh
bGVkQXNjZW50KTsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOwor
CisjaWYgUExBVEZPUk0oTUFDKQorCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0
ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVk
ZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOworICAgIAorICAgIFJldGFpblB0cjxOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0
cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CisgICAgCisgICAgTlNGb250TWFuYWdlciAqZm9udE1h
bmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgCisgICAgW25z
QXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgw
LCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNE
aWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAg
ICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRv
cHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOworICAgICAgICAKKyAgICAgICAgTlNGb250
ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5h
bWVdOworICAgICAgICBpZiAoZm9udCkKKyAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIg
Y29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3Io
KV07CisgICAgICAgIGlmIChmb250KQorICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0
T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAKKyAgICAg
ICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0
ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOworICAgIH1dOworCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorICAgIAorICAgIFRleHRJbmRpY2F0b3JPcHRpb25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0
SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxl
eFJhbmdlczsKKyAgICBpZiAocHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQorICAgICAgICBpbmRp
Y2F0b3JPcHRpb25zIHw9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2Vs
ZWN0aW9uSGlnaGxpZ2h0OworICAgIAorICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5k
aWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JP
cHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKKyAgICBpZiAoIXRleHRJbmRpY2F0b3Ip
IHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2Up
OworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAg
ZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgp
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRT
dHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorICAgIAorICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNl
KTsKKyAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCmluZGV4IDEyN2Q4NDExMWU3MzBmNWYwMjRiNGM0ZTg3OTFhMjk5OGMy
YjliYjguLjUwNTJlMDQzYmI3MjFhMTJiMzhiZTgzMDNiYmU2MzliOWQ5Yjc2MmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgpAQCAtMTg5LDE3ICsxODksMTQgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZl
ciB7CiAgICAgUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lU2NyaXB0V29ybGQoU3RyaW5nIHNjcmlw
dCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlLCBTdHJpbmcgd29ybGROYW1lLCBXZWJLaXQ6OkNhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKICAgICBGb3JjZVJlcGFpbnQoV2ViS2l0OjpDYWxsYmFja0lEIGNh
bGxiYWNrSUQpCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAjIERpY3Rpb25hcnkgc3VwcG9y
dC4KLSAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQ
b2ludCBwb2ludCkKLSNlbmRpZgotCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQogICAgIERl
dGVjdERhdGFJbkFsbEZyYW1lcyh1aW50NjRfdCB0eXBlcykgLT4gKHN0cnVjdCBXZWJLaXQ6OkRh
dGFEZXRlY3Rpb25SZXN1bHQgcmVzdWx0KSBBc3luYwogICAgIFJlbW92ZURhdGFEZXRlY3RlZExp
bmtzKCkgLT4gKHN0cnVjdCBXZWJLaXQ6OkRhdGFEZXRlY3Rpb25SZXN1bHQgcmVzdWx0KSBBc3lu
YwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
IyBEaWN0aW9uYXJ5IHN1cHBvcnQuCisgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24oKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZWFjNGY0ZmFhMzVkMWJj
MmZmYmQ5M2E1OWNmOGM3YjZkNDZlZjkyYi4uNmU1YTZkMTg4NWQ1ZDRiZjJlMzAyNDZhMDVlMmE4
YjYzNmYyOGI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxNywyMSArNDE3LDYgQEAgdm9pZCBXZWJQYWdlOjpzZW5k
Q29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24o
RnJhbWUmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdl
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiwgUmFuZ2UmLCBOU0RpY3Rp
b25hcnkgKiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2
aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNDczM2IxY2JmMmZlNDVjZDlkMGNlYTdl
ZWY5YmM3YzM4YWZhZjdlNC4uZmE3YTZhYWYxYjYwYmRhOTBkY2QwNzliYTFhOTQzNmYxMjE2YjBk
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KQEAgLTM4OSwxMDIgKzM4OSw3IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2VsZWN0
aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxiYWNrKGZvbnROYW1lLCBmb250U2l6ZSwgc2VsZWN0aW9u
SGFzTXVsdGlwbGVGb250cywgY2FsbGJhY2tJRCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQ
b2ludCkKLXsKLSAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgm
bV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KLSAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRv
d1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUocmFu
Z2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVz
dWx0KTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBmcmFt
ZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0aW9u
cywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Ci19Ci0KLXZv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZy
YW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAgICBz
dGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBv
cHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLX0KIAotdm9pZCBXZWJQYWdlOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgYXV0byYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJv
dW5jZUFuZENyb3NzZmFkZSk7Ci19Ci0KLURpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGlj
dGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0
b3IoKTsKLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsK
LQotICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBpZiAo
cmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0
b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVy
biBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1
YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBpZiAocXVhZHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJ
bmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQot
Ci0gICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
cXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0KLSAgICBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7Ci0gICAgZmxv
YXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAq
IHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9
IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7
Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKLQotICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsK
LQotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJp
YnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7Ci0KLSAgICBOU0Zv
bnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2Vy
XTsKLQotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNp
bmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAq
c3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0
cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLQotICAgICAgICBO
U0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGlmIChmb250KQotICAgICAgICAgICAgZm9udCA9IFtmb250TWFu
YWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZh
Y3RvcigpXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRl
cyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAg
W3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMu
Z2V0KCkgcmFuZ2U6cmFuZ2VdOwotICAgIH1dOwotCi0gICAgVGV4dEluZGljYXRvck9wdGlvbnMg
aW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQ
YWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOwotICAgIGlmIChwcmVzZW50YXRpb25UcmFu
c2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRD
cm9zc2ZhZGUpCi0gICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9wdGlv
bkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7Ci0KLSAgICBSZWZQdHI8VGV4
dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5n
ZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAg
aWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9u
YXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87
Ci0gICAgfQotCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dElu
ZGljYXRvci0+ZGF0YSgpOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmlu
ZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZzsKLQotICAgIGVkaXRvci5zZXRJc0dldHRpbmdE
aWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5m
bzsKLX0KIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCkBAIC01MzksMTEgKzQ0NCw2IEBA
IERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclNlbGVj
dGlvbkluUERGUGx1Z2luKFBERlNlbGVjCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5T
RGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24g
cHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5n
ZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Ci19Ci0K
IGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIC8vIEZpcnN0
IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5jZSB0byBoYW5kbGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356039</attachid>
            <date>2018-11-29 13:11:57 -0800</date>
            <delta_ts>2018-11-29 13:48:17 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191732-20181129131156.patch</filename>
            <type>text/plain</type>
            <size>75578</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Njg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhiYzAzMjJkNTNkNDBi
OWUyZWY3MGUyMjIxMWVlM2NhNDgwYTJkYi4uZDllYzM0NTMzOTM0ZjZkNTI1MGM5NzIwZjQ4YTk3
NzkwZTNjZGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTI5ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE5vdCBjdXJyZW5sdHkgdGVzdGFibGUK
KworICAgICAgICBEaWN0aW9uYXJ5TG9va3VwIHVzZXMgUmV2ZWFsIG5vdywgd2hpY2ggaXMgc2xh
dGVkIHRvIGJlIGNyb3NzLXBsYXRmb3JtLgorICAgICAgICBUaGF0IHBhdGNoIGdhdGVzIHRoZSBw
YXJ0cyBvZiBEaWN0aW9uYXJ5TG9va3VwIHRoYXQgY3VycmVudGx5IGRvIG5vdCBoYXZlCisgICAg
ICAgIGFuIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbiBvbiBpT1MuIE9uY2UgUmV2ZWFsIGlzIHJl
YWR5LCB0aGlzIGNvZGUgd2lsbCBiZQorICAgICAgICByZXBsYWNlZCBvciBleHBhbmRlZCB1cG9u
LCBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cCk6CisgICAgICAgIChXZWJD
b3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKToKKwogMjAxOC0xMS0y
OSAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CiAKICAgICAgICAg
Q1NTIFBhaW50aW5nIEFQSSBzaG91bGQgcGFzcyAndGhpcycgY29ycmVjdGx5IHRvIHBhaW50IGNh
bGxiYWNrLCBhbmQgcmVwYWludCB3aGVuIHByb3BlcnRpZXMgY2hhbmdlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cKaW5kZXggYTQ1ODI3YmNjZDMzM2ZhMjU4OWY5NDE4MGQ0MjhmYWI2MTg0NDhjZC4uYjAwNTc1
NWExMDBhOTliNmQ5NTUzNGEyNGEyYjAyZmFlOGIyYjVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMjkgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVy
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3Mg
cGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgKiBwYWwvc3BpL21hYy9Mb29rdXBTUEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaDoKKwogMjAxOC0xMS0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm5pemUgdGhlIGNoZWNrIGZvciBrQ0ZVUkxSZXF1ZXN0
Q29udGVudERlY29kZXJTa2lwVVJMQ2hlY2sgZXhpc3RlbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzNDEyZGJl
MTIxOTRjYTM2YTMxZDg2NjMzYWZkZTQzOWU0MWM2MDMuLmEzOTQ3YWRiZTBhYWMwN2RlMjQ4ZGU3
Yjg2OGU1OWQzYTMyYzVjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMjkg
IE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3Zl
IExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgTG9va3VwIGlzIGJlaW5nIHJl
cGxhY2VkIGJ5IFJldmVhbC4gVGhpcyBmcmFtZXdvcmsgc2hvdWxkIHdvcmsgb24gYWxsIHBsYXRm
b3Jtcy4KKyAgICAgICAgVGhlIHBhdGNoIG1vdmVzIHRoZSBjb2RlIHRoYXQgd2UgZXhwZWN0IHdp
bGwgYmUgbmVlZGVkIGZvciBhbGwgcGxhdGZvcm1zIHRvIHRoZSBtb3JlCisgICAgICAgIGdlbmVy
YWwgY29jb2EgYXJlYS4gVGhpcyBwYXRjaCBjaGFuZ2VzIG5vIGZ1bmNhdGlvbmFsaXR5LCBhbmQg
c2hvdWxkIG5vdCBjaGFuZ2UKKyAgICAgICAgYW55dGhpbmcgY3VycmVudGx5LiBUaGlzIHdvcmsg
d2lsbCBiZSBidWlsZCBvbiBsYXRlciB3aGVuIFJldmVhbCBpcyByZWFkeSB0byBzdXBwb3J0Cisg
ICAgICAgIG11bHRpcGxlIHBsYXRmb3Jtcy4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3Mv
VUlLaXRTUEkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1
cEludGVyYWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2xlYW51cEludGVyYWN0
aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3JlbW92ZURlZmF1bHRHZXN0dXJlUmVj
b2duaXplcnNdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYWRkRGVmYXVsdEdlc3R1cmVS
ZWNvZ25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGdlc3R1cmVSZWNvZ25pemVy
OnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9sb29rdXBHZXN0dXJlUmVjb2duaXplZDpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5m
b0ZvclJhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwT2ZDdXJyZW50U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisK
IDIwMTgtMTEtMjkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAg
ICAgTW9kZXJuaXplIHRoZSBjaGVjayBmb3Iga0NGVVJMUmVxdWVzdENvbnRlbnREZWNvZGVyU2tp
cFVSTENoZWNrIGV4aXN0ZW5jZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3ZjI0NjczZTUxNzM2OTdmNWNiY2U3ZWMzYTQ1MjE2
Y2Y0ODMxMTMuLmI4Y2MzNTg2M2NiZDJlZDU1Y2VkYTdjNTZhYzE4MjE5ODNlNDczOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQwNiw2ICs0MDYsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERCQzMxNyAvKiBQYXNzS2l0
U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8qIHB0aHJlYWRTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6Q29yZVNQSS5oICovLAor
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQk1NzBB
QjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAqLywKIAkJCQkwQzJEQTEz
QzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJCTBDMkRBMTJCMUYzQkVC
NDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00NzEsNyArNDcyLDYgQEAK
IAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEkuaCAqLywKIAkJCQlBMTAy
NjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8sCiAJCQkJMEM3Nzg1ODcx
RjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAotCQkJCTQ0Mjk1NkNDMjE4
QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3NUI0ODFGNkFGRjhFMDBD
NEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3Nzg1ODgxRjQ1MTMwRjAw
RjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRkMTA2ZjEyZTlkMjM3YzQ4ZmFl
MWI0NDY0YzI5MzNlYTU0MDMyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPG9iamMvcnVudGlt
ZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRl
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JL
KFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWxDb3JlKQorU09GVF9M
SU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09GVF9MSU5LX0NMQVNTX09Q
VElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZl
YWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIEVO
QUJMRShSRVZFQUwpCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxSZXZlYWwvUlZQcmVz
ZW50ZXIuaD4KKyNpbXBvcnQgPFJldmVhbC9SZXZlYWwuaD4KKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisjaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxD
b3JlL1JldmVhbENvcmUuaD4KKworI2Vsc2UgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKwor
CitAcHJvdG9jb2wgUlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZTsKKworQGludGVyZmFjZSBS
Vkl0ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJh
bmdlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7CitAZW5kCisKK0BpbnRlcmZhY2UgUlZTZWxl
Y3Rpb24gOiBOU09iamVjdAorKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6KE5TVUludGVn
ZXIpY2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXNlbGVj
dGVkUmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVwZGF0ZVNlbGVj
dGlvbjsKK0BlbmQKKworI2lmIFBMQVRGT1JNKE1BQykKK0BpbnRlcmZhY2UgUlZQcmVzZW50aW5n
Q29udGV4dCA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQb2ludGVyTG9jYXRp
b25JblZpZXc6KE5TUG9pbnQpcG9pbnRlckxvY2F0aW9uSW5WaWV3IGluVmlldzooTlNWaWV3ICop
dmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4p
aGlnaGxpZ2h0RGVsZWdhdGU7CitAZW5kCisjZW5kaWYKKworQHByb3RvY29sIFJWUHJlc2VudGVy
SGlnaGxpZ2h0RGVsZWdhdGUgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistIChOU0FycmF5IDxOU1Zh
bHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVj
dHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtOworQG9wdGlvbmFsCistICh2b2lkKXJldmVhbENvbnRl
eHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihS
Vkl0ZW0gKilpdGVtOworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0
ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtOworQGVuZAorCitAaW50
ZXJmYWNlIFJWRG9jdW1lbnRDb250ZXh0IDogTlNPYmplY3QgPCBOU1NlY3VyZUNvZGluZyA+CitA
ZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAorI2lmIFBMQVRGT1JNKE1B
QykKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0aW9u
Q29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3Vt
ZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50
aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9w
dGlvbnM7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorLSAoQk9PTClyZXZlYWxJdGVtOihSVkl0
ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENv
bnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5n
Q29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworQGVuZAorCisjZW5kaWYg
Ly8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIEVOQUJMRShSRVZFQUwpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmgKaW5kZXggZWI3Zjk1MWY3MWM3NWM4MTIx
N2IyMmU3OGFkYWQzMGU0ZDZhNWMwNC4uZTBhMzM3NWQzMGNjODg5ZjEzNWVhMmExMWQ0N2QwZGE5
NGY5OGE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1
cFNQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaApA
QCAtMjMsMTIgKzIzLDEzIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisKKyNpZiBQTEFURk9S
TShNQUMpCisKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMv
TlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2ltcG9ydCA8d3RmL1Nv
ZnRMaW5raW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCi0KIFNPRlRfTElOS19QUklWQVRFX0ZS
QU1FV09SS19PUFRJT05BTChMb29rdXApCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoTG9va3Vw
LCBMVUxvb2t1cERlZmluaXRpb25Nb2R1bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3Bp
L21hYy9SZXZlYWxTUEkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiOGRhNDJj
ODU5OTBhZTMyZWE2N2EwYWY3NzUzZjNkYjk4MjhhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2
ZWFsU1BJLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4K
LSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJT
UEkuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfUFJJVkFURV9G
UkFNRVdPUksoUmV2ZWFsKQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUp
Ci1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKLVNPRlRfTElO
S19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1TT0ZUX0xJTktf
Q0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NMQVNTX09QVElP
TkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKLQotI2ltcG9ydCA8UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwvUmV2
ZWFsLmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1wb3J0IDxSZXZl
YWxDb3JlL1JldmVhbENvcmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJWSXRlbSA6IE5T
T2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5T
U3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVT
SUdOQVRFRF9JTklUSUFMSVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5T
T2JqZWN0Ci0rIChOU1JhbmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0lu
ZGV4IHNlbGVjdGVkUmFuZ2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMg
c2hvdWxkVXBkYXRlU2VsZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOwotQGVu
ZAotCi1AaW50ZXJmYWNlIFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5TSW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJW
SXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50
Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRp
bmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChCT09MKXJldmVh
bEl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAq
KWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAq
KXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci1AZW5k
Ci0KLSNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IDA2M2RmZGMyMjg5NjNmYmFlNTk2MGUwMjRjYjhmMjRmZDM3YTVlZGEuLjA2MmNk
ZDdmMDdkNzBlMzBkOWYwNmYzMDU3M2Q2OTdmYmZmMTViNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtNzcsNiArNzcsNyBAQCBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAK
IGVkaXRpbmcvU21hcnRSZXBsYWNlQ0YuY3BwCiAKIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQorZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tCiBlZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0K
IGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtOTAsNyArOTEsNiBAQCBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAogZWRpdGluZy9pb3MvRWRpdG9ySU9T
Lm1tCiAKIGVkaXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQotZWRpdGlu
Zy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExl
Z2FjeS5tbQogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCiBlZGl0aW5nL21hYy9GcmFtZVNlbGVj
dGlvbk1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGQxNmQzMjZiNWU5MTdlYzNlZGU3ZTBhYTM1M2IyZWY3MzAyNmYyYmUu
LmQxOGNlNjBiMTc4YzFjYjFkZWYxZDM5YWFkZmNlNzc4YjM4ODg5ZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNTIzLDYg
KzIwNTIzLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUM1MjI3REVGMUMzQzZERDcwMEY1RUQ1
NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi8sCiAJCQkJQzUyMjdERjAxQzNDNkRENzAwRjVFRDU0IC8q
IERhdGFEZXRlY3Rpb24ubW0gKi8sCisJCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERp
Y3Rpb25hcnlMb29rdXAubW0gKi8sCiAJCQkJOUI1NUVFRTgxQjNFODg5ODAwNTM0MkJDIC8qIEVk
aXRvckNvY29hLm1tICovLAogCQkJCUY0MkNFQjU0MjE0MDMxRUUwMDJEQ0E3MiAvKiBGb250QXR0
cmlidXRlQ2hhbmdlc0NvY29hLm1tICovLAogCQkJCUY0OEQyQTc1MjE1NkZFNTcwMEM2NzUyQiAv
KiBGb250QXR0cmlidXRlc0NvY29hLm1tICovLApAQCAtMjYyMjksNyArMjYyMzAsNiBAQAogCQkJ
CUNFN0IyREFGMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIu
aCAqLywKIAkJCQlDRTdCMkRCMDE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyLm1tICovLAogCQkJCTkzN0ZGM0Q0MUExMDEyRDYwMDhFQkEzMSAvKiBEaWN0aW9u
YXJ5TG9va3VwLmggKi8sCi0JCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25h
cnlMb29rdXAubW0gKi8sCiAJCQkJNDQyOTU2Q0EyMThBNkQzMDAwODBEQjU0IC8qIERpY3Rpb25h
cnlMb29rdXBMZWdhY3kubW0gKi8sCiAJCQkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8qIEVk
aXRvck1hYy5tbSAqLywKIAkJCQk0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogRnJhbWVTZWxl
Y3Rpb25NYWMubW0gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ1ZDJlZmQ5ODQ5YzQzZGI1NTI2ZDdhZDZkM2M0
N2QxOTM0ODc3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKworI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkVkaXRp
bmcuaCIKKyNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNp
bXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCisjaW1w
b3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9y
dCAiUGFnZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgor
I2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKKyNp
bXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlZpc2libGVVbml0cy5oIgorI2lt
cG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9SZXZlYWxTUEku
aD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2Nr
T2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShS
RVZFQUwpCisKKyNpZiBQTEFURk9STShNQUMpCisKK0BpbnRlcmZhY2UgV2ViUmV2ZWFsSGlnaGxp
Z2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsKK0Bwcml2YXRl
CisgICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOworICAgIE5TUmVjdCBf
aGlnaGxpZ2h0UmVjdDsKKyAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0OworICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOworCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVj
dCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRl
ZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7CistICh2b2lk
KXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGlj
YXRvcjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxpZ2h0CisKK0Bz
eW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7CitAc3ludGhlc2l6ZSB1c2VE
ZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OworQHN5bnRoZXNpemUgYXR0cmli
dXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDoo
Qk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0
cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2hpZ2hsaWdodFJlY3QgPSBoaWdo
bGlnaHRSZWN0OworICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVsdEhpZ2hsaWdo
dDsKKyAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlv
bjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCit7CisgICAgX2NsZWFyVGV4dEluZGljYXRv
ciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKK30KKworLSAoTlNBcnJheTxOU1ZhbHVl
ICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVjdHNG
b3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOworfQorCistICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJl
c2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0K
K3sKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgCisgICAgZm9yIChOU1ZhbHVlICpyZWN0
VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7CisgICAgICAgIE5TUmVjdCByZWN0ID0g
cmVjdFZhbC5yZWN0VmFsdWU7CisKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9udCBhdHRyaWJ1
dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBhcmFncmFwaCBz
dHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCisgICAgICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5n
IGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRyaWJ1dGVkU3Ry
aW5nIGxlbmd0aF0pXV0pOworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5
bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10g
aW5pdF0pOworICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRD
ZW50ZXJdOworICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBoLmdldCgpIGZv
cktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07CisgICAgCisgICAgICAgIFJldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgc3RyaW5n
XSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKKyAgICAgICAgW3N0cmluZyBkcmF3SW5S
ZWN0OnJlY3RdOworICAgIH0KK30KKworLSAoQk9PTClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRp
bmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9ySXRlbTooUlZJ
dGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFS
QU0oaXRlbSk7CisgICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsKK30KKworLSAo
dm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGln
aGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0
KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgYXV0byBibG9jayA9IFdURk1vdmUoX2Ns
ZWFyVGV4dEluZGljYXRvcik7CisgICAgaWYgKGJsb2NrKQorICAgICAgICBibG9jaygpOworfQor
CitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyBFTkFCTEUoUkVW
RUFMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoUkVWRUFMKQorCitzdGQ6
OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpy
YW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVt
Q2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgYXV0
byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYg
KCFzZWxlY3RlZFJhbmdlKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAg
IC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBuZWVk
IHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9
IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVj
dGlvbi52aXNpYmxlRW5kKCk7CisKKyAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8g
dXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCisgICAgYXV0byBwYXJhZ3Jh
cGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8gcGFy
YWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKworICAgIGludCBsZW5n
dGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7CisgICAgaW50IGxlbmd0aFRv
U2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3Mg
PSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVu
ZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOworICAgIAorICAgIFJlZlB0cjxSYW5nZT4gZnVs
bENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQp
OworICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5n
ZXQoKSk7CisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVt
SW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9Q
YXNzXSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0
UmFuZ2U7CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENo
YXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVu
Z3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAK
KyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8UmFu
Z2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1
bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQorICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvKiBub2RlID0gaGl0
VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgYXV0
byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGlu
ZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAgIGF1dG8gZnJhbWVQ
b2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOworICAg
IGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCisgICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OworCisgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9z
aXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisg
ICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOworCisg
ICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBOU1JhbmdlIHNl
bGVjdGlvblJhbmdlOworICAgIGludCBoaXRJbmRleDsKKyAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxD
aGFyYWN0ZXJSYW5nZTsKKyAgICAKKyAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUoKSA9
PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikgeworICAgICAgICBhdXRvIHNlbGVj
dGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgICAgICBhdXRvIHNlbGVj
dGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisgICAgICAgIAorICAgICAgICAvLyBB
cyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhz
IG9mIHRleHQuCisgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFn
cmFwaChzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0
aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KTsKKyAg
ICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0g
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOworICAgICAgICAKKyAgICAg
ICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSk7CisgICAgICAg
IAorICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdl
KHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7IHBvc2l0
aW9uIH07CisgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuZXhwYW5kVXNp
bmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOworICAgICAgICBwb3NpdGlvbiA9IHNlbGVj
dGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsKKyAgICAgICAgLy8gQXMgY29udGV4
dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQg
YWZ0ZXIgdGhlIHBvaW50LgorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSByYW5nZUV4cGFu
ZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7CisgICAgICAgIAor
ICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OworICAgICAgICAKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VS
YW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
cG9zaXRpb24pLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdl
ID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXggc2Vs
ZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1dIHNo
b3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOworICAgIAorICAgIFN0cmluZyBpdGVtU3RyaW5nID0g
cGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgUmV0YWluUHRyPFJWSXRl
bT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRl
bVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2VdKTsKKyAgICBOU1JhbmdlIGhpZ2hs
aWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKKworICAgIGlmIChoaWdobGln
aHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFoaWdobGlnaHRSYW5nZS5sZW5ndGgp
CisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIHJldHVybiB7IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2Uu
bG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAorICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
CisgICAgCit9CisKK3N0YXRpYyB2b2lkIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhQREZT
ZWxlY3Rpb24gKnNlbGVjdGlvbiwgTlNJbnRlZ2VyIG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5k
LCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBOU0ludGVnZXImIGNoYXJh
Y3RlcnNBZGRlZEFmdGVyRW5kKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIHNpemVfdCBvcmlnaW5hbExlbmd0aCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoOwor
ICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpudW1iZXJPZkNoYXJhY3RlcnNU
b0V4cGFuZF07CisgICAgCisgICAgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSBzZWxlY3Rp
b24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoOworICAgIAorICAgIFtzZWxlY3Rpb24g
ZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOworICAgIGNo
YXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5h
bExlbmd0aCAtIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0OworCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKK30KKworc3RkOjp0dXBsZTxOU1N0cmluZyAqLCBOU0RpY3Rpb25hcnkg
Kj4gRGljdGlvbmFyeUxvb2t1cDo6c3RyaW5nRm9yUERGU2VsZWN0aW9uKFBERlNlbGVjdGlvbiAq
c2VsZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAg
ICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9
OworCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0
IHRoZSBwb2ludC4KKyAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLnN0cmluZy5sZW5n
dGgpCisgICAgICAgIHJldHVybiB7IEAiIiwgbmlsIH07CisKKyAgICBSZXRhaW5QdHI8UERGU2Vs
ZWN0aW9uPiBzZWxlY3Rpb25Gb3JMb29rdXAgPSBhZG9wdE5TKFtzZWxlY3Rpb24gY29weV0pOwor
CisgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBv
ZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgorICAgIGF1dG8gb3JpZ2luYWxMZW5n
dGggPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ10ubGVuZ3RoOworICAgIE5TSW50ZWdlciBj
aGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IDA7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNB
ZGRlZEFmdGVyRW5kID0gMDsKKyAgICBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoc2VsZWN0
aW9uRm9yTG9va3VwLmdldCgpLCAyNTAsIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBjaGFy
YWN0ZXJzQWRkZWRBZnRlckVuZCk7CisKKyAgICBhdXRvIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBb
c2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ107CisgICAgYXV0byByYW5nZVRvUGFzcyA9IE5TTWFr
ZVJhbmdlKGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCAwKTsKKworICAgIFJldGFpblB0cjxS
Vkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0
OmZ1bGxQbGFpblRleHRTdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOworICAgIE5T
UmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworICAgIAor
ICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAgICBy
ZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIE5TSW50ZWdlciBsb29rdXBB
ZGRlZEJlZm9yZSA9IHJhbmdlVG9QYXNzLmxvY2F0aW9uIC0gZXh0cmFjdGVkUmFuZ2UubG9jYXRp
b247CisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQWZ0ZXIgPSAoZXh0cmFjdGVkUmFuZ2UubG9j
YXRpb24gKyBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpIC0gKHJhbmdlVG9QYXNzLmxvY2F0aW9uICsg
b3JpZ2luYWxMZW5ndGgpOworCisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0
Omxvb2t1cEFkZGVkQmVmb3JlXTsKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5k
Omxvb2t1cEFkZGVkQWZ0ZXJdOworCisgICAgQVNTRVJUKFtzZWxlY3Rpb24uc3RyaW5nIGlzRXF1
YWxUb1N0cmluZzpbZnVsbFBsYWluVGV4dFN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6ZXh0cmFj
dGVkUmFuZ2VdXSk7CisgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07CisKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsK
K30KKworc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlv
bkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBEaWN0aW9u
YXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdU
Rjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0
aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiBy
b290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygp
IHx8ICFnZXRSVlByZXNlbnRlckNsYXNzKCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIGlmIChOU0RpY3Rpb25hcnkg
Km9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkpCisgICAgICAgIFtt
dXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9uc107CisKKyAgICBh
dXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlvbmFyeVBvcHVw
SW5mby50ZXh0SW5kaWNhdG9yKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8UlZQcmVzZW50ZXI+IHBy
ZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAg
ICAKKyAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKKyAgICBOU1BvaW50IHBvaW50ZXJMb2NhdGlv
bjsKKyAgICAKKyAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSkgewor
ICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4dEluZGljYXRvci5n
ZXQoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRl
cyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cygpWzBdOworICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzKCk7CisgICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcygpOworICAgICAgICAKKyAgICAgICAgaWYgKHJvb3RWaWV3VG9WaWV3Q29udmVy
c2lvbkNhbGxiYWNrKSB7CisgICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRp
bmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0Qm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayhzZWxlY3Rp
b25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnkodGV4dEJvdW5kaW5n
UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOworICAgICAgICBoaWdobGlnaHRSZWN0
ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7CisgICAgICAgIHBvaW50
ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwor
ICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBOU1BvaW50IHRleHRCYXNlbGluZU9yaWdp
biA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOworICAgICAgICAKKyAgICAgICAgaGlnaGxp
Z2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoKTsKKyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBvaW50OnRleHRC
YXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKKyAgICB9CisgICAgCisgICAgUmV0YWluUHRyPFdl
YlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tXZWJSZXZlYWxIaWdo
bGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0UmVjdCB1c2VEZWZh
dWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpIGF0dHJpYnV0
ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpXSk7Cisg
ICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdE5TKFthbGxv
Y1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRlckxvY2F0aW9uSW5W
aWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQ
cmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQoKV0pOworICAgIAor
ICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNl
KCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQo
KS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOworICAgIAorICAgIFt3
ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGlnaHQgPSBXVEZNb3Zl
KHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5k
aWNhdG9yKV0geworICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQorICAgICAgICAgICAg
Y2xlYXJUZXh0SW5kaWNhdG9yKCk7CisgICAgfV07CisgICAgCisgICAgaWYgKGNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFuaW1hdGlvbkNvbnRy
b2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29u
dGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICBbcHJlc2VudGVyIHJldmVhbEl0
ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRl
eHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIHJldHVybiBuaWw7CisgICAgCisjZWxzZSAvLyBQ
TEFURk9STShNQUMpCisgICAgCisgICAgVU5VU0VEX1BBUkFNKGNyZWF0ZUFuaW1hdGlvbkNvbnRy
b2xsZXIpOworICAgIFVOVVNFRF9QQVJBTShkaWN0aW9uYXJ5UG9wdXBJbmZvKTsKKyAgICBVTlVT
RURfUEFSQU0odmlldyk7CisgICAgVU5VU0VEX1BBUkFNKHRleHRJbmRpY2F0b3JJbnN0YWxsYXRp
b25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrKTsKKyAgICBVTlVTRURfUEFSQU0oY2xlYXJUZXh0SW5kaWNhdG9yKTsKKyAgICAKKyAg
ICByZXR1cm4gbmlsOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIAorfQorCit2b2lkIERpY3Rpb25hcnlMb29rdXA6OnNo
b3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBO
U1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248Rmxv
YXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIHNob3dQb3B1
cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5mbywg
dmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKwordm9p
ZCBEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKyNpZiBQTEFURk9STShNQUMpCisKK1dLUmV2ZWFsQ29udHJvbGxlciBEaWN0aW9uYXJ5
TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxi
YWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4
dEluZGljYXRvcikKK3sKKyAgICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250
cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0
YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1v
dmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisK
KyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpIC8vIEVOQUJMRShSRVZFQUwpCisKK3N0ZDo6dHVw
bGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKQoreworICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFy
eSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0
UmVzdWx0JikKK3sKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworI2VuZGlmIC8v
IEVOQUJMRShSRVZFQUwpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9X
ZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dl
YkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCA1MTM5YmI2Njc3ZjE1M2Q4NGIzMGViZDAyMGE2
OGViYTgwYjU2NDE1Li5hYmZhZDhlNzM4Nzg1YWMxOTVjODVhZWFiZDVhOTYxOTMxYTVlNjk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFk
ZXJDb2NvYS5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBv
cnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCisjaW1w
b3J0ICJFZGl0b3IuaCIKKyNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgogI2ltcG9ydCAiRmlsZS5o
IgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaAppbmRleCBjYjZkNTNlYjhmOGM0
Y2ZkMzg5NDU3ZjViZWFlMjgzYTM3ZGE4MTkyLi5mOGY3NjFjZGM4MWFlYmQzZGYwODgzN2EzMjMx
YzA4ZjM1YTRmZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cC5oCkBAIC0yMywxNSArMjMsMjUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWYgUExBVEZPUk0oTUFDKQorI3ByYWdtYSBvbmNlCisKKyNpZiBQ
TEFURk9STShDT0NPQSkKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKLSNpbmNs
dWRlIDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+
CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rp
b25HZXN0dXJlUmVjb2duaXplclNQSS5oPgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKICNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KIAogT0JKQ19DTEFTUyBOU1ZpZXc7CiBPQkpDX0NMQVNTIFBE
RlNlbGVjdGlvbjsKIAorI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVkZWYgaWQgPE5TSW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gV0tSZXZlYWxDb250cm9sbGVyOworI2Vsc2UKK3R5
cGVkZWYgaWQgV0tSZXZlYWxDb250cm9sbGVyOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtNDgsOCArNTgs
MTEgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2hvd1BvcHVw
KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5jdGlv
bjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFj
aywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9W
aWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgaGlkZVBvcHVwKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgaWQgPE5TSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlckZvclBv
cHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CisgICAgCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgYW5pbWF0aW9u
Q29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwg
Y29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJ
bnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRS
ZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQorICAgIAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbSBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlOWU0NDc0YTQ5ZmNjOWIwOTViMmY0YmRhNmM5YWUzZjM4
Y2ZlNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDM4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIkRpY3Rpb25hcnlMb29rdXAuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFJFVkVBTCkKLQotI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkVkaXRpbmcuaCIK
LSNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgotI2ltcG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQg
IkZyYW1lU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCi0jaW1wb3J0ICJI
aXRUZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgotI2lt
cG9ydCAiUmVuZGVyT2JqZWN0LmgiCi0jaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKLSNpbXBvcnQg
IlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVNlbGVjdGlvbi5oIgotI2ltcG9y
dCAiVmlzaWJsZVVuaXRzLmgiCi0jaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+Ci0jaW1wb3J0IDxw
YWwvc3BpL21hYy9Mb29rdXBTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRl
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL1JldmVh
bFNQSS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLSNpbXBvcnQgPHd0
Zi9SZWZQdHIuaD4KLQotQGludGVyZmFjZSBXZWJSZXZlYWxIaWdobGlnaHQgPFJWUHJlc2VudGVy
SGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmplY3QgewotQHByaXZhdGUKLSAgICBGdW5jdGlvbjx2
b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7Ci0gICAgTlNSZWN0IF9oaWdobGlnaHRSZWN0Owot
ICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpf
YXR0cmlidXRlZFN0cmluZzsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U1JlY3QgaGlnaGxpZ2h0UmVjdDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9P
TCB1c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZzsKLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5k
aWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yOwotCi1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxIaWdobGlnaHQKLQotQHN5bnRoZXNpemUgaGlnaGxp
Z2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKLUBzeW50aGVzaXplIHVzZURlZmF1bHRIaWdobGlnaHQ9
X3VzZURlZmF1bHRIaWdobGlnaHQ7Ci1Ac3ludGhlc2l6ZSBhdHRyaWJ1dGVkU3RyaW5nPV9hdHRy
aWJ1dGVkU3RyaW5nOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihO
U1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRI
aWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0
ZWRTdHJpbmcKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAKLSAgICBfaGlnaGxpZ2h0UmVjdCA9IGhpZ2hsaWdodFJlY3Q7Ci0gICAg
X3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIF9hdHRyaWJ1
dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZzsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVh
clRleHRJbmRpY2F0b3IKLXsKLSAgICBfY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVh
clRleHRJbmRpY2F0b3IpOwotfQotCi0tIChOU0FycmF5PE5TVmFsdWUgKj4gKilyZXZlYWxDb250
ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCByZWN0c0Zvckl0ZW06KFJWSXRlbSAq
KWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0
ZW0pOwotICAgIHJldHVybiBAW1tOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c2VsZi5oaWdobGlnaHRS
ZWN0XV07Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAq
KWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9Q
QVJBTShpdGVtKTsKLSAgICAKLSAgICBmb3IgKE5TVmFsdWUgKnJlY3RWYWwgaW4gY29udGV4dC5p
dGVtUmVjdHNJblZpZXcpIHsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSByZWN0VmFsLnJlY3RWYWx1
ZTsKLQotICAgICAgICAvLyBHZXQgY3VycmVudCBmb250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgYXR0
cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBhZGQgcGFyYWdyYXBoIHN0eWxlIGF0dHJpYnV0ZSBp
biBvcmRlciB0byBjZW50ZXIgdGV4dC4KLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgZm9udEF0dHJpYnV0ZXNJ
blJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSldXSk7
Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFyYWdyYXBoID0g
YWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0XSk7Ci0gICAgICAg
IFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudENlbnRlcl07Ci0gICAgICAg
IFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJhZ3JhcGguZ2V0KCkgZm9yS2V5Ok5TUGFyYWdyYXBo
U3R5bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAKLSAgICAgICAgUmV0YWluUHRyPE5TQXR0cmlidXRl
ZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGF0dHJpYnV0ZXM6YXR0
cmlidXRlcy5nZXQoKV0pOwotICAgICAgICBbc3RyaW5nIGRyYXdJblJlY3Q6cmVjdF07Ci0gICAg
fQotfQotCi0tIChCT09MKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250
ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGlnaHRGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICBy
ZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxpZ2h0OwotfQotCi0tICh2b2lkKXJldmVhbENvbnRl
eHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihS
Vkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9Q
QVJBTShpdGVtKTsKLSAgICBhdXRvIGJsb2NrID0gV1RGTW92ZShfY2xlYXJUZXh0SW5kaWNhdG9y
KTsKLSAgICBpZiAoYmxvY2spCi0gICAgICAgIGJsb2NrKCk7Ci19Ci0KLUBlbmQKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAq
PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAg
IAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07Ci0gICAgCi0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQotICAgICAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKLQotICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ug
d2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCi0gICAg
YXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBhdXRv
IHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0KLSAgICAvLyBBcyBjb250
ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRl
eHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
U3RhcnQpOwotICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
RW5kKTsKLQotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQo
KSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwotICAg
IE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOwotICAgIAot
ICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0
KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9
IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBz
ZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9
IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0gICAgCi0gICAgcmV0dXJuIHsgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlv
biwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCi0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLX0KLQot
c3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1
cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3Vs
dCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFn
ZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAK
LSAgICBhdXRvKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAg
ICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxw
dHIsIG5pbCB9OwotCi0gICAgYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7
Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBv
aW50LgotICAgIGF1dG8gZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5J
bm5lck5vZGVGcmFtZSgpOwotICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2lu
dCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgYXV0byBwb3NpdGlv
biA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKLSAgICBpZiAo
cG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKG5vZGUpOwotCi0gICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKLSAgICBOU1JhbmdlIHNlbGVjdGlvblJhbmdlOwotICAgIGludCBoaXRJbmRleDsKLSAg
ICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKLSAgICAKLSAgICBpZiAoc2VsZWN0
aW9uLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikg
ewotICAgICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
OwotICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBz
dXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byBwYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwotICAgICAgICAKLSAgICAg
ICAgYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgICAgICAKLSAgICAgICAg
ZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhF
bmQpOwotICAgICAgICAKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25F
bmQpLmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGlu
Z0ZvckxpbmVSdWxlcyB7IHBvc2l0aW9uIH07Ci0gICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdG
b3JMaW5lUnVsZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOwotICAg
ICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsK
LSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVy
cyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgotICAgICAgICBmdWxsQ2hhcmFj
dGVyUmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRp
b24sIDI1MCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKLSAg
ICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgICAgICAKLSAgICAgICAgc2Vs
ZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICAgICAgaGl0SW5k
ZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9Ci0gICAgCi0gICAg
TlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5n
ZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5n
ZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwotICAgIAotICAg
IFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7
Ci0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFu
Y2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2Vd
KTsKLSAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5n
ZTsKLQotICAgIGlmIChoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFo
aWdobGlnaHRSYW5nZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owot
ICAgIAotICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJS
YW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5p
bCB9OwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi19Ci0KLXN0YXRpYyB2b2lkIGV4cGFuZFNlbGVj
dGlvbkJ5Q2hhcmFjdGVycyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbiwgTlNJbnRlZ2VyIG51bWJl
ck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0LCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKQotewotICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHNpemVfdCBvcmlnaW5hbExlbmd0aCA9IHNlbGVj
dGlvbi5zdHJpbmcubGVuZ3RoOwotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFy
dDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07Ci0gICAgCi0gICAgY2hhcmFjdGVyc0FkZGVk
QmVmb3JlU3RhcnQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoOwot
ICAgIAotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bnVtYmVyT2ZDaGFyYWN0
ZXJzVG9FeHBhbmRdOwotICAgIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gc2VsZWN0aW9uLnN0
cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aCAtIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0
OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotc3RkOjp0dXBsZTxOU1N0
cmluZyAqLCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6c3RyaW5nRm9yUERGU2Vs
ZWN0aW9uKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhl
cmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBpZiAoIXNlbGVjdGlvbiB8fCAh
c2VsZWN0aW9uLnN0cmluZy5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci0K
LSAgICBSZXRhaW5QdHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JMb29rdXAgPSBhZG9wdE5T
KFtzZWxlY3Rpb24gY29weV0pOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRv
IHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50Lgot
ICAgIGF1dG8gb3JpZ2luYWxMZW5ndGggPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ10ubGVu
Z3RoOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IDA7Ci0gICAg
TlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gMDsKLSAgICBleHBhbmRTZWxlY3Rp
b25CeUNoYXJhY3RlcnMoc2VsZWN0aW9uRm9yTG9va3VwLmdldCgpLCAyNTAsIGNoYXJhY3RlcnNB
ZGRlZEJlZm9yZVN0YXJ0LCBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCk7Ci0KLSAgICBhdXRvIGZ1
bGxQbGFpblRleHRTdHJpbmcgPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ107Ci0gICAgYXV0
byByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCAw
KTsKLQotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUlu
c3RhbmNlKCkgaW5pdFdpdGhUZXh0OmZ1bGxQbGFpblRleHRTdHJpbmcgc2VsZWN0ZWRSYW5nZTpy
YW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBpdGVtLmdldCgpLmhp
Z2hsaWdodFJhbmdlOwotICAgIAotICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9PSBO
U05vdEZvdW5kKQotICAgICAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKLQot
ICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEJlZm9yZSA9IHJhbmdlVG9QYXNzLmxvY2F0aW9uIC0g
ZXh0cmFjdGVkUmFuZ2UubG9jYXRpb247Ci0gICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQWZ0ZXIg
PSAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gKyBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpIC0gKHJh
bmdlVG9QYXNzLmxvY2F0aW9uICsgb3JpZ2luYWxMZW5ndGgpOwotCi0gICAgW3NlbGVjdGlvbiBl
eHRlbmRTZWxlY3Rpb25BdFN0YXJ0Omxvb2t1cEFkZGVkQmVmb3JlXTsKLSAgICBbc2VsZWN0aW9u
IGV4dGVuZFNlbGVjdGlvbkF0RW5kOmxvb2t1cEFkZGVkQWZ0ZXJdOwotCi0gICAgQVNTRVJUKFtz
ZWxlY3Rpb24uc3RyaW5nIGlzRXF1YWxUb1N0cmluZzpbZnVsbFBsYWluVGV4dFN0cmluZyBzdWJz
dHJpbmdXaXRoUmFuZ2U6ZXh0cmFjdGVkUmFuZ2VdXSk7Ci0gICAgcmV0dXJuIHsgc2VsZWN0aW9u
LnN0cmluZywgbmlsIH07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAg
cmV0dXJuIHsgQCIiLCBuaWwgfTsKLX0KLQotc3RhdGljIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXI+IHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihi
b29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8m
IGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2
b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywg
Y29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3
Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRp
Y2F0b3IpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlm
ICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9u
cyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKLSAgICAgICAgW211dGFibGVP
cHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKLQotICAgIGF1dG8gdGV4
dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRl
eHRJbmRpY2F0b3IpOwotICAgIAotICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVy
ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOwotICAgIAotICAg
IE5TUmVjdCBoaWdobGlnaHRSZWN0OwotICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOwotICAg
IAotICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7Ci0gICAgICAg
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsK
LQotICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4
dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07
Ci0gICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
KTsKLSAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2spIHsKLSAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Zmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxl
Y3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKLSAgICAgICAgcG9pbnRlckxvY2F0
aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0gICAgICAg
IAotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcmlnaW47Ci0gICAgICAgIAotICAgICAgICBoaWdobGlnaHRSZWN0
ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwot
ICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5l
T3JpZ2luIHRvVmlldzpuaWxdOwotICAgIH0KLSAgICAKLSAgICBSZXRhaW5QdHI8V2ViUmV2ZWFs
SGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBh
bGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmlu
ZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKLSAgICBSZXRh
aW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVz
ZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9p
bnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRl
ckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7Ci0gICAgCi0gICAgUmV0
YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0
V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmlu
ZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7Ci0gICAgCi0gICAgW3dlYkhpZ2hs
aWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGln
aGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3Ip
XSB7Ci0gICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCi0gICAgICAgICAgICBjbGVhclRl
eHRJbmRpY2F0b3IoKTsKLSAgICB9XTsKLSAgICAKLSAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZv
ckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNv
bnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVt
LmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQo
KSBvcHRpb25zOm5pbF07Ci0gICAgcmV0dXJuIG5pbDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotdm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpz
aG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywg
TlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZs
b2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICBzaG93UG9w
dXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25hcnlQb3B1cEluZm8s
IHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdD
b252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Ci19Ci0KLXZv
aWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0KLSAgICBpZiAoIWdldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNz
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBbZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xh
c3MoKSBoaWRlRGVmaW5pdGlvbl07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
fQotCi1pZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBEaWN0aW9uYXJ5
TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxi
YWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4
dEluZGljYXRvcikKLXsKLSAgICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250
cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0
YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1v
dmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJ
S2l0U1BJLmgKaW5kZXggMTQzZjE2Yzk5MmY2Mzc5MDI1Mjk0YmM2NzJmNDFlZGZhMzQwYTQ0NC4u
MjMyMzc5NjlmZDM1NDI2ZmVlZTkzZTAwODVlZWQ5NzdmNDQwZDk5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTczMyw2ICs3MzMsOSBAQCBzdHJ1Y3Qg
X1VJV2ViVG91Y2hFdmVudCB7CiAgICAgYm9vbCBpc1BvdGVudGlhbFRhcDsKIH07CiAKK0BpbnRl
cmZhY2UgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCitA
ZW5kCisKIEBjbGFzcyBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXI7CiAKIEBwcm90
b2NvbCBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29h
Lm1tCmluZGV4IGY1Njg3NWRmZjNhMWNjNDVlYmVlNjE3MjE1Y2U5NTcyM2Y1M2RlNGUuLjY1YWVj
ZDkyMTkyZmU2NjYxZjFiYWE0MmQzNDA3ODZjZTRkMWQ1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC0zMyw2ICszMyw3
IEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdTUEkuaCIK
ICNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKKyNpbXBvcnQgIldlYlBhZ2VNZXNzYWdl
cy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdJ
dGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0xODksNSArMTkw
LDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUNsb25lQXR0YWNobWVudChSZWY8QVBJ
OjpBdHRhY2htZW50PiYmIGZyb21BdHRhY2htZW50CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQorICAgIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK3sK
KyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24ocG9pbnQpLCBtX3BhZ2VJRCk7Cit9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKSwgbV9wYWdl
SUQpOwogfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCBhODA3Y2Nk
MmZhY2ZlNzhjZjkxNGJkZjQzZWQyNDk3YWRjYzhmYzhjLi5kYTI2MzMyMjE0Njc5ZmQ5MWNjNTRk
MGZjODRlYzgyMzA3N2U0ZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC04Nyw2ICs4Nyw3IEBAIGNsYXNz
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9
CiAKK0BjbGFzcyBfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBfVUlIaWdobGln
aHRWaWV3OwogQGNsYXNzIF9VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
OwogQGNsYXNzIFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcjsKQEAgLTIxNSw2ICsyMTYsNyBAQCBz
dHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAg
IFJldGFpblB0cjxVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI+IF9ob3Zlckdlc3R1cmVSZWNvZ25p
emVyOworICAgIFJldGFpblB0cjxfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcj4gX2xvb2t1cEdl
c3R1cmVSZWNvZ25pemVyOwogI2VuZGlmCiAKICAgICBSZXRhaW5QdHI8VUlXS1RleHRJbnRlcmFj
dGlvbkFzc2lzdGFudD4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRl
eCA2MGNmYjhmMjRkOWM2MGEzZTMyMjA5OWQyOGYyNWY1MDBjY2U0MzZkLi5hYmIwNGE0ZGE3ZWQx
ZjQxNTQwMGYxY2JiZmUzODJjYTNiNWZhODlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTExMiw2ICsx
MTIsNyBAQAogI2lmIFBMQVRGT1JNKElPU01BQykKICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZl
bnQuaCIKICNpbXBvcnQgPFVJS2l0L1VJSG92ZXJHZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9y
dCA8VUlLaXQvX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgPHBhbC9zcGkv
aW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNlbmRpZgogCkBAIC02NDksNiArNjUwLDExIEBA
IC0gKHZvaWQpc2V0dXBJbnRlcmFjdGlvbgogICAgIF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyID0g
YWRvcHROUyhbW1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6
c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdlZDopXSk7
CiAgICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwogICAgIFtz
ZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsK
KyAgICAKKyAgICBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbX1VJTG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxl
Y3RvcihfbG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6KV0pOworICAgIFtfbG9va3VwR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6
ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKICNlbmRpZgogCiAgICAg
X3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1dLU3ludGhldGljQ2xpY2tU
YXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKF9zaW5nbGVUYXBDb21taXRlZDopXSk7CkBAIC03NTksNiArNzY1LDkgQEAgLSAodm9p
ZCljbGVhbnVwSW50ZXJhY3Rpb24KICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW19ob3Zlckdl
c3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVy
ZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAorICAgIFtf
bG9va3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiByZW1v
dmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2Vu
ZGlmCiAKICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07
CkBAIC04NDYsNiArODU1LDcgQEAgLSAodm9pZClfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNvZ25p
emVycwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9zdHlsdXNTaW5nbGVUYXBH
ZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtzZWxm
IHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsK
KyAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6
ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTg2MSw2ICs4NzEsNyBAQCAtICh2b2lkKV9hZGRE
ZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6
X3N0eWx1c1NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFURk9STShJ
T1NNQUMpCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29n
bml6ZXIuZ2V0KCldOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0
dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtMTQ2Nyw2ICsxNDc4LDEwIEBA
IC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJl
UmVjb2duaXplciBzaG91bGRSZWNvZ25pCiAKICAgICBpZiAoW2dlc3R1cmVSZWNvZ25pemVyIGlz
S2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBjbGFzc11dIHx8IFtvdGhlckdl
c3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBj
bGFzc11dKQogICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAgIGlmICgoW2dlc3R1cmVSZWNv
Z25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0g
JiYgW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlMb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplciBjbGFzc11dKSB8fCAoW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5k
T2ZDbGFzczpbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBjbGFzc11dICYmIFtnZXN0dXJl
UmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBjbGFz
c11dKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKwogI2VuZGlmCiAgICAgaWYgKGlzU2FtZVBhaXIo
Z2VzdHVyZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6ZXIsIF9oaWdobGlnaHRMb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSwgX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0
KCkuZm9yY2VQcmVzc0dlc3R1cmUpKQogICAgICAgICByZXR1cm4gWUVTOwpAQCAtNjA1Nyw2ICs2
MDcyLDEyIEBAIC0gKEJPT0wpYWxsb3dzRGljdGF0aW9uSW5wdXRGb3JMaXN0Vmlld0NvbnRyb2xs
ZXI6KFBVSUNRdWlja2JvYXJkVmlld0NvbnRyb2xsZXIKICNlbmRpZiAvLyBQTEFURk9STShXQVRD
SE9TKQogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQorLSAodm9pZClfbG9va3VwR2VzdHVyZVJlY29n
bml6ZWQ6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgoreworICAgIE5T
UG9pbnQgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcyA9IFtnZXN0dXJlUmVjb2duaXplciBsb2Nh
dGlvbkluVmlldzpzZWxmXTsKKyAgICBfcGFnZS0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExv
Y2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQobG9jYXRpb25JblZpZXdDb29yZGluYXRlcykpOwor
fQorCiAtICh2b2lkKV9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdlZDooVUlHZXN0dXJlUmVj
b2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiB7CiAgICAgaWYgKCFfcGFnZS0+aXNWYWxpZCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5k
ZXggYjQ3M2YwODFhNTA3NWU0NDNjY2UzOWI1ZGMzNzg1NGJkNjhkODZmMi4uMjc5NWY3MzBiYmZl
YzYyZTQ0ZjU0ZjZhODA5YzgyYmFiNjMzZDM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC0xMjEsMTEgKzEyMSw2IEBAIGJvb2wgV2Vi
UGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6Omdlc3R1cmVDYWxsYmFjayhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2U8R2VzdHVyZUNhbGxiYWNr
PihjYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tCmluZGV4IGZmZmM1ZTA4YTE2NzBhMGNhZjE1M2VjNzBmYTcyMDIxNzIwZTViN2Eu
LmUyYWIyOWMyYjVjNjcxNzU4NDYzN2IzYjdhZWNjMjA4Yjc2MzY4NjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpAQCAtMzIzLDIyICszMjMs
NiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UHJvbWlzZWREYXRhRm9ySW1hZ2UoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgUwogCiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLXsKLSAgICBp
ZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9u
KCksIG1fcGFnZUlEKTsKLX0KLQogLy8gQ29tcGxleCB0ZXh0IGlucHV0IHN1cHBvcnQgZm9yIHBs
dWctaW5zLgogdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4o
dWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
dGV4dElucHV0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDNlNzk0MzFmOTM3MTE0YzQxZjlkMmRmZDU4
ZTBiNGY3MjE4MTU5YTYuLmEzOGNkMmJmNjM3OTRjOGU5ZjFkMjEyYTNlNzhiM2U4YzRlZjhjNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9X
ZWJQYWdlQ29jb2EubW0KQEAgLTI2LDkgKzI2LDIwIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIldlYlBhZ2UuaCIKIAorCiAjaW1wb3J0ICJMb2FkUGFyYW1ldGVycy5oIgorI2ltcG9y
dCAiUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbXBv
cnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3Iu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zv
Y3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVJlbmRl
clN0eWxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jl
bmRlck9iamVjdC5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAKQEAgLTU5LDYgKzcwLDExNCBA
QCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm8oQ2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpOb3dQ
bGF5aW5nSW5mb0NhbGxiYWNrKGhhc0FjdGl2ZVNlc3Npb24sIHJlZ2lzdGVyZWRBc05vd1BsYXlp
bmdBcHBsaWNhdGlvbiwgdGl0bGUsIGR1cmF0aW9uLCBlbGFwc2VkVGltZSwgdW5pcXVlSWRlbnRp
ZmllciwgY2FsbGJhY2tJRCkpOwogfQorICAgIAordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKK3sKKyAg
ICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWlu
RnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlzIG92ZXIuCisgICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRl
c3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0ZDo6dGllKHJhbmdlLCBvcHRp
b25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7Cisg
ICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8qIGZyYW1lID0g
cmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0aW9u
cywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Cit9CisKK3Zv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZy
YW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKKyAgICBz
dGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisgICAgICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBv
cHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKK30KKwordm9pZCBXZWJQYWdlOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgYXV0byYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJv
dW5jZUFuZENyb3NzZmFkZSk7Cit9CisgICAgCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFy
eSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0
aW9uVHJhbnNpdGlvbikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShmcmFtZSwg
cmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Cit9CisKK0RpY3Rpb25h
cnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBm
cmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgRWRp
dG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKKyAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGlj
dGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKKyAgICAKKyAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRp
Y3Rpb25hcnlQb3B1cEluZm87CisgICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2Uo
KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1
cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgcmFuZ2UuYWJzb2x1dGVU
ZXh0UXVhZHMocXVhZHMpOworICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWRp
dG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1
cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgSW50UmVjdCByYW5nZVJl
Y3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91
bmRpbmdCb3goKSk7CisgICAgCisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uu
c3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGZsb2F0IHNjYWxlZEFzY2VudCA9
IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKiBwYWdlU2NhbGVGYWN0b3Io
KSA6IDA7CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50KHJhbmdl
UmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQpOworICAgIGRpY3Rpb25hcnlQ
b3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7CisKKyNpZiBQTEFURk9STShNQUMpCisKKyAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpO
byk7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxl
ZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKKyAg
ICAKKyAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJl
ZEZvbnRNYW5hZ2VyXTsKKyAgICAKKyAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0
dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3Ro
XSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFu
Z2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5
XSk7CisgICAgICAgIAorICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBv
YmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChmb250KQorICAg
ICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250
LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAg
ICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CisgICAgICAgIAorICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5n
IGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CisgICAg
fV07CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAgVGV4dEluZGljYXRvck9w
dGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1Jl
Y3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOworICAgIGlmIChwcmVzZW50YXRp
b25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3Vu
Y2VBbmRDcm9zc2ZhZGUpCisgICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRv
ck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7CisgICAgCisgICAg
UmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pOworICAgIGlmICghdGV4dEluZGljYXRvcikgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5
UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRp
Y2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGRp
Y3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0
cmluZzsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgIHJldHVybiBkaWN0aW9uYXJ5UG9w
dXBJbmZvOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMTI3ZDg0
MTExZTczMGY1ZjAyNGI0YzRlODc5MWEyOTk4YzJiOWJiOC4uN2YzMDE1NDg1ODVkZThmMzBkMDVh
NTVjMDIyNzhlMGJmMDI3Yjc5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0xOTEsNiArMTkxLDcgQEAgbWVzc2Fn
ZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICAjIERpY3Rpb25hcnkgc3VwcG9ydC4KKyAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3Vy
cmVudFNlbGVjdGlvbigpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKFdl
YkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCiAjZW5kaWYKIApAQCAtMTk5LDEwICsyMDAsNiBAQCBt
ZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBSZW1vdmVEYXRhRGV0ZWN0
ZWRMaW5rcygpIC0+IChzdHJ1Y3QgV2ViS2l0OjpEYXRhRGV0ZWN0aW9uUmVzdWx0IHJlc3VsdCkg
QXN5bmMKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLSNlbmRpZgotCiAgICAgQ2hhbmdlRm9udChXZWJD
b3JlOjpGb250Q2hhbmdlcyBjaGFuZ2VzKQogICAgIENoYW5nZUZvbnRBdHRyaWJ1dGVzKFdlYkNv
cmU6OkZvbnRBdHRyaWJ1dGVDaGFuZ2VzIGNoYW5nZXMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZWFjNGY0ZmFhMzVk
MWJjMmZmYmQ5M2E1OWNmOGM3YjZkNDZlZjkyYi4uNmU1YTZkMTg4NWQ1ZDRiZjJlMzAyNDZhMDVl
MmE4YjYzNmYyOGI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxNywyMSArNDE3LDYgQEAgdm9pZCBXZWJQYWdlOjpz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rp
b24oRnJhbWUmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiwgUmFuZ2UmLCBOU0Rp
Y3Rpb25hcnkgKiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0Jl
aGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCop
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNDczM2IxY2JmMmZlNDVjZDlkMGNl
YTdlZWY5YmM3YzM4YWZhZjdlNC4uZmE3YTZhYWYxYjYwYmRhOTBkY2QwNzliYTFhOTQzNmYxMjE2
YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KQEAgLTM4OSwxMDIgKzM4OSw3IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2Vs
ZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxiYWNrKGZvbnROYW1lLCBmb250U2l6ZSwgc2VsZWN0
aW9uSGFzTXVsdGlwbGVGb250cywgY2FsbGJhY2tJRCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdl
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxv
YXRQb2ludCkKLXsKLSAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFt
ZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4K
LSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndp
bmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUo
cmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQo
cmVzdWx0KTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBm
cmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0
aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Ci19Ci0K
LXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUm
IGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAg
ICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJh
bmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAg
ICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdl
LCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLX0KIAotdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgYXV0byYg
ZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwot
ICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
OkJvdW5jZUFuZENyb3NzZmFkZSk7Ci19Ci0KLURpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6
ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBO
U0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
IHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5l
ZGl0b3IoKTsKLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVl
KTsKLQotICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBp
ZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBl
ZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJl
dHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBpZiAocXVh
ZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAg
fQotCi0gICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5k
b3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0KLSAgICBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7Ci0gICAg
ZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQo
KSAqIHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdp
biA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2Vu
dCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKLQotICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5v
KTsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7Ci0KLSAgICBO
U0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXTsKLQotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAg
dXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9P
TCAqc3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVk
QXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLQotICAgICAg
ICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChmb250KQotICAgICAgICAgICAgZm9udCA9IFtmb250
TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2Fs
ZUZhY3RvcigpXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAgICBbc2NhbGVkQXR0cmli
dXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0KLSAgICAg
ICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0
ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwotICAgIH1dOwotCi0gICAgVGV4dEluZGljYXRvck9wdGlv
bnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RB
bmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOwotICAgIGlmIChwcmVzZW50YXRpb25U
cmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VB
bmRDcm9zc2ZhZGUpCi0gICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9w
dGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7Ci0KLSAgICBSZWZQdHI8
VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhS
YW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0g
ICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0
aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cElu
Zm87Ci0gICAgfQotCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4
dEluZGljYXRvci0+ZGF0YSgpOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0
cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZzsKLQotICAgIGVkaXRvci5zZXRJc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVw
SW5mbzsKLX0KIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCkBAIC01MzksMTEgKzQ0NCw2
IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclNl
bGVjdGlvbkluUERGUGx1Z2luKFBERlNlbGVjCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2U6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2Us
IE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Ci19
Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIC8vIEZp
cnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5jZSB0byBoYW5kbGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356052</attachid>
            <date>2018-11-29 13:48:18 -0800</date>
            <delta_ts>2018-11-29 13:50:17 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191732-20181129134818.patch</filename>
            <type>text/plain</type>
            <size>75692</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Njg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhiYzAzMjJkNTNkNDBi
OWUyZWY3MGUyMjIxMWVlM2NhNDgwYTJkYi4uZDllYzM0NTMzOTM0ZjZkNTI1MGM5NzIwZjQ4YTk3
NzkwZTNjZGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTI5ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE5vdCBjdXJyZW5sdHkgdGVzdGFibGUK
KworICAgICAgICBEaWN0aW9uYXJ5TG9va3VwIHVzZXMgUmV2ZWFsIG5vdywgd2hpY2ggaXMgc2xh
dGVkIHRvIGJlIGNyb3NzLXBsYXRmb3JtLgorICAgICAgICBUaGF0IHBhdGNoIGdhdGVzIHRoZSBw
YXJ0cyBvZiBEaWN0aW9uYXJ5TG9va3VwIHRoYXQgY3VycmVudGx5IGRvIG5vdCBoYXZlCisgICAg
ICAgIGFuIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbiBvbiBpT1MuIE9uY2UgUmV2ZWFsIGlzIHJl
YWR5LCB0aGlzIGNvZGUgd2lsbCBiZQorICAgICAgICByZXBsYWNlZCBvciBleHBhbmRlZCB1cG9u
LCBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cCk6CisgICAgICAgIChXZWJD
b3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKToKKwogMjAxOC0xMS0y
OSAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CiAKICAgICAgICAg
Q1NTIFBhaW50aW5nIEFQSSBzaG91bGQgcGFzcyAndGhpcycgY29ycmVjdGx5IHRvIHBhaW50IGNh
bGxiYWNrLCBhbmQgcmVwYWludCB3aGVuIHByb3BlcnRpZXMgY2hhbmdlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cKaW5kZXggYTQ1ODI3YmNjZDMzM2ZhMjU4OWY5NDE4MGQ0MjhmYWI2MTg0NDhjZC4uYjAwNTc1
NWExMDBhOTliNmQ5NTUzNGEyNGEyYjAyZmFlOGIyYjVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMjkgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVy
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3Mg
cGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgKiBwYWwvc3BpL21hYy9Mb29rdXBTUEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaDoKKwogMjAxOC0xMS0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm5pemUgdGhlIGNoZWNrIGZvciBrQ0ZVUkxSZXF1ZXN0
Q29udGVudERlY29kZXJTa2lwVVJMQ2hlY2sgZXhpc3RlbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzNDEyZGJl
MTIxOTRjYTM2YTMxZDg2NjMzYWZkZTQzOWU0MWM2MDMuLmEzOTQ3YWRiZTBhYWMwN2RlMjQ4ZGU3
Yjg2OGU1OWQzYTMyYzVjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMjkg
IE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3Zl
IExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgTG9va3VwIGlzIGJlaW5nIHJl
cGxhY2VkIGJ5IFJldmVhbC4gVGhpcyBmcmFtZXdvcmsgc2hvdWxkIHdvcmsgb24gYWxsIHBsYXRm
b3Jtcy4KKyAgICAgICAgVGhlIHBhdGNoIG1vdmVzIHRoZSBjb2RlIHRoYXQgd2UgZXhwZWN0IHdp
bGwgYmUgbmVlZGVkIGZvciBhbGwgcGxhdGZvcm1zIHRvIHRoZSBtb3JlCisgICAgICAgIGdlbmVy
YWwgY29jb2EgYXJlYS4gVGhpcyBwYXRjaCBjaGFuZ2VzIG5vIGZ1bmNhdGlvbmFsaXR5LCBhbmQg
c2hvdWxkIG5vdCBjaGFuZ2UKKyAgICAgICAgYW55dGhpbmcgY3VycmVudGx5LiBUaGlzIHdvcmsg
d2lsbCBiZSBidWlsZCBvbiBsYXRlciB3aGVuIFJldmVhbCBpcyByZWFkeSB0byBzdXBwb3J0Cisg
ICAgICAgIG11bHRpcGxlIHBsYXRmb3Jtcy4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3Mv
VUlLaXRTUEkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1
cEludGVyYWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2xlYW51cEludGVyYWN0
aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3JlbW92ZURlZmF1bHRHZXN0dXJlUmVj
b2duaXplcnNdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYWRkRGVmYXVsdEdlc3R1cmVS
ZWNvZ25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGdlc3R1cmVSZWNvZ25pemVy
OnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9sb29rdXBHZXN0dXJlUmVjb2duaXplZDpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5m
b0ZvclJhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwT2ZDdXJyZW50U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisK
IDIwMTgtMTEtMjkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAg
ICAgTW9kZXJuaXplIHRoZSBjaGVjayBmb3Iga0NGVVJMUmVxdWVzdENvbnRlbnREZWNvZGVyU2tp
cFVSTENoZWNrIGV4aXN0ZW5jZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3ZjI0NjczZTUxNzM2OTdmNWNiY2U3ZWMzYTQ1MjE2
Y2Y0ODMxMTMuLmI4Y2MzNTg2M2NiZDJlZDU1Y2VkYTdjNTZhYzE4MjE5ODNlNDczOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQwNiw2ICs0MDYsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERCQzMxNyAvKiBQYXNzS2l0
U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8qIHB0aHJlYWRTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6Q29yZVNQSS5oICovLAor
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQk1NzBB
QjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAqLywKIAkJCQkwQzJEQTEz
QzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJCTBDMkRBMTJCMUYzQkVC
NDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00NzEsNyArNDcyLDYgQEAK
IAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEkuaCAqLywKIAkJCQlBMTAy
NjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8sCiAJCQkJMEM3Nzg1ODcx
RjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAotCQkJCTQ0Mjk1NkNDMjE4
QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3NUI0ODFGNkFGRjhFMDBD
NEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3Nzg1ODgxRjQ1MTMwRjAw
RjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRkMTA2ZjEyZTlkMjM3YzQ4ZmFl
MWI0NDY0YzI5MzNlYTU0MDMyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPG9iamMvcnVudGlt
ZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRl
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JL
KFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWxDb3JlKQorU09GVF9M
SU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09GVF9MSU5LX0NMQVNTX09Q
VElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZl
YWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIEVO
QUJMRShSRVZFQUwpCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxSZXZlYWwvUlZQcmVz
ZW50ZXIuaD4KKyNpbXBvcnQgPFJldmVhbC9SZXZlYWwuaD4KKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisjaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxD
b3JlL1JldmVhbENvcmUuaD4KKworI2Vsc2UgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKwor
CitAcHJvdG9jb2wgUlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZTsKKworQGludGVyZmFjZSBS
Vkl0ZW0gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJh
bmdlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7CitAZW5kCisKK0BpbnRlcmZhY2UgUlZTZWxl
Y3Rpb24gOiBOU09iamVjdAorKyAoTlNSYW5nZSlyZXZlYWxSYW5nZUF0SW5kZXg6KE5TVUludGVn
ZXIpY2xpY2tJbmRleCBzZWxlY3RlZFJhbmdlczooTlNBcnJheSA8TlNWYWx1ZSAqPiAqKXNlbGVj
dGVkUmFuZ2VzIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjooQk9PTCAqKXNob3VsZFVwZGF0ZVNlbGVj
dGlvbjsKK0BlbmQKKworI2lmIFBMQVRGT1JNKE1BQykKK0BpbnRlcmZhY2UgUlZQcmVzZW50aW5n
Q29udGV4dCA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQb2ludGVyTG9jYXRp
b25JblZpZXc6KE5TUG9pbnQpcG9pbnRlckxvY2F0aW9uSW5WaWV3IGluVmlldzooTlNWaWV3ICop
dmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4p
aGlnaGxpZ2h0RGVsZWdhdGU7CitAZW5kCisjZW5kaWYKKworQHByb3RvY29sIFJWUHJlc2VudGVy
SGlnaGxpZ2h0RGVsZWdhdGUgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistIChOU0FycmF5IDxOU1Zh
bHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgcmVj
dHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtOworQG9wdGlvbmFsCistICh2b2lkKXJldmVhbENvbnRl
eHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihS
Vkl0ZW0gKilpdGVtOworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0
ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtOworQGVuZAorCitAaW50
ZXJmYWNlIFJWRG9jdW1lbnRDb250ZXh0IDogTlNPYmplY3QgPCBOU1NlY3VyZUNvZGluZyA+CitA
ZW5kCisKK0BpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAorI2lmIFBMQVRGT1JNKE1B
QykKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0aW9u
Q29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3Vt
ZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50
aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9w
dGlvbnM7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorLSAoQk9PTClyZXZlYWxJdGVtOihSVkl0
ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZEb2N1bWVudENvbnRleHQgKilkb2N1bWVudENv
bnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5n
Q29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworQGVuZAorCisjZW5kaWYg
Ly8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIEVOQUJMRShSRVZFQUwpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmgKaW5kZXggZWI3Zjk1MWY3MWM3NWM4MTIx
N2IyMmU3OGFkYWQzMGU0ZDZhNWMwNC4uZTBhMzM3NWQzMGNjODg5ZjEzNWVhMmExMWQ0N2QwZGE5
NGY5OGE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1
cFNQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaApA
QCAtMjMsMTIgKzIzLDEzIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisKKyNpZiBQTEFURk9S
TShNQUMpCisKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMv
TlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2ltcG9ydCA8d3RmL1Nv
ZnRMaW5raW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCi0KIFNPRlRfTElOS19QUklWQVRFX0ZS
QU1FV09SS19PUFRJT05BTChMb29rdXApCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoTG9va3Vw
LCBMVUxvb2t1cERlZmluaXRpb25Nb2R1bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL21hYy9SZXZlYWxTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3Bp
L21hYy9SZXZlYWxTUEkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiOGRhNDJj
ODU5OTBhZTMyZWE2N2EwYWY3NzUzZjNkYjk4MjhhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2
ZWFsU1BJLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4K
LSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJT
UEkuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfUFJJVkFURV9G
UkFNRVdPUksoUmV2ZWFsKQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUp
Ci1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKLVNPRlRfTElO
S19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCi1TT0ZUX0xJTktf
Q0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZJdGVtKQotU09GVF9MSU5LX0NMQVNTX09QVElP
TkFMKFJldmVhbENvcmUsIFJWU2VsZWN0aW9uKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKLQotI2ltcG9ydCA8UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwvUmV2
ZWFsLmg+Ci0jaW1wb3J0IDxSZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+Ci0jaW1wb3J0IDxSZXZl
YWxDb3JlL1JldmVhbENvcmUuaD4KLQotCi0jZWxzZQotCi1AaW50ZXJmYWNlIFJWSXRlbSA6IE5T
T2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5T
U3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVT
SUdOQVRFRF9JTklUSUFMSVpFUjsKLUBlbmQKLQotQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5T
T2JqZWN0Ci0rIChOU1JhbmdlKXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0lu
ZGV4IHNlbGVjdGVkUmFuZ2VzOihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMg
c2hvdWxkVXBkYXRlU2VsZWN0aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOwotQGVu
ZAotCi1AaW50ZXJmYWNlIFJWUHJlc2VudGVyIDogTlNPYmplY3QKLS0gKGlkPE5TSW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJW
SXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50
Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRp
bmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChCT09MKXJldmVh
bEl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAq
KWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAq
KXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci1AZW5k
Ci0KLSNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IDA2M2RmZGMyMjg5NjNmYmFlNTk2MGUwMjRjYjhmMjRmZDM3YTVlZGEuLjA2MmNk
ZDdmMDdkNzBlMzBkOWYwNmYzMDU3M2Q2OTdmYmZmMTViNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtNzcsNiArNzcsNyBAQCBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAK
IGVkaXRpbmcvU21hcnRSZXBsYWNlQ0YuY3BwCiAKIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQorZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tCiBlZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0K
IGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtOTAsNyArOTEsNiBAQCBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAogZWRpdGluZy9pb3MvRWRpdG9ySU9T
Lm1tCiAKIGVkaXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQotZWRpdGlu
Zy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExl
Z2FjeS5tbQogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCiBlZGl0aW5nL21hYy9GcmFtZVNlbGVj
dGlvbk1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGQxNmQzMjZiNWU5MTdlYzNlZGU3ZTBhYTM1M2IyZWY3MzAyNmYyYmUu
LmQxOGNlNjBiMTc4YzFjYjFkZWYxZDM5YWFkZmNlNzc4YjM4ODg5ZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNTIzLDYg
KzIwNTIzLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUM1MjI3REVGMUMzQzZERDcwMEY1RUQ1
NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi8sCiAJCQkJQzUyMjdERjAxQzNDNkRENzAwRjVFRDU0IC8q
IERhdGFEZXRlY3Rpb24ubW0gKi8sCisJCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERp
Y3Rpb25hcnlMb29rdXAubW0gKi8sCiAJCQkJOUI1NUVFRTgxQjNFODg5ODAwNTM0MkJDIC8qIEVk
aXRvckNvY29hLm1tICovLAogCQkJCUY0MkNFQjU0MjE0MDMxRUUwMDJEQ0E3MiAvKiBGb250QXR0
cmlidXRlQ2hhbmdlc0NvY29hLm1tICovLAogCQkJCUY0OEQyQTc1MjE1NkZFNTcwMEM2NzUyQiAv
KiBGb250QXR0cmlidXRlc0NvY29hLm1tICovLApAQCAtMjYyMjksNyArMjYyMzAsNiBAQAogCQkJ
CUNFN0IyREFGMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIu
aCAqLywKIAkJCQlDRTdCMkRCMDE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyLm1tICovLAogCQkJCTkzN0ZGM0Q0MUExMDEyRDYwMDhFQkEzMSAvKiBEaWN0aW9u
YXJ5TG9va3VwLmggKi8sCi0JCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25h
cnlMb29rdXAubW0gKi8sCiAJCQkJNDQyOTU2Q0EyMThBNkQzMDAwODBEQjU0IC8qIERpY3Rpb25h
cnlMb29rdXBMZWdhY3kubW0gKi8sCiAJCQkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8qIEVk
aXRvck1hYy5tbSAqLywKIAkJCQk0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogRnJhbWVTZWxl
Y3Rpb25NYWMubW0gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQ0YzQ5MDE2ZjEwYjRiMjhkOWZkNWQ0OTY1ZjMz
M2JmMmIxN2M5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMCwwICsxLDQzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEaWN0aW9uYXJ5TG9va3VwLmgiCisKKyNp
ZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFJFVkVBTCkKKworI2ltcG9ydCAiRG9jdW1lbnQu
aCIKKyNpbXBvcnQgIkVkaXRpbmcuaCIKKyNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgorI2lt
cG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJIVE1M
Q29udmVydGVyLmgiCisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQg
IlJlbmRlck9iamVjdC5oIgorI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJWaXNp
YmxlUG9zaXRpb24uaCIKKyNpbXBvcnQgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlZp
c2libGVVbml0cy5oIgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9SZXZlYWxTUEkuaD4KKyNpbXBv
cnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2Vw
dGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKworI2lmICFQTEFURk9STShXQVRDSCkK
KworI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorCisjZW5kaWYgLy8gIVBMQVRGT1JNKFdBVENI
KQorCisjaWYgUExBVEZPUk0oTUFDKQorCitAaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8
UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAg
IEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFyVGV4dEluZGljYXRvcjsKKyAgICBOU1JlY3QgX2hpZ2hs
aWdodFJlY3Q7CisgICAgQk9PTCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKKyAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3RyaW5nOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TUmVjdCBoaWdobGlnaHRSZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIHVzZURlZmF1bHRIaWdobGlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNl
RGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJp
bmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOworLSAodm9pZClzZXRD
bGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAorCitAc3ludGhl
c2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdobGlnaHRSZWN0OworQHN5bnRoZXNpemUgdXNlRGVmYXVs
dEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0BzeW50aGVzaXplIGF0dHJpYnV0ZWRT
dHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hs
aWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wp
dXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcg
KikgYXR0cmlidXRlZFN0cmluZworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0
UmVjdDsKKyAgICBfdXNlRGVmYXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7Cisg
ICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nOworICAgIAorICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9p
ZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcgoreworICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBX
VEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcik7Cit9CisKKy0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAq
KXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRl
bTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVT
RURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxm
LmhpZ2hsaWdodFJlY3RdXTsKK30KKworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRp
bmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIAorICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBp
biBjb250ZXh0Lml0ZW1SZWN0c0luVmlldykgeworICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RW
YWwucmVjdFZhbHVlOworCisgICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBm
cm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUg
YXR0cmlidXRlIGluIG9yZGVyIHRvIGNlbnRlciB0ZXh0LgorICAgICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250
QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBs
ZW5ndGhdKV1dKTsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBw
YXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRd
KTsKKyAgICAgICAgW3BhcmFncmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVy
XTsKKyAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6
TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdOworICAgIAorICAgICAgICBSZXRhaW5QdHI8
TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0
cmlidXRlczphdHRyaWJ1dGVzLmdldCgpXSk7CisgICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpy
ZWN0XTsKKyAgICB9Cit9CisKKy0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29u
dGV4dCAqKWNvbnRleHQgc2hvdWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAq
KWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0
ZW0pOworICAgIHJldHVybiBzZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Cit9CisKKy0gKHZvaWQp
cmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdo
dGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRl
eHRJbmRpY2F0b3IpOworICAgIGlmIChibG9jaykKKyAgICAgICAgYmxvY2soKTsKK30KKworQGVu
ZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjZW5kaWYgLy8gRU5BQkxFKFJFVkVBTCkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFJFVkVBTCkKKworc3RkOjp0dXBs
ZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VG
b3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICBpZiAoIWdldFJWSXRlbUNsYXNz
KCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIGF1dG8gc2Vs
ZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2Vs
ZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBT
aW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBn
cmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgorICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24u
dmlzaWJsZUVuZCgpOworCisgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0
aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIHBhcmFncmFw
aEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisKKyAgICBpbnQgbGVuZ3RoVG9T
ZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFn
cmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworICAgIGludCBsZW5ndGhUb1NlbGVj
dGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0
YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKKyAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNN
YWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBs
ZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICAKKyAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAg
ICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkp
OworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3Rh
bmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10p
OworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdl
OworICAgIAorICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0
ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCks
IG5pbCB9OworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAg
cmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwg
TlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNv
bnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAg
cmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgYXV0byogbm9kZSA9IGhpdFRlc3RS
ZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5k
ZXJlcigpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8qIGZy
YW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYg
dGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KKyAgICBhdXRvIGZyYW1lUG9pbnQg
PSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQorICAgICAgICByZXR1cm4geyBudWxs
cHRyLCBuaWwgfTsKKworICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAg
ICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKKworICAgIGF1
dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgTlNSYW5nZSBzZWxlY3Rp
b25SYW5nZTsKKyAgICBpbnQgaGl0SW5kZXg7CisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFj
dGVyUmFuZ2U7CisgICAgCisgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25T
dGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25F
bmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgY29u
dGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0
ZXh0LgorICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxl
Y3Rpb25TdGFydCk7CisgICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0
YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7CisgICAgICAg
IGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2Vs
ZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VS
YW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAgICAgICAgCisgICAgICAgIHNl
bGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5n
ZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VS
YW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOworICAgICAgICAKKyAg
ICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJh
Z3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9
OworICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3Jh
bnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25B
Y2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7CisgICAgICAgIC8vIEFzIGNvbnRleHQsIHdl
IGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVy
IHRoZSBwb2ludC4KKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFy
b3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKKyAgICAgICAgCisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2Uo
TlNOb3RGb3VuZCwgMCk7CisgICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0
aW9uKS5nZXQoKSk7CisgICAgfQorICAgIAorICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtn
ZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVk
UmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRV
cGRhdGVTZWxlY3Rpb246bmlsXTsKKyAgICAKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWlu
VGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0
ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJp
bmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRS
YW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisKKyAgICBpZiAoaGlnaGxpZ2h0UmFu
Z2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQorICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICByZXR1cm4geyBUZXh0SXRl
cmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0
aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKKyAgICAKKyAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAg
IAorfQorICAgIAorI2lmICFQTEFURk9STShXQVRDSCkKKworc3RhdGljIHZvaWQgZXhwYW5kU2Vs
ZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBOU0ludGVnZXIgbnVt
YmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQmVmb3Jl
U3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgc2l6ZV90IG9yaWdpbmFsTGVuZ3RoID0gc2Vs
ZWN0aW9uLnN0cmluZy5sZW5ndGg7CisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0
YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKKyAgICAKKyAgICBjaGFyYWN0ZXJzQWRk
ZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGg7
CisgICAgCisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpudW1iZXJPZkNoYXJh
Y3RlcnNUb0V4cGFuZF07CisgICAgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSBzZWxlY3Rpb24u
c3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3Rh
cnQ7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitzdGQ6OnR1cGxlPE5T
U3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZT
ZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAg
cmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0
aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAgIGlmICghc2VsZWN0aW9uIHx8
ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsK
KworICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxvb2t1cCA9IGFkb3B0
TlMoW3NlbGVjdGlvbiBjb3B5XSk7CisKKyAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcg
dG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQu
CisgICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXS5s
ZW5ndGg7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gMDsKKyAg
ICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAwOworICAgIGV4cGFuZFNlbGVj
dGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1MCwgY2hhcmFjdGVy
c0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsKKworICAgIGF1dG8g
ZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3RyaW5nXTsKKyAgICBh
dXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQs
IDApOworCisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVt
SW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBzZWxlY3RlZFJhbmdl
OnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IGl0ZW0uZ2V0KCku
aGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09
IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9Owor
CisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bhc3MubG9jYXRpb24g
LSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKKyAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRBZnRl
ciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3RlZFJhbmdlLmxlbmd0aCkgLSAo
cmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7CisKKyAgICBbc2VsZWN0aW9u
IGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZvcmVdOworICAgIFtzZWxlY3Rp
b24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRlcl07CisKKyAgICBBU1NFUlQo
W3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxsUGxhaW5UZXh0U3RyaW5nIHN1
YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKKyAgICByZXR1cm4geyBzZWxlY3Rp
b24uc3RyaW5nLCBuaWwgfTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAg
ICByZXR1cm4geyBAIiIsIG5pbCB9OworfQorICAgIAorI2VuZGlmIC8vICFQTEFURk9STShXQVRD
SCkKKworc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlv
bkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBEaWN0aW9u
YXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdU
Rjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0
aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiBy
b290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygp
IHx8ICFnZXRSVlByZXNlbnRlckNsYXNzKCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIGlmIChOU0RpY3Rpb25hcnkg
Km9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMuZ2V0KCkpCisgICAgICAgIFtt
dXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3B0aW9uc107CisKKyAgICBh
dXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlvbmFyeVBvcHVw
SW5mby50ZXh0SW5kaWNhdG9yKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8UlZQcmVzZW50ZXI+IHBy
ZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAg
ICAKKyAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKKyAgICBOU1BvaW50IHBvaW50ZXJMb2NhdGlv
bjsKKyAgICAKKyAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSkgewor
ICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2sodGV4dEluZGljYXRvci5n
ZXQoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRl
cyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cygpWzBdOworICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzKCk7CisgICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcygpOworICAgICAgICAKKyAgICAgICAgaWYgKHJvb3RWaWV3VG9WaWV3Q29udmVy
c2lvbkNhbGxiYWNrKSB7CisgICAgICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRp
bmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayh0ZXh0Qm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayhzZWxlY3Rp
b25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5tb3ZlQnkodGV4dEJvdW5kaW5n
UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOworICAgICAgICBoaWdobGlnaHRSZWN0
ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXM7CisgICAgICAgIHBvaW50
ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwor
ICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBOU1BvaW50IHRleHRCYXNlbGluZU9yaWdp
biA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOworICAgICAgICAKKyAgICAgICAgaGlnaGxp
Z2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoKTsKKyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBvaW50OnRleHRC
YXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKKyAgICB9CisgICAgCisgICAgUmV0YWluUHRyPFdl
YlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0TlMoW1tXZWJSZXZlYWxIaWdo
bGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGlnaGxpZ2h0UmVjdCB1c2VEZWZh
dWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpIGF0dHJpYnV0
ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpXSk7Cisg
ICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdE5TKFthbGxv
Y1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUG9pbnRlckxvY2F0aW9uSW5W
aWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQ
cmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdodC5nZXQoKV0pOworICAgIAor
ICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNl
KCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQo
KS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV0pOworICAgIAorICAgIFt3
ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJIaWdobGlnaHQgPSBXVEZNb3Zl
KHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5k
aWNhdG9yKV0geworICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNhdG9yKQorICAgICAgICAgICAg
Y2xlYXJUZXh0SW5kaWNhdG9yKCk7CisgICAgfV07CisgICAgCisgICAgaWYgKGNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBbcHJlc2VudGVyIGFuaW1hdGlvbkNvbnRy
b2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29u
dGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICBbcHJlc2VudGVyIHJldmVhbEl0
ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRl
eHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIHJldHVybiBuaWw7CisgICAgCisjZWxzZSAvLyBQ
TEFURk9STShNQUMpCisgICAgCisgICAgVU5VU0VEX1BBUkFNKGNyZWF0ZUFuaW1hdGlvbkNvbnRy
b2xsZXIpOworICAgIFVOVVNFRF9QQVJBTShkaWN0aW9uYXJ5UG9wdXBJbmZvKTsKKyAgICBVTlVT
RURfUEFSQU0odmlldyk7CisgICAgVU5VU0VEX1BBUkFNKHRleHRJbmRpY2F0b3JJbnN0YWxsYXRp
b25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrKTsKKyAgICBVTlVTRURfUEFSQU0oY2xlYXJUZXh0SW5kaWNhdG9yKTsKKyAgICAKKyAg
ICByZXR1cm4gbmlsOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIAorfQorCit2b2lkIERpY3Rpb25hcnlMb29rdXA6OnNo
b3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBO
U1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0
ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248Rmxv
YXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIHNob3dQb3B1
cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5mbywg
dmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0Nv
bnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKwordm9p
ZCBEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKyNpZiBQTEFURk9STShNQUMpCisKK1dLUmV2ZWFsQ29udHJvbGxlciBEaWN0aW9uYXJ5
TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxi
YWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4
dEluZGljYXRvcikKK3sKKyAgICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250
cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0
YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1v
dmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisK
KyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpIC8vIEVOQUJMRShSRVZFQUwpCisKK3N0ZDo6dHVw
bGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKQoreworICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFy
eSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0
UmVzdWx0JikKK3sKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworI2VuZGlmIC8v
IEVOQUJMRShSRVZFQUwpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9X
ZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dl
YkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCA1MTM5YmI2Njc3ZjE1M2Q4NGIzMGViZDAyMGE2
OGViYTgwYjU2NDE1Li5hYmZhZDhlNzM4Nzg1YWMxOTVjODVhZWFiZDVhOTYxOTMxYTVlNjk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFk
ZXJDb2NvYS5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBv
cnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCisjaW1w
b3J0ICJFZGl0b3IuaCIKKyNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgogI2ltcG9ydCAiRmlsZS5o
IgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaAppbmRleCBjYjZkNTNlYjhmOGM0
Y2ZkMzg5NDU3ZjViZWFlMjgzYTM3ZGE4MTkyLi5mOGY3NjFjZGM4MWFlYmQzZGYwODgzN2EzMjMx
YzA4ZjM1YTRmZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cC5oCkBAIC0yMywxNSArMjMsMjUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWYgUExBVEZPUk0oTUFDKQorI3ByYWdtYSBvbmNlCisKKyNpZiBQ
TEFURk9STShDT0NPQSkKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKLSNpbmNs
dWRlIDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+
CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rp
b25HZXN0dXJlUmVjb2duaXplclNQSS5oPgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKICNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KIAogT0JKQ19DTEFTUyBOU1ZpZXc7CiBPQkpDX0NMQVNTIFBE
RlNlbGVjdGlvbjsKIAorI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVkZWYgaWQgPE5TSW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gV0tSZXZlYWxDb250cm9sbGVyOworI2Vsc2UKK3R5
cGVkZWYgaWQgV0tSZXZlYWxDb250cm9sbGVyOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtNDgsOCArNTgs
MTEgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2hvd1BvcHVw
KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5jdGlv
bjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFj
aywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9W
aWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgaGlkZVBvcHVwKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgaWQgPE5TSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlckZvclBv
cHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxs
YmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CisgICAgCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgYW5pbWF0aW9u
Q29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwg
Y29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJ
bnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRS
ZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQorICAgIAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbSBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlOWU0NDc0YTQ5ZmNjOWIwOTViMmY0YmRhNmM5YWUzZjM4
Y2ZlNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDM4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIkRpY3Rpb25hcnlMb29rdXAuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFJFVkVBTCkKLQotI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkVkaXRpbmcuaCIK
LSNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgotI2ltcG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQg
IkZyYW1lU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCi0jaW1wb3J0ICJI
aXRUZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgotI2lt
cG9ydCAiUmVuZGVyT2JqZWN0LmgiCi0jaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKLSNpbXBvcnQg
IlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVNlbGVjdGlvbi5oIgotI2ltcG9y
dCAiVmlzaWJsZVVuaXRzLmgiCi0jaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+Ci0jaW1wb3J0IDxw
YWwvc3BpL21hYy9Mb29rdXBTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRl
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL1JldmVh
bFNQSS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLSNpbXBvcnQgPHd0
Zi9SZWZQdHIuaD4KLQotQGludGVyZmFjZSBXZWJSZXZlYWxIaWdobGlnaHQgPFJWUHJlc2VudGVy
SGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmplY3QgewotQHByaXZhdGUKLSAgICBGdW5jdGlvbjx2
b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7Ci0gICAgTlNSZWN0IF9oaWdobGlnaHRSZWN0Owot
ICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpf
YXR0cmlidXRlZFN0cmluZzsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U1JlY3QgaGlnaGxpZ2h0UmVjdDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9P
TCB1c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZzsKLS0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5k
aWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yOwotCi1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxIaWdobGlnaHQKLQotQHN5bnRoZXNpemUgaGlnaGxp
Z2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKLUBzeW50aGVzaXplIHVzZURlZmF1bHRIaWdobGlnaHQ9
X3VzZURlZmF1bHRIaWdobGlnaHQ7Ci1Ac3ludGhlc2l6ZSBhdHRyaWJ1dGVkU3RyaW5nPV9hdHRy
aWJ1dGVkU3RyaW5nOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihO
U1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRI
aWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0
ZWRTdHJpbmcKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAKLSAgICBfaGlnaGxpZ2h0UmVjdCA9IGhpZ2hsaWdodFJlY3Q7Ci0gICAg
X3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VEZWZhdWx0SGlnaGxpZ2h0OwotICAgIF9hdHRyaWJ1
dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZzsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVh
clRleHRJbmRpY2F0b3IKLXsKLSAgICBfY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVh
clRleHRJbmRpY2F0b3IpOwotfQotCi0tIChOU0FycmF5PE5TVmFsdWUgKj4gKilyZXZlYWxDb250
ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCByZWN0c0Zvckl0ZW06KFJWSXRlbSAq
KWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0
ZW0pOwotICAgIHJldHVybiBAW1tOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c2VsZi5oaWdobGlnaHRS
ZWN0XV07Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAq
KWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9Q
QVJBTShpdGVtKTsKLSAgICAKLSAgICBmb3IgKE5TVmFsdWUgKnJlY3RWYWwgaW4gY29udGV4dC5p
dGVtUmVjdHNJblZpZXcpIHsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSByZWN0VmFsLnJlY3RWYWx1
ZTsKLQotICAgICAgICAvLyBHZXQgY3VycmVudCBmb250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgYXR0
cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBhZGQgcGFyYWdyYXBoIHN0eWxlIGF0dHJpYnV0ZSBp
biBvcmRlciB0byBjZW50ZXIgdGV4dC4KLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgZm9udEF0dHJpYnV0ZXNJ
blJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSldXSk7
Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFyYWdyYXBoID0g
YWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0XSk7Ci0gICAgICAg
IFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudENlbnRlcl07Ci0gICAgICAg
IFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJhZ3JhcGguZ2V0KCkgZm9yS2V5Ok5TUGFyYWdyYXBo
U3R5bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAKLSAgICAgICAgUmV0YWluUHRyPE5TQXR0cmlidXRl
ZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGF0dHJpYnV0ZXM6YXR0
cmlidXRlcy5nZXQoKV0pOwotICAgICAgICBbc3RyaW5nIGRyYXdJblJlY3Q6cmVjdF07Ci0gICAg
fQotfQotCi0tIChCT09MKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250
ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGlnaHRGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICBy
ZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxpZ2h0OwotfQotCi0tICh2b2lkKXJldmVhbENvbnRl
eHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihS
Vkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9Q
QVJBTShpdGVtKTsKLSAgICBhdXRvIGJsb2NrID0gV1RGTW92ZShfY2xlYXJUZXh0SW5kaWNhdG9y
KTsKLSAgICBpZiAoYmxvY2spCi0gICAgICAgIGJsb2NrKCk7Ci19Ci0KLUBlbmQKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAq
PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAg
IAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07Ci0gICAgCi0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQotICAgICAgICByZXR1cm4geyBu
dWxscHRyLCBuaWwgfTsKLQotICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ug
d2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCi0gICAg
YXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBhdXRv
IHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0KLSAgICAvLyBBcyBjb250
ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRl
eHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
U3RhcnQpOwotICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
RW5kKTsKLQotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQo
KSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwotICAg
IE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOwotICAgIAot
ICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0
KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9
IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBz
ZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9
IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0gICAgCi0gICAgcmV0dXJuIHsgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlv
biwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCi0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLX0KLQot
c3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1
cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3Vs
dCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFn
ZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAK
LSAgICBhdXRvKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAg
ICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxw
dHIsIG5pbCB9OwotCi0gICAgYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7
Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBv
aW50LgotICAgIGF1dG8gZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5J
bm5lck5vZGVGcmFtZSgpOwotICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2lu
dCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgYXV0byBwb3NpdGlv
biA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKLSAgICBpZiAo
cG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKG5vZGUpOwotCi0gICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKLSAgICBOU1JhbmdlIHNlbGVjdGlvblJhbmdlOwotICAgIGludCBoaXRJbmRleDsKLSAg
ICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKLSAgICAKLSAgICBpZiAoc2VsZWN0
aW9uLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikg
ewotICAgICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
OwotICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBz
dXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byBwYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwotICAgICAgICAKLSAgICAg
ICAgYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgICAgICAKLSAgICAgICAg
ZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhF
bmQpOwotICAgICAgICAKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25F
bmQpLmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGlu
Z0ZvckxpbmVSdWxlcyB7IHBvc2l0aW9uIH07Ci0gICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdG
b3JMaW5lUnVsZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOwotICAg
ICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsK
LSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVy
cyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgotICAgICAgICBmdWxsQ2hhcmFj
dGVyUmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRp
b24sIDI1MCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKLSAg
ICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgICAgICAKLSAgICAgICAgc2Vs
ZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICAgICAgaGl0SW5k
ZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9Ci0gICAgCi0gICAg
TlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5n
ZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5n
ZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwotICAgIAotICAg
IFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7
Ci0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFu
Y2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2Vd
KTsKLSAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5n
ZTsKLQotICAgIGlmIChoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFo
aWdobGlnaHRSYW5nZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owot
ICAgIAotICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJS
YW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5p
bCB9OwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi19Ci0KLXN0YXRpYyB2b2lkIGV4cGFuZFNlbGVj
dGlvbkJ5Q2hhcmFjdGVycyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbiwgTlNJbnRlZ2VyIG51bWJl
ck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0LCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKQotewotICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHNpemVfdCBvcmlnaW5hbExlbmd0aCA9IHNlbGVj
dGlvbi5zdHJpbmcubGVuZ3RoOwotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFy
dDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07Ci0gICAgCi0gICAgY2hhcmFjdGVyc0FkZGVk
QmVmb3JlU3RhcnQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoOwot
ICAgIAotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bnVtYmVyT2ZDaGFyYWN0
ZXJzVG9FeHBhbmRdOwotICAgIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gc2VsZWN0aW9uLnN0
cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aCAtIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0
OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotc3RkOjp0dXBsZTxOU1N0
cmluZyAqLCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6c3RyaW5nRm9yUERGU2Vs
ZWN0aW9uKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhl
cmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBpZiAoIXNlbGVjdGlvbiB8fCAh
c2VsZWN0aW9uLnN0cmluZy5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci0K
LSAgICBSZXRhaW5QdHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JMb29rdXAgPSBhZG9wdE5T
KFtzZWxlY3Rpb24gY29weV0pOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRv
IHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50Lgot
ICAgIGF1dG8gb3JpZ2luYWxMZW5ndGggPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ10ubGVu
Z3RoOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IDA7Ci0gICAg
TlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gMDsKLSAgICBleHBhbmRTZWxlY3Rp
b25CeUNoYXJhY3RlcnMoc2VsZWN0aW9uRm9yTG9va3VwLmdldCgpLCAyNTAsIGNoYXJhY3RlcnNB
ZGRlZEJlZm9yZVN0YXJ0LCBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCk7Ci0KLSAgICBhdXRvIGZ1
bGxQbGFpblRleHRTdHJpbmcgPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ107Ci0gICAgYXV0
byByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCAw
KTsKLQotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUlu
c3RhbmNlKCkgaW5pdFdpdGhUZXh0OmZ1bGxQbGFpblRleHRTdHJpbmcgc2VsZWN0ZWRSYW5nZTpy
YW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBpdGVtLmdldCgpLmhp
Z2hsaWdodFJhbmdlOwotICAgIAotICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9PSBO
U05vdEZvdW5kKQotICAgICAgICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKLQot
ICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEJlZm9yZSA9IHJhbmdlVG9QYXNzLmxvY2F0aW9uIC0g
ZXh0cmFjdGVkUmFuZ2UubG9jYXRpb247Ci0gICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQWZ0ZXIg
PSAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gKyBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpIC0gKHJh
bmdlVG9QYXNzLmxvY2F0aW9uICsgb3JpZ2luYWxMZW5ndGgpOwotCi0gICAgW3NlbGVjdGlvbiBl
eHRlbmRTZWxlY3Rpb25BdFN0YXJ0Omxvb2t1cEFkZGVkQmVmb3JlXTsKLSAgICBbc2VsZWN0aW9u
IGV4dGVuZFNlbGVjdGlvbkF0RW5kOmxvb2t1cEFkZGVkQWZ0ZXJdOwotCi0gICAgQVNTRVJUKFtz
ZWxlY3Rpb24uc3RyaW5nIGlzRXF1YWxUb1N0cmluZzpbZnVsbFBsYWluVGV4dFN0cmluZyBzdWJz
dHJpbmdXaXRoUmFuZ2U6ZXh0cmFjdGVkUmFuZ2VdXSk7Ci0gICAgcmV0dXJuIHsgc2VsZWN0aW9u
LnN0cmluZywgbmlsIH07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAg
cmV0dXJuIHsgQCIiLCBuaWwgfTsKLX0KLQotc3RhdGljIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXI+IHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihi
b29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8m
IGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2
b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywg
Y29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3
Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRp
Y2F0b3IpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlm
ICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9u
cyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkKLSAgICAgICAgW211dGFibGVP
cHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25zXTsKLQotICAgIGF1dG8gdGV4
dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRl
eHRJbmRpY2F0b3IpOwotICAgIAotICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVy
ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOwotICAgIAotICAg
IE5TUmVjdCBoaWdobGlnaHRSZWN0OwotICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOwotICAg
IAotICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7Ci0gICAgICAg
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsK
LQotICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4
dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07
Ci0gICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
KTsKLSAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2spIHsKLSAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9
IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Zmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxl
Y3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKLSAgICAgICAgcG9pbnRlckxvY2F0
aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0gICAgICAg
IAotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcmlnaW47Ci0gICAgICAgIAotICAgICAgICBoaWdobGlnaHRSZWN0
ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwot
ICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5l
T3JpZ2luIHRvVmlldzpuaWxdOwotICAgIH0KLSAgICAKLSAgICBSZXRhaW5QdHI8V2ViUmV2ZWFs
SGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBh
bGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdo
bGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmlu
ZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKLSAgICBSZXRh
aW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVz
ZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9p
bnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRl
ckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7Ci0gICAgCi0gICAgUmV0
YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0
V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmlu
ZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7Ci0gICAgCi0gICAgW3dlYkhpZ2hs
aWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGln
aGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3Ip
XSB7Ci0gICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCi0gICAgICAgICAgICBjbGVhclRl
eHRJbmRpY2F0b3IoKTsKLSAgICB9XTsKLSAgICAKLSAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZv
ckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNv
bnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVt
LmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQo
KSBvcHRpb25zOm5pbF07Ci0gICAgcmV0dXJuIG5pbDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotdm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpz
aG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywg
TlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZs
b2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICBzaG93UG9w
dXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25hcnlQb3B1cEluZm8s
IHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdD
b252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Ci19Ci0KLXZv
aWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0KLSAgICBpZiAoIWdldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNz
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBbZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xh
c3MoKSBoaWRlRGVmaW5pdGlvbl07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
fQotCi1pZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBEaWN0aW9uYXJ5
TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxi
YWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4
dEluZGljYXRvcikKLXsKLSAgICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250
cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0
YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1v
dmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJ
S2l0U1BJLmgKaW5kZXggMTQzZjE2Yzk5MmY2Mzc5MDI1Mjk0YmM2NzJmNDFlZGZhMzQwYTQ0NC4u
MjMyMzc5NjlmZDM1NDI2ZmVlZTkzZTAwODVlZWQ5NzdmNDQwZDk5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTczMyw2ICs3MzMsOSBAQCBzdHJ1Y3Qg
X1VJV2ViVG91Y2hFdmVudCB7CiAgICAgYm9vbCBpc1BvdGVudGlhbFRhcDsKIH07CiAKK0BpbnRl
cmZhY2UgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCitA
ZW5kCisKIEBjbGFzcyBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXI7CiAKIEBwcm90
b2NvbCBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29h
Lm1tCmluZGV4IGY1Njg3NWRmZjNhMWNjNDVlYmVlNjE3MjE1Y2U5NTcyM2Y1M2RlNGUuLjY1YWVj
ZDkyMTkyZmU2NjYxZjFiYWE0MmQzNDA3ODZjZTRkMWQ1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC0zMyw2ICszMyw3
IEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdTUEkuaCIK
ICNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKKyNpbXBvcnQgIldlYlBhZ2VNZXNzYWdl
cy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdJ
dGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0xODksNSArMTkw
LDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUNsb25lQXR0YWNobWVudChSZWY8QVBJ
OjpBdHRhY2htZW50PiYmIGZyb21BdHRhY2htZW50CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQorICAgIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK3sK
KyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24ocG9pbnQpLCBtX3BhZ2VJRCk7Cit9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKSwgbV9wYWdl
SUQpOwogfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCBhODA3Y2Nk
MmZhY2ZlNzhjZjkxNGJkZjQzZWQyNDk3YWRjYzhmYzhjLi5kYTI2MzMyMjE0Njc5ZmQ5MWNjNTRk
MGZjODRlYzgyMzA3N2U0ZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC04Nyw2ICs4Nyw3IEBAIGNsYXNz
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9
CiAKK0BjbGFzcyBfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBfVUlIaWdobGln
aHRWaWV3OwogQGNsYXNzIF9VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
OwogQGNsYXNzIFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcjsKQEAgLTIxNSw2ICsyMTYsNyBAQCBz
dHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAg
IFJldGFpblB0cjxVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI+IF9ob3Zlckdlc3R1cmVSZWNvZ25p
emVyOworICAgIFJldGFpblB0cjxfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcj4gX2xvb2t1cEdl
c3R1cmVSZWNvZ25pemVyOwogI2VuZGlmCiAKICAgICBSZXRhaW5QdHI8VUlXS1RleHRJbnRlcmFj
dGlvbkFzc2lzdGFudD4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRl
eCA2MGNmYjhmMjRkOWM2MGEzZTMyMjA5OWQyOGYyNWY1MDBjY2U0MzZkLi5hYmIwNGE0ZGE3ZWQx
ZjQxNTQwMGYxY2JiZmUzODJjYTNiNWZhODlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTExMiw2ICsx
MTIsNyBAQAogI2lmIFBMQVRGT1JNKElPU01BQykKICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZl
bnQuaCIKICNpbXBvcnQgPFVJS2l0L1VJSG92ZXJHZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9y
dCA8VUlLaXQvX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgPHBhbC9zcGkv
aW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNlbmRpZgogCkBAIC02NDksNiArNjUwLDExIEBA
IC0gKHZvaWQpc2V0dXBJbnRlcmFjdGlvbgogICAgIF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyID0g
YWRvcHROUyhbW1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6
c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdlZDopXSk7
CiAgICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwogICAgIFtz
ZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsK
KyAgICAKKyAgICBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbX1VJTG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxl
Y3RvcihfbG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6KV0pOworICAgIFtfbG9va3VwR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6
ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICAKICNlbmRpZgogCiAgICAg
X3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1dLU3ludGhldGljQ2xpY2tU
YXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKF9zaW5nbGVUYXBDb21taXRlZDopXSk7CkBAIC03NTksNiArNzY1LDkgQEAgLSAodm9p
ZCljbGVhbnVwSW50ZXJhY3Rpb24KICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW19ob3Zlckdl
c3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVy
ZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAorICAgIFtf
bG9va3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiByZW1v
dmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2Vu
ZGlmCiAKICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07
CkBAIC04NDYsNiArODU1LDcgQEAgLSAodm9pZClfcmVtb3ZlRGVmYXVsdEdlc3R1cmVSZWNvZ25p
emVycwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9zdHlsdXNTaW5nbGVUYXBH
ZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFtzZWxm
IHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsK
KyAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6
ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTg2MSw2ICs4NzEsNyBAQCAtICh2b2lkKV9hZGRE
ZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6
X3N0eWx1c1NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFURk9STShJ
T1NNQUMpCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29n
bml6ZXIuZ2V0KCldOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0
dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtMTQ2Nyw2ICsxNDc4LDEwIEBA
IC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJl
UmVjb2duaXplciBzaG91bGRSZWNvZ25pCiAKICAgICBpZiAoW2dlc3R1cmVSZWNvZ25pemVyIGlz
S2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBjbGFzc11dIHx8IFtvdGhlckdl
c3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBj
bGFzc11dKQogICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAgIGlmICgoW2dlc3R1cmVSZWNv
Z25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0g
JiYgW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlMb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplciBjbGFzc11dKSB8fCAoW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5k
T2ZDbGFzczpbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBjbGFzc11dICYmIFtnZXN0dXJl
UmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBjbGFz
c11dKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKwogI2VuZGlmCiAgICAgaWYgKGlzU2FtZVBhaXIo
Z2VzdHVyZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6ZXIsIF9oaWdobGlnaHRMb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSwgX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0
KCkuZm9yY2VQcmVzc0dlc3R1cmUpKQogICAgICAgICByZXR1cm4gWUVTOwpAQCAtNjA1Nyw2ICs2
MDcyLDEyIEBAIC0gKEJPT0wpYWxsb3dzRGljdGF0aW9uSW5wdXRGb3JMaXN0Vmlld0NvbnRyb2xs
ZXI6KFBVSUNRdWlja2JvYXJkVmlld0NvbnRyb2xsZXIKICNlbmRpZiAvLyBQTEFURk9STShXQVRD
SE9TKQogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQorLSAodm9pZClfbG9va3VwR2VzdHVyZVJlY29n
bml6ZWQ6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgoreworICAgIE5T
UG9pbnQgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcyA9IFtnZXN0dXJlUmVjb2duaXplciBsb2Nh
dGlvbkluVmlldzpzZWxmXTsKKyAgICBfcGFnZS0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExv
Y2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQobG9jYXRpb25JblZpZXdDb29yZGluYXRlcykpOwor
fQorCiAtICh2b2lkKV9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hhbmdlZDooVUlHZXN0dXJlUmVj
b2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiB7CiAgICAgaWYgKCFfcGFnZS0+aXNWYWxpZCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5k
ZXggYjQ3M2YwODFhNTA3NWU0NDNjY2UzOWI1ZGMzNzg1NGJkNjhkODZmMi4uMjc5NWY3MzBiYmZl
YzYyZTQ0ZjU0ZjZhODA5YzgyYmFiNjMzZDM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC0xMjEsMTEgKzEyMSw2IEBAIGJvb2wgV2Vi
UGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6Omdlc3R1cmVDYWxsYmFjayhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2U8R2VzdHVyZUNhbGxiYWNr
PihjYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tCmluZGV4IGZmZmM1ZTA4YTE2NzBhMGNhZjE1M2VjNzBmYTcyMDIxNzIwZTViN2Eu
LmUyYWIyOWMyYjVjNjcxNzU4NDYzN2IzYjdhZWNjMjA4Yjc2MzY4NjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpAQCAtMzIzLDIyICszMjMs
NiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UHJvbWlzZWREYXRhRm9ySW1hZ2UoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgUwogCiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLXsKLSAgICBp
ZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9u
KCksIG1fcGFnZUlEKTsKLX0KLQogLy8gQ29tcGxleCB0ZXh0IGlucHV0IHN1cHBvcnQgZm9yIHBs
dWctaW5zLgogdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4o
dWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
dGV4dElucHV0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDNlNzk0MzFmOTM3MTE0YzQxZjlkMmRmZDU4
ZTBiNGY3MjE4MTU5YTYuLmEzOGNkMmJmNjM3OTRjOGU5ZjFkMjEyYTNlNzhiM2U4YzRlZjhjNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9X
ZWJQYWdlQ29jb2EubW0KQEAgLTI2LDkgKzI2LDIwIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIldlYlBhZ2UuaCIKIAorCiAjaW1wb3J0ICJMb2FkUGFyYW1ldGVycy5oIgorI2ltcG9y
dCAiUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbXBv
cnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3Iu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zv
Y3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVJlbmRl
clN0eWxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jl
bmRlck9iamVjdC5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAKQEAgLTU5LDYgKzcwLDExNCBA
QCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm8oQ2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpOb3dQ
bGF5aW5nSW5mb0NhbGxiYWNrKGhhc0FjdGl2ZVNlc3Npb24sIHJlZ2lzdGVyZWRBc05vd1BsYXlp
bmdBcHBsaWNhdGlvbiwgdGl0bGUsIGR1cmF0aW9uLCBlbGFwc2VkVGltZSwgdW5pcXVlSWRlbnRp
ZmllciwgY2FsbGJhY2tJRCkpOwogfQorICAgIAordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKK3sKKyAg
ICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWlu
RnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlzIG92ZXIuCisgICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRl
c3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0ZDo6dGllKHJhbmdlLCBvcHRp
b25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7Cisg
ICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8qIGZyYW1lID0g
cmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0aW9u
cywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Cit9CisKK3Zv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZy
YW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKKyAgICBz
dGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisgICAgICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBv
cHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKK30KKwordm9pZCBXZWJQYWdlOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgYXV0byYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJv
dW5jZUFuZENyb3NzZmFkZSk7Cit9CisgICAgCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFy
eSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0
aW9uVHJhbnNpdGlvbikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShmcmFtZSwg
cmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Cit9CisKK0RpY3Rpb25h
cnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBm
cmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgRWRp
dG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKKyAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGlj
dGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKKyAgICAKKyAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRp
Y3Rpb25hcnlQb3B1cEluZm87CisgICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2Uo
KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1
cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgcmFuZ2UuYWJzb2x1dGVU
ZXh0UXVhZHMocXVhZHMpOworICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWRp
dG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1
cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgSW50UmVjdCByYW5nZVJl
Y3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91
bmRpbmdCb3goKSk7CisgICAgCisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uu
c3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGZsb2F0IHNjYWxlZEFzY2VudCA9
IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKiBwYWdlU2NhbGVGYWN0b3Io
KSA6IDA7CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50KHJhbmdl
UmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQpOworICAgIGRpY3Rpb25hcnlQ
b3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7CisKKyNpZiBQTEFURk9STShNQUMpCisKKyAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpO
byk7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxl
ZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKKyAg
ICAKKyAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJl
ZEZvbnRNYW5hZ2VyXTsKKyAgICAKKyAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0
dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3Ro
XSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFu
Z2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5
XSk7CisgICAgICAgIAorICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBv
YmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChmb250KQorICAg
ICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250
LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAg
ICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CisgICAgICAgIAorICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5n
IGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CisgICAg
fV07CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAgVGV4dEluZGljYXRvck9w
dGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1Jl
Y3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOworICAgIGlmIChwcmVzZW50YXRp
b25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3Vu
Y2VBbmRDcm9zc2ZhZGUpCisgICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRv
ck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7CisgICAgCisgICAg
UmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pOworICAgIGlmICghdGV4dEluZGljYXRvcikgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5
UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRp
Y2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGRp
Y3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0
cmluZzsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgIHJldHVybiBkaWN0aW9uYXJ5UG9w
dXBJbmZvOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMTI3ZDg0
MTExZTczMGY1ZjAyNGI0YzRlODc5MWEyOTk4YzJiOWJiOC4uN2YzMDE1NDg1ODVkZThmMzBkMDVh
NTVjMDIyNzhlMGJmMDI3Yjc5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0xOTEsNiArMTkxLDcgQEAgbWVzc2Fn
ZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICAjIERpY3Rpb25hcnkgc3VwcG9ydC4KKyAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3Vy
cmVudFNlbGVjdGlvbigpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKFdl
YkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCiAjZW5kaWYKIApAQCAtMTk5LDEwICsyMDAsNiBAQCBt
ZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBSZW1vdmVEYXRhRGV0ZWN0
ZWRMaW5rcygpIC0+IChzdHJ1Y3QgV2ViS2l0OjpEYXRhRGV0ZWN0aW9uUmVzdWx0IHJlc3VsdCkg
QXN5bmMKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLSNlbmRpZgotCiAgICAgQ2hhbmdlRm9udChXZWJD
b3JlOjpGb250Q2hhbmdlcyBjaGFuZ2VzKQogICAgIENoYW5nZUZvbnRBdHRyaWJ1dGVzKFdlYkNv
cmU6OkZvbnRBdHRyaWJ1dGVDaGFuZ2VzIGNoYW5nZXMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZWFjNGY0ZmFhMzVk
MWJjMmZmYmQ5M2E1OWNmOGM3YjZkNDZlZjkyYi4uNmU1YTZkMTg4NWQ1ZDRiZjJlMzAyNDZhMDVl
MmE4YjYzNmYyOGI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxNywyMSArNDE3LDYgQEAgdm9pZCBXZWJQYWdlOjpz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rp
b24oRnJhbWUmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiwgUmFuZ2UmLCBOU0Rp
Y3Rpb25hcnkgKiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0Jl
aGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCop
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNDczM2IxY2JmMmZlNDVjZDlkMGNl
YTdlZWY5YmM3YzM4YWZhZjdlNC4uZmE3YTZhYWYxYjYwYmRhOTBkY2QwNzliYTFhOTQzNmYxMjE2
YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KQEAgLTM4OSwxMDIgKzM4OSw3IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2Vs
ZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxiYWNrKGZvbnROYW1lLCBmb250U2l6ZSwgc2VsZWN0
aW9uSGFzTXVsdGlwbGVGb250cywgY2FsbGJhY2tJRCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdl
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxv
YXRQb2ludCkKLXsKLSAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFt
ZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAgICAgICAgaWYgKHBsdWdpblZpZXctPnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4K
LSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndp
bmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUo
cmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQo
cmVzdWx0KTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBm
cmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsICpyYW5nZSwgb3B0
aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7Ci19Ci0K
LXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUm
IGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsKLSAg
ICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJh
bmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAg
ICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdl
LCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLX0KIAotdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCi17Ci0gICAgYXV0byYg
ZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwot
ICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
OkJvdW5jZUFuZENyb3NzZmFkZSk7Ci19Ci0KLURpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6
ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBO
U0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
IHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5l
ZGl0b3IoKTsKLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVl
KTsKLQotICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBp
ZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBl
ZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJl
dHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBpZiAocXVh
ZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAg
fQotCi0gICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5k
b3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0KLSAgICBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7Ci0gICAg
ZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQo
KSAqIHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdp
biA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2Vu
dCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKLQotICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5v
KTsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7Ci0KLSAgICBO
U0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXTsKLQotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAg
dXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9P
TCAqc3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVk
QXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLQotICAgICAg
ICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChmb250KQotICAgICAgICAgICAgZm9udCA9IFtmb250
TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2Fs
ZUZhY3RvcigpXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAgICBbc2NhbGVkQXR0cmli
dXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0KLSAgICAg
ICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0
ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwotICAgIH1dOwotCi0gICAgVGV4dEluZGljYXRvck9wdGlv
bnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RB
bmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOwotICAgIGlmIChwcmVzZW50YXRpb25U
cmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VB
bmRDcm9zc2ZhZGUpCi0gICAgICAgIGluZGljYXRvck9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9w
dGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7Ci0KLSAgICBSZWZQdHI8
VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhS
YW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0g
ICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0
aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cElu
Zm87Ci0gICAgfQotCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4
dEluZGljYXRvci0+ZGF0YSgpOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0
cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZzsKLQotICAgIGVkaXRvci5zZXRJc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVw
SW5mbzsKLX0KIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCkBAIC01MzksMTEgKzQ0NCw2
IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclNl
bGVjdGlvbkluUERGUGx1Z2luKFBERlNlbGVjCiAKICNlbmRpZgogCi12b2lkIFdlYlBhZ2U6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2Us
IE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKSk7Ci19
Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIC8vIEZp
cnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5jZSB0byBoYW5kbGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356053</attachid>
            <date>2018-11-29 13:50:18 -0800</date>
            <delta_ts>2018-11-29 14:19:38 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191732-20181129135018.patch</filename>
            <type>text/plain</type>
            <size>75706</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Njg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhiYzAzMjJkNTNkNDBi
OWUyZWY3MGUyMjIxMWVlM2NhNDgwYTJkYi4uZDllYzM0NTMzOTM0ZjZkNTI1MGM5NzIwZjQ4YTk3
NzkwZTNjZGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTI5ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE5vdCBjdXJyZW5sdHkgdGVzdGFibGUK
KworICAgICAgICBEaWN0aW9uYXJ5TG9va3VwIHVzZXMgUmV2ZWFsIG5vdywgd2hpY2ggaXMgc2xh
dGVkIHRvIGJlIGNyb3NzLXBsYXRmb3JtLgorICAgICAgICBUaGF0IHBhdGNoIGdhdGVzIHRoZSBw
YXJ0cyBvZiBEaWN0aW9uYXJ5TG9va3VwIHRoYXQgY3VycmVudGx5IGRvIG5vdCBoYXZlCisgICAg
ICAgIGFuIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbiBvbiBpT1MuIE9uY2UgUmV2ZWFsIGlzIHJl
YWR5LCB0aGlzIGNvZGUgd2lsbCBiZQorICAgICAgICByZXBsYWNlZCBvciBleHBhbmRlZCB1cG9u
LCBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cCk6CisgICAgICAgIChXZWJD
b3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKToKKwogMjAxOC0xMS0y
OSAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CiAKICAgICAgICAg
Q1NTIFBhaW50aW5nIEFQSSBzaG91bGQgcGFzcyAndGhpcycgY29ycmVjdGx5IHRvIHBhaW50IGNh
bGxiYWNrLCBhbmQgcmVwYWludCB3aGVuIHByb3BlcnRpZXMgY2hhbmdlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cKaW5kZXggYTQ1ODI3YmNjZDMzM2ZhMjU4OWY5NDE4MGQ0MjhmYWI2MTg0NDhjZC4uYjAwNTc1
NWExMDBhOTliNmQ5NTUzNGEyNGEyYjAyZmFlOGIyYjVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMjkgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVy
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3Mg
cGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgKiBwYWwvc3BpL21hYy9Mb29rdXBTUEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaDoKKwogMjAxOC0xMS0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm5pemUgdGhlIGNoZWNrIGZvciBrQ0ZVUkxSZXF1ZXN0
Q29udGVudERlY29kZXJTa2lwVVJMQ2hlY2sgZXhpc3RlbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzNDEyZGJl
MTIxOTRjYTM2YTMxZDg2NjMzYWZkZTQzOWU0MWM2MDMuLmEzOTQ3YWRiZTBhYWMwN2RlMjQ4ZGU3
Yjg2OGU1OWQzYTMyYzVjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMjkg
IE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3Zl
IExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgTG9va3VwIGlzIGJlaW5nIHJl
cGxhY2VkIGJ5IFJldmVhbC4gVGhpcyBmcmFtZXdvcmsgc2hvdWxkIHdvcmsgb24gYWxsIHBsYXRm
b3Jtcy4KKyAgICAgICAgVGhlIHBhdGNoIG1vdmVzIHRoZSBjb2RlIHRoYXQgd2UgZXhwZWN0IHdp
bGwgYmUgbmVlZGVkIGZvciBhbGwgcGxhdGZvcm1zIHRvIHRoZSBtb3JlCisgICAgICAgIGdlbmVy
YWwgY29jb2EgYXJlYS4gVGhpcyBwYXRjaCBjaGFuZ2VzIG5vIGZ1bmNhdGlvbmFsaXR5LCBhbmQg
c2hvdWxkIG5vdCBjaGFuZ2UKKyAgICAgICAgYW55dGhpbmcgY3VycmVudGx5LiBUaGlzIHdvcmsg
d2lsbCBiZSBidWlsZCBvbiBsYXRlciB3aGVuIFJldmVhbCBpcyByZWFkeSB0byBzdXBwb3J0Cisg
ICAgICAgIG11bHRpcGxlIHBsYXRmb3Jtcy4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3Mv
VUlLaXRTUEkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1
cEludGVyYWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2xlYW51cEludGVyYWN0
aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3JlbW92ZURlZmF1bHRHZXN0dXJlUmVj
b2duaXplcnNdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYWRkRGVmYXVsdEdlc3R1cmVS
ZWNvZ25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGdlc3R1cmVSZWNvZ25pemVy
OnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9sb29rdXBHZXN0dXJlUmVjb2duaXplZDpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5m
b0ZvclJhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwT2ZDdXJyZW50U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisK
IDIwMTgtMTEtMjkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAg
ICAgTW9kZXJuaXplIHRoZSBjaGVjayBmb3Iga0NGVVJMUmVxdWVzdENvbnRlbnREZWNvZGVyU2tp
cFVSTENoZWNrIGV4aXN0ZW5jZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3ZjI0NjczZTUxNzM2OTdmNWNiY2U3ZWMzYTQ1MjE2
Y2Y0ODMxMTMuLmI4Y2MzNTg2M2NiZDJlZDU1Y2VkYTdjNTZhYzE4MjE5ODNlNDczOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQwNiw2ICs0MDYsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERCQzMxNyAvKiBQYXNzS2l0
U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8qIHB0aHJlYWRTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6Q29yZVNQSS5oICovLAor
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQk1NzBB
QjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAqLywKIAkJCQkwQzJEQTEz
QzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJCTBDMkRBMTJCMUYzQkVC
NDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00NzEsNyArNDcyLDYgQEAK
IAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEkuaCAqLywKIAkJCQlBMTAy
NjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8sCiAJCQkJMEM3Nzg1ODcx
RjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAotCQkJCTQ0Mjk1NkNDMjE4
QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3NUI0ODFGNkFGRjhFMDBD
NEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3Nzg1ODgxRjQ1MTMwRjAw
RjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJiN2M0YTA5MWJjOWRkYmM5NDYy
YjU4NzE5YWI1MzM5MWI0NzBmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPG9iamMvcnVudGlt
ZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRl
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JL
KFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWxDb3JlKQorU09GVF9M
SU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09GVF9MSU5LX0NMQVNTX09Q
VElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZl
YWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIEVOQUJMRShSRVZFQUwpCisKKyNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQorCisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8UmV2ZWFsL1JW
UHJlc2VudGVyLmg+CisjaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+CisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQorI2ltcG9ydCA8UmV2ZWFsQ29yZS9SVlNlbGVjdGlvbi5oPgorI2ltcG9ydCA8UmV2
ZWFsQ29yZS9SZXZlYWxDb3JlLmg+CisKKyNlbHNlIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
CisKKworQHByb3RvY29sIFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU7CisKK0BpbnRlcmZh
Y2UgUlZJdGVtIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0
ZWRSYW5nZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJW
U2VsZWN0aW9uIDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJ
bnRlZ2VyKWNsaWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilz
ZWxlY3RlZFJhbmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVT
ZWxlY3Rpb247CitAZW5kCisKKyNpZiBQTEFURk9STShNQUMpCitAaW50ZXJmYWNlIFJWUHJlc2Vu
dGluZ0NvbnRleHQgOiBOU09iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUG9pbnRlckxv
Y2F0aW9uSW5WaWV3OihOU1BvaW50KXBvaW50ZXJMb2NhdGlvbkluVmlldyBpblZpZXc6KE5TVmll
dyAqKXZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdh
dGU+KWhpZ2hsaWdodERlbGVnYXRlOworQGVuZAorI2VuZGlmCisKK0Bwcm90b2NvbCBSVlByZXNl
bnRlckhpZ2hsaWdodERlbGVnYXRlIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAoTlNBcnJheSA8
TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0
IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKK0BvcHRpb25hbAorLSAodm9pZClyZXZlYWxD
b250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRl
bTooUlZJdGVtICopaXRlbTsKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29u
dGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKK0BlbmQKKwor
QGludGVyZmFjZSBSVkRvY3VtZW50Q29udGV4dCA6IE5TT2JqZWN0IDwgTlNTZWN1cmVDb2Rpbmcg
PgorQGVuZAorCitAaW50ZXJmYWNlIFJWUHJlc2VudGVyIDogTlNPYmplY3QKKyNpZiBQTEFURk9S
TShNQUMpCistIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1h
dGlvbkNvbnRyb2xsZXJGb3JJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZE
b2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJl
c2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkg
KilvcHRpb25zOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKy0gKEJPT0wpcmV2ZWFsSXRlbToo
UlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1l
bnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2Vu
dGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKK0BlbmQKKworI2Vu
ZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCisjZW5kaWYgLy8gRU5BQkxFKFJFVkVB
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEku
aCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaAppbmRleCBlYjdm
OTUxZjcxYzc1YzgxMjE3YjIyZTc4YWRhZDMwZTRkNmE1YzA0Li5lMGEzMzc1ZDMwY2M4ODlmMTM1
ZWEyYTExZDQ3ZDBkYTk0Zjk4YTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFj
L0xvb2t1cFNQSS5oCkBAIC0yMywxMiArMjMsMTMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
KworI2lmIFBMQVRGT1JNKE1BQykKKwogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0
IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKLQogU09GVF9M
SU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKExvb2t1cCkKIFNPRlRfTElOS19DTEFTU19P
UFRJT05BTChMb29rdXAsIExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZSkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkNmI4ZGE0MmM4NTk5MGFlMzJlYTY3YTBhZjc3NTNmM2RiOTgyOGE1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL21hYy9SZXZlYWxTUEkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgPG9i
amMvcnVudGltZS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0
dXJlUmVjb2duaXplclNQSS5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0KLVNPRlRf
TElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWwpCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdP
UksoUmV2ZWFsQ29yZSkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2Vu
dGVyKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50aW5nQ29udGV4
dCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVkl0ZW0pCi1TT0ZUX0xJ
TktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZTZWxlY3Rpb24pCi0KLSNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQotCi0jaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50ZXIuaD4KLSNpbXBv
cnQgPFJldmVhbC9SZXZlYWwuaD4KLSNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4K
LSNpbXBvcnQgPFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgotCi0KLSNlbHNlCi0KLUBpbnRlcmZh
Y2UgUlZJdGVtIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0
ZWRSYW5nZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotQGVuZAotCi1AaW50ZXJmYWNlIFJW
U2VsZWN0aW9uIDogTlNPYmplY3QKLSsgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJ
bnRlZ2VyKWNsaWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilz
ZWxlY3RlZFJhbmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVT
ZWxlY3Rpb247Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAotLSAo
aWQ8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilhbmltYXRpb25Db250cm9s
bGVyRm9ySXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250
ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250
ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsK
LS0gKEJPT0wpcmV2ZWFsSXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9j
dW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNl
bnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICop
b3B0aW9uczsKLUBlbmQKLQotI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMDYzZGZkYzIyODk2M2ZiYWU1OTYwZTAyNGNiOGYyNGZk
MzdhNWVkYS4uMDYyY2RkN2YwN2Q3MGUzMGQ5ZjA2ZjMwNTczZDY5N2ZiZmYxNWI2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC03Nyw2ICs3Nyw3IEBAIGVkaXRpbmcvU2VsZWN0aW9uUmVj
dEdhdGhlcmVyLmNwcAogZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKIAogZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCitlZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KIGVk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KIGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZUNo
YW5nZXNDb2NvYS5tbQogZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCkBAIC05
MCw3ICs5MSw2IEBAIGVkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCiBlZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KIAogZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9s
bGVyLm1tCi1lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KIGVkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDE2ZDMyNmI1ZTkxN2VjM2VkZTdlMGFhMzUz
YjJlZjczMDI2ZjJiZS4uZDE4Y2U2MGIxNzhjMWNiMWRlZjFkMzlhYWRmY2U3NzhiMzg4ODlkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjA1MjMsNiArMjA1MjMsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQzUyMjdERUYx
QzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKIAkJCQlDNTIyN0RGMDFDM0M2
REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSAqLywKKwkJCQk5MzdGRjNENjFBMTAxMzFC
MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk5QjU1RUVFODFCM0U4ODk4
MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRD
QTcyIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0gKi8sCiAJCQkJRjQ4RDJBNzUyMTU2
RkU1NzAwQzY3NTJCIC8qIEZvbnRBdHRyaWJ1dGVzQ29jb2EubW0gKi8sCkBAIC0yNjIyOSw3ICsy
NjIzMCw2IEBACiAJCQkJQ0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4
dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNFN0IyREIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTM3RkYzRDQxQTEwMTJENjAwOEVC
QTMxIC8qIERpY3Rpb25hcnlMb29rdXAuaCAqLywKLQkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJB
MzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk0NDI5NTZDQTIxOEE2RDMwMDA4MERC
NTQgLyogRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSAqLywKIAkJCQlFRDUwMURDNTBCMjQ5RjI5
MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovLAogCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZG
MCAvKiBGcmFtZVNlbGVjdGlvbk1hYy5tbSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDRjNDkwMTZmMTBiNGIy
OGQ5ZmQ1ZDQ5NjVmMzMzYmYyYjE3Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0wLDAgKzEsNDMxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3Rpb25hcnlM
b29rdXAuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoUkVWRUFMKQorCisjaW1w
b3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiRWRpdGluZy5oIgorI2ltcG9ydCAiRm9jdXNDb250
cm9sbGVyLmgiCisjaW1wb3J0ICJGcmFtZS5oIgorI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIK
KyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNp
bXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJSYW5n
ZS5oIgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIK
KyNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgorI2ltcG9ydCAiVmlzaWJsZVNlbGVjdGlvbi5o
IgorI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1JldmVh
bFNQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+CisjaW1wb3J0IDx3dGYv
QmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorCisjaWYgIVBM
QVRGT1JNKFdBVENIKQorCisjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CisKKyNlbmRpZiAvLyAh
UExBVEZPUk0oV0FUQ0gpCisKKyNpZiBQTEFURk9STShNQUMpCisKK0BpbnRlcmZhY2UgV2ViUmV2
ZWFsSGlnaGxpZ2h0IDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPiA6IE5TT2JqZWN0IHsK
K0Bwcml2YXRlCisgICAgRnVuY3Rpb248dm9pZCgpPiBfY2xlYXJUZXh0SW5kaWNhdG9yOworICAg
IE5TUmVjdCBfaGlnaGxpZ2h0UmVjdDsKKyAgICBCT09MIF91c2VEZWZhdWx0SGlnaGxpZ2h0Owor
ICAgIE5TQXR0cmlidXRlZFN0cmluZyAqX2F0dHJpYnV0ZWRTdHJpbmc7Cit9CisKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGln
aGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQg
YXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmc7
CistICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFy
VGV4dEluZGljYXRvcjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViUmV2ZWFsSGlnaGxp
Z2h0CisKK0BzeW50aGVzaXplIGhpZ2hsaWdodFJlY3Q9X2hpZ2hsaWdodFJlY3Q7CitAc3ludGhl
c2l6ZSB1c2VEZWZhdWx0SGlnaGxpZ2h0PV91c2VEZWZhdWx0SGlnaGxpZ2h0OworQHN5bnRoZXNp
emUgYXR0cmlidXRlZFN0cmluZz1fYXR0cmlidXRlZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhp
Z2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0
cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2hpZ2hsaWdodFJl
Y3QgPSBoaWdobGlnaHRSZWN0OworICAgIF91c2VEZWZhdWx0SGlnaGxpZ2h0ID0gdXNlRGVmYXVs
dEhpZ2hsaWdodDsKKyAgICBfYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmc7Cisg
ICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9y
OihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yCit7CisgICAgX2NsZWFyVGV4
dEluZGljYXRvciA9IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKTsKK30KKworLSAoTlNBcnJh
eTxOU1ZhbHVlICo+ICopcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRl
eHQgcmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICByZXR1cm4gQFtbTlNWYWx1ZSB2YWx1
ZVdpdGhSZWN0OnNlbGYuaGlnaGxpZ2h0UmVjdF1dOworfQorCistICh2b2lkKXJldmVhbENvbnRl
eHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IGRyYXdSZWN0c0Zvckl0ZW06KFJWSXRl
bSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgCisgICAgZm9yIChOU1Zh
bHVlICpyZWN0VmFsIGluIGNvbnRleHQuaXRlbVJlY3RzSW5WaWV3KSB7CisgICAgICAgIE5TUmVj
dCByZWN0ID0gcmVjdFZhbC5yZWN0VmFsdWU7CisKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgZm9u
dCBhdHRyaWJ1dGVzIGZyb20gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGFib3ZlLCBhbmQgYWRkIHBh
cmFncmFwaCBzdHlsZSBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gY2VudGVyIHRleHQuCisgICAgICAg
IFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpbc2VsZi5hdHRyaWJ1
dGVkU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbc2VsZi5hdHRy
aWJ1dGVkU3RyaW5nIGxlbmd0aF0pXV0pOworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFy
YWdyYXBoU3R5bGU+IHBhcmFncmFwaCA9IGFkb3B0TlMoW1tOU011dGFibGVQYXJhZ3JhcGhTdHls
ZSBhbGxvY10gaW5pdF0pOworICAgICAgICBbcGFyYWdyYXBoIHNldEFsaWdubWVudDpOU1RleHRB
bGlnbm1lbnRDZW50ZXJdOworICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cGFyYWdyYXBo
LmdldCgpIGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07CisgICAgCisgICAg
ICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltzZWxmLmF0dHJpYnV0ZWRTdHJp
bmcgc3RyaW5nXSBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXMuZ2V0KCldKTsKKyAgICAgICAgW3N0cmlu
ZyBkcmF3SW5SZWN0OnJlY3RdOworICAgIH0KK30KKworLSAoQk9PTClyZXZlYWxDb250ZXh0OihS
VlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzaG91bGRVc2VEZWZhdWx0SGlnaGxpZ2h0Rm9y
SXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBV
TlVTRURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJuIHNlbGYudXNlRGVmYXVsdEhpZ2hsaWdodDsK
K30KKworLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4
dCBzdG9wSGlnaGxpZ2h0aW5nSXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJB
TShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgYXV0byBibG9jayA9IFdU
Rk1vdmUoX2NsZWFyVGV4dEluZGljYXRvcik7CisgICAgaWYgKGJsb2NrKQorICAgICAgICBibG9j
aygpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyBF
TkFCTEUoUkVWRUFMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoUkVWRUFM
KQorCitzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5
TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICgh
Z2V0UlZJdGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAg
CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKKworICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2Ug
anVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCisgICAgYXV0byBzZWxlY3Rp
b25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvbkVu
ZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisKKyAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUg
Z29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCisgICAgYXV0
byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOworICAg
IGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKworICAg
IGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCht
YWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7CisgICAgaW50
IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOworICAgIE5TUmFuZ2UgcmFu
Z2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1Nl
bGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOworICAgIAorICAgIFJlZlB0cjxS
YW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJh
Z3JhcGhFbmQpOworICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0
ZXJSYW5nZS5nZXQoKSk7CisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2Fs
bG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdl
OnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCku
aGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5n
ZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0
UmFuZ2UubGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFz
cygpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvKiBu
b2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUg
fHwgIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
CisgICAgYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBEb24ndCBk
byBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAgIGF1
dG8gZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFt
ZSgpOworICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCisgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBpZiAocG9zaXRpb24uaXNO
dWxsKCkpCisgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5v
ZGUpOworCisgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBO
U1JhbmdlIHNlbGVjdGlvblJhbmdlOworICAgIGludCBoaXRJbmRleDsKKyAgICBSZWZQdHI8UmFu
Z2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKKyAgICAKKyAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikgeworICAgICAgICBh
dXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgICAgICBh
dXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisgICAgICAgIAorICAg
ICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBw
YXJhZ3JhcGhzIG9mIHRleHQuCisgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9m
UGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBl
bmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAgYXV0byByYW5n
ZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0
YXJ0KTsKKyAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFrZVJhbmdlKHBhcmFn
cmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAgZnVsbENoYXJhY3Rl
clJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOworICAgICAg
ICAKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSk7
CisgICAgICAgIAorICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxl
cyB7IHBvc2l0aW9uIH07CisgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMu
ZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOworICAgICAgICBwb3NpdGlv
biA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsKKyAgICAgICAgLy8g
QXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJl
Zm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBy
YW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICAKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2Ug
PSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgTlNSYW5nZSBzZWxl
Y3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0
SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25S
YW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOworICAgIAorICAgIFN0cmluZyBpdGVt
U3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgUmV0YWlu
UHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0
aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2VdKTsKKyAgICBOU1Jh
bmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKKworICAgIGlm
IChoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFoaWdobGlnaHRSYW5n
ZS5sZW5ndGgpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIHJl
dHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxp
Z2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisgICAgCit9CisgICAgCisjaWYgIVBMQVRGT1JNKFdBVENIKQorCitzdGF0aWMg
dm9pZCBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24s
IE5TSW50ZWdlciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBjaGFyYWN0
ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCkK
K3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBzaXplX3Qgb3JpZ2lu
YWxMZW5ndGggPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKKyAgICBbc2VsZWN0aW9uIGV4dGVu
ZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOworICAgIAorICAg
IGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBv
cmlnaW5hbExlbmd0aDsKKyAgICAKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5k
Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKKyAgICBjaGFyYWN0ZXJzQWRkZWRBZnRlckVu
ZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFyYWN0ZXJz
QWRkZWRCZWZvcmVTdGFydDsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisK
K3N0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6
OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFz
cygpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIC8vIERvbid0IGRv
IGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCisgICAgaWYg
KCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4g
eyBAIiIsIG5pbCB9OworCisgICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0aW9uRm9y
TG9va3VwID0gYWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKKworICAgIC8vIEFzIGNvbnRleHQs
IHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFm
dGVyIHRoZSBwb2ludC4KKyAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlvbkZvckxv
b2t1cCBzdHJpbmddLmxlbmd0aDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQmVmb3Jl
U3RhcnQgPSAwOworICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9IDA7Cisg
ICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5nZXQoKSwg
MjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQp
OworCisgICAgYXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxvb2t1cCBz
dHJpbmddOworICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJzQWRk
ZWRCZWZvcmVTdGFydCwgMCk7CisKKyAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHRO
UyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0U3RyaW5n
IHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKKyAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdl
ID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKKyAgICAKKyAgICBpZiAoZXh0cmFjdGVkUmFu
Z2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0
cmluZywgbmlsIH07CisKKyAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSByYW5nZVRv
UGFzcy5sb2NhdGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOworICAgIE5TSW50ZWdlciBs
b29rdXBBZGRlZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFjdGVkUmFu
Z2UubGVuZ3RoKSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3RoKTsKKwor
ICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJlZm9yZV07
CisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFmdGVyXTsK
KworICAgIEFTU0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1bGxQbGFp
blRleHRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOworICAgIHJl
dHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKworICAgIHJldHVybiB7IEAiIiwgbmlsIH07Cit9CisgICAgCisjZW5kaWYgLy8g
IVBMQVRGT1JNKFdBVENIKQorCitzdGF0aWMgV0tSZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9y
Q3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIs
IGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAq
dmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3Qo
RmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBpZiAoIWdl
dFJWSXRlbUNsYXNzKCkgfHwgIWdldFJWUHJlc2VudGVyQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9u
cyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgaWYg
KE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQo
KSkKKyAgICAgICAgW211dGFibGVPcHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRp
b25zXTsKKworICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShk
aWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IpOworICAgIAorICAgIFJldGFpblB0cjxS
VlByZXNlbnRlcj4gcHJlc2VudGVyID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNl
KCkgaW5pdF0pOworICAgIAorICAgIE5TUmVjdCBoaWdobGlnaHRSZWN0OworICAgIE5TUG9pbnQg
cG9pbnRlckxvY2F0aW9uOworICAgIAorICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRl
bnRJbWFnZSgpKSB7CisgICAgICAgIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0
ZXh0SW5kaWNhdG9yLmdldCgpKTsKKworICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdElu
Vmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzKClbMF07CisgICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25S
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIAorICAgICAgICBpZiAocm9vdFZp
ZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2spIHsKKyAgICAgICAgICAgIHRleHRCb3VuZGluZ1Jl
Y3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRl
eHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAgICAgICAgICBzZWxlY3Rpb25C
b3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNh
bGxiYWNrKHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVC
eSh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7CisgICAgICAg
IGhpZ2hsaWdodFJlY3QgPSBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsK
KyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVz
LmxvY2F0aW9uKCk7CisgICAgICAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIE5TUG9pbnQgdGV4
dEJhc2VsaW5lT3JpZ2luID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW47CisgICAgICAgIAor
ICAgICAgICBoaWdobGlnaHRSZWN0ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9v
dFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252
ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5lT3JpZ2luIHRvVmlldzpuaWxdOworICAgIH0KKyAgICAKKyAg
ICBSZXRhaW5QdHI8V2ViUmV2ZWFsSGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhb
W1dlYlJldmVhbEhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGln
aHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudElt
YWdlKCkgYXR0cmlidXRlZFN0cmluZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJp
bmcuZ2V0KCldKTsKKyAgICBSZXRhaW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9
IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2lu
dGVyTG9jYXRpb25JblZpZXc6cG9pbnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERl
bGVnYXRlOihpZDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0Lmdl
dCgpXSk7CisgICAgCisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9j
UlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1
dGVkU3RyaW5nLmdldCgpLnN0cmluZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7
CisgICAgCisgICAgW3dlYkhpZ2hsaWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hs
aWdodCA9IFdURk1vdmUod2ViSGlnaGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92
ZShjbGVhclRleHRJbmRpY2F0b3IpXSB7CisgICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3Ip
CisgICAgICAgICAgICBjbGVhclRleHRJbmRpY2F0b3IoKTsKKyAgICB9XTsKKyAgICAKKyAgICBp
ZiAoY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIg
YW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmls
IHByZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIFtwcmVz
ZW50ZXIgcmV2ZWFsSXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGlu
Z0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07CisgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyNlbHNlIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oY3JlYXRl
QW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgVU5VU0VEX1BBUkFNKGRpY3Rpb25hcnlQb3B1cElu
Zm8pOworICAgIFVOVVNFRF9QQVJBTSh2aWV3KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dEluZGlj
YXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKTsKKyAgICBVTlVTRURfUEFSQU0ocm9vdFZpZXdUb1Zp
ZXdDb252ZXJzaW9uQ2FsbGJhY2spOworICAgIFVOVVNFRF9QQVJBTShjbGVhclRleHRJbmRpY2F0
b3IpOworICAgIAorICAgIHJldHVybiBuaWw7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAg
IAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCit9CisKK3ZvaWQgRGljdGlv
bmFyeUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25h
cnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJ
bmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RG
OjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7
CisgICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9u
YXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJv
b3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRv
cikpOworfQorCit2b2lkIERpY3Rpb25hcnlMb29rdXA6OmhpZGVQb3B1cCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKworV0tSZXZlYWxDb250cm9s
bGVyIERpY3Rpb25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNv
bnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5z
dGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVj
dCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0
ZUFuaW1hdGlvbkNvbnRyb2xsZXIodHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4
dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25D
YWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKK30KKworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKworI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgLy8gRU5BQkxFKFJFVkVB
TCkKKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCit7Cisg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdl
PiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0
KGNvbnN0IEhpdFRlc3RSZXN1bHQmKQoreworICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFJFVkVBTCkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCmluZGV4IDUxMzliYjY2NzdmMTUz
ZDg0YjMwZWJkMDIwYTY4ZWJhODBiNTY0MTUuLmFiZmFkOGU3Mzg3ODVhYzE5NWM4NWFlYWJkNWE5
NjE5MzFhNWU2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2Vi
Q29udGVudFJlYWRlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
V2ViQ29udGVudFJlYWRlckNvY29hLm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJEb2N1
bWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRM
b2FkZXIuaCIKKyNpbXBvcnQgIkVkaXRvci5oIgorI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCiAj
aW1wb3J0ICJGaWxlLmgiCiAjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCiAjaW1wb3J0ICJGcmFtZS5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCmluZGV4
IGNiNmQ1M2ViOGY4YzRjZmQzODk0NTdmNWJlYWUyODNhMzdkYTgxOTIuLmY4Zjc2MWNkYzgxYWVi
ZDNkZjA4ODM3YTMyMzFjMDhmMzVhNGZlYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKQEAgLTIzLDE1ICsyMywyNSBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZiBQTEFURk9STShNQUMpCisjcHJhZ21h
IG9uY2UKKworI2lmIFBMQVRGT1JNKENPQ09BKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeVBvcHVw
SW5mby5oIgotI2luY2x1ZGUgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXJTUEkuaD4KKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL21hYy9O
U0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogCiBPQkpDX0NMQVNTIE5TVmlldzsK
IE9CSkNfQ0xBU1MgUERGU2VsZWN0aW9uOwogCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBp
ZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBXS1JldmVhbENvbnRyb2xs
ZXI7CisjZWxzZQordHlwZWRlZiBpZCBXS1JldmVhbENvbnRyb2xsZXI7CisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CkBAIC00OCw4ICs1OCwxMSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3Rh
bGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3Qp
PiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBoaWRlUG9wdXAoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25D
b250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYsIE5TVmlldyAqLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvcklu
c3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJl
Y3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyAgICAKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFdLUmV2ZWFsQ29udHJv
bGxlciBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5m
byYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZs
b2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBu
dWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxs
cHRyKTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9u
YXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U5ZTQ0NzRhNDlmY2M5YjA5NWIy
ZjRiZGE2YzlhZTNmMzhjZmU0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1t
CisrKyAvZGV2L251bGwKQEAgLTEsMzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRGljdGlvbmFyeUxvb2t1cC5oIgotCi0jaWYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoUkVWRUFMKQotCi0jaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9y
dCAiRWRpdGluZy5oIgotI2ltcG9ydCAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJGcmFt
ZS5oIgotI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKLSNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIu
aCIKLSNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQg
IlJhbmdlLmgiCi0jaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKLSNpbXBvcnQgIlRleHRJdGVyYXRv
ci5oIgotI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlU2VsZWN0
aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKLSNpbXBvcnQgPFBERktpdC9QREZLaXQu
aD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9t
YWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgotI2ltcG9ydCA8cGFs
L3NwaS9tYWMvUmV2ZWFsU1BJLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgotCi1AaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdo
dCA8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7Ci1AcHJpdmF0ZQot
ICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFyVGV4dEluZGljYXRvcjsKLSAgICBOU1JlY3QgX2hp
Z2hsaWdodFJlY3Q7Ci0gICAgQk9PTCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3RyaW5nOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TUmVjdCBoaWdobGlnaHRSZWN0OwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIHVzZURlZmF1bHRIaWdobGlnaHQ7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3Qg
dXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRT
dHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOwotLSAodm9pZClz
ZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0
b3I7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAotCi1Ac3lu
dGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdobGlnaHRSZWN0OwotQHN5bnRoZXNpemUgdXNlRGVm
YXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBzeW50aGVzaXplIGF0dHJpYnV0
ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhp
Z2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJP
T0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJp
bmcgKikgYXR0cmlidXRlZFN0cmluZwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxp
Z2h0UmVjdDsKLSAgICBfdXNlRGVmYXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7
Ci0gICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nOwotICAgIAotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248
dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcgotewotICAgIF9jbGVhclRleHRJbmRpY2F0b3Ig
PSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcik7Ci19Ci0KLS0gKE5TQXJyYXk8TlNWYWx1ZSAq
PiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9y
SXRlbTooUlZJdGVtICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBV
TlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpz
ZWxmLmhpZ2hsaWdodFJlY3RdXTsKLX0KLQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNl
bnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIAotICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZh
bCBpbiBjb250ZXh0Lml0ZW1SZWN0c0luVmlldykgewotICAgICAgICBOU1JlY3QgcmVjdCA9IHJl
Y3RWYWwucmVjdFZhbHVlOwotCi0gICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRl
cyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5
bGUgYXR0cmlidXRlIGluIG9yZGVyIHRvIGNlbnRlciB0ZXh0LgotICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBm
b250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmlu
ZyBsZW5ndGhdKV1dKTsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxl
PiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGlu
aXRdKTsKLSAgICAgICAgW3BhcmFncmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2Vu
dGVyXTsKLSAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JL
ZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgIAotICAgICAgICBSZXRhaW5Q
dHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10g
YXR0cmlidXRlczphdHRyaWJ1dGVzLmdldCgpXSk7Ci0gICAgICAgIFtzdHJpbmcgZHJhd0luUmVj
dDpyZWN0XTsKLSAgICB9Ci19Ci0KLS0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5n
Q29udGV4dCAqKWNvbnRleHQgc2hvdWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRl
bSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGl0ZW0pOwotICAgIHJldHVybiBzZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Ci19Ci0KLS0gKHZv
aWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hs
aWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVh
clRleHRJbmRpY2F0b3IpOwotICAgIGlmIChibG9jaykKLSAgICAgICAgYmxvY2soKTsKLX0KLQot
QGVuZAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwg
TlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1
cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAg
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBo
YXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQg
b3B0aW9ucy4KLSAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpOwotICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLQot
ICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBh
cmFncmFwaHMgb2YgdGV4dC4KLSAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFn
cmFwaChzZWxlY3Rpb25FbmQpOwotCi0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uU3RhcnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5k
KS5nZXQoKSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25T
dGFydCk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtl
UmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJp
bmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8
UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4
dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGhp
Z2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICByZXR1
cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdo
dFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotfQotCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBE
aWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0
JiBoaXRUZXN0UmVzdWx0KQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotICAgIAotICAgIGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAg
cmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICBhdXRvKiBmcmFtZSA9IG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKLQotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJh
Y3RlciBhdCB0aGUgcG9pbnQuCi0gICAgYXV0byBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5y
b3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQ
b2ludChmcmFtZVBvaW50KSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAg
ICBhdXRvIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9p
bnQpOwotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcG9zaXRpb24gPSBmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7Ci0KLSAgICBhdXRvIHNlbGVjdGlvbiA9IGZy
YW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwotICAgIE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7Ci0gICAgaW50
IGhpdEluZGV4OwotICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOwotICAgIAot
ICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJh
bmdlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZp
c2libGVFbmQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2lu
ZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAgYXV0
byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAg
ICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0g
ICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHJhbmdlVG9TZWxl
Y3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0gICAg
ICAgIAotICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHBhcmFncmFwaEVuZCk7Ci0gICAgICAgIAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5T
TWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlvblN0YXJ0
LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0aW9uU3Rh
cnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGhpdEluZGV4ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0
aW9uKS5nZXQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsKLSAgICAgICAgc2VsZWN0
aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFu
dWxhcml0eSk7Ci0gICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVS
dWxlcy5zdGFydCgpOwotICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNl
IDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAg
ICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hh
cmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZnVsbENoYXJh
Y3RlclJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgICAg
IAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwot
ICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1
bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOwotICAg
IH0KLSAgICAKLSAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFz
cygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVl
IHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5p
bF07Ci0gICAgCi0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3Rl
clJhbmdlLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxs
b2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6
c2VsZWN0ZWRSYW5nZV0pOwotICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgp
LmhpZ2hsaWdodFJhbmdlOwotCi0gICAgaWYgKGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uID09IE5T
Tm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgbnVs
bHB0ciwgbmlsIH07Ci0gICAgCi0gICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgq
ZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFu
Z2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICAKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLX0KLQotc3RhdGljIHZv
aWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBO
U0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVy
c0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCi17
Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgc2l6ZV90IG9yaWdpbmFs
TGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRT
ZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICAKLSAgICBj
aGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3Jp
Z2luYWxMZW5ndGg7Ci0gICAgCi0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpu
dW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07Ci0gICAgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQg
PSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFjdGVyc0Fk
ZGVkQmVmb3JlU3RhcnQ7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1z
dGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpz
dHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCi17Ci0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3Mo
KSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBEb24ndCBkbyBh
bnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgotICAgIGlmICgh
c2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsg
QCIiLCBuaWwgfTsKLQotICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckxv
b2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7Ci0KLSAgICAvLyBBcyBjb250ZXh0LCB3
ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRl
ciB0aGUgcG9pbnQuCi0gICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25Gb3JMb29r
dXAgc3RyaW5nXS5sZW5ndGg7Ci0gICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0
YXJ0ID0gMDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAwOwotICAg
IGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0KCksIDI1
MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kKTsK
LQotICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29rdXAgc3Ry
aW5nXTsKLSAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyc0FkZGVk
QmVmb3JlU3RhcnQsIDApOwotCi0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMo
W2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0cmluZyBz
ZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7Ci0gICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9
IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0gICAgCi0gICAgaWYgKGV4dHJhY3RlZFJhbmdl
LmxvY2F0aW9uID09IE5TTm90Rm91bmQpCi0gICAgICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJp
bmcsIG5pbCB9OwotCi0gICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFuZ2VUb1Bh
c3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKLSAgICBOU0ludGVnZXIgbG9v
a3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3RlZFJhbmdl
Lmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7Ci0KLSAg
ICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZvcmVdOwot
ICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRlcl07Ci0K
LSAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxsUGxhaW5U
ZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKLSAgICByZXR1
cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0KLSAgICByZXR1cm4geyBAIiIsIG5pbCB9OwotfQotCi1zdGF0aWMgaWQgPE5TSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRp
b25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlciwgY29uc3QgRGljdGlv
bmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBX
VEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxh
dGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
IGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25zID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBpZiAoTlNEaWN0
aW9uYXJ5ICpvcHRpb25zID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgpKQotICAg
ICAgICBbbXV0YWJsZU9wdGlvbnMgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlvbnNdOwot
Ci0gICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25h
cnlQb3B1cEluZm8udGV4dEluZGljYXRvcik7Ci0gICAgCi0gICAgUmV0YWluUHRyPFJWUHJlc2Vu
dGVyPiBwcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2UoKSBpbml0
XSk7Ci0gICAgCi0gICAgTlNSZWN0IGhpZ2hsaWdodFJlY3Q7Ci0gICAgTlNQb2ludCBwb2ludGVy
TG9jYXRpb247Ci0gICAgCi0gICAgaWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdl
KCkpIHsKLSAgICAgICAgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRleHRJbmRp
Y2F0b3IuZ2V0KCkpOwotCi0gICAgICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5WaWV3Q29v
cmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMoKVswXTsKLSAgICAgICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJblZpZXdD
b29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcygpOwotICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyb290Vmlld1RvVmll
d0NvbnZlcnNpb25DYWxsYmFjaykgewotICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluVmll
d0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5k
aW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbkJvdW5kaW5n
UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2so
c2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRC
b3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgaGlnaGxp
Z2h0UmVjdCA9IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOwotICAgICAg
ICBwb2ludGVyTG9jYXRpb24gPSBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRp
b24oKTsKLSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNQb2ludCB0ZXh0QmFzZWxp
bmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbjsKLSAgICAgICAgCi0gICAgICAg
IGhpZ2hsaWdodFJlY3QgPSB0ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzKCk7Ci0gICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZlcnRQb2lu
dDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07Ci0gICAgfQotICAgIAotICAgIFJldGFp
blB0cjxXZWJSZXZlYWxIaWdobGlnaHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2
ZWFsSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdodFJlY3Qg
dXNlRGVmYXVsdEhpZ2hsaWdodDohdGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSBh
dHRyaWJ1dGVkU3RyaW5nOmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQo
KV0pOwotICAgIFJldGFpblB0cjxSVlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRO
UyhbYWxsb2NSVlByZXNlbnRpbmdDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50ZXJMb2Nh
dGlvbkluVmlldzpwb2ludGVyTG9jYXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6
KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsK
LSAgICAKLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1J
bnN0YW5jZSgpIGluaXRXaXRoVGV4dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJp
bmcuZ2V0KCkuc3RyaW5nIHNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsKLSAgICAK
LSAgICBbd2ViSGlnaGxpZ2h0IHNldENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0g
V1RGTW92ZSh3ZWJIaWdobGlnaHQpLCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFy
VGV4dEluZGljYXRvcildIHsKLSAgICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikKLSAgICAg
ICAgICAgIGNsZWFyVGV4dEluZGljYXRvcigpOwotICAgIH1dOwotICAgIAotICAgIGlmIChjcmVh
dGVBbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBhbmltYXRp
b25Db250cm9sbGVyRm9ySXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2Vu
dGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07Ci0gICAgW3ByZXNlbnRlciBy
ZXZlYWxJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4
dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKLSAgICByZXR1cm4gbmlsOwotCi0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gbmlsOwotfQotCi12b2lkIERpY3Rp
b25hcnlMb29rdXA6OnNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9u
YXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0
SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdU
Rjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNp
b25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQot
ewotICAgIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGljdGlv
bmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBy
b290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0
b3IpKTsKLX0KLQotdm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQotewotICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIGlmICghZ2V0TFVMb29rdXBEZWZpbml0
aW9uTW9kdWxlQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtnZXRMVUxvb2t1cERlZmlu
aXRpb25Nb2R1bGVDbGFzcygpIGhpZGVEZWZpbml0aW9uXTsKLQotICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci19Ci0KLWlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xs
ZXI+IERpY3Rpb25hcnlMb29rdXA6OmFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNv
bnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5z
dGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVj
dCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQotewotICAgIHJldHVybiBzaG93UG9wdXBPckNyZWF0
ZUFuaW1hdGlvbkNvbnRyb2xsZXIodHJ1ZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4
dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25D
YWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCAxNDNmMTZjOTkyZjYzNzkwMjUyOTRiYzY3MmY0
MWVkZmEzNDBhNDQ0Li4yMzIzNzk2OWZkMzU0MjZmZWVlOTNlMDA4NWVlZDk3N2Y0NDBkOTk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNzMzLDYgKzcz
Myw5IEBAIHN0cnVjdCBfVUlXZWJUb3VjaEV2ZW50IHsKICAgICBib29sIGlzUG90ZW50aWFsVGFw
OwogfTsKIAorQGludGVyZmFjZSBfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciA6IFVJR2VzdHVy
ZVJlY29nbml6ZXIKK0BlbmQKKwogQGNsYXNzIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2du
aXplcjsKIAogQHByb3RvY29sIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVn
YXRlIDxOU09iamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlBhZ2VQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFnZVByb3h5Q29jb2EubW0KaW5kZXggZjU2ODc1ZGZmM2ExY2M0NWViZWU2MTcyMTVjZTk1NzIz
ZjUzZGU0ZS4uNjVhZWNkOTIxOTJmZTY2NjFmMWJhYTQyZDM0MDc4NmNlNGQxZDUzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0K
QEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlNhZmVC
cm93c2luZ1NQSS5oIgogI2ltcG9ydCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgorI2ltcG9ydCAi
V2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQg
PFdlYkNvcmUvRHJhZ0l0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
QEAgLTE4OSw1ICsxOTAsMjEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtQ2xvbmVBdHRh
Y2htZW50KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYgZnJvbUF0dGFjaG1lbnQKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgCit2b2lkIFdlYlBhZ2VQcm94eTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHBvaW50KQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKK30KIAordm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sKKyAgICBp
ZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVj
dGlvbigpLCBtX3BhZ2VJRCk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5o
CmluZGV4IGE4MDdjY2QyZmFjZmU3OGNmOTE0YmRmNDNlZDI0OTdhZGNjOGZjOGMuLmRhMjYzMzIy
MTQ2NzlmZDkxY2M1NGQwZmM4NGVjODIzMDc3ZTRkODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTg3LDYg
Kzg3LDcgQEAgY2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdl
YlBhZ2VQcm94eTsKIH0KIAorQGNsYXNzIF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwogQGNs
YXNzIF9VSUhpZ2hsaWdodFZpZXc7CiBAY2xhc3MgX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXI7CiBAY2xhc3MgVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyOwpAQCAtMjE1
LDYgKzIxNiw3IEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAKICNpZiBQTEFURk9S
TShJT1NNQUMpCiAgICAgUmV0YWluUHRyPFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcj4gX2hvdmVy
R2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPF9VSUxvb2t1cEdlc3R1cmVSZWNvZ25p
emVyPiBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXI7CiAjZW5kaWYKIAogICAgIFJldGFpblB0cjxV
SVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50PiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCmluZGV4IDYwY2ZiOGYyNGQ5YzYwYTNlMzIyMDk5ZDI4ZjI1ZjUwMGNjZTQzNmQu
LmFiYjA0YTRkYTdlZDFmNDE1NDAwZjFjYmJmZTM4MmNhM2I1ZmE4OWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQpAQCAtMTEyLDYgKzExMiw3IEBACiAjaWYgUExBVEZPUk0oSU9TTUFDKQogI2ltcG9ydCAiTmF0
aXZlV2ViTW91c2VFdmVudC5oIgogI2ltcG9ydCA8VUlLaXQvVUlIb3Zlckdlc3R1cmVSZWNvZ25p
emVyLmg+CisjaW1wb3J0IDxVSUtpdC9fVUlMb29rdXBHZXN0dXJlUmVjb2duaXplci5oPgogI2lt
cG9ydCA8cGFsL3NwaS9pb3MvR3JhcGhpY3NTZXJ2aWNlc1NQSS5oPgogI2VuZGlmCiAKQEAgLTY0
OSw2ICs2NTAsMTEgQEAgLSAodm9pZClzZXR1cEludGVyYWN0aW9uCiAgICAgX2hvdmVyR2VzdHVy
ZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBp
bml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2hvdmVyR2VzdHVyZVJlY29nbml6
ZXJDaGFuZ2VkOildKTsKICAgICBbX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6
c2VsZl07CiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29n
bml6ZXIuZ2V0KCldOworICAgIAorICAgIF9sb29rdXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0
TlMoW1tfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2Vs
ZiBhY3Rpb246QHNlbGVjdG9yKF9sb29rdXBHZXN0dXJlUmVjb2duaXplZDopXSk7CisgICAgW19s
b29rdXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBhZGRH
ZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIAog
I2VuZGlmCiAKICAgICBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbV0tT
eW50aGV0aWNDbGlja1RhcEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpz
ZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NpbmdsZVRhcENvbW1pdGVkOildKTsKQEAgLTc1OSw2ICs3
NjUsOSBAQCAtICh2b2lkKWNsZWFudXBJbnRlcmFjdGlvbgogI2lmIFBMQVRGT1JNKElPU01BQykK
ICAgICBbX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKICAgICBbc2Vs
ZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07
CisgICAgCisgICAgW19sb29rdXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwor
ICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CiAjZW5kaWYKIAogICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0
RGVsZWdhdGU6bmlsXTsKQEAgLTg0Niw2ICs4NTUsNyBAQCAtICh2b2lkKV9yZW1vdmVEZWZhdWx0
R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X3N0
eWx1c1NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNpZiBQTEFURk9STShJT1NN
QUMpCiAgICAgW3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29n
bml6ZXIuZ2V0KCldOworICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9sb29rdXBH
ZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAtODYxLDYgKzg3MSw3IEBA
IC0gKHZvaWQpX2FkZERlZmF1bHRHZXN0dXJlUmVjb2duaXplcnMKICAgICBbc2VsZiBhZGRHZXN0
dXJlUmVjb2duaXplcjpfc3R5bHVzU2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwog
I2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaG92
ZXJHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6
ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKICNlbmRpZgogfQogCkBAIC0xNDY3
LDYgKzE0NzgsMTAgQEAgLSAoQk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2du
aXplciAqKWdlc3R1cmVSZWNvZ25pemVyIHNob3VsZFJlY29nbmkKIAogICAgIGlmIChbZ2VzdHVy
ZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyIGNsYXNz
XV0gfHwgW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlIb3Zlckdlc3R1
cmVSZWNvZ25pemVyIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBZRVM7CisgICAgCisgICAgaWYg
KChbZ2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29n
bml6ZXIgY2xhc3NdXSAmJiBbb3RoZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltV
SUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV0pIHx8IChbb3RoZXJHZXN0dXJlUmVj
b2duaXplciBpc0tpbmRPZkNsYXNzOltVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNsYXNz
XV0gJiYgW2dlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVS
ZWNvZ25pemVyIGNsYXNzXV0pKQorICAgICAgICByZXR1cm4gWUVTOworCiAjZW5kaWYKICAgICBp
ZiAoaXNTYW1lUGFpcihnZXN0dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXplciwg
X2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfdGV4dFNlbGVjdGlv
bkFzc2lzdGFudC5nZXQoKS5mb3JjZVByZXNzR2VzdHVyZSkpCiAgICAgICAgIHJldHVybiBZRVM7
CkBAIC02MDU3LDYgKzYwNzIsMTIgQEAgLSAoQk9PTClhbGxvd3NEaWN0YXRpb25JbnB1dEZvckxp
c3RWaWV3Q29udHJvbGxlcjooUFVJQ1F1aWNrYm9hcmRWaWV3Q29udHJvbGxlcgogI2VuZGlmIC8v
IFBMQVRGT1JNKFdBVENIT1MpCiAKICNpZiBQTEFURk9STShJT1NNQUMpCistICh2b2lkKV9sb29r
dXBHZXN0dXJlUmVjb2duaXplZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25p
emVyCit7CisgICAgTlNQb2ludCBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzID0gW2dlc3R1cmVS
ZWNvZ25pemVyIGxvY2F0aW9uSW5WaWV3OnNlbGZdOworICAgIF9wYWdlLT5wZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludChsb2NhdGlvbkluVmlld0Nv
b3JkaW5hdGVzKSk7Cit9CisKIC0gKHZvaWQpX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2Vk
OihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKICAgICBpZiAoIV9w
YWdlLT5pc1ZhbGlkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQ
cm94eUlPUy5tbQppbmRleCBiNDczZjA4MWE1MDc1ZTQ0M2NjZTM5YjVkYzM3ODU0YmQ2OGQ4NmYy
Li4yNzk1ZjczMGJiZmVjNjJlNDRmNTRmNmE4MDljODJiYWI2MzNkMzY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTEyMSwxMSArMTIx
LDYgQEAgYm9vbCBXZWJQYWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25z
dCBTdHJpbmcmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2Vz
dHVyZUNhbGxiYWNrKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2Vz
dHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MsIENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKIHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxH
ZXN0dXJlQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggZmZmYzVlMDhhMTY3MGEwY2FmMTUzZWM3MGZh
NzIwMjE3MjBlNWI3YS4uZTJhYjI5YzJiNWM2NzE3NTg0NjM3YjNiN2FlY2MyMDhiNzYzNjg2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBA
IC0zMjMsMjIgKzMyMyw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQcm9taXNlZERhdGFGb3JJ
bWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTCiAKICNlbmRpZgogCi12
b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOwotfQotCi12
b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rp
b24oKQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1
cnJlbnRTZWxlY3Rpb24oKSwgbV9wYWdlSUQpOwotfQotCiAvLyBDb21wbGV4IHRleHQgaW5wdXQg
c3VwcG9ydCBmb3IgcGx1Zy1pbnMuCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZENvbXBsZXhUZXh0
SW5wdXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggM2U3OTQzMWY5Mzcx
MTRjNDFmOWQyZGZkNThlMGI0ZjcyMTgxNTlhNi4uYTM4Y2QyYmY2Mzc5NGM4ZTlmMWQyMTJhM2U3
OGIzZThjNGVmOGM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMjYsOSArMjYsMjAgQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgogCisKICNpbXBvcnQgIkxvYWRQYXJhbWV0
ZXJzLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNz
YWdlcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0VkaXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252
ZXJ0ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9Ob2RlUmVuZGVyU3R5bGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNl
c3Npb25NYW5hZ2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKIApAQCAt
NTksNiArNzAsMTE0IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNz
aW9uSW5mbyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6Ok5vd1BsYXlpbmdJbmZvQ2FsbGJhY2soaGFzQWN0aXZlU2Vzc2lvbiwgcmVnaXN0
ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVsYXBzZWRUaW1l
LCB1bmlxdWVJZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiB9CisgICAgCit2b2lkIFdlYlBhZ2U6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9h
dFBvaW50KQoreworICAgIGlmIChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1l
KCZtX3BhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGZsb2F0UG9pbnQpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zl
ci4KKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkt
PndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7CisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7CisgICAgc3RkOjp0
aWUocmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1
bHQocmVzdWx0KTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
YXV0byogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwg
KnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91
bmNlKTsKK30KKwordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVj
dGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikK
K3sKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpv
cHRpb25zOworICAgIHN0ZDo6dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBpZiAoc2VsZWN0ZWRS
YW5nZSkKKyAgICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNl
bGVjdGVkUmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOworfQorCit2b2lk
IFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKK3sK
KyAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUs
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5n
ZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0Zv
clJhbmdlKGZyYW1lLCByYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsK
K30KKworRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9y
UmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywg
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlv
bikKK3sKKyAgICBFZGl0b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOworICAgIGVkaXRvci5z
ZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKHRydWUpOworICAgIAorICAgIERpY3Rpb25h
cnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICBpZiAocmFuZ2UudGV4dCgpLnN0
cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5n
RGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9w
dXBJbmZvOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBy
YW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7CisgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkg
eworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7
CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBJ
bnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1sw
XS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICAKKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CisgICAgZmxvYXQg
c2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBh
Z2VTY2FsZUZhY3RvcigpIDogMDsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZs
b2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7Cisg
ICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKKworI2lmIFBMQVRGT1JN
KE1BQykKKworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRp
dGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJp
YnV0ZWRTdHJpbmc6Ok5vKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcg
c3RyaW5nXV0pOworICAgIAorICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9u
dE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgIAorICAgIFtuc0F0dHJpYnV0ZWRTdHJp
bmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRl
ZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0
cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgeworICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0
ZXMgbXV0YWJsZUNvcHldKTsKKyAgICAgICAgCisgICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2Fs
ZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAg
aWYgKGZvbnQpCisgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZv
bnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICBp
ZiAoZm9udCkKKyAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZv
cktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgCisgICAgICAgIFtzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdl
OnJhbmdlXTsKKyAgICB9XTsKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBU
ZXh0SW5kaWNhdG9yT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlv
blVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXM7CisgICAg
aWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKKyAgICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8
PSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdo
dDsKKyAgICAKKyAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbik7CisgICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7CisgICAgICAgIGVk
aXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgfQorICAgIAorICAgIGRpY3Rpb25hcnlQb3B1
cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVk
TlNBdHRyaWJ1dGVkU3RyaW5nOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyAgICBl
ZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgcmV0dXJu
IGRpY3Rpb25hcnlQb3B1cEluZm87Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgppbmRleCAxMjdkODQxMTFlNzMwZjVmMDI0YjRjNGU4NzkxYTI5OThjMmI5YmI4Li43ZjMwMTU0
ODU4NWRlOGYzMGQwNWE1NWMwMjI3OGUwYmYwMjdiNzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTE5MSw2ICsx
OTEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgICMgRGljdGlvbmFyeSBzdXBwb3J0LgorICAgIFBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKICAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCkKICNlbmRpZgogCkBAIC0xOTks
MTAgKzIwMCw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFJl
bW92ZURhdGFEZXRlY3RlZExpbmtzKCkgLT4gKHN0cnVjdCBXZWJLaXQ6OkRhdGFEZXRlY3Rpb25S
ZXN1bHQgcmVzdWx0KSBBc3luYwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgUGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQotI2VuZGlmCi0KICAgICBD
aGFuZ2VGb250KFdlYkNvcmU6OkZvbnRDaGFuZ2VzIGNoYW5nZXMpCiAgICAgQ2hhbmdlRm9udEF0
dHJpYnV0ZXMoV2ViQ29yZTo6Rm9udEF0dHJpYnV0ZUNoYW5nZXMgY2hhbmdlcykKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRl
eCBlYWM0ZjRmYWEzNWQxYmMyZmZiZDkzYTU5Y2Y4YzdiNmQ0NmVmOTJiLi42ZTVhNmQxODg1ZDVk
NGJmMmUzMDI0NmEwNWUyYThiNjM2ZjI4YjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtNDE3LDIxICs0MTcsNiBAQCB2
b2lkIFdlYlBhZ2U6OnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4odWludDY0X3QsIGNvbnN0
IFN0cmluZyYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclNlbGVjdGlvbihGcmFtZSYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUm
LCBSYW5nZSYsIE5TRGljdGlvbmFyeSAqLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiBib29sIFdlYlBhZ2U6OnBlcmZv
cm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpL
ZXlib2FyZEV2ZW50KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA0NzMzYjFj
YmYyZmU0NWNkOWQwY2VhN2VlZjliYzdjMzhhZmFmN2U0Li5mYTdhNmFhZjFiNjBiZGE5MGRjZDA3
OWJhMWE5NDM2ZjEyMTZiMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMzg5LDEwMiArMzg5LDcgQEAgdm9pZCBXZWJQ
YWdlOjpmb250QXRTZWxlY3Rpb24oQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9udEF0U2VsZWN0aW9uQ2FsbGJhY2soZm9udE5hbWUsIGZv
bnRTaXplLCBzZWxlY3Rpb25IYXNNdWx0aXBsZUZvbnRzLCBjYWxsYmFja0lEKSk7CiB9CiAgICAg
Ci12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBG
bG9hdFBvaW50JiBmbG9hdFBvaW50KQotewotICAgIGlmIChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1
Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKSkgewotICAgICAgICBpZiAocGx1
Z2luVmlldy0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGZsb2F0UG9pbnQpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBw
b2ludCBpcyBvdmVyLgotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFt
ZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkp
KTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9uczsK
LSAgICBzdGQ6OnRpZShyYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0
SGl0VGVzdFJlc3VsdChyZXN1bHQpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8qIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFt
ZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6
Qm91bmNlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNl
bGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwg
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlv
bikKLXsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7Ci0gICAgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zOwotICAgIHN0ZDo6dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICBpZiAoc2VsZWN0
ZWRSYW5nZSkKLSAgICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwg
KnNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwotfQogCi12
b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkK
LXsKLSAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7Ci0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJh
bWUsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKLX0KLQotRGljdGlvbmFyeVBvcHVw
SW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBS
YW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBFZGl0b3ImIGVk
aXRvciA9IGZyYW1lLmVkaXRvcigpOwotICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5
UG9wdXBJbmZvKHRydWUpOwotCi0gICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9w
dXBJbmZvOwotICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNl
KTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgVmVj
dG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHMocXVhZHMp
OwotICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWRpdG9yLnNldElzR2V0dGlu
Z0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBv
cHVwSW5mbzsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKLQotICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVy
U3R5bGUoKTsKLSAgICBmbG9hdCBzY2FsZWRBc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0
cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkgOiAwOwotICAgIGRpY3Rpb25hcnlQ
b3B1cEluZm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgp
ICsgc2NhbGVkQXNjZW50KTsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRp
b25zOwotCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0
aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmli
dXRlZFN0cmluZzo6Tm8pOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1
dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmlu
Z11dKTsKLQotICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIg
c2hhcmVkRm9udE1hbmFnZXJdOwotCi0gICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVB
dHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0
aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1Jh
bmdlIHJhbmdlLCBCT09MICpzdG9wKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0
aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29w
eV0pOwotCi0gICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZv
cktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAg
ICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRT
aXplICogcGFnZVNjYWxlRmFjdG9yKCldOwotICAgICAgICBpZiAoZm9udCkKLSAgICAgICAgICAg
IFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKLQotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6
c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07Ci0gICAgfV07Ci0KLSAgICBUZXh0
SW5kaWNhdG9yT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlvblVz
ZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXM7Ci0gICAgaWYg
KHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKLSAgICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8PSBU
ZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsK
LQotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRv
cjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25U
cmFuc2l0aW9uKTsKLSAgICBpZiAoIXRleHRJbmRpY2F0b3IpIHsKLSAgICAgICAgZWRpdG9yLnNl
dElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGlj
dGlvbmFyeVBvcHVwSW5mbzsKLSAgICB9Ci0KLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJ
bmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5m
by5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOwotCi0gICAgZWRp
dG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwotICAgIHJldHVybiBk
aWN0aW9uYXJ5UG9wdXBJbmZvOwotfQogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAKQEAg
LTUzOSwxMSArNDQ0LDYgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5
UG9wdXBJbmZvRm9yU2VsZWN0aW9uSW5QREZQbHVnaW4oUERGU2VsZWMKIAogI2VuZGlmCiAKLXZv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUs
IFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFy
eVBvcHVwSW5mb0ZvclJhbmdlKGZyYW1lLCByYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJh
bnNpdGlvbikpKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9y
Rm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgS2V5Ym9hcmRFdmVudCogZXZlbnQp
CiB7CiAgICAgLy8gRmlyc3QgZ2l2ZSBhY2Nlc3NpYmlsaXR5IGEgY2hhbmNlIHRvIGhhbmRsZSB0
aGUgZXZlbnQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356060</attachid>
            <date>2018-11-29 14:19:40 -0800</date>
            <delta_ts>2018-11-29 14:59:16 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191732-20181129141939.patch</filename>
            <type>text/plain</type>
            <size>75710</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Njg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhiYzAzMjJkNTNkNDBi
OWUyZWY3MGUyMjIxMWVlM2NhNDgwYTJkYi4uZDllYzM0NTMzOTM0ZjZkNTI1MGM5NzIwZjQ4YTk3
NzkwZTNjZGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE4LTExLTI5ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBMb29r
dXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE5vdCBjdXJyZW5sdHkgdGVzdGFibGUK
KworICAgICAgICBEaWN0aW9uYXJ5TG9va3VwIHVzZXMgUmV2ZWFsIG5vdywgd2hpY2ggaXMgc2xh
dGVkIHRvIGJlIGNyb3NzLXBsYXRmb3JtLgorICAgICAgICBUaGF0IHBhdGNoIGdhdGVzIHRoZSBw
YXJ0cyBvZiBEaWN0aW9uYXJ5TG9va3VwIHRoYXQgY3VycmVudGx5IGRvIG5vdCBoYXZlCisgICAg
ICAgIGFuIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbiBvbiBpT1MuIE9uY2UgUmV2ZWFsIGlzIHJl
YWR5LCB0aGlzIGNvZGUgd2lsbCBiZQorICAgICAgICByZXBsYWNlZCBvciBleHBhbmRlZCB1cG9u
LCBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXAuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cCk6CisgICAgICAgIChXZWJD
b3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeUxvb2t1cDo6YW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKToKKwogMjAxOC0xMS0y
OSAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CiAKICAgICAgICAg
Q1NTIFBhaW50aW5nIEFQSSBzaG91bGQgcGFzcyAndGhpcycgY29ycmVjdGx5IHRvIHBhaW50IGNh
bGxiYWNrLCBhbmQgcmVwYWludCB3aGVuIHByb3BlcnRpZXMgY2hhbmdlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cKaW5kZXggYTQ1ODI3YmNjZDMzM2ZhMjU4OWY5NDE4MGQ0MjhmYWI2MTg0NDhjZC4uYjAwNTc1
NWExMDBhOTliNmQ5NTUzNGEyNGEyYjAyZmFlOGIyYjVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTgtMTEtMjkgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVy
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3Mg
cGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5MTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgKiBwYWwvc3BpL21hYy9Mb29rdXBTUEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL21h
Yy9SZXZlYWxTUEkuaDoKKwogMjAxOC0xMS0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm5pemUgdGhlIGNoZWNrIGZvciBrQ0ZVUkxSZXF1ZXN0
Q29udGVudERlY29kZXJTa2lwVVJMQ2hlY2sgZXhpc3RlbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzNDEyZGJl
MTIxOTRjYTM2YTMxZDg2NjMzYWZkZTQzOWU0MWM2MDMuLmEzOTQ3YWRiZTBhYWMwN2RlMjQ4ZGU3
Yjg2OGU1OWQzYTMyYzVjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTgtMTEtMjkg
IE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3Zl
IExvb2t1cCBDb2RlIGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTczMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgTG9va3VwIGlzIGJlaW5nIHJl
cGxhY2VkIGJ5IFJldmVhbC4gVGhpcyBmcmFtZXdvcmsgc2hvdWxkIHdvcmsgb24gYWxsIHBsYXRm
b3Jtcy4KKyAgICAgICAgVGhlIHBhdGNoIG1vdmVzIHRoZSBjb2RlIHRoYXQgd2UgZXhwZWN0IHdp
bGwgYmUgbmVlZGVkIGZvciBhbGwgcGxhdGZvcm1zIHRvIHRoZSBtb3JlCisgICAgICAgIGdlbmVy
YWwgY29jb2EgYXJlYS4gVGhpcyBwYXRjaCBjaGFuZ2VzIG5vIGZ1bmNhdGlvbmFsaXR5LCBhbmQg
c2hvdWxkIG5vdCBjaGFuZ2UKKyAgICAgICAgYW55dGhpbmcgY3VycmVudGx5LiBUaGlzIHdvcmsg
d2lsbCBiZSBidWlsZCBvbiBsYXRlciB3aGVuIFJldmVhbCBpcyByZWFkeSB0byBzdXBwb3J0Cisg
ICAgICAgIG11bHRpcGxlIHBsYXRmb3Jtcy4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3Mv
VUlLaXRTUEkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1
cEludGVyYWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2xlYW51cEludGVyYWN0
aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3JlbW92ZURlZmF1bHRHZXN0dXJlUmVj
b2duaXplcnNdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYWRkRGVmYXVsdEdlc3R1cmVS
ZWNvZ25pemVyc10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGdlc3R1cmVSZWNvZ25pemVy
OnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9sb29rdXBHZXN0dXJlUmVjb2duaXplZDpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5m
b0ZvclJhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwT2ZDdXJyZW50U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSk6IERlbGV0ZWQuCisK
IDIwMTgtMTEtMjkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAg
ICAgTW9kZXJuaXplIHRoZSBjaGVjayBmb3Iga0NGVVJMUmVxdWVzdENvbnRlbnREZWNvZGVyU2tp
cFVSTENoZWNrIGV4aXN0ZW5jZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3ZjI0NjczZTUxNzM2OTdmNWNiY2U3ZWMzYTQ1MjE2
Y2Y0ODMxMTMuLmI4Y2MzNTg2M2NiZDJlZDU1Y2VkYTdjNTZhYzE4MjE5ODNlNDczOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQwNiw2ICs0MDYsNyBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERCQzMxNyAvKiBQYXNzS2l0
U1BJLmggKi8sCiAJCQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8qIHB0aHJlYWRTUEkuaCAq
LywKIAkJCQkwQzJEQTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6Q29yZVNQSS5oICovLAor
CQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQk1NzBB
QjhGMDIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAqLywKIAkJCQkwQzJEQTEz
QzFGM0JFQjQ5MDBEQkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJCTBDMkRBMTJCMUYzQkVC
NDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00NzEsNyArNDcyLDYgQEAK
IAkJCQkwQzc3ODU4NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEkuaCAqLywKIAkJCQlBMTAy
NjU4QTFGNTY3NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8sCiAJCQkJMEM3Nzg1ODcx
RjQ1MTMwRjAwRjRFQkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAotCQkJCTQ0Mjk1NkNDMjE4
QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3NUI0ODFGNkFGRjhFMDBD
NEI5RjAgLyogU3BlZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3Nzg1ODgxRjQ1MTMwRjAw
RjRFQkI2IC8qIFRVQ2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9zcGkvY29jb2EvUmV2ZWFsU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJiN2M0YTA5MWJjOWRkYmM5NDYy
YjU4NzE5YWI1MzM5MWI0NzBmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPG9iamMvcnVudGlt
ZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRl
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JL
KFJldmVhbCkKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWxDb3JlKQorU09GVF9M
SU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50ZXIpCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRpbmdDb250ZXh0KQorU09GVF9MSU5LX0NMQVNTX09Q
VElPTkFMKFJldmVhbENvcmUsIFJWSXRlbSkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZl
YWxDb3JlLCBSVlNlbGVjdGlvbikKKworI2lmIEVOQUJMRShSRVZFQUwpCisKKyNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQorCisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8UmV2ZWFsL1JW
UHJlc2VudGVyLmg+CisjaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+CisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQorI2ltcG9ydCA8UmV2ZWFsQ29yZS9SVlNlbGVjdGlvbi5oPgorI2ltcG9ydCA8UmV2
ZWFsQ29yZS9SZXZlYWxDb3JlLmg+CisKKyNlbHNlIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
CisKKworQHByb3RvY29sIFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU7CisKK0BpbnRlcmZh
Y2UgUlZJdGVtIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0
ZWRSYW5nZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworQGVuZAorCitAaW50ZXJmYWNlIFJW
U2VsZWN0aW9uIDogTlNPYmplY3QKKysgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJ
bnRlZ2VyKWNsaWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilz
ZWxlY3RlZFJhbmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVT
ZWxlY3Rpb247CitAZW5kCisKKyNpZiBQTEFURk9STShNQUMpCitAaW50ZXJmYWNlIFJWUHJlc2Vu
dGluZ0NvbnRleHQgOiBOU09iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUG9pbnRlckxv
Y2F0aW9uSW5WaWV3OihOU1BvaW50KXBvaW50ZXJMb2NhdGlvbkluVmlldyBpblZpZXc6KE5TVmll
dyAqKXZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdh
dGU+KWhpZ2hsaWdodERlbGVnYXRlOworQGVuZAorI2VuZGlmCisKK0Bwcm90b2NvbCBSVlByZXNl
bnRlckhpZ2hsaWdodERlbGVnYXRlIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAoTlNBcnJheSA8
TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0
IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKK0BvcHRpb25hbAorLSAodm9pZClyZXZlYWxD
b250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRl
bTooUlZJdGVtICopaXRlbTsKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29u
dGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKK0BlbmQKKwor
QGludGVyZmFjZSBSVkRvY3VtZW50Q29udGV4dCA6IE5TT2JqZWN0IDwgTlNTZWN1cmVDb2Rpbmcg
PgorQGVuZAorCitAaW50ZXJmYWNlIFJWUHJlc2VudGVyIDogTlNPYmplY3QKKyNpZiBQTEFURk9S
TShNQUMpCistIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1h
dGlvbkNvbnRyb2xsZXJGb3JJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZE
b2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJl
c2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkg
KilvcHRpb25zOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKy0gKEJPT0wpcmV2ZWFsSXRlbToo
UlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1l
bnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2Vu
dGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKK0BlbmQKKworI2Vu
ZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCisjZW5kaWYgLy8gRU5BQkxFKFJFVkVB
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEku
aCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaAppbmRleCBlYjdm
OTUxZjcxYzc1YzgxMjE3YjIyZTc4YWRhZDMwZTRkNmE1YzA0Li5lMGEzMzc1ZDMwY2M4ODlmMTM1
ZWEyYTExZDQ3ZDBkYTk0Zjk4YTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3NwaS9tYWMvTG9va3VwU1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFj
L0xvb2t1cFNQSS5oCkBAIC0yMywxMiArMjMsMTMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
KworI2lmIFBMQVRGT1JNKE1BQykKKwogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0
IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAj
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKLQogU09GVF9M
SU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKExvb2t1cCkKIFNPRlRfTElOS19DTEFTU19P
UFRJT05BTChMb29rdXAsIExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZSkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvbWFjL1JldmVhbFNQSS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkNmI4ZGE0MmM4NTk5MGFlMzJlYTY3YTBhZjc3NTNmM2RiOTgyOGE1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL21hYy9SZXZlYWxTUEkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgPG9i
amMvcnVudGltZS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0
dXJlUmVjb2duaXplclNQSS5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0KLVNPRlRf
TElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWwpCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdP
UksoUmV2ZWFsQ29yZSkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2Vu
dGVyKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbCwgUlZQcmVzZW50aW5nQ29udGV4
dCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChSZXZlYWxDb3JlLCBSVkl0ZW0pCi1TT0ZUX0xJ
TktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwgUlZTZWxlY3Rpb24pCi0KLSNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQotCi0jaW1wb3J0IDxSZXZlYWwvUlZQcmVzZW50ZXIuaD4KLSNpbXBv
cnQgPFJldmVhbC9SZXZlYWwuaD4KLSNpbXBvcnQgPFJldmVhbENvcmUvUlZTZWxlY3Rpb24uaD4K
LSNpbXBvcnQgPFJldmVhbENvcmUvUmV2ZWFsQ29yZS5oPgotCi0KLSNlbHNlCi0KLUBpbnRlcmZh
Y2UgUlZJdGVtIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0
ZWRSYW5nZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotQGVuZAotCi1AaW50ZXJmYWNlIFJW
U2VsZWN0aW9uIDogTlNPYmplY3QKLSsgKE5TUmFuZ2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJ
bnRlZ2VyKWNsaWNrSW5kZXggc2VsZWN0ZWRSYW5nZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilz
ZWxlY3RlZFJhbmdlcyBzaG91bGRVcGRhdGVTZWxlY3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVT
ZWxlY3Rpb247Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUlZQcmVzZW50ZXIgOiBOU09iamVjdAotLSAo
aWQ8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilhbmltYXRpb25Db250cm9s
bGVyRm9ySXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250
ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250
ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsK
LS0gKEJPT0wpcmV2ZWFsSXRlbTooUlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9j
dW1lbnRDb250ZXh0ICopZG9jdW1lbnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNl
bnRpbmdDb250ZXh0ICopcHJlc2VudGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICop
b3B0aW9uczsKLUBlbmQKLQotI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMDYzZGZkYzIyODk2M2ZiYWU1OTYwZTAyNGNiOGYyNGZk
MzdhNWVkYS4uMDYyY2RkN2YwN2Q3MGUzMGQ5ZjA2ZjMwNTczZDY5N2ZiZmYxNWI2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC03Nyw2ICs3Nyw3IEBAIGVkaXRpbmcvU2VsZWN0aW9uUmVj
dEdhdGhlcmVyLmNwcAogZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKIAogZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCitlZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KIGVk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KIGVkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZUNo
YW5nZXNDb2NvYS5tbQogZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCkBAIC05
MCw3ICs5MSw2IEBAIGVkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCiBlZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KIAogZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9s
bGVyLm1tCi1lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KIGVkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDE2ZDMyNmI1ZTkxN2VjM2VkZTdlMGFhMzUz
YjJlZjczMDI2ZjJiZS4uZDE4Y2U2MGIxNzhjMWNiMWRlZjFkMzlhYWRmY2U3NzhiMzg4ODlkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjA1MjMsNiArMjA1MjMsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQzUyMjdERUYx
QzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKIAkJCQlDNTIyN0RGMDFDM0M2
REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSAqLywKKwkJCQk5MzdGRjNENjFBMTAxMzFC
MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk5QjU1RUVFODFCM0U4ODk4
MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRD
QTcyIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0gKi8sCiAJCQkJRjQ4RDJBNzUyMTU2
RkU1NzAwQzY3NTJCIC8qIEZvbnRBdHRyaWJ1dGVzQ29jb2EubW0gKi8sCkBAIC0yNjIyOSw3ICsy
NjIzMCw2IEBACiAJCQkJQ0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4
dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNFN0IyREIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTM3RkYzRDQxQTEwMTJENjAwOEVC
QTMxIC8qIERpY3Rpb25hcnlMb29rdXAuaCAqLywKLQkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJB
MzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQk0NDI5NTZDQTIxOEE2RDMwMDA4MERC
NTQgLyogRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSAqLywKIAkJCQlFRDUwMURDNTBCMjQ5RjI5
MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovLAogCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZG
MCAvKiBGcmFtZVNlbGVjdGlvbk1hYy5tbSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzFhYzlhYjMwYTU5ZmRh
ODk0MWYzODQ1YzNlYThiYmE5ZTU0ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0wLDAgKzEsNDMzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3Rpb25hcnlM
b29rdXAuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaWYgRU5BQkxFKFJFVkVBTCkKKwor
I2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkVkaXRpbmcuaCIKKyNpbXBvcnQgIkZvY3Vz
Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9u
LmgiCisjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0Lmgi
CisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAi
UmFuZ2UuaCIKKyNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgorI2ltcG9ydCAiVGV4dEl0ZXJhdG9y
LmgiCisjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbXBvcnQgIlZpc2libGVTZWxlY3Rp
b24uaCIKKyNpbXBvcnQgIlZpc2libGVVbml0cy5oIgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9S
ZXZlYWxTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgorI2ltcG9ydCA8
d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKworI2lm
ICFQTEFURk9STShXQVRDSCkKKworI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorCisjZW5kaWYg
Ly8gIVBMQVRGT1JNKFdBVENIKQorCisjaWYgUExBVEZPUk0oTUFDKQorCitAaW50ZXJmYWNlIFdl
YlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4gOiBOU09iamVj
dCB7CitAcHJpdmF0ZQorICAgIEZ1bmN0aW9uPHZvaWQoKT4gX2NsZWFyVGV4dEluZGljYXRvcjsK
KyAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7CisgICAgQk9PTCBfdXNlRGVmYXVsdEhpZ2hsaWdo
dDsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyaWJ1dGVkU3RyaW5nOworfQorCitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TUmVjdCBoaWdobGlnaHRSZWN0OworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZURlZmF1bHRIaWdobGlnaHQ7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRl
ZFN0cmluZzsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0
KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxp
Z2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3Ry
aW5nOworLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJilj
bGVhclRleHRJbmRpY2F0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlJldmVhbEhp
Z2hsaWdodAorCitAc3ludGhlc2l6ZSBoaWdobGlnaHRSZWN0PV9oaWdobGlnaHRSZWN0OworQHN5
bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdodD1fdXNlRGVmYXVsdEhpZ2hsaWdodDsKK0BzeW50
aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0dHJpYnV0ZWRTdHJpbmc7CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1
bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihO
U0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZworeworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9oaWdobGln
aHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKKyAgICBfdXNlRGVmYXVsdEhpZ2hsaWdodCA9IHVzZURl
ZmF1bHRIaWdobGlnaHQ7CisgICAgX2F0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5n
OworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENsZWFyVGV4dEluZGlj
YXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNsZWFyVGV4dEluZGljYXRvcgoreworICAgIF9jbGVh
clRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcik7Cit9CisKKy0gKE5T
QXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKilj
b250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisgICAgcmV0dXJuIEBbW05TVmFsdWUg
dmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdodFJlY3RdXTsKK30KKworLSAodm9pZClyZXZlYWxD
b250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihS
Vkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIAorICAgIGZvciAo
TlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0Lml0ZW1SZWN0c0luVmlldykgeworICAgICAgICBO
U1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZhbHVlOworCisgICAgICAgIC8vIEdldCBjdXJyZW50
IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBhYm92ZSwgYW5kIGFk
ZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRlIGluIG9yZGVyIHRvIGNlbnRlciB0ZXh0LgorICAg
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMo
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6W3NlbGYuYXR0
cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3NlbGYu
YXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1dKTsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGggPSBhZG9wdE5TKFtbTlNNdXRhYmxlUGFyYWdyYXBo
U3R5bGUgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3BhcmFncmFwaCBzZXRBbGlnbm1lbnQ6TlNU
ZXh0QWxpZ25tZW50Q2VudGVyXTsKKyAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnBhcmFn
cmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdOworICAgIAor
ICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtb
TlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbc2VsZi5hdHRyaWJ1dGVk
U3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczphdHRyaWJ1dGVzLmdldCgpXSk7CisgICAgICAgIFtz
dHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKKyAgICB9Cit9CisKKy0gKEJPT0wpcmV2ZWFsQ29udGV4
dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc2hvdWxkVXNlRGVmYXVsdEhpZ2hsaWdo
dEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBzZWxmLnVzZURlZmF1bHRIaWdobGln
aHQ7Cit9CisKKy0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNv
bnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIGF1dG8gYmxvY2sg
PSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0b3IpOworICAgIGlmIChibG9jaykKKyAgICAgICAg
YmxvY2soKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjZW5kaWYg
Ly8gRU5BQkxFKFJFVkVBTCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFJF
VkVBTCkKKworc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICBp
ZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
ICAgIAorICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwg
bmlsIH07CisKKyAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQs
IHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgorICAgIGF1dG8gc2Vs
ZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rp
b25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworCisgICAgLy8gQXMgY29udGV4dCwgd2Ug
YXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsK
KyAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisK
KyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworICAg
IGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKKyAgICBOU1Jhbmdl
IHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3Ro
VG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICAKKyAgICBSZWZQ
dHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwg
cGFyYWdyYXBoRW5kKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hh
cmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5T
KFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRS
YW5nZTpyYW5nZVRvUGFzc10pOworICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdl
dCgpLmhpZ2hsaWdodFJhbmdlOworICAgIAorICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hs
aWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Cit9CisKK3N0ZDo6dHVw
bGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
QXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVt
Q2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAgYXV0
byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKKworICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgLy8gRG9u
J3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KKyAg
ICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2Rl
RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQorICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIGF1dG8gcG9zaXRpb24gPSBmcmFt
ZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQorICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKTsKKworICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKKyAgICBpbnQgaGl0SW5kZXg7CisgICAgUmVmUHRy
PFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7CisgICAgCisgICAgaWYgKHNlbGVjdGlvbi5zZWxl
Y3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKKyAgICAg
ICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICAg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworICAgICAgICAK
KyAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRp
bmcgcGFyYWdyYXBocyBvZiB0ZXh0LgorICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3Rh
cnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGF1dG8gcGFyYWdyYXBoRW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
cmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rp
b25TdGFydCk7CisgICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAg
ICAgICAgCisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQo
KSkpOworICAgICAgICAKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5l
UnVsZXMgeyBwb3NpdGlvbiB9OworICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1
bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAgICAgICAgcG9z
aXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7CisgICAgICAg
IC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4
dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTAp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCisgICAgICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgCisgICAgICAgIHNlbGVjdGlvblJh
bmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgICAgIGhpdEluZGV4ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgfQorICAgIAorICAgIE5TUmFuZ2Ug
c2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4
OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0
aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKKyAgICAKKyAgICBTdHJpbmcg
aXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFJl
dGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7CisgICAg
TlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisKKyAg
ICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0
UmFuZ2UubGVuZ3RoKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAg
ICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhp
Z2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKKyAg
ICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OworICAgIAorfQorICAgIAorI2lmICFQTEFURk9STShXQVRDSCkKKworc3Rh
dGljIHZvaWQgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0
aW9uLCBOU0ludGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hh
cmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJF
bmQpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgc2l6ZV90IG9y
aWdpbmFsTGVuZ3RoID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGg7CisgICAgW3NlbGVjdGlvbiBl
eHRlbmRTZWxlY3Rpb25BdFN0YXJ0Om51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKKyAgICAK
KyAgICBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3Ro
IC0gb3JpZ2luYWxMZW5ndGg7CisgICAgCisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25B
dEVuZDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07CisgICAgY2hhcmFjdGVyc0FkZGVkQWZ0
ZXJFbmQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoIC0gY2hhcmFj
dGVyc0FkZGVkQmVmb3JlU3RhcnQ7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
fQorCitzdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9v
a3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVt
Q2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBEb24n
dCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAg
IGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIHsgQCIiLCBuaWwgfTsKKworICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlv
bkZvckxvb2t1cCA9IGFkb3B0TlMoW3NlbGVjdGlvbiBjb3B5XSk7CisKKyAgICAvLyBBcyBjb250
ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFu
ZCBhZnRlciB0aGUgcG9pbnQuCisgICAgYXV0byBvcmlnaW5hbExlbmd0aCA9IFtzZWxlY3Rpb25G
b3JMb29rdXAgc3RyaW5nXS5sZW5ndGg7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEJl
Zm9yZVN0YXJ0ID0gMDsKKyAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQgPSAw
OworICAgIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhzZWxlY3Rpb25Gb3JMb29rdXAuZ2V0
KCksIDI1MCwgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQsIGNoYXJhY3RlcnNBZGRlZEFmdGVy
RW5kKTsKKworICAgIGF1dG8gZnVsbFBsYWluVGV4dFN0cmluZyA9IFtzZWxlY3Rpb25Gb3JMb29r
dXAgc3RyaW5nXTsKKyAgICBhdXRvIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVy
c0FkZGVkQmVmb3JlU3RhcnQsIDApOworCisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFk
b3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZnVsbFBsYWluVGV4dFN0
cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7CisgICAgTlNSYW5nZSBleHRyYWN0ZWRS
YW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CisgICAgCisgICAgaWYgKGV4dHJhY3Rl
ZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiB7IHNlbGVjdGlv
bi5zdHJpbmcsIG5pbCB9OworCisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQmVmb3JlID0gcmFu
Z2VUb1Bhc3MubG9jYXRpb24gLSBleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbjsKKyAgICBOU0ludGVn
ZXIgbG9va3VwQWRkZWRBZnRlciA9IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiArIGV4dHJhY3Rl
ZFJhbmdlLmxlbmd0aCkgLSAocmFuZ2VUb1Bhc3MubG9jYXRpb24gKyBvcmlnaW5hbExlbmd0aCk7
CisKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bG9va3VwQWRkZWRCZWZv
cmVdOworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bG9va3VwQWRkZWRBZnRl
cl07CisKKyAgICBBU1NFUlQoW3NlbGVjdGlvbi5zdHJpbmcgaXNFcXVhbFRvU3RyaW5nOltmdWxs
UGxhaW5UZXh0U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTpleHRyYWN0ZWRSYW5nZV1dKTsKKyAg
ICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4geyBAIiIsIG5pbCB9OworfQorICAgIAorI2VuZGlm
IC8vICFQTEFURk9STShXQVRDSCkKKworc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBzaG93UG9w
dXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9s
bGVyLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBOU1Zp
ZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0
SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRS
ZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yKQoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgCisgICAgaWYg
KCFnZXRSVkl0ZW1DbGFzcygpIHx8ICFnZXRSVlByZXNlbnRlckNsYXNzKCkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9w
dGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAg
IGlmIChOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMu
Z2V0KCkpCisgICAgICAgIFttdXRhYmxlT3B0aW9ucyBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6
b3B0aW9uc107CisKKyAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVh
dGUoZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKTsKKyAgICAKKyAgICBSZXRhaW5Q
dHI8UlZQcmVzZW50ZXI+IHByZXNlbnRlciA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50ZXJJbnN0
YW5jZSgpIGluaXRdKTsKKyAgICAKKyAgICBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKKyAgICBOU1Bv
aW50IHBvaW50ZXJMb2NhdGlvbjsKKyAgICAKKyAgICBpZiAodGV4dEluZGljYXRvci5nZXQoKS5j
b250ZW50SW1hZ2UoKSkgeworICAgICAgICB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJh
Y2sodGV4dEluZGljYXRvci5nZXQoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGZpcnN0VGV4dFJl
Y3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkudGV4dFJlY3RzSW5Cb3Vu
ZGluZ1JlY3RDb29yZGluYXRlcygpWzBdOworICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5n
UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0Qm91bmRpbmdS
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25C
b3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRpY2F0b3IuZ2V0KCkuc2VsZWN0
aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICAKKyAgICAgICAgaWYgKHJv
b3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKSB7CisgICAgICAgICAgICB0ZXh0Qm91bmRp
bmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFj
ayh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgc2VsZWN0
aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSByb290Vmlld1RvVmlld0NvbnZlcnNp
b25DYWxsYmFjayhzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGluYXRlcy5t
b3ZlQnkodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOworICAg
ICAgICBoaWdobGlnaHRSZWN0ID0gc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0
ZXM7CisgICAgICAgIHBvaW50ZXJMb2NhdGlvbiA9IGZpcnN0VGV4dFJlY3RJblZpZXdDb29yZGlu
YXRlcy5sb2NhdGlvbigpOworICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBOU1BvaW50
IHRleHRCYXNlbGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOworICAgICAg
ICAKKyAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHRleHRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gW3ZpZXcg
Y29udmVydFBvaW50OnRleHRCYXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKKyAgICB9CisgICAg
CisgICAgUmV0YWluUHRyPFdlYlJldmVhbEhpZ2hsaWdodD4gd2ViSGlnaGxpZ2h0ID0gIGFkb3B0
TlMoW1tXZWJSZXZlYWxIaWdobGlnaHQgYWxsb2NdIGluaXRXaXRoSGlnaGxpZ2h0UmVjdDogaGln
aGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0OiF0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRl
bnRJbWFnZSgpIGF0dHJpYnV0ZWRTdHJpbmc6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVk
U3RyaW5nLmdldCgpXSk7CisgICAgUmV0YWluUHRyPFJWUHJlc2VudGluZ0NvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdE5TKFthbGxvY1JWUHJlc2VudGluZ0NvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRo
UG9pbnRlckxvY2F0aW9uSW5WaWV3OnBvaW50ZXJMb2NhdGlvbiBpblZpZXc6dmlldyBoaWdobGln
aHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGlnaHREZWxlZ2F0ZT4pIHdlYkhpZ2hsaWdo
dC5nZXQoKV0pOworICAgIAorICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFth
bGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0
cmlidXRlZFN0cmluZy5nZXQoKS5zdHJpbmcgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAw
KV0pOworICAgIAorICAgIFt3ZWJIaWdobGlnaHQgc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOlt3ZWJI
aWdobGlnaHQgPSBXVEZNb3ZlKHdlYkhpZ2hsaWdodCksIGNsZWFyVGV4dEluZGljYXRvciA9IFdU
Rk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKV0geworICAgICAgICBpZiAoY2xlYXJUZXh0SW5kaWNh
dG9yKQorICAgICAgICAgICAgY2xlYXJUZXh0SW5kaWNhdG9yKCk7CisgICAgfV07CisgICAgCisg
ICAgaWYgKGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBbcHJlc2Vu
dGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JJdGVtOml0ZW0uZ2V0KCkgZG9jdW1lbnRDb250ZXh0
Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlvbnM6bmlsXTsKKyAgICBb
cHJlc2VudGVyIHJldmVhbEl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHByZXNl
bnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOworICAgIHJldHVybiBuaWw7
CisgICAgCisjZWxzZSAvLyBQTEFURk9STShNQUMpCisgICAgCisgICAgVU5VU0VEX1BBUkFNKGNy
ZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAgIFVOVVNFRF9QQVJBTShkaWN0aW9uYXJ5UG9w
dXBJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0odmlldyk7CisgICAgVU5VU0VEX1BBUkFNKHRleHRJ
bmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKTsKKyAgICBVTlVTRURfUEFSQU0oY2xlYXJUZXh0SW5k
aWNhdG9yKTsKKyAgICAKKyAgICByZXR1cm4gbmlsOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
KyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorfQorCit2b2lkIERp
Y3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0
aW9uYXJ5UG9wdXBJbmZvLCBOU1ZpZXcgKnZpZXcsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChU
ZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0
IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZl
cnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9y
KQoreworICAgIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihmYWxzZSwgZGlj
dGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNr
LCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92ZShjbGVhclRleHRJbmRp
Y2F0b3IpKTsKK30KKwordm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpoaWRlUG9wdXAoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCisKK1dLUmV2ZWFsQ29u
dHJvbGxlciBEaWN0aW9uYXJ5TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29u
c3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3
LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRv
ckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9h
dFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICByZXR1cm4gc2hvd1BvcHVwT3JD
cmVhdGVBbmltYXRpb25Db250cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcs
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJz
aW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Cit9CisKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCisKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpIC8vIEVOQUJMRShS
RVZFQUwpCisKK3N0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKQor
eworICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxS
YW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJl
c3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JikKK3sKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShSRVZFQUwpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCA1MTM5YmI2Njc3
ZjE1M2Q4NGIzMGViZDAyMGE2OGViYTgwYjU2NDE1Li5hYmZhZDhlNzM4Nzg1YWMxOTVjODVhZWFi
ZDVhOTYxOTMxYTVlNjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9ydCAi
RG9jdW1lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbXBvcnQgIkRvY3Vt
ZW50TG9hZGVyLmgiCisjaW1wb3J0ICJFZGl0b3IuaCIKKyNpbXBvcnQgIkVkaXRvckNsaWVudC5o
IgogI2ltcG9ydCAiRmlsZS5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAiRnJh
bWUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlM
b29rdXAuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaApp
bmRleCBjYjZkNTNlYjhmOGM0Y2ZkMzg5NDU3ZjViZWFlMjgzYTM3ZGE4MTkyLi5mOGY3NjFjZGM4
MWFlYmQzZGYwODgzN2EzMjMxYzA4ZjM1YTRmZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCkBAIC0yMywxNSArMjMsMjUgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWYgUExBVEZPUk0oTUFDKQorI3By
YWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShDT0NPQSkKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQ
b3B1cEluZm8uaCIKLSNpbmNsdWRlIDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyU1BJLmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8cGFsL3NwaS9t
YWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KIAogT0JKQ19DTEFTUyBOU1Zp
ZXc7CiBPQkpDX0NMQVNTIFBERlNlbGVjdGlvbjsKIAorI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVk
ZWYgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gV0tSZXZlYWxDb250
cm9sbGVyOworI2Vsc2UKK3R5cGVkZWYgaWQgV0tSZXZlYWxDb250cm9sbGVyOworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIaXRUZXN0UmVz
dWx0OwpAQCAtNDgsOCArNTgsMTEgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgc2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcgKiwg
Y29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJ
bnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRS
ZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgaGlkZVBvcHVwKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0
aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBOU1ZpZXcg
KiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0
b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxv
YXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CisgICAg
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBXS1JldmVhbENv
bnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1
cEluZm8mLCBOU1ZpZXcgKiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3Im
KT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlv
bjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNr
ID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9yID0g
bnVsbHB0cik7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGlj
dGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlM
b29rdXAubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlOWU0NDc0YTQ5ZmNjOWIw
OTViMmY0YmRhNmM5YWUzZjM4Y2ZlNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDM4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkRpY3Rpb25hcnlMb29rdXAuaCIKLQotI2lmIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFJFVkVBTCkKLQotI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNp
bXBvcnQgIkVkaXRpbmcuaCIKLSNpbXBvcnQgIkZvY3VzQ29udHJvbGxlci5oIgotI2ltcG9ydCAi
RnJhbWUuaCIKLSNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJIVE1MQ29udmVy
dGVyLmgiCi0jaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJQYWdlLmgiCi0jaW1w
b3J0ICJSYW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCi0jaW1wb3J0ICJUZXh0SXRl
cmF0b3IuaCIKLSNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVNl
bGVjdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCi0jaW1wb3J0IDxQREZLaXQvUERG
S2l0Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29rdXBTUEkuaD4KLSNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KLSNpbXBvcnQg
PHBhbC9zcGkvbWFjL1JldmVhbFNQSS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlv
bnMuaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KLQotQGludGVyZmFjZSBXZWJSZXZlYWxIaWdo
bGlnaHQgPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+IDogTlNPYmplY3QgewotQHByaXZh
dGUKLSAgICBGdW5jdGlvbjx2b2lkKCk+IF9jbGVhclRleHRJbmRpY2F0b3I7Ci0gICAgTlNSZWN0
IF9oaWdobGlnaHRSZWN0OwotICAgIEJPT0wgX3VzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICpfYXR0cmlidXRlZFN0cmluZzsKLX0KLQotQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0UmVjdDsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCB1c2VEZWZhdWx0SGlnaGxpZ2h0OwotQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6KE5TUmVjdCloaWdobGlnaHRS
ZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVsdEhpZ2hsaWdodCBhdHRyaWJ1
dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmlidXRlZFN0cmluZzsKLS0gKHZv
aWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2b2lkKCk+JiYpY2xlYXJUZXh0SW5k
aWNhdG9yOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJSZXZlYWxIaWdobGlnaHQKLQot
QHN5bnRoZXNpemUgaGlnaGxpZ2h0UmVjdD1faGlnaGxpZ2h0UmVjdDsKLUBzeW50aGVzaXplIHVz
ZURlZmF1bHRIaWdobGlnaHQ9X3VzZURlZmF1bHRIaWdobGlnaHQ7Ci1Ac3ludGhlc2l6ZSBhdHRy
aWJ1dGVkU3RyaW5nPV9hdHRyaWJ1dGVkU3RyaW5nOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVjdCB1c2VEZWZhdWx0SGlnaGxpZ2h0
OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVk
U3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmcKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfaGlnaGxpZ2h0UmVjdCA9IGhp
Z2hsaWdodFJlY3Q7Ci0gICAgX3VzZURlZmF1bHRIaWdobGlnaHQgPSB1c2VEZWZhdWx0SGlnaGxp
Z2h0OwotICAgIF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZzsKLSAgICAKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRDbGVhclRleHRJbmRpY2F0b3I6KEZ1bmN0
aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3IKLXsKLSAgICBfY2xlYXJUZXh0SW5kaWNh
dG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpOwotfQotCi0tIChOU0FycmF5PE5TVmFs
dWUgKj4gKilyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCByZWN0
c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIHJldHVybiBAW1tOU1ZhbHVlIHZhbHVlV2l0aFJl
Y3Q6c2VsZi5oaWdobGlnaHRSZWN0XV07Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQ
cmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRl
bQotewotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICAKLSAgICBmb3IgKE5TVmFsdWUgKnJl
Y3RWYWwgaW4gY29udGV4dC5pdGVtUmVjdHNJblZpZXcpIHsKLSAgICAgICAgTlNSZWN0IHJlY3Qg
PSByZWN0VmFsLnJlY3RWYWx1ZTsKLQotICAgICAgICAvLyBHZXQgY3VycmVudCBmb250IGF0dHJp
YnV0ZXMgZnJvbSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgYWJvdmUsIGFuZCBhZGQgcGFyYWdyYXBo
IHN0eWxlIGF0dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50ZXIgdGV4dC4KLSAgICAgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OltzZWxmLmF0dHJpYnV0ZWRTdHJp
bmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzZWxmLmF0dHJpYnV0ZWRT
dHJpbmcgbGVuZ3RoXSldXSk7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhT
dHlsZT4gcGFyYWdyYXBoID0gYWRvcHROUyhbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9j
XSBpbml0XSk7Ci0gICAgICAgIFtwYXJhZ3JhcGggc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVu
dENlbnRlcl07Ci0gICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpwYXJhZ3JhcGguZ2V0KCkg
Zm9yS2V5Ok5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAKLSAgICAgICAgUmV0
YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBzdHJp
bmddIGF0dHJpYnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0pOwotICAgICAgICBbc3RyaW5nIGRyYXdJ
blJlY3Q6cmVjdF07Ci0gICAgfQotfQotCi0tIChCT09MKXJldmVhbENvbnRleHQ6KFJWUHJlc2Vu
dGluZ0NvbnRleHQgKiljb250ZXh0IHNob3VsZFVzZURlZmF1bHRIaWdobGlnaHRGb3JJdGVtOihS
Vkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9Q
QVJBTShpdGVtKTsKLSAgICByZXR1cm4gc2VsZi51c2VEZWZhdWx0SGlnaGxpZ2h0OwotfQotCi0t
ICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHN0b3BI
aWdobGlnaHRpbmdJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICBhdXRvIGJsb2NrID0gV1RGTW92ZShf
Y2xlYXJUZXh0SW5kaWNhdG9yKTsKLSAgICBpZiAoYmxvY2spCi0gICAgICAgIGJsb2NrKCk7Ci19
Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5n
ZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAg
cmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0g
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQot
ICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIFNpbmNlIHdlIGFscmVh
ZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVy
bmVkIG9wdGlvbnMuCi0gICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKLSAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7
Ci0KLSAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGlu
ZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQ
YXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQ
YXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKLQotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNl
bGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlv
bkVuZCkuZ2V0KCkpOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5n
dGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0
aW9uU3RhcnQpOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0g
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAgIFN0cmluZyBpdGVt
U3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgUmV0YWlu
UHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0
aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7Ci0gICAgTlNSYW5n
ZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0gICAgCi0gICAg
cmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdo
bGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0gICAg
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4geyBudWxs
cHRyLCBuaWwgfTsKLX0KLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkg
Kj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJl
c3VsdCYgaGl0VGVzdFJlc3VsdCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxs
cHRyLCBuaWwgfTsKLSAgICAKLSAgICBhdXRvKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCi0gICAg
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgYXV0byogZnJhbWUgPSBub2RlLT5k
b2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIHsgbnVs
bHB0ciwgbmlsIH07Ci0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBj
aGFyYWN0ZXIgYXQgdGhlIHBvaW50LgotICAgIGF1dG8gZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1
bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOwotICAgIGlmICghZnJhbWUtPnJhbmdl
Rm9yUG9pbnQoZnJhbWVQb2ludCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owot
Ci0gICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFt
ZVBvaW50KTsKLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHBvc2l0aW9uID0g
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwotCi0gICAgYXV0byBzZWxlY3Rpb24g
PSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBOU1JhbmdlIHNlbGVjdGlvblJhbmdlOwotICAg
IGludCBoaXRJbmRleDsKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKLSAg
ICAKLSAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9u
OjpSYW5nZVNlbGVjdGlvbikgewotICAgICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOwotICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlv
bi52aXNpYmxlRW5kKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUg
Z29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsK
LSAgICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQp
OwotICAgICAgICAKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byByYW5nZVRv
U2VsZWN0aW9uRW5kID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOwot
ICAgICAgICAKLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAgICAgICAKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2Ug
PSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25T
dGFydC5nZXQoKSksIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBoaXRJbmRl
eCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBw
b3NpdGlvbikuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7IHBvc2l0aW9uIH07Ci0gICAgICAgIHNl
bGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3Jk
R3JhbnVsYXJpdHkpOwotICAgICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JM
aW5lUnVsZXMuc3RhcnQoKTsKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRv
IHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50Lgot
ICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25C
eUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZ1bGxD
aGFyYWN0ZXJSYW5nZSkKLSAgICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAg
ICAgICAKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5n
ZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsK
LSAgICB9Ci0gICAgCi0gICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9u
Q2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNW
YWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlv
bjpuaWxdOwotICAgIAotICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFy
YWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMo
W2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJh
bmdlOnNlbGVjdGVkUmFuZ2VdKTsKLSAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5n
ZXQoKS5oaWdobGlnaHRSYW5nZTsKLQotICAgIGlmIChoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiA9
PSBOU05vdEZvdW5kIHx8ICFoaWdobGlnaHRSYW5nZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFu
Z2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdo
dFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7Ci0gICAgCi0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi19Ci0KLXN0YXRp
YyB2b2lkIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhQREZTZWxlY3Rpb24gKnNlbGVjdGlv
biwgTlNJbnRlZ2VyIG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBOU0ludGVnZXImIGNoYXJh
Y3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5k
KQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHNpemVfdCBvcmln
aW5hbExlbmd0aCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoOwotICAgIFtzZWxlY3Rpb24gZXh0
ZW5kU2VsZWN0aW9uQXRTdGFydDpudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZF07Ci0gICAgCi0g
ICAgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCAt
IG9yaWdpbmFsTGVuZ3RoOwotICAgIAotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRF
bmQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAgIGNoYXJhY3RlcnNBZGRlZEFmdGVy
RW5kID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmlnaW5hbExlbmd0aCAtIGNoYXJhY3Rl
cnNBZGRlZEJlZm9yZVN0YXJ0OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0K
LQotc3RkOjp0dXBsZTxOU1N0cmluZyAqLCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1
cDo6c3RyaW5nRm9yUERGU2VsZWN0aW9uKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKQotewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNs
YXNzKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBp
ZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLnN0cmluZy5sZW5ndGgpCi0gICAgICAgIHJldHVy
biB7IEAiIiwgbmlsIH07Ci0KLSAgICBSZXRhaW5QdHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25G
b3JMb29rdXAgPSBhZG9wdE5TKFtzZWxlY3Rpb24gY29weV0pOwotCi0gICAgLy8gQXMgY29udGV4
dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQg
YWZ0ZXIgdGhlIHBvaW50LgotICAgIGF1dG8gb3JpZ2luYWxMZW5ndGggPSBbc2VsZWN0aW9uRm9y
TG9va3VwIHN0cmluZ10ubGVuZ3RoOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRCZWZv
cmVTdGFydCA9IDA7Ci0gICAgTlNJbnRlZ2VyIGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gMDsK
LSAgICBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoc2VsZWN0aW9uRm9yTG9va3VwLmdldCgp
LCAyNTAsIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBjaGFyYWN0ZXJzQWRkZWRBZnRlckVu
ZCk7Ci0KLSAgICBhdXRvIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBbc2VsZWN0aW9uRm9yTG9va3Vw
IHN0cmluZ107Ci0gICAgYXV0byByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlcnNB
ZGRlZEJlZm9yZVN0YXJ0LCAwKTsKLQotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9w
dE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0OmZ1bGxQbGFpblRleHRTdHJp
bmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFu
Z2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAotICAgIGlmIChleHRyYWN0ZWRS
YW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICByZXR1cm4geyBzZWxlY3Rpb24u
c3RyaW5nLCBuaWwgfTsKLQotICAgIE5TSW50ZWdlciBsb29rdXBBZGRlZEJlZm9yZSA9IHJhbmdl
VG9QYXNzLmxvY2F0aW9uIC0gZXh0cmFjdGVkUmFuZ2UubG9jYXRpb247Ci0gICAgTlNJbnRlZ2Vy
IGxvb2t1cEFkZGVkQWZ0ZXIgPSAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gKyBleHRyYWN0ZWRS
YW5nZS5sZW5ndGgpIC0gKHJhbmdlVG9QYXNzLmxvY2F0aW9uICsgb3JpZ2luYWxMZW5ndGgpOwot
Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Omxvb2t1cEFkZGVkQmVmb3Jl
XTsKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0RW5kOmxvb2t1cEFkZGVkQWZ0ZXJd
OwotCi0gICAgQVNTRVJUKFtzZWxlY3Rpb24uc3RyaW5nIGlzRXF1YWxUb1N0cmluZzpbZnVsbFBs
YWluVGV4dFN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6ZXh0cmFjdGVkUmFuZ2VdXSk7Ci0gICAg
cmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotCi0gICAgcmV0dXJuIHsgQCIiLCBuaWwgfTsKLX0KLQotc3RhdGljIGlkIDxO
U0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IHNob3dQb3B1cE9yQ3JlYXRlQW5p
bWF0aW9uQ29udHJvbGxlcihib29sIGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERp
Y3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29u
c3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0
YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0
KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtdXRhYmxlT3B0aW9ucyA9
IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgaWYgKE5T
RGljdGlvbmFyeSAqb3B0aW9ucyA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSkK
LSAgICAgICAgW211dGFibGVPcHRpb25zIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvcHRpb25z
XTsKLQotICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkaWN0
aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IpOwotICAgIAotICAgIFJldGFpblB0cjxSVlBy
ZXNlbnRlcj4gcHJlc2VudGVyID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRlckluc3RhbmNlKCkg
aW5pdF0pOwotICAgIAotICAgIE5TUmVjdCBoaWdobGlnaHRSZWN0OwotICAgIE5TUG9pbnQgcG9p
bnRlckxvY2F0aW9uOwotICAgIAotICAgIGlmICh0ZXh0SW5kaWNhdG9yLmdldCgpLmNvbnRlbnRJ
bWFnZSgpKSB7Ci0gICAgICAgIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjayh0ZXh0
SW5kaWNhdG9yLmdldCgpKTsKLQotICAgICAgICBGbG9hdFJlY3QgZmlyc3RUZXh0UmVjdEluVmll
d0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVj
dENvb3JkaW5hdGVzKClbMF07Ci0gICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgpLnRleHRCb3VuZGluZ1JlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoKTsKLSAgICAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kaW5n
UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS5zZWxlY3Rpb25SZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocm9vdFZpZXdU
b1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJ
blZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHRleHRC
b3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25Cb3Vu
ZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxi
YWNrKHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLm1vdmVCeSh0
ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgIGhp
Z2hsaWdodFJlY3QgPSBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlczsKLSAg
ICAgICAgcG9pbnRlckxvY2F0aW9uID0gZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzLmxv
Y2F0aW9uKCk7Ci0gICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TUG9pbnQgdGV4dEJh
c2VsaW5lT3JpZ2luID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW47Ci0gICAgICAgIAotICAg
ICAgICBoaWdobGlnaHRSZWN0ID0gdGV4dEluZGljYXRvci0+c2VsZWN0aW9uUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcygpOwotICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBbdmlldyBjb252ZXJ0
UG9pbnQ6dGV4dEJhc2VsaW5lT3JpZ2luIHRvVmlldzpuaWxdOwotICAgIH0KLSAgICAKLSAgICBS
ZXRhaW5QdHI8V2ViUmV2ZWFsSGlnaGxpZ2h0PiB3ZWJIaWdobGlnaHQgPSAgYWRvcHROUyhbW1dl
YlJldmVhbEhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhIaWdobGlnaHRSZWN0OiBoaWdobGlnaHRS
ZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6IXRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdl
KCkgYXR0cmlidXRlZFN0cmluZzpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcu
Z2V0KCldKTsKLSAgICBSZXRhaW5QdHI8UlZQcmVzZW50aW5nQ29udGV4dD4gY29udGV4dCA9IGFk
b3B0TlMoW2FsbG9jUlZQcmVzZW50aW5nQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhQb2ludGVy
TG9jYXRpb25JblZpZXc6cG9pbnRlckxvY2F0aW9uIGluVmlldzp2aWV3IGhpZ2hsaWdodERlbGVn
YXRlOihpZDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRlPikgd2ViSGlnaGxpZ2h0LmdldCgp
XSk7Ci0gICAgCi0gICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJ
dGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVk
U3RyaW5nLmdldCgpLnN0cmluZyBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXSk7Ci0g
ICAgCi0gICAgW3dlYkhpZ2hsaWdodCBzZXRDbGVhclRleHRJbmRpY2F0b3I6W3dlYkhpZ2hsaWdo
dCA9IFdURk1vdmUod2ViSGlnaGxpZ2h0KSwgY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShj
bGVhclRleHRJbmRpY2F0b3IpXSB7Ci0gICAgICAgIGlmIChjbGVhclRleHRJbmRpY2F0b3IpCi0g
ICAgICAgICAgICBjbGVhclRleHRJbmRpY2F0b3IoKTsKLSAgICB9XTsKLSAgICAKLSAgICBpZiAo
Y3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIFtwcmVzZW50ZXIgYW5p
bWF0aW9uQ29udHJvbGxlckZvckl0ZW06aXRlbS5nZXQoKSBkb2N1bWVudENvbnRleHQ6bmlsIHBy
ZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9uczpuaWxdOwotICAgIFtwcmVzZW50
ZXIgcmV2ZWFsSXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0Nv
bnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07Ci0gICAgcmV0dXJuIG5pbDsKLQotICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotdm9pZCBE
aWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGlj
dGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQo
VGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252
ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRv
cikKLXsKLSAgICBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRp
Y3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFj
aywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5k
aWNhdG9yKSk7Ci19Ci0KLXZvaWQgRGljdGlvbmFyeUxvb2t1cDo6aGlkZVBvcHVwKCkKLXsKLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBpZiAoIWdldExVTG9va3VwRGVm
aW5pdGlvbk1vZHVsZUNsYXNzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBbZ2V0TFVMb29rdXBE
ZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSBoaWRlRGVmaW5pdGlvbl07Ci0KLSAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotfQotCi1pZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250
cm9sbGVyPiBEaWN0aW9uYXJ5TG9va3VwOjphbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29u
c3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3
LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRv
ckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9h
dFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICByZXR1cm4gc2hvd1BvcHVwT3JD
cmVhdGVBbmltYXRpb25Db250cm9sbGVyKHRydWUsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcs
IHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJz
aW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggMTQzZjE2Yzk5MmY2Mzc5MDI1Mjk0YmM2
NzJmNDFlZGZhMzQwYTQ0NC4uMjMyMzc5NjlmZDM1NDI2ZmVlZTkzZTAwODVlZWQ5NzdmNDQwZDk5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgK
KysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTczMyw2
ICs3MzMsOSBAQCBzdHJ1Y3QgX1VJV2ViVG91Y2hFdmVudCB7CiAgICAgYm9vbCBpc1BvdGVudGlh
bFRhcDsKIH07CiAKK0BpbnRlcmZhY2UgX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdl
c3R1cmVSZWNvZ25pemVyCitAZW5kCisKIEBjbGFzcyBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJl
Y29nbml6ZXI7CiAKIEBwcm90b2NvbCBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXJE
ZWxlZ2F0ZSA8TlNPYmplY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlBhZ2VQcm94eUNvY29hLm1tCmluZGV4IGY1Njg3NWRmZjNhMWNjNDVlYmVlNjE3MjE1Y2U5
NTcyM2Y1M2RlNGUuLjY1YWVjZDkyMTkyZmU2NjYxZjFiYWE0MmQzNDA3ODZjZTRkMWQ1MzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29h
Lm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJT
YWZlQnJvd3NpbmdTUEkuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKKyNpbXBv
cnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1w
b3J0IDxXZWJDb3JlL0RyYWdJdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CkBAIC0xODksNSArMTkwLDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUNsb25l
QXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYmIGZyb21BdHRhY2htZW50CiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIAordm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Cit9CiAKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7Cisg
ICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRT
ZWxlY3Rpb24oKSwgbV9wYWdlSUQpOwogfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaAppbmRleCBhODA3Y2NkMmZhY2ZlNzhjZjkxNGJkZjQzZWQyNDk3YWRjYzhmYzhjLi5kYTI2
MzMyMjE0Njc5ZmQ5MWNjNTRkMGZjODRlYzgyMzA3N2U0ZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC04
Nyw2ICs4Nyw3IEBAIGNsYXNzIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFz
cyBXZWJQYWdlUHJveHk7CiB9CiAKK0BjbGFzcyBfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcjsK
IEBjbGFzcyBfVUlIaWdobGlnaHRWaWV3OwogQGNsYXNzIF9VSVdlYkhpZ2hsaWdodExvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIFVJSG92ZXJHZXN0dXJlUmVjb2duaXplcjsKQEAg
LTIxNSw2ICsyMTYsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogCiAjaWYgUExB
VEZPUk0oSU9TTUFDKQogICAgIFJldGFpblB0cjxVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI+IF9o
b3Zlckdlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxfVUlMb29rdXBHZXN0dXJlUmVj
b2duaXplcj4gX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwogI2VuZGlmCiAKICAgICBSZXRhaW5Q
dHI8VUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudD4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQppbmRleCA2MGNmYjhmMjRkOWM2MGEzZTMyMjA5OWQyOGYyNWY1MDBjY2U0
MzZkLi5hYmIwNGE0ZGE3ZWQxZjQxNTQwMGYxY2JiZmUzODJjYTNiNWZhODlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0KQEAgLTExMiw2ICsxMTIsNyBAQAogI2lmIFBMQVRGT1JNKElPU01BQykKICNpbXBvcnQg
Ik5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbXBvcnQgPFVJS2l0L1VJSG92ZXJHZXN0dXJlUmVj
b2duaXplci5oPgorI2ltcG9ydCA8VUlLaXQvX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIuaD4K
ICNpbXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNlbmRpZgogCkBA
IC02NDksNiArNjUwLDExIEBAIC0gKHZvaWQpc2V0dXBJbnRlcmFjdGlvbgogICAgIF9ob3Zlckdl
c3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBhbGxv
Y10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9ob3Zlckdlc3R1cmVSZWNv
Z25pemVyQ2hhbmdlZDopXSk7CiAgICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVn
YXRlOnNlbGZdOwogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKKyAgICAKKyAgICBfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgPSBh
ZG9wdE5TKFtbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0
OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfbG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6KV0pOworICAg
IFtfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3NlbGYg
YWRkR2VzdHVyZVJlY29nbml6ZXI6X2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAg
ICAKICNlbmRpZgogCiAgICAgX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhb
W1dLU3ludGhldGljQ2xpY2tUYXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJn
ZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9zaW5nbGVUYXBDb21taXRlZDopXSk7CkBAIC03NTks
NiArNzY1LDkgQEAgLSAodm9pZCljbGVhbnVwSW50ZXJhY3Rpb24KICNpZiBQTEFURk9STShJT1NN
QUMpCiAgICAgW19ob3Zlckdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAg
W3NlbGYgcmVtb3ZlR2VzdHVyZVJlY29nbml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0
KCldOworICAgIAorICAgIFtfbG9va3VwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmls
XTsKKyAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJlY29n
bml6ZXIuZ2V0KCldOwogI2VuZGlmCiAKICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVy
IHNldERlbGVnYXRlOm5pbF07CkBAIC04NDYsNiArODU1LDcgQEAgLSAodm9pZClfcmVtb3ZlRGVm
YXVsdEdlc3R1cmVSZWNvZ25pemVycwogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVy
Ol9zdHlsdXNTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0o
SU9TTUFDKQogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKKyAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTg2MSw2ICs4NzEs
NyBAQCAtICh2b2lkKV9hZGREZWZhdWx0R2VzdHVyZVJlY29nbml6ZXJzCiAgICAgW3NlbGYgYWRk
R2VzdHVyZVJlY29nbml6ZXI6X3N0eWx1c1NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgp
XTsKICNpZiBQTEFURk9STShJT1NNQUMpCiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6
X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNv
Z25pemVyOl9sb29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIH0KIApAQCAt
MTQ2Nyw2ICsxNDc4LDEwIEBAIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJl
Y29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pCiAKICAgICBpZiAoW2dl
c3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJHZXN0dXJlUmVjb2duaXplciBj
bGFzc11dIHx8IFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJSG92ZXJH
ZXN0dXJlUmVjb2duaXplciBjbGFzc11dKQogICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAg
IGlmICgoW2dlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W19VSUxvb2t1cEdlc3R1cmVS
ZWNvZ25pemVyIGNsYXNzXV0gJiYgW290aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFz
czpbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBjbGFzc11dKSB8fCAoW290aGVyR2VzdHVy
ZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBj
bGFzc11dICYmIFtnZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0
dXJlUmVjb2duaXplciBjbGFzc11dKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKwogI2VuZGlmCiAg
ICAgaWYgKGlzU2FtZVBhaXIoZ2VzdHVyZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6
ZXIsIF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSwgX3RleHRTZWxl
Y3Rpb25Bc3Npc3RhbnQuZ2V0KCkuZm9yY2VQcmVzc0dlc3R1cmUpKQogICAgICAgICByZXR1cm4g
WUVTOwpAQCAtNjA1Nyw2ICs2MDcyLDEyIEBAIC0gKEJPT0wpYWxsb3dzRGljdGF0aW9uSW5wdXRG
b3JMaXN0Vmlld0NvbnRyb2xsZXI6KFBVSUNRdWlja2JvYXJkVmlld0NvbnRyb2xsZXIKICNlbmRp
ZiAvLyBQTEFURk9STShXQVRDSE9TKQogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQorLSAodm9pZClf
bG9va3VwR2VzdHVyZVJlY29nbml6ZWQ6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVj
b2duaXplcgoreworICAgIE5TUG9pbnQgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcyA9IFtnZXN0
dXJlUmVjb2duaXplciBsb2NhdGlvbkluVmlldzpzZWxmXTsKKyAgICBfcGFnZS0+cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQobG9jYXRpb25JblZp
ZXdDb29yZGluYXRlcykpOworfQorCiAtICh2b2lkKV9ob3Zlckdlc3R1cmVSZWNvZ25pemVyQ2hh
bmdlZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiB7CiAgICAgaWYg
KCFfcGFnZS0+aXNWYWxpZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW0KaW5kZXggYjQ3M2YwODFhNTA3NWU0NDNjY2UzOWI1ZGMzNzg1NGJkNjhk
ODZmMi4uMjc5NWY3MzBiYmZlYzYyZTQ0ZjU0ZjZhODA5YzgyYmFiNjMzZDM2NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC0xMjEsMTEg
KzEyMSw2IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQo
Y29uc3QgU3RyaW5nJikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6
Omdlc3R1cmVDYWxsYmFjayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90
IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzLCBDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRh
a2U8R2VzdHVyZUNhbGxiYWNrPihjYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IGZmZmM1ZTA4YTE2NzBhMGNhZjE1M2Vj
NzBmYTcyMDIxNzIwZTViN2EuLmUyYWIyOWMyYjVjNjcxNzU4NDYzN2IzYjdhZWNjMjA4Yjc2MzY4
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5t
bQpAQCAtMzIzLDIyICszMjMsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UHJvbWlzZWREYXRh
Rm9ySW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgUwogCiAjZW5kaWYK
IAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKLX0K
LQotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2Vs
ZWN0aW9uKCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
T2ZDdXJyZW50U2VsZWN0aW9uKCksIG1fcGFnZUlEKTsKLX0KLQogLy8gQ29tcGxleCB0ZXh0IGlu
cHV0IHN1cHBvcnQgZm9yIHBsdWctaW5zLgogdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRDb21wbGV4
VGV4dElucHV0VG9QbHVnaW4odWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgdGV4dElucHV0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDNlNzk0MzFm
OTM3MTE0YzQxZjlkMmRmZDU4ZTBiNGY3MjE4MTU5YTYuLmEzOGNkMmJmNjM3OTRjOGU5ZjFkMjEy
YTNlNzhiM2U4YzRlZjhjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTI2LDkgKzI2LDIwIEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYlBhZ2UuaCIKIAorCiAjaW1wb3J0ICJMb2FkUGFy
YW1ldGVycy5oIgorI2ltcG9ydCAiUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5
TWVzc2FnZXMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1cC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9FZGl0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1M
Q29udmVydGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvTm9kZVJlbmRlclN0eWxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTWVk
aWFTZXNzaW9uTWFuYWdlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJFbGVtZW50Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1JlbmRlck9iamVjdC5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAK
QEAgLTU5LDYgKzcwLDExNCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBY3RpdmVOb3dQbGF5aW5n
U2Vzc2lvbkluZm8oQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogCiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpOb3dQbGF5aW5nSW5mb0NhbGxiYWNrKGhhc0FjdGl2ZVNlc3Npb24sIHJl
Z2lzdGVyZWRBc05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgdGl0bGUsIGR1cmF0aW9uLCBlbGFwc2Vk
VGltZSwgdW5pcXVlSWRlbnRpZmllciwgY2FsbGJhY2tJRCkpOwogfQorICAgIAordm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYg
ZmxvYXRQb2ludCkKK3sKKyAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JG
cmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlz
IG92ZXIuCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2
ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmll
dygpLT53aW5kb3dUb0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOworICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0
ZDo6dGllKHJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0
UmVzdWx0KHJlc3VsdCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGF1dG8qIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgqZnJh
bWUsICpyYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
OkJvdW5jZSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JT
ZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pCit7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOworICAgIE5TRGljdGlvbmFy
eSAqb3B0aW9uczsKKyAgICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERpY3Rp
b25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgaWYgKHNlbGVj
dGVkUmFuZ2UpCisgICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUs
ICpzZWxlY3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKK30KKwor
dm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigp
Cit7CisgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZy
YW1lLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7Cit9CisgICAgCit2b2lkIFdlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYg
cmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cElu
Zm9Gb3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24p
KSk7Cit9CisKK0RpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5m
b0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlv
bnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5z
aXRpb24pCit7CisgICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKKyAgICBlZGl0
b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKKyAgICAKKyAgICBEaWN0
aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgaWYgKHJhbmdlLnRleHQo
KS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFy
eVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Cisg
ICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGlmIChxdWFkcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFs
c2UpOworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisgICAgCisg
ICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVh
ZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgCisgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGZs
b2F0IHNjYWxlZEFzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkg
KiBwYWdlU2NhbGVGYWN0b3IoKSA6IDA7CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4g
PSBGbG9hdFBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRBc2NlbnQp
OworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7CisKKyNpZiBQTEFU
Rk9STShNQUMpCisKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9
IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5B
dHRyaWJ1dGVkU3RyaW5nOjpObyk7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3Ry
aW5nIHN0cmluZ11dKTsKKyAgICAKKyAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKyAgICAKKyAgICBbbnNBdHRyaWJ1dGVk
U3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJp
YnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkg
KmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRy
aWJ1dGVzIG11dGFibGVDb3B5XSk7CisgICAgICAgIAorICAgICAgICBOU0ZvbnQgKmZvbnQgPSBb
c2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAg
ICAgIGlmIChmb250KQorICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9u
dDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKKyAgICAg
ICAgaWYgKGZvbnQpCisgICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9u
dCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIAorICAgICAgICBbc2NhbGVk
TlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSBy
YW5nZTpyYW5nZV07CisgICAgfV07CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisg
ICAgVGV4dEluZGljYXRvck9wdGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JP
cHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOwor
ICAgIGlmIChwcmVzZW50YXRpb25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpCisgICAgICAgIGluZGljYXRvck9wdGlv
bnMgfD0gVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdo
bGlnaHQ7CisgICAgCisgICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBU
ZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pOworICAgIGlmICghdGV4dEluZGljYXRvcikgeworICAgICAg
ICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAg
IHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIH0KKyAgICAKKyAgICBkaWN0aW9uYXJ5
UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNj
YWxlZE5TQXR0cmlidXRlZFN0cmluZzsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgCisg
ICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAgIHJl
dHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4KaW5kZXggMTI3ZDg0MTExZTczMGY1ZjAyNGI0YzRlODc5MWEyOTk4YzJiOWJiOC4uN2Yz
MDE1NDg1ODVkZThmMzBkMDVhNTVjMDIyNzhlMGJmMDI3Yjc5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0xOTEs
NiArMTkxLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICAjIERpY3Rpb25hcnkgc3VwcG9ydC4KKyAgICBQZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCiAgICAgUGVyZm9ybURpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCiAjZW5kaWYKIApAQCAt
MTk5LDEwICsyMDAsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAg
ICBSZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rcygpIC0+IChzdHJ1Y3QgV2ViS2l0OjpEYXRhRGV0ZWN0
aW9uUmVzdWx0IHJlc3VsdCkgQXN5bmMKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLSNlbmRpZgotCiAg
ICAgQ2hhbmdlRm9udChXZWJDb3JlOjpGb250Q2hhbmdlcyBjaGFuZ2VzKQogICAgIENoYW5nZUZv
bnRBdHRyaWJ1dGVzKFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVDaGFuZ2VzIGNoYW5nZXMpCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
aW5kZXggZWFjNGY0ZmFhMzVkMWJjMmZmYmQ5M2E1OWNmOGM3YjZkNDZlZjkyYi4uNmU1YTZkMTg4
NWQ1ZDRiZjJlMzAyNDZhMDVlMmE4YjYzNmYyOGI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxNywyMSArNDE3LDYg
QEAgdm9pZCBXZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90LCBj
b25zdCBTdHJpbmcmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZy
YW1lJiwgUmFuZ2UmLCBOU0RpY3Rpb25hcnkgKiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpw
ZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29y
ZTo6S2V5Ym9hcmRFdmVudCopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNDcz
M2IxY2JmMmZlNDVjZDlkMGNlYTdlZWY5YmM3YzM4YWZhZjdlNC4uZmE3YTZhYWYxYjYwYmRhOTBk
Y2QwNzliYTFhOTQzNmYxMjE2YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTM4OSwxMDIgKzM4OSw3IEBAIHZvaWQg
V2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxiYWNrKGZvbnROYW1l
LCBmb250U2l6ZSwgc2VsZWN0aW9uSGFzTXVsdGlwbGVGb250cywgY2FsbGJhY2tJRCkpOwogfQog
ICAgIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29u
c3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKLXsKLSAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9
IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAgICAgICAgaWYg
KHBsdWdpblZpZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRoZSBmcmFtZSB0
aGUgcG9pbnQgaXMgb3Zlci4KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFp
bkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWlu
RnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9p
bnQpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlv
bnM7Ci0gICAgc3RkOjp0aWUocmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFu
Z2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgq
ZnJhbWUsICpyYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b246OkJvdW5jZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBG
b3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24sIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5z
aXRpb24pCi17Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlOwotICAgIE5TRGljdGlv
bmFyeSAqb3B0aW9uczsKLSAgICBzdGQ6OnRpZShzZWxlY3RlZFJhbmdlLCBvcHRpb25zKSA9IERp
Y3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgaWYgKHNl
bGVjdGVkUmFuZ2UpCi0gICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJh
bWUsICpzZWxlY3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLX0K
IAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlv
bigpCi17Ci0gICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9u
KGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7Ci19Ci0KLURpY3Rpb25hcnlQ
b3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFt
ZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCi17Ci0gICAgRWRpdG9y
JiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKLSAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlv
bmFyeVBvcHVwSW5mbyh0cnVlKTsKLQotICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFy
eVBvcHVwSW5mbzsKLSAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1w
dHkoKSkgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhm
YWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLQotICAg
IFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1
YWRzKTsKLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJc0dl
dHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rpb25h
cnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS52aWV3
KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0K
LSAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJl
bmRlclN0eWxlKCk7Ci0gICAgZmxvYXQgc2NhbGVkQXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZhY3RvcigpIDogMDsKLSAgICBkaWN0aW9u
YXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0
LnkoKSArIHNjYWxlZEFzY2VudCk7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0g
b3B0aW9uczsKLQotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0g
ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0
dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBz
dHJpbmddXSk7Ci0KLSAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLQotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVy
YXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBs
ZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywg
TlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
RGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJs
ZUNvcHldKTsKLQotICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmpl
Y3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChmb250KQotICAgICAg
ICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBv
aW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAg
ICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07Ci0KLSAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1
dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwotICAgIH1dOwotCi0gICAg
VGV4dEluZGljYXRvck9wdGlvbnMgaW5kaWNhdG9yT3B0aW9ucyA9IFRleHRJbmRpY2F0b3JPcHRp
b25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzOwotICAg
IGlmIChwcmVzZW50YXRpb25UcmFuc2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpCi0gICAgICAgIGluZGljYXRvck9wdGlvbnMg
fD0gVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGln
aHQ7Ci0KLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0
aW9uVHJhbnNpdGlvbik7Ci0gICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIGVkaXRv
ci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJu
IGRpY3Rpb25hcnlQb3B1cEluZm87Ci0gICAgfQotCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby50
ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwotICAgIGRpY3Rpb25hcnlQb3B1
cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZzsKLQotICAg
IGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICByZXR1
cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKLX0KIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQog
CkBAIC01MzksMTEgKzQ0NCw2IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlv
bmFyeVBvcHVwSW5mb0ZvclNlbGVjdGlvbkluUERGUGx1Z2luKFBERlNlbGVjCiAKICNlbmRpZgog
Ci12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUmIGZy
YW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rp
b25hcnlQb3B1cEluZm9Gb3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlv
blRyYW5zaXRpb24pKSk7Ci19Ci0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhh
dmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJkRXZlbnQqIGV2
ZW50KQogewogICAgIC8vIEZpcnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5jZSB0byBoYW5k
bGUgdGhlIGV2ZW50Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>